LibreOffice Module svx (master)  1
viewobjectcontactofsdrole2obj.cxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
23 #include <svx/svdoole2.hxx>
25 #include <svx/svdpagv.hxx>
26 #include <svx/svdview.hxx>
29 #include <com/sun/star/embed/EmbedMisc.hpp>
30 #include <com/sun/star/embed/EmbedStates.hpp>
31 #include <com/sun/star/embed/XEmbeddedObject.hpp>
34 #include <svtools/embedhlp.hxx>
35 
36 using namespace com::sun::star;
37 
38 namespace sdr::contact {
39 
40 void ViewObjectContactOfSdrOle2Obj::createPrimitive2DSequence(
41  const DisplayInfo& /*rDisplayInfo*/, drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) const
42 {
43  // override this method to do some things the old SdrOle2Obj::DoPaintObject did.
44  // In the future, some of these may be solved different, but ATM try to stay compatible
45  // with the old behaviour
46  const SdrOle2Obj& rSdrOle2 = static_cast< ViewContactOfSdrOle2Obj& >(GetViewContact()).GetOle2Obj();
47  sal_Int32 nState(-1);
48 
49  {
50  const svt::EmbeddedObjectRef& xObjRef = rSdrOle2.getEmbeddedObjectRef();
51  if ( xObjRef.is() )
52  nState = xObjRef->getCurrentState();
53  }
54 
55  const bool bIsOutplaceActive(nState == embed::EmbedStates::ACTIVE);
56  const bool bIsInplaceActive((nState == embed::EmbedStates::INPLACE_ACTIVE) || (nState == embed::EmbedStates::UI_ACTIVE));
57  bool bDone(false);
58 
59  if (bIsInplaceActive)
60  {
61  if( !GetObjectContact().isOutputToPrinter() && !GetObjectContact().isOutputToRecordingMetaFile() )
62  {
63  //no need to create a primitive sequence here as the OLE object does render itself
64  //in case of charts the superfluous creation of a metafile is strongly performance relevant!
65  bDone = true;
66  }
67  }
68 
69  if( !bDone )
70  {
71  //old stuff that should be reworked
72  {
73  //if no replacement image is available load the OLE object
74 // if(!rSdrOle2.GetGraphic()) //try to fetch the metafile - this can lead to the actual creation of the metafile what can be extremely expensive (e.g. for big charts)!!! #i101925#
75 // {
76 // // try to create embedded object
77 // rSdrOle2.GetObjRef(); //this loads the OLE object if it is not loaded already
78 // }
79  const svt::EmbeddedObjectRef& xObjRef = rSdrOle2.getEmbeddedObjectRef();
80  if(xObjRef.is())
81  {
82  const sal_Int64 nMiscStatus(xObjRef->getStatus(rSdrOle2.GetAspect()));
83 
84  // this hack (to change model data during PAINT argh(!)) should be reworked
85  if(!rSdrOle2.IsResizeProtect() && (nMiscStatus & embed::EmbedMisc::EMBED_NEVERRESIZE))
86  {
87  const_cast< SdrOle2Obj* >(&rSdrOle2)->SetResizeProtect(true);
88  }
89 
90  SdrPageView* pPageView = GetObjectContact().TryToGetSdrPageView();
91  if(pPageView && (nMiscStatus & embed::EmbedMisc::MS_EMBED_ACTIVATEWHENVISIBLE))
92  {
93  // connect plugin object
94  pPageView->GetView().DoConnect(const_cast< SdrOle2Obj* >(&rSdrOle2));
95  }
96  }
97  }//end old stuff to rework
98 
99  // create OLE primitive stuff directly at VC with HC as parameter
100  const ViewContactOfSdrOle2Obj& rVC = static_cast< const ViewContactOfSdrOle2Obj& >(GetViewContact());
102 
103  if(bIsOutplaceActive)
104  {
105  // do not shade when printing or PDF exporting
106  if(!GetObjectContact().isOutputToPrinter() && !GetObjectContact().isOutputToRecordingMetaFile())
107  {
108  // get object transformation
109  const basegfx::B2DHomMatrix aObjectMatrix(static_cast< ViewContactOfSdrOle2Obj& >(GetViewContact()).createObjectTransform());
110 
111  // shade the representation if the object is activated outplace
113  aObjectOutline.transform(aObjectMatrix);
114 
115  // Use a FillHatchPrimitive2D with necessary attributes
118  125.0, // 1.25 mm
119  basegfx::deg2rad(45.0), // 45 degree diagonal
120  COL_BLACK.getBColor(), // black color
121  3, // same default as VCL, a minimum of three discrete units (pixels) offset
122  false); // no filling
123 
125  basegfx::B2DPolyPolygon(aObjectOutline),
126  COL_BLACK.getBColor(),
127  aFillHatch));
128 
129  rVisitor.visit(xReference);
130  }
131  }
132 
133  }
134 }
135 
136 ViewObjectContactOfSdrOle2Obj::ViewObjectContactOfSdrOle2Obj(ObjectContact& rObjectContact, ViewContact& rViewContact)
137 : ViewObjectContactOfSdrObj(rObjectContact, rViewContact)
138 {
139 }
140 
142 {
143 }
144 
145 }
146 
147 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
void createPrimitive2DSequenceWithParameters(drawinglayer::primitive2d::Primitive2DDecompositionVisitor &rVisitor) const
B2DPolygon const & createUnitPolygon()
constexpr double deg2rad(double v)
SdrView & GetView()
Definition: svdpagv.hxx:130
virtual void DoConnect(SdrOle2Obj *pOleObj)
For Plugins Is called by the Paint of the OLE object.
Definition: svdpntv.cxx:1067
const svt::EmbeddedObjectRef & getEmbeddedObjectRef() const
Definition: svdoole2.cxx:803
virtual void visit(const Primitive2DReference &)=0
bool IsResizeProtect() const
Definition: svdobj.hxx:747
void transform(const basegfx::B2DHomMatrix &rMatrix)
sal_Int64 GetAspect() const
Definition: svdoole2.cxx:808
const ::std::vector< Color > ImpSvNumberformatScan::StandardColor COL_BLACK
sal_Int32 nState