1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_svx.hxx"
26*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XWindow.hpp>
27*b1cdbd2cSJim Jagielski #include <svx/svdpntv.hxx>
28*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
29*b1cdbd2cSJim Jagielski #include <svx/sdrpaintwindow.hxx>
30*b1cdbd2cSJim Jagielski #include <svtools/grfmgr.hxx>
31*b1cdbd2cSJim Jagielski #include <svx/svdmodel.hxx>
32*b1cdbd2cSJim Jagielski
33*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
34*b1cdbd2cSJim Jagielski #include <svdibrow.hxx>
35*b1cdbd2cSJim Jagielski #endif
36*b1cdbd2cSJim Jagielski #include <svx/svdpage.hxx>
37*b1cdbd2cSJim Jagielski #include <svx/svdpagv.hxx>
38*b1cdbd2cSJim Jagielski #include <svl/smplhint.hxx>
39*b1cdbd2cSJim Jagielski
40*b1cdbd2cSJim Jagielski #include <svx/svdpntv.hxx>
41*b1cdbd2cSJim Jagielski #include <editeng/editdata.hxx>
42*b1cdbd2cSJim Jagielski #include <svx/svdmrkv.hxx>
43*b1cdbd2cSJim Jagielski #include <svx/svdpagv.hxx>
44*b1cdbd2cSJim Jagielski #include <svx/svdpage.hxx>
45*b1cdbd2cSJim Jagielski #include <svx/svdmodel.hxx>
46*b1cdbd2cSJim Jagielski #include <svx/svdundo.hxx>
47*b1cdbd2cSJim Jagielski #include <svx/svdview.hxx>
48*b1cdbd2cSJim Jagielski #include <svx/svdglue.hxx>
49*b1cdbd2cSJim Jagielski #include <svx/svdobj.hxx>
50*b1cdbd2cSJim Jagielski #include <svx/svdograf.hxx>
51*b1cdbd2cSJim Jagielski #include <svx/svdattrx.hxx>
52*b1cdbd2cSJim Jagielski #include "svdibrow.hxx"
53*b1cdbd2cSJim Jagielski #include "svx/svditer.hxx"
54*b1cdbd2cSJim Jagielski #include <svx/svdouno.hxx>
55*b1cdbd2cSJim Jagielski #include <svx/sdr/overlay/overlayobjectlist.hxx>
56*b1cdbd2cSJim Jagielski #include <svx/sdr/overlay/overlayrollingrectangle.hxx>
57*b1cdbd2cSJim Jagielski #include <svx/sdr/overlay/overlaymanager.hxx>
58*b1cdbd2cSJim Jagielski #include <svx/svdglue.hxx>
59*b1cdbd2cSJim Jagielski #include <svx/svdobj.hxx>
60*b1cdbd2cSJim Jagielski #include <svx/svdview.hxx>
61*b1cdbd2cSJim Jagielski #include <svx/sxlayitm.hxx>
62*b1cdbd2cSJim Jagielski #include <svl/itemiter.hxx>
63*b1cdbd2cSJim Jagielski #include <editeng/eeitem.hxx>
64*b1cdbd2cSJim Jagielski #include <svl/whiter.hxx>
65*b1cdbd2cSJim Jagielski #include <svl/style.hxx>
66*b1cdbd2cSJim Jagielski #include <svx/sdrpagewindow.hxx>
67*b1cdbd2cSJim Jagielski #include <svx/svdouno.hxx>
68*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
69*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XWindow.hpp>
70*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/PosSize.hpp>
71*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XControl.hpp>
72*b1cdbd2cSJim Jagielski #include <svx/sdr/contact/objectcontact.hxx>
73*b1cdbd2cSJim Jagielski #include <svx/sdr/animation/objectanimator.hxx>
74*b1cdbd2cSJim Jagielski #include <svx/sdr/contact/viewcontact.hxx>
75*b1cdbd2cSJim Jagielski #include <drawinglayer/primitive2d/metafileprimitive2d.hxx>
76*b1cdbd2cSJim Jagielski #include <basegfx/matrix/b2dhommatrixtools.hxx>
77*b1cdbd2cSJim Jagielski
78*b1cdbd2cSJim Jagielski using namespace ::rtl;
79*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
80*b1cdbd2cSJim Jagielski
81*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
82*b1cdbd2cSJim Jagielski // #114409#-3 Migrate Encirclement
83*b1cdbd2cSJim Jagielski class ImplEncirclementOverlay
84*b1cdbd2cSJim Jagielski {
85*b1cdbd2cSJim Jagielski // The OverlayObjects
86*b1cdbd2cSJim Jagielski ::sdr::overlay::OverlayObjectList maObjects;
87*b1cdbd2cSJim Jagielski
88*b1cdbd2cSJim Jagielski // The remembered second position in logical coodinates
89*b1cdbd2cSJim Jagielski basegfx::B2DPoint maSecondPosition;
90*b1cdbd2cSJim Jagielski
91*b1cdbd2cSJim Jagielski public:
92*b1cdbd2cSJim Jagielski ImplEncirclementOverlay(const SdrPaintView& rView, const basegfx::B2DPoint& rStartPos);
93*b1cdbd2cSJim Jagielski ~ImplEncirclementOverlay();
94*b1cdbd2cSJim Jagielski
95*b1cdbd2cSJim Jagielski void SetSecondPosition(const basegfx::B2DPoint& rNewPosition);
96*b1cdbd2cSJim Jagielski };
97*b1cdbd2cSJim Jagielski
ImplEncirclementOverlay(const SdrPaintView & rView,const basegfx::B2DPoint & rStartPos)98*b1cdbd2cSJim Jagielski ImplEncirclementOverlay::ImplEncirclementOverlay(const SdrPaintView& rView, const basegfx::B2DPoint& rStartPos)
99*b1cdbd2cSJim Jagielski : maSecondPosition(rStartPos)
100*b1cdbd2cSJim Jagielski {
101*b1cdbd2cSJim Jagielski for(sal_uInt32 a(0L); a < rView.PaintWindowCount(); a++)
102*b1cdbd2cSJim Jagielski {
103*b1cdbd2cSJim Jagielski SdrPaintWindow* pCandidate = rView.GetPaintWindow(a);
104*b1cdbd2cSJim Jagielski ::sdr::overlay::OverlayManager* pTargetOverlay = pCandidate->GetOverlayManager();
105*b1cdbd2cSJim Jagielski
106*b1cdbd2cSJim Jagielski if(pTargetOverlay)
107*b1cdbd2cSJim Jagielski {
108*b1cdbd2cSJim Jagielski ::sdr::overlay::OverlayRollingRectangleStriped* aNew = new ::sdr::overlay::OverlayRollingRectangleStriped(
109*b1cdbd2cSJim Jagielski rStartPos, rStartPos, false);
110*b1cdbd2cSJim Jagielski pTargetOverlay->add(*aNew);
111*b1cdbd2cSJim Jagielski maObjects.append(*aNew);
112*b1cdbd2cSJim Jagielski }
113*b1cdbd2cSJim Jagielski }
114*b1cdbd2cSJim Jagielski }
115*b1cdbd2cSJim Jagielski
~ImplEncirclementOverlay()116*b1cdbd2cSJim Jagielski ImplEncirclementOverlay::~ImplEncirclementOverlay()
117*b1cdbd2cSJim Jagielski {
118*b1cdbd2cSJim Jagielski // The OverlayObjects are cleared using the destructor of OverlayObjectList.
119*b1cdbd2cSJim Jagielski // That destructor calls clear() at the list which removes all objects from the
120*b1cdbd2cSJim Jagielski // OverlayManager and deletes them.
121*b1cdbd2cSJim Jagielski }
122*b1cdbd2cSJim Jagielski
SetSecondPosition(const basegfx::B2DPoint & rNewPosition)123*b1cdbd2cSJim Jagielski void ImplEncirclementOverlay::SetSecondPosition(const basegfx::B2DPoint& rNewPosition)
124*b1cdbd2cSJim Jagielski {
125*b1cdbd2cSJim Jagielski if(rNewPosition != maSecondPosition)
126*b1cdbd2cSJim Jagielski {
127*b1cdbd2cSJim Jagielski // apply to OverlayObjects
128*b1cdbd2cSJim Jagielski for(sal_uInt32 a(0L); a < maObjects.count(); a++)
129*b1cdbd2cSJim Jagielski {
130*b1cdbd2cSJim Jagielski ::sdr::overlay::OverlayRollingRectangleStriped& rCandidate = (::sdr::overlay::OverlayRollingRectangleStriped&)maObjects.getOverlayObject(a);
131*b1cdbd2cSJim Jagielski rCandidate.setSecondPosition(rNewPosition);
132*b1cdbd2cSJim Jagielski }
133*b1cdbd2cSJim Jagielski
134*b1cdbd2cSJim Jagielski // remember new position
135*b1cdbd2cSJim Jagielski maSecondPosition = rNewPosition;
136*b1cdbd2cSJim Jagielski }
137*b1cdbd2cSJim Jagielski }
138*b1cdbd2cSJim Jagielski
139*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
140*b1cdbd2cSJim Jagielski // interface to SdrPaintWindow
141*b1cdbd2cSJim Jagielski
FindPaintWindow(const OutputDevice & rOut) const142*b1cdbd2cSJim Jagielski SdrPaintWindow* SdrPaintView::FindPaintWindow(const OutputDevice& rOut) const
143*b1cdbd2cSJim Jagielski {
144*b1cdbd2cSJim Jagielski for(SdrPaintWindowVector::const_iterator a = maPaintWindows.begin(); a != maPaintWindows.end(); a++)
145*b1cdbd2cSJim Jagielski {
146*b1cdbd2cSJim Jagielski if(&((*a)->GetOutputDevice()) == &rOut)
147*b1cdbd2cSJim Jagielski {
148*b1cdbd2cSJim Jagielski return *a;
149*b1cdbd2cSJim Jagielski }
150*b1cdbd2cSJim Jagielski }
151*b1cdbd2cSJim Jagielski
152*b1cdbd2cSJim Jagielski return 0L;
153*b1cdbd2cSJim Jagielski }
154*b1cdbd2cSJim Jagielski
GetPaintWindow(sal_uInt32 nIndex) const155*b1cdbd2cSJim Jagielski SdrPaintWindow* SdrPaintView::GetPaintWindow(sal_uInt32 nIndex) const
156*b1cdbd2cSJim Jagielski {
157*b1cdbd2cSJim Jagielski if(nIndex < maPaintWindows.size())
158*b1cdbd2cSJim Jagielski {
159*b1cdbd2cSJim Jagielski return maPaintWindows[nIndex];
160*b1cdbd2cSJim Jagielski }
161*b1cdbd2cSJim Jagielski
162*b1cdbd2cSJim Jagielski return 0L;
163*b1cdbd2cSJim Jagielski }
164*b1cdbd2cSJim Jagielski
AppendPaintWindow(SdrPaintWindow & rNew)165*b1cdbd2cSJim Jagielski void SdrPaintView::AppendPaintWindow(SdrPaintWindow& rNew)
166*b1cdbd2cSJim Jagielski {
167*b1cdbd2cSJim Jagielski maPaintWindows.push_back(&rNew);
168*b1cdbd2cSJim Jagielski }
169*b1cdbd2cSJim Jagielski
RemovePaintWindow(SdrPaintWindow & rOld)170*b1cdbd2cSJim Jagielski SdrPaintWindow* SdrPaintView::RemovePaintWindow(SdrPaintWindow& rOld)
171*b1cdbd2cSJim Jagielski {
172*b1cdbd2cSJim Jagielski SdrPaintWindow* pRetval = 0L;
173*b1cdbd2cSJim Jagielski const SdrPaintWindowVector::iterator aFindResult = ::std::find(maPaintWindows.begin(), maPaintWindows.end(), &rOld);
174*b1cdbd2cSJim Jagielski
175*b1cdbd2cSJim Jagielski if(aFindResult != maPaintWindows.end())
176*b1cdbd2cSJim Jagielski {
177*b1cdbd2cSJim Jagielski // remember return value, aFindResult is no longer valid after deletion
178*b1cdbd2cSJim Jagielski pRetval = *aFindResult;
179*b1cdbd2cSJim Jagielski maPaintWindows.erase(aFindResult);
180*b1cdbd2cSJim Jagielski }
181*b1cdbd2cSJim Jagielski
182*b1cdbd2cSJim Jagielski return pRetval;
183*b1cdbd2cSJim Jagielski }
184*b1cdbd2cSJim Jagielski
GetFirstOutputDevice() const185*b1cdbd2cSJim Jagielski OutputDevice* SdrPaintView::GetFirstOutputDevice() const
186*b1cdbd2cSJim Jagielski {
187*b1cdbd2cSJim Jagielski if(PaintWindowCount())
188*b1cdbd2cSJim Jagielski {
189*b1cdbd2cSJim Jagielski return &(GetPaintWindow(0)->GetOutputDevice());
190*b1cdbd2cSJim Jagielski }
191*b1cdbd2cSJim Jagielski
192*b1cdbd2cSJim Jagielski return 0L;
193*b1cdbd2cSJim Jagielski }
194*b1cdbd2cSJim Jagielski
195*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
196*b1cdbd2cSJim Jagielski
197*b1cdbd2cSJim Jagielski TYPEINIT1( SvxViewHint, SfxHint );
198*b1cdbd2cSJim Jagielski
SvxViewHint(HintType eHintType)199*b1cdbd2cSJim Jagielski SvxViewHint::SvxViewHint (HintType eHintType)
200*b1cdbd2cSJim Jagielski : meHintType(eHintType)
201*b1cdbd2cSJim Jagielski {
202*b1cdbd2cSJim Jagielski }
203*b1cdbd2cSJim Jagielski
GetHintType(void) const204*b1cdbd2cSJim Jagielski SvxViewHint::HintType SvxViewHint::GetHintType (void) const
205*b1cdbd2cSJim Jagielski {
206*b1cdbd2cSJim Jagielski return meHintType;
207*b1cdbd2cSJim Jagielski }
208*b1cdbd2cSJim Jagielski
209*b1cdbd2cSJim Jagielski
210*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
211*b1cdbd2cSJim Jagielski
convertMetafileToBitmapEx(const GDIMetaFile & rMtf,const basegfx::B2DRange & rTargetRange,const sal_uInt32 nMaximumQuadraticPixels)212*b1cdbd2cSJim Jagielski BitmapEx convertMetafileToBitmapEx(
213*b1cdbd2cSJim Jagielski const GDIMetaFile& rMtf,
214*b1cdbd2cSJim Jagielski const basegfx::B2DRange& rTargetRange,
215*b1cdbd2cSJim Jagielski const sal_uInt32 nMaximumQuadraticPixels)
216*b1cdbd2cSJim Jagielski {
217*b1cdbd2cSJim Jagielski BitmapEx aBitmapEx;
218*b1cdbd2cSJim Jagielski
219*b1cdbd2cSJim Jagielski if(rMtf.GetActionCount())
220*b1cdbd2cSJim Jagielski {
221*b1cdbd2cSJim Jagielski const drawinglayer::primitive2d::Primitive2DReference aMtf(
222*b1cdbd2cSJim Jagielski new drawinglayer::primitive2d::MetafilePrimitive2D(
223*b1cdbd2cSJim Jagielski basegfx::tools::createScaleTranslateB2DHomMatrix(
224*b1cdbd2cSJim Jagielski rTargetRange.getRange(),
225*b1cdbd2cSJim Jagielski rTargetRange.getMinimum()),
226*b1cdbd2cSJim Jagielski rMtf));
227*b1cdbd2cSJim Jagielski aBitmapEx = convertPrimitive2DSequenceToBitmapEx(
228*b1cdbd2cSJim Jagielski drawinglayer::primitive2d::Primitive2DSequence(&aMtf, 1),
229*b1cdbd2cSJim Jagielski rTargetRange,
230*b1cdbd2cSJim Jagielski nMaximumQuadraticPixels);
231*b1cdbd2cSJim Jagielski }
232*b1cdbd2cSJim Jagielski
233*b1cdbd2cSJim Jagielski return aBitmapEx;
234*b1cdbd2cSJim Jagielski }
235*b1cdbd2cSJim Jagielski
236*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
237*b1cdbd2cSJim Jagielski
238*b1cdbd2cSJim Jagielski TYPEINIT2(SdrPaintView,SfxListener,SfxRepeatTarget);
239*b1cdbd2cSJim Jagielski
240*b1cdbd2cSJim Jagielski DBG_NAME(SdrPaintView);
241*b1cdbd2cSJim Jagielski
ImpClearVars()242*b1cdbd2cSJim Jagielski void SdrPaintView::ImpClearVars()
243*b1cdbd2cSJim Jagielski {
244*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
245*b1cdbd2cSJim Jagielski pItemBrowser=NULL;
246*b1cdbd2cSJim Jagielski #endif
247*b1cdbd2cSJim Jagielski bPageVisible=sal_True;
248*b1cdbd2cSJim Jagielski bPageBorderVisible=sal_True;
249*b1cdbd2cSJim Jagielski bBordVisible=sal_True;
250*b1cdbd2cSJim Jagielski bGridVisible=sal_True;
251*b1cdbd2cSJim Jagielski bGridFront =sal_False;
252*b1cdbd2cSJim Jagielski bHlplVisible=sal_True;
253*b1cdbd2cSJim Jagielski bHlplFront =sal_True;
254*b1cdbd2cSJim Jagielski bGlueVisible=sal_False;
255*b1cdbd2cSJim Jagielski bGlueVisible2=sal_False;
256*b1cdbd2cSJim Jagielski bGlueVisible3=sal_False;
257*b1cdbd2cSJim Jagielski bGlueVisible4=sal_False;
258*b1cdbd2cSJim Jagielski bSwapAsynchron=sal_False;
259*b1cdbd2cSJim Jagielski bPrintPreview=sal_False;
260*b1cdbd2cSJim Jagielski mbPreviewRenderer=sal_False;
261*b1cdbd2cSJim Jagielski
262*b1cdbd2cSJim Jagielski eAnimationMode = SDR_ANIMATION_ANIMATE;
263*b1cdbd2cSJim Jagielski bAnimationPause = sal_False;
264*b1cdbd2cSJim Jagielski
265*b1cdbd2cSJim Jagielski nHitTolPix=2;
266*b1cdbd2cSJim Jagielski nMinMovPix=3;
267*b1cdbd2cSJim Jagielski nHitTolLog=0;
268*b1cdbd2cSJim Jagielski nMinMovLog=0;
269*b1cdbd2cSJim Jagielski pActualOutDev=NULL;
270*b1cdbd2cSJim Jagielski pDragWin=NULL;
271*b1cdbd2cSJim Jagielski bRestoreColors=sal_True;
272*b1cdbd2cSJim Jagielski pDefaultStyleSheet=NULL;
273*b1cdbd2cSJim Jagielski bSomeObjChgdFlag=sal_False;
274*b1cdbd2cSJim Jagielski nGraphicManagerDrawMode = GRFMGR_DRAW_STANDARD;
275*b1cdbd2cSJim Jagielski aComeBackTimer.SetTimeout(1);
276*b1cdbd2cSJim Jagielski aComeBackTimer.SetTimeoutHdl(LINK(this,SdrPaintView,ImpComeBackHdl));
277*b1cdbd2cSJim Jagielski String aNam; // System::GetUserName() just return an empty string
278*b1cdbd2cSJim Jagielski
279*b1cdbd2cSJim Jagielski if (pMod)
280*b1cdbd2cSJim Jagielski SetDefaultStyleSheet(pMod->GetDefaultStyleSheet(), sal_True);
281*b1cdbd2cSJim Jagielski
282*b1cdbd2cSJim Jagielski aNam.ToUpperAscii();
283*b1cdbd2cSJim Jagielski
284*b1cdbd2cSJim Jagielski maGridColor = Color( COL_BLACK );
285*b1cdbd2cSJim Jagielski BrkEncirclement();
286*b1cdbd2cSJim Jagielski }
287*b1cdbd2cSJim Jagielski
SdrPaintView(SdrModel * pModel1,OutputDevice * pOut)288*b1cdbd2cSJim Jagielski SdrPaintView::SdrPaintView(SdrModel* pModel1, OutputDevice* pOut)
289*b1cdbd2cSJim Jagielski : mpEncirclementOverlay(0L),
290*b1cdbd2cSJim Jagielski mpPageView(0L),
291*b1cdbd2cSJim Jagielski aDefaultAttr(pModel1->GetItemPool()),
292*b1cdbd2cSJim Jagielski mbBufferedOutputAllowed(false),
293*b1cdbd2cSJim Jagielski mbBufferedOverlayAllowed(false),
294*b1cdbd2cSJim Jagielski mbPagePaintingAllowed(true),
295*b1cdbd2cSJim Jagielski mbHideOle(false),
296*b1cdbd2cSJim Jagielski mbHideChart(false),
297*b1cdbd2cSJim Jagielski mbHideDraw(false),
298*b1cdbd2cSJim Jagielski mbHideFormControl(false)
299*b1cdbd2cSJim Jagielski {
300*b1cdbd2cSJim Jagielski DBG_CTOR(SdrPaintView,NULL);
301*b1cdbd2cSJim Jagielski pMod=pModel1;
302*b1cdbd2cSJim Jagielski ImpClearVars();
303*b1cdbd2cSJim Jagielski
304*b1cdbd2cSJim Jagielski if(pOut)
305*b1cdbd2cSJim Jagielski {
306*b1cdbd2cSJim Jagielski AddWindowToPaintView(pOut);
307*b1cdbd2cSJim Jagielski }
308*b1cdbd2cSJim Jagielski
309*b1cdbd2cSJim Jagielski // Flag zur Visualisierung von Gruppen
310*b1cdbd2cSJim Jagielski bVisualizeEnteredGroup = sal_True;
311*b1cdbd2cSJim Jagielski
312*b1cdbd2cSJim Jagielski maColorConfig.AddListener(this);
313*b1cdbd2cSJim Jagielski onChangeColorConfig();
314*b1cdbd2cSJim Jagielski }
315*b1cdbd2cSJim Jagielski
~SdrPaintView()316*b1cdbd2cSJim Jagielski SdrPaintView::~SdrPaintView()
317*b1cdbd2cSJim Jagielski {
318*b1cdbd2cSJim Jagielski DBG_DTOR(SdrPaintView,NULL);
319*b1cdbd2cSJim Jagielski if (pDefaultStyleSheet)
320*b1cdbd2cSJim Jagielski EndListening(*pDefaultStyleSheet);
321*b1cdbd2cSJim Jagielski
322*b1cdbd2cSJim Jagielski maColorConfig.RemoveListener(this);
323*b1cdbd2cSJim Jagielski ClearPageView();
324*b1cdbd2cSJim Jagielski
325*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
326*b1cdbd2cSJim Jagielski if(pItemBrowser)
327*b1cdbd2cSJim Jagielski {
328*b1cdbd2cSJim Jagielski delete pItemBrowser;
329*b1cdbd2cSJim Jagielski }
330*b1cdbd2cSJim Jagielski #endif
331*b1cdbd2cSJim Jagielski
332*b1cdbd2cSJim Jagielski // delete existing SdrPaintWindows
333*b1cdbd2cSJim Jagielski while(!maPaintWindows.empty())
334*b1cdbd2cSJim Jagielski {
335*b1cdbd2cSJim Jagielski delete maPaintWindows.back();
336*b1cdbd2cSJim Jagielski maPaintWindows.pop_back();
337*b1cdbd2cSJim Jagielski }
338*b1cdbd2cSJim Jagielski
339*b1cdbd2cSJim Jagielski // #114409#-3 Migrate HelpLine
340*b1cdbd2cSJim Jagielski BrkEncirclement();
341*b1cdbd2cSJim Jagielski }
342*b1cdbd2cSJim Jagielski
343*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
344*b1cdbd2cSJim Jagielski
Notify(SfxBroadcaster & rBC,const SfxHint & rHint)345*b1cdbd2cSJim Jagielski void __EXPORT SdrPaintView::Notify(SfxBroadcaster& rBC, const SfxHint& rHint)
346*b1cdbd2cSJim Jagielski {
347*b1cdbd2cSJim Jagielski //If the stylesheet has been destroyed
348*b1cdbd2cSJim Jagielski if (&rBC == pDefaultStyleSheet)
349*b1cdbd2cSJim Jagielski {
350*b1cdbd2cSJim Jagielski if (rHint.ISA(SfxSimpleHint) && ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING)
351*b1cdbd2cSJim Jagielski pDefaultStyleSheet = NULL;
352*b1cdbd2cSJim Jagielski return;
353*b1cdbd2cSJim Jagielski }
354*b1cdbd2cSJim Jagielski
355*b1cdbd2cSJim Jagielski sal_Bool bObjChg=!bSomeObjChgdFlag; // sal_True= auswerten fuer ComeBack-Timer
356*b1cdbd2cSJim Jagielski if (bObjChg) {
357*b1cdbd2cSJim Jagielski SdrHint* pSdrHint=PTR_CAST(SdrHint,&rHint);
358*b1cdbd2cSJim Jagielski if (pSdrHint!=NULL) {
359*b1cdbd2cSJim Jagielski SdrHintKind eKind=pSdrHint->GetKind();
360*b1cdbd2cSJim Jagielski if (eKind==HINT_OBJCHG || eKind==HINT_OBJINSERTED || eKind==HINT_OBJREMOVED) {
361*b1cdbd2cSJim Jagielski if (bObjChg) {
362*b1cdbd2cSJim Jagielski bSomeObjChgdFlag=sal_True;
363*b1cdbd2cSJim Jagielski aComeBackTimer.Start();
364*b1cdbd2cSJim Jagielski }
365*b1cdbd2cSJim Jagielski }
366*b1cdbd2cSJim Jagielski if (eKind==HINT_PAGEORDERCHG) {
367*b1cdbd2cSJim Jagielski const SdrPage* pPg=pSdrHint->GetPage();
368*b1cdbd2cSJim Jagielski
369*b1cdbd2cSJim Jagielski if(pPg && !pPg->IsInserted())
370*b1cdbd2cSJim Jagielski {
371*b1cdbd2cSJim Jagielski if(mpPageView && mpPageView->GetPage() == pPg)
372*b1cdbd2cSJim Jagielski {
373*b1cdbd2cSJim Jagielski HideSdrPage();
374*b1cdbd2cSJim Jagielski }
375*b1cdbd2cSJim Jagielski }
376*b1cdbd2cSJim Jagielski }
377*b1cdbd2cSJim Jagielski }
378*b1cdbd2cSJim Jagielski }
379*b1cdbd2cSJim Jagielski }
380*b1cdbd2cSJim Jagielski
ConfigurationChanged(::utl::ConfigurationBroadcaster *,sal_uInt32)381*b1cdbd2cSJim Jagielski void SdrPaintView::ConfigurationChanged( ::utl::ConfigurationBroadcaster* , sal_uInt32 )
382*b1cdbd2cSJim Jagielski {
383*b1cdbd2cSJim Jagielski onChangeColorConfig();
384*b1cdbd2cSJim Jagielski InvalidateAllWin();
385*b1cdbd2cSJim Jagielski }
386*b1cdbd2cSJim Jagielski
387*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
388*b1cdbd2cSJim Jagielski
IMPL_LINK_INLINE_START(SdrPaintView,ImpComeBackHdl,Timer *,EMPTYARG)389*b1cdbd2cSJim Jagielski IMPL_LINK_INLINE_START(SdrPaintView,ImpComeBackHdl,Timer*,EMPTYARG)
390*b1cdbd2cSJim Jagielski {
391*b1cdbd2cSJim Jagielski if (bSomeObjChgdFlag) {
392*b1cdbd2cSJim Jagielski bSomeObjChgdFlag=sal_False;
393*b1cdbd2cSJim Jagielski ModelHasChanged();
394*b1cdbd2cSJim Jagielski }
395*b1cdbd2cSJim Jagielski return 0;
396*b1cdbd2cSJim Jagielski }
IMPL_LINK_INLINE_END(SdrPaintView,ImpComeBackHdl,Timer *,pTimer)397*b1cdbd2cSJim Jagielski IMPL_LINK_INLINE_END(SdrPaintView,ImpComeBackHdl,Timer*,pTimer)
398*b1cdbd2cSJim Jagielski
399*b1cdbd2cSJim Jagielski void SdrPaintView::FlushComeBackTimer() const
400*b1cdbd2cSJim Jagielski {
401*b1cdbd2cSJim Jagielski if (bSomeObjChgdFlag) {
402*b1cdbd2cSJim Jagielski // casting auf nonconst
403*b1cdbd2cSJim Jagielski ((SdrPaintView*)this)->ImpComeBackHdl(&((SdrPaintView*)this)->aComeBackTimer);
404*b1cdbd2cSJim Jagielski ((SdrPaintView*)this)->aComeBackTimer.Stop();
405*b1cdbd2cSJim Jagielski }
406*b1cdbd2cSJim Jagielski }
407*b1cdbd2cSJim Jagielski
ModelHasChanged()408*b1cdbd2cSJim Jagielski void SdrPaintView::ModelHasChanged()
409*b1cdbd2cSJim Jagielski {
410*b1cdbd2cSJim Jagielski // Auch alle PageViews benachrichtigen
411*b1cdbd2cSJim Jagielski if(mpPageView && !mpPageView->GetPage()->IsInserted())
412*b1cdbd2cSJim Jagielski {
413*b1cdbd2cSJim Jagielski HideSdrPage();
414*b1cdbd2cSJim Jagielski }
415*b1cdbd2cSJim Jagielski
416*b1cdbd2cSJim Jagielski // test mpPageView here again, HideSdrPage() may have invalidated it.
417*b1cdbd2cSJim Jagielski if(mpPageView)
418*b1cdbd2cSJim Jagielski {
419*b1cdbd2cSJim Jagielski mpPageView->ModelHasChanged();
420*b1cdbd2cSJim Jagielski }
421*b1cdbd2cSJim Jagielski
422*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
423*b1cdbd2cSJim Jagielski if(pItemBrowser)
424*b1cdbd2cSJim Jagielski {
425*b1cdbd2cSJim Jagielski pItemBrowser->SetDirty();
426*b1cdbd2cSJim Jagielski }
427*b1cdbd2cSJim Jagielski #endif
428*b1cdbd2cSJim Jagielski }
429*b1cdbd2cSJim Jagielski
430*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
431*b1cdbd2cSJim Jagielski
IsAction() const432*b1cdbd2cSJim Jagielski sal_Bool SdrPaintView::IsAction() const
433*b1cdbd2cSJim Jagielski {
434*b1cdbd2cSJim Jagielski return IsEncirclement();
435*b1cdbd2cSJim Jagielski }
436*b1cdbd2cSJim Jagielski
MovAction(const Point & rPnt)437*b1cdbd2cSJim Jagielski void SdrPaintView::MovAction(const Point& rPnt)
438*b1cdbd2cSJim Jagielski {
439*b1cdbd2cSJim Jagielski if (IsEncirclement())
440*b1cdbd2cSJim Jagielski {
441*b1cdbd2cSJim Jagielski MovEncirclement(rPnt);
442*b1cdbd2cSJim Jagielski }
443*b1cdbd2cSJim Jagielski }
444*b1cdbd2cSJim Jagielski
EndAction()445*b1cdbd2cSJim Jagielski void SdrPaintView::EndAction()
446*b1cdbd2cSJim Jagielski {
447*b1cdbd2cSJim Jagielski if(IsEncirclement())
448*b1cdbd2cSJim Jagielski {
449*b1cdbd2cSJim Jagielski EndEncirclement();
450*b1cdbd2cSJim Jagielski }
451*b1cdbd2cSJim Jagielski }
452*b1cdbd2cSJim Jagielski
BckAction()453*b1cdbd2cSJim Jagielski void SdrPaintView::BckAction()
454*b1cdbd2cSJim Jagielski {
455*b1cdbd2cSJim Jagielski BrkEncirclement();
456*b1cdbd2cSJim Jagielski }
457*b1cdbd2cSJim Jagielski
BrkAction()458*b1cdbd2cSJim Jagielski void SdrPaintView::BrkAction()
459*b1cdbd2cSJim Jagielski {
460*b1cdbd2cSJim Jagielski BrkEncirclement();
461*b1cdbd2cSJim Jagielski }
462*b1cdbd2cSJim Jagielski
TakeActionRect(Rectangle & rRect) const463*b1cdbd2cSJim Jagielski void SdrPaintView::TakeActionRect(Rectangle& rRect) const
464*b1cdbd2cSJim Jagielski {
465*b1cdbd2cSJim Jagielski if(IsEncirclement())
466*b1cdbd2cSJim Jagielski {
467*b1cdbd2cSJim Jagielski rRect = Rectangle(aDragStat.GetStart(),aDragStat.GetNow());
468*b1cdbd2cSJim Jagielski }
469*b1cdbd2cSJim Jagielski }
470*b1cdbd2cSJim Jagielski
471*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
472*b1cdbd2cSJim Jagielski // info about TextEdit. Default is sal_False.
IsTextEdit() const473*b1cdbd2cSJim Jagielski bool SdrPaintView::IsTextEdit() const
474*b1cdbd2cSJim Jagielski {
475*b1cdbd2cSJim Jagielski return false;
476*b1cdbd2cSJim Jagielski }
477*b1cdbd2cSJim Jagielski
478*b1cdbd2cSJim Jagielski // info about TextEditPageView. Default is 0L.
GetTextEditPageView() const479*b1cdbd2cSJim Jagielski SdrPageView* SdrPaintView::GetTextEditPageView() const
480*b1cdbd2cSJim Jagielski {
481*b1cdbd2cSJim Jagielski return 0L;
482*b1cdbd2cSJim Jagielski }
483*b1cdbd2cSJim Jagielski
484*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
485*b1cdbd2cSJim Jagielski
ImpGetMinMovLogic(short nMinMov,const OutputDevice * pOut) const486*b1cdbd2cSJim Jagielski sal_uInt16 SdrPaintView::ImpGetMinMovLogic(short nMinMov, const OutputDevice* pOut) const
487*b1cdbd2cSJim Jagielski {
488*b1cdbd2cSJim Jagielski if (nMinMov>=0) return sal_uInt16(nMinMov);
489*b1cdbd2cSJim Jagielski if (pOut==NULL)
490*b1cdbd2cSJim Jagielski {
491*b1cdbd2cSJim Jagielski pOut = GetFirstOutputDevice();
492*b1cdbd2cSJim Jagielski }
493*b1cdbd2cSJim Jagielski if (pOut!=NULL) {
494*b1cdbd2cSJim Jagielski return short(-pOut->PixelToLogic(Size(nMinMov,0)).Width());
495*b1cdbd2cSJim Jagielski } else {
496*b1cdbd2cSJim Jagielski return 0;
497*b1cdbd2cSJim Jagielski }
498*b1cdbd2cSJim Jagielski }
499*b1cdbd2cSJim Jagielski
ImpGetHitTolLogic(short nHitTol,const OutputDevice * pOut) const500*b1cdbd2cSJim Jagielski sal_uInt16 SdrPaintView::ImpGetHitTolLogic(short nHitTol, const OutputDevice* pOut) const
501*b1cdbd2cSJim Jagielski {
502*b1cdbd2cSJim Jagielski if (nHitTol>=0) return sal_uInt16(nHitTol);
503*b1cdbd2cSJim Jagielski if (pOut==NULL)
504*b1cdbd2cSJim Jagielski {
505*b1cdbd2cSJim Jagielski pOut = GetFirstOutputDevice();
506*b1cdbd2cSJim Jagielski }
507*b1cdbd2cSJim Jagielski if (pOut!=NULL) {
508*b1cdbd2cSJim Jagielski return short(-pOut->PixelToLogic(Size(nHitTol,0)).Width());
509*b1cdbd2cSJim Jagielski } else {
510*b1cdbd2cSJim Jagielski return 0;
511*b1cdbd2cSJim Jagielski }
512*b1cdbd2cSJim Jagielski }
513*b1cdbd2cSJim Jagielski
TheresNewMapMode()514*b1cdbd2cSJim Jagielski void SdrPaintView::TheresNewMapMode()
515*b1cdbd2cSJim Jagielski {
516*b1cdbd2cSJim Jagielski if (pActualOutDev!=NULL) {
517*b1cdbd2cSJim Jagielski nHitTolLog=(sal_uInt16)((OutputDevice*)pActualOutDev)->PixelToLogic(Size(nHitTolPix,0)).Width();
518*b1cdbd2cSJim Jagielski nMinMovLog=(sal_uInt16)((OutputDevice*)pActualOutDev)->PixelToLogic(Size(nMinMovPix,0)).Width();
519*b1cdbd2cSJim Jagielski }
520*b1cdbd2cSJim Jagielski }
521*b1cdbd2cSJim Jagielski
SetActualWin(const OutputDevice * pWin)522*b1cdbd2cSJim Jagielski void SdrPaintView::SetActualWin(const OutputDevice* pWin)
523*b1cdbd2cSJim Jagielski {
524*b1cdbd2cSJim Jagielski pActualOutDev=pWin;
525*b1cdbd2cSJim Jagielski TheresNewMapMode();
526*b1cdbd2cSJim Jagielski }
527*b1cdbd2cSJim Jagielski
528*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
529*b1cdbd2cSJim Jagielski
BegEncirclement(const Point & rPnt)530*b1cdbd2cSJim Jagielski void SdrPaintView::BegEncirclement(const Point& rPnt)
531*b1cdbd2cSJim Jagielski {
532*b1cdbd2cSJim Jagielski BrkAction();
533*b1cdbd2cSJim Jagielski
534*b1cdbd2cSJim Jagielski DBG_ASSERT(0L == mpEncirclementOverlay, "SdrSnapView::BegSetPageOrg: There exists a ImplPageOriginOverlay (!)");
535*b1cdbd2cSJim Jagielski basegfx::B2DPoint aStartPos(rPnt.X(), rPnt.Y());
536*b1cdbd2cSJim Jagielski mpEncirclementOverlay = new ImplEncirclementOverlay(*this, aStartPos);
537*b1cdbd2cSJim Jagielski
538*b1cdbd2cSJim Jagielski aDragStat.Reset(rPnt);
539*b1cdbd2cSJim Jagielski aDragStat.SetMinMove(ImpGetMinMovLogic(-2,0L));
540*b1cdbd2cSJim Jagielski aDragStat.NextPoint();
541*b1cdbd2cSJim Jagielski }
542*b1cdbd2cSJim Jagielski
MovEncirclement(const Point & rPnt)543*b1cdbd2cSJim Jagielski void SdrPaintView::MovEncirclement(const Point& rPnt)
544*b1cdbd2cSJim Jagielski {
545*b1cdbd2cSJim Jagielski if(IsEncirclement() && aDragStat.CheckMinMoved(rPnt))
546*b1cdbd2cSJim Jagielski {
547*b1cdbd2cSJim Jagielski aDragStat.NextMove(rPnt);
548*b1cdbd2cSJim Jagielski
549*b1cdbd2cSJim Jagielski DBG_ASSERT(mpEncirclementOverlay, "SdrSnapView::MovSetPageOrg: no ImplPageOriginOverlay (!)");
550*b1cdbd2cSJim Jagielski basegfx::B2DPoint aNewPos(rPnt.X(), rPnt.Y());
551*b1cdbd2cSJim Jagielski mpEncirclementOverlay->SetSecondPosition(aNewPos);
552*b1cdbd2cSJim Jagielski }
553*b1cdbd2cSJim Jagielski }
554*b1cdbd2cSJim Jagielski
EndEncirclement(sal_Bool bNoJustify)555*b1cdbd2cSJim Jagielski Rectangle SdrPaintView::EndEncirclement(sal_Bool bNoJustify)
556*b1cdbd2cSJim Jagielski {
557*b1cdbd2cSJim Jagielski Rectangle aRetval;
558*b1cdbd2cSJim Jagielski
559*b1cdbd2cSJim Jagielski if(IsEncirclement())
560*b1cdbd2cSJim Jagielski {
561*b1cdbd2cSJim Jagielski if(aDragStat.IsMinMoved())
562*b1cdbd2cSJim Jagielski {
563*b1cdbd2cSJim Jagielski aRetval = Rectangle(aDragStat.GetStart(), aDragStat.GetNow());
564*b1cdbd2cSJim Jagielski
565*b1cdbd2cSJim Jagielski if(!bNoJustify)
566*b1cdbd2cSJim Jagielski {
567*b1cdbd2cSJim Jagielski aRetval.Justify();
568*b1cdbd2cSJim Jagielski }
569*b1cdbd2cSJim Jagielski }
570*b1cdbd2cSJim Jagielski
571*b1cdbd2cSJim Jagielski // cleanup
572*b1cdbd2cSJim Jagielski BrkEncirclement();
573*b1cdbd2cSJim Jagielski }
574*b1cdbd2cSJim Jagielski
575*b1cdbd2cSJim Jagielski return aRetval;
576*b1cdbd2cSJim Jagielski }
577*b1cdbd2cSJim Jagielski
BrkEncirclement()578*b1cdbd2cSJim Jagielski void SdrPaintView::BrkEncirclement()
579*b1cdbd2cSJim Jagielski {
580*b1cdbd2cSJim Jagielski if(IsEncirclement())
581*b1cdbd2cSJim Jagielski {
582*b1cdbd2cSJim Jagielski DBG_ASSERT(mpEncirclementOverlay, "SdrSnapView::MovSetPageOrg: no ImplPageOriginOverlay (!)");
583*b1cdbd2cSJim Jagielski delete mpEncirclementOverlay;
584*b1cdbd2cSJim Jagielski mpEncirclementOverlay = 0L;
585*b1cdbd2cSJim Jagielski }
586*b1cdbd2cSJim Jagielski }
587*b1cdbd2cSJim Jagielski
588*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
589*b1cdbd2cSJim Jagielski
ClearPageView()590*b1cdbd2cSJim Jagielski void SdrPaintView::ClearPageView()
591*b1cdbd2cSJim Jagielski {
592*b1cdbd2cSJim Jagielski BrkAction();
593*b1cdbd2cSJim Jagielski
594*b1cdbd2cSJim Jagielski if(mpPageView)
595*b1cdbd2cSJim Jagielski {
596*b1cdbd2cSJim Jagielski InvalidateAllWin();
597*b1cdbd2cSJim Jagielski delete mpPageView;
598*b1cdbd2cSJim Jagielski mpPageView = 0L;
599*b1cdbd2cSJim Jagielski }
600*b1cdbd2cSJim Jagielski }
601*b1cdbd2cSJim Jagielski
ShowSdrPage(SdrPage * pPage)602*b1cdbd2cSJim Jagielski SdrPageView* SdrPaintView::ShowSdrPage(SdrPage* pPage)
603*b1cdbd2cSJim Jagielski {
604*b1cdbd2cSJim Jagielski if(pPage && (!mpPageView || mpPageView->GetPage() != pPage))
605*b1cdbd2cSJim Jagielski {
606*b1cdbd2cSJim Jagielski if(mpPageView)
607*b1cdbd2cSJim Jagielski {
608*b1cdbd2cSJim Jagielski InvalidateAllWin();
609*b1cdbd2cSJim Jagielski delete mpPageView;
610*b1cdbd2cSJim Jagielski }
611*b1cdbd2cSJim Jagielski
612*b1cdbd2cSJim Jagielski mpPageView = new SdrPageView(pPage, *((SdrView*)this));
613*b1cdbd2cSJim Jagielski mpPageView->Show();
614*b1cdbd2cSJim Jagielski }
615*b1cdbd2cSJim Jagielski
616*b1cdbd2cSJim Jagielski return mpPageView;
617*b1cdbd2cSJim Jagielski }
618*b1cdbd2cSJim Jagielski
HideSdrPage()619*b1cdbd2cSJim Jagielski void SdrPaintView::HideSdrPage()
620*b1cdbd2cSJim Jagielski {
621*b1cdbd2cSJim Jagielski if(mpPageView)
622*b1cdbd2cSJim Jagielski {
623*b1cdbd2cSJim Jagielski mpPageView->Hide();
624*b1cdbd2cSJim Jagielski delete mpPageView;
625*b1cdbd2cSJim Jagielski mpPageView = 0L;
626*b1cdbd2cSJim Jagielski }
627*b1cdbd2cSJim Jagielski }
628*b1cdbd2cSJim Jagielski
AddWindowToPaintView(OutputDevice * pNewWin)629*b1cdbd2cSJim Jagielski void SdrPaintView::AddWindowToPaintView(OutputDevice* pNewWin)
630*b1cdbd2cSJim Jagielski {
631*b1cdbd2cSJim Jagielski DBG_ASSERT(pNewWin, "SdrPaintView::AddWindowToPaintView: No OutputDevice(!)");
632*b1cdbd2cSJim Jagielski SdrPaintWindow* pNewPaintWindow = new SdrPaintWindow(*this, *pNewWin);
633*b1cdbd2cSJim Jagielski AppendPaintWindow(*pNewPaintWindow);
634*b1cdbd2cSJim Jagielski
635*b1cdbd2cSJim Jagielski if(mpPageView)
636*b1cdbd2cSJim Jagielski {
637*b1cdbd2cSJim Jagielski mpPageView->AddPaintWindowToPageView(*pNewPaintWindow);
638*b1cdbd2cSJim Jagielski }
639*b1cdbd2cSJim Jagielski
640*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
641*b1cdbd2cSJim Jagielski if (pItemBrowser!=NULL)
642*b1cdbd2cSJim Jagielski pItemBrowser->ForceParent();
643*b1cdbd2cSJim Jagielski #endif
644*b1cdbd2cSJim Jagielski }
645*b1cdbd2cSJim Jagielski
DeleteWindowFromPaintView(OutputDevice * pOldWin)646*b1cdbd2cSJim Jagielski void SdrPaintView::DeleteWindowFromPaintView(OutputDevice* pOldWin)
647*b1cdbd2cSJim Jagielski {
648*b1cdbd2cSJim Jagielski DBG_ASSERT(pOldWin, "SdrPaintView::DeleteWindowFromPaintView: No OutputDevice(!)");
649*b1cdbd2cSJim Jagielski SdrPaintWindow* pCandidate = FindPaintWindow(*pOldWin);
650*b1cdbd2cSJim Jagielski
651*b1cdbd2cSJim Jagielski if(pCandidate)
652*b1cdbd2cSJim Jagielski {
653*b1cdbd2cSJim Jagielski if(mpPageView)
654*b1cdbd2cSJim Jagielski {
655*b1cdbd2cSJim Jagielski mpPageView->RemovePaintWindowFromPageView(*pCandidate);
656*b1cdbd2cSJim Jagielski }
657*b1cdbd2cSJim Jagielski
658*b1cdbd2cSJim Jagielski RemovePaintWindow(*pCandidate);
659*b1cdbd2cSJim Jagielski delete pCandidate;
660*b1cdbd2cSJim Jagielski }
661*b1cdbd2cSJim Jagielski
662*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
663*b1cdbd2cSJim Jagielski if (pItemBrowser!=NULL)
664*b1cdbd2cSJim Jagielski pItemBrowser->ForceParent();
665*b1cdbd2cSJim Jagielski #endif
666*b1cdbd2cSJim Jagielski }
667*b1cdbd2cSJim Jagielski
SetLayerVisible(const XubString & rName,sal_Bool bShow)668*b1cdbd2cSJim Jagielski void SdrPaintView::SetLayerVisible(const XubString& rName, sal_Bool bShow)
669*b1cdbd2cSJim Jagielski {
670*b1cdbd2cSJim Jagielski if(mpPageView)
671*b1cdbd2cSJim Jagielski {
672*b1cdbd2cSJim Jagielski mpPageView->SetLayerVisible(rName,bShow);
673*b1cdbd2cSJim Jagielski }
674*b1cdbd2cSJim Jagielski
675*b1cdbd2cSJim Jagielski InvalidateAllWin();
676*b1cdbd2cSJim Jagielski }
677*b1cdbd2cSJim Jagielski
IsLayerVisible(const XubString & rName) const678*b1cdbd2cSJim Jagielski bool SdrPaintView::IsLayerVisible(const XubString& rName) const
679*b1cdbd2cSJim Jagielski {
680*b1cdbd2cSJim Jagielski if(mpPageView)
681*b1cdbd2cSJim Jagielski {
682*b1cdbd2cSJim Jagielski return mpPageView->IsLayerVisible(rName);
683*b1cdbd2cSJim Jagielski }
684*b1cdbd2cSJim Jagielski
685*b1cdbd2cSJim Jagielski return false;
686*b1cdbd2cSJim Jagielski }
687*b1cdbd2cSJim Jagielski
SetAllLayersVisible(sal_Bool bShow)688*b1cdbd2cSJim Jagielski void SdrPaintView::SetAllLayersVisible(sal_Bool bShow)
689*b1cdbd2cSJim Jagielski {
690*b1cdbd2cSJim Jagielski if(mpPageView)
691*b1cdbd2cSJim Jagielski {
692*b1cdbd2cSJim Jagielski mpPageView->SetAllLayersVisible(bShow);
693*b1cdbd2cSJim Jagielski }
694*b1cdbd2cSJim Jagielski
695*b1cdbd2cSJim Jagielski InvalidateAllWin();
696*b1cdbd2cSJim Jagielski }
697*b1cdbd2cSJim Jagielski
SetLayerLocked(const XubString & rName,sal_Bool bLock)698*b1cdbd2cSJim Jagielski void SdrPaintView::SetLayerLocked(const XubString& rName, sal_Bool bLock)
699*b1cdbd2cSJim Jagielski {
700*b1cdbd2cSJim Jagielski if(mpPageView)
701*b1cdbd2cSJim Jagielski {
702*b1cdbd2cSJim Jagielski mpPageView->SetLayerLocked(rName,bLock);
703*b1cdbd2cSJim Jagielski }
704*b1cdbd2cSJim Jagielski }
705*b1cdbd2cSJim Jagielski
IsLayerLocked(const XubString & rName) const706*b1cdbd2cSJim Jagielski bool SdrPaintView::IsLayerLocked(const XubString& rName) const
707*b1cdbd2cSJim Jagielski {
708*b1cdbd2cSJim Jagielski if(mpPageView)
709*b1cdbd2cSJim Jagielski {
710*b1cdbd2cSJim Jagielski return mpPageView->IsLayerLocked(rName);
711*b1cdbd2cSJim Jagielski }
712*b1cdbd2cSJim Jagielski
713*b1cdbd2cSJim Jagielski return false;
714*b1cdbd2cSJim Jagielski }
715*b1cdbd2cSJim Jagielski
SetAllLayersLocked(sal_Bool bLock)716*b1cdbd2cSJim Jagielski void SdrPaintView::SetAllLayersLocked(sal_Bool bLock)
717*b1cdbd2cSJim Jagielski {
718*b1cdbd2cSJim Jagielski if(mpPageView)
719*b1cdbd2cSJim Jagielski {
720*b1cdbd2cSJim Jagielski mpPageView->SetAllLayersLocked(bLock);
721*b1cdbd2cSJim Jagielski }
722*b1cdbd2cSJim Jagielski }
723*b1cdbd2cSJim Jagielski
SetLayerPrintable(const XubString & rName,sal_Bool bPrn)724*b1cdbd2cSJim Jagielski void SdrPaintView::SetLayerPrintable(const XubString& rName, sal_Bool bPrn)
725*b1cdbd2cSJim Jagielski {
726*b1cdbd2cSJim Jagielski if(mpPageView)
727*b1cdbd2cSJim Jagielski {
728*b1cdbd2cSJim Jagielski mpPageView->SetLayerPrintable(rName,bPrn);
729*b1cdbd2cSJim Jagielski }
730*b1cdbd2cSJim Jagielski }
731*b1cdbd2cSJim Jagielski
IsLayerPrintable(const XubString & rName) const732*b1cdbd2cSJim Jagielski bool SdrPaintView::IsLayerPrintable(const XubString& rName) const
733*b1cdbd2cSJim Jagielski {
734*b1cdbd2cSJim Jagielski if(mpPageView)
735*b1cdbd2cSJim Jagielski {
736*b1cdbd2cSJim Jagielski return mpPageView->IsLayerPrintable(rName);
737*b1cdbd2cSJim Jagielski }
738*b1cdbd2cSJim Jagielski
739*b1cdbd2cSJim Jagielski return false;
740*b1cdbd2cSJim Jagielski }
741*b1cdbd2cSJim Jagielski
SetAllLayersPrintable(sal_Bool bPrn)742*b1cdbd2cSJim Jagielski void SdrPaintView::SetAllLayersPrintable(sal_Bool bPrn)
743*b1cdbd2cSJim Jagielski {
744*b1cdbd2cSJim Jagielski if(mpPageView)
745*b1cdbd2cSJim Jagielski {
746*b1cdbd2cSJim Jagielski mpPageView->SetAllLayersPrintable(bPrn);
747*b1cdbd2cSJim Jagielski }
748*b1cdbd2cSJim Jagielski }
749*b1cdbd2cSJim Jagielski
PrePaint()750*b1cdbd2cSJim Jagielski void SdrPaintView::PrePaint()
751*b1cdbd2cSJim Jagielski {
752*b1cdbd2cSJim Jagielski if(mpPageView)
753*b1cdbd2cSJim Jagielski {
754*b1cdbd2cSJim Jagielski mpPageView->PrePaint();
755*b1cdbd2cSJim Jagielski }
756*b1cdbd2cSJim Jagielski }
757*b1cdbd2cSJim Jagielski
PostPaint()758*b1cdbd2cSJim Jagielski void SdrPaintView::PostPaint()
759*b1cdbd2cSJim Jagielski {
760*b1cdbd2cSJim Jagielski if(mpPageView)
761*b1cdbd2cSJim Jagielski {
762*b1cdbd2cSJim Jagielski mpPageView->PostPaint();
763*b1cdbd2cSJim Jagielski }
764*b1cdbd2cSJim Jagielski }
765*b1cdbd2cSJim Jagielski
766*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
767*b1cdbd2cSJim Jagielski // #define SVX_REPAINT_TIMER_TEST
768*b1cdbd2cSJim Jagielski
CompleteRedraw(OutputDevice * pOut,const Region & rReg,sdr::contact::ViewObjectContactRedirector * pRedirector)769*b1cdbd2cSJim Jagielski void SdrPaintView::CompleteRedraw(OutputDevice* pOut, const Region& rReg, sdr::contact::ViewObjectContactRedirector* pRedirector)
770*b1cdbd2cSJim Jagielski {
771*b1cdbd2cSJim Jagielski #ifdef SVX_REPAINT_TIMER_TEST
772*b1cdbd2cSJim Jagielski #define REMEMBERED_TIMES_COUNT (10)
773*b1cdbd2cSJim Jagielski static bool bDoTimerTest(false);
774*b1cdbd2cSJim Jagielski static bool bTimesInited(false);
775*b1cdbd2cSJim Jagielski static sal_uInt32 nRepeatCount(10L);
776*b1cdbd2cSJim Jagielski static double fLastTimes[REMEMBERED_TIMES_COUNT];
777*b1cdbd2cSJim Jagielski const sal_uInt32 nStartTime(Time::GetSystemTicks());
778*b1cdbd2cSJim Jagielski sal_uInt32 count(1L);
779*b1cdbd2cSJim Jagielski sal_uInt32 a;
780*b1cdbd2cSJim Jagielski
781*b1cdbd2cSJim Jagielski if(bDoTimerTest)
782*b1cdbd2cSJim Jagielski {
783*b1cdbd2cSJim Jagielski count = nRepeatCount;
784*b1cdbd2cSJim Jagielski }
785*b1cdbd2cSJim Jagielski
786*b1cdbd2cSJim Jagielski for(a = 0L; a < count; a++)
787*b1cdbd2cSJim Jagielski {
788*b1cdbd2cSJim Jagielski #endif // SVX_REPAINT_TIMER_TEST
789*b1cdbd2cSJim Jagielski
790*b1cdbd2cSJim Jagielski // #i74769# check if pOut is a win and has a ClipRegion. If Yes, the Region
791*b1cdbd2cSJim Jagielski // rReg may be made more granular (fine) with using it. Normally, rReg
792*b1cdbd2cSJim Jagielski // does come from Window::Paint() anyways and thus is based on a single
793*b1cdbd2cSJim Jagielski // rectangle which was derived from exactly that repaint region
794*b1cdbd2cSJim Jagielski Region aOptimizedRepaintRegion(rReg);
795*b1cdbd2cSJim Jagielski
796*b1cdbd2cSJim Jagielski if(pOut && OUTDEV_WINDOW == pOut->GetOutDevType())
797*b1cdbd2cSJim Jagielski {
798*b1cdbd2cSJim Jagielski Window* pWindow = (Window*)pOut;
799*b1cdbd2cSJim Jagielski
800*b1cdbd2cSJim Jagielski if(pWindow->IsInPaint())
801*b1cdbd2cSJim Jagielski {
802*b1cdbd2cSJim Jagielski if(!pWindow->GetPaintRegion().IsEmpty())
803*b1cdbd2cSJim Jagielski {
804*b1cdbd2cSJim Jagielski aOptimizedRepaintRegion.Intersect(pWindow->GetPaintRegion());
805*b1cdbd2cSJim Jagielski
806*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
807*b1cdbd2cSJim Jagielski // #i74769# test-paint repaint region
808*b1cdbd2cSJim Jagielski static bool bDoPaintForVisualControl(false);
809*b1cdbd2cSJim Jagielski
810*b1cdbd2cSJim Jagielski if(bDoPaintForVisualControl)
811*b1cdbd2cSJim Jagielski {
812*b1cdbd2cSJim Jagielski RectangleVector aRectangles;
813*b1cdbd2cSJim Jagielski aOptimizedRepaintRegion.GetRegionRectangles(aRectangles);
814*b1cdbd2cSJim Jagielski
815*b1cdbd2cSJim Jagielski pWindow->SetLineColor(COL_LIGHTGREEN);
816*b1cdbd2cSJim Jagielski pWindow->SetFillColor();
817*b1cdbd2cSJim Jagielski
818*b1cdbd2cSJim Jagielski for(RectangleVector::const_iterator aRectIter(aRectangles.begin()); aRectIter != aRectangles.end(); aRectIter++)
819*b1cdbd2cSJim Jagielski {
820*b1cdbd2cSJim Jagielski pWindow->DrawRect(*aRectIter);
821*b1cdbd2cSJim Jagielski }
822*b1cdbd2cSJim Jagielski
823*b1cdbd2cSJim Jagielski //RegionHandle aRegionHandle(aOptimizedRepaintRegion.BeginEnumRects());
824*b1cdbd2cSJim Jagielski //Rectangle aRegionRectangle;
825*b1cdbd2cSJim Jagielski //
826*b1cdbd2cSJim Jagielski //while(aOptimizedRepaintRegion.GetEnumRects(aRegionHandle, aRegionRectangle))
827*b1cdbd2cSJim Jagielski //{
828*b1cdbd2cSJim Jagielski // pWindow->SetLineColor(COL_LIGHTGREEN);
829*b1cdbd2cSJim Jagielski // pWindow->SetFillColor();
830*b1cdbd2cSJim Jagielski // pWindow->DrawRect(aRegionRectangle);
831*b1cdbd2cSJim Jagielski //}
832*b1cdbd2cSJim Jagielski //
833*b1cdbd2cSJim Jagielski //aOptimizedRepaintRegion.EndEnumRects(aRegionHandle);
834*b1cdbd2cSJim Jagielski }
835*b1cdbd2cSJim Jagielski #endif
836*b1cdbd2cSJim Jagielski }
837*b1cdbd2cSJim Jagielski }
838*b1cdbd2cSJim Jagielski }
839*b1cdbd2cSJim Jagielski
840*b1cdbd2cSJim Jagielski SdrPaintWindow* pPaintWindow = BeginCompleteRedraw(pOut);
841*b1cdbd2cSJim Jagielski OSL_ENSURE(pPaintWindow, "SdrPaintView::CompleteRedraw: No OutDev (!)");
842*b1cdbd2cSJim Jagielski
843*b1cdbd2cSJim Jagielski DoCompleteRedraw(*pPaintWindow, aOptimizedRepaintRegion, pRedirector);
844*b1cdbd2cSJim Jagielski EndCompleteRedraw(*pPaintWindow, true);
845*b1cdbd2cSJim Jagielski
846*b1cdbd2cSJim Jagielski #ifdef SVX_REPAINT_TIMER_TEST
847*b1cdbd2cSJim Jagielski }
848*b1cdbd2cSJim Jagielski
849*b1cdbd2cSJim Jagielski if(bDoTimerTest)
850*b1cdbd2cSJim Jagielski {
851*b1cdbd2cSJim Jagielski const sal_uInt32 nStopTime(Time::GetSystemTicks());
852*b1cdbd2cSJim Jagielski const sal_uInt32 nNeededTime(nStopTime - nStartTime);
853*b1cdbd2cSJim Jagielski const double fTimePerPaint((double)nNeededTime / (double)nRepeatCount);
854*b1cdbd2cSJim Jagielski
855*b1cdbd2cSJim Jagielski if(!bTimesInited)
856*b1cdbd2cSJim Jagielski {
857*b1cdbd2cSJim Jagielski for(a = 0L; a < REMEMBERED_TIMES_COUNT; a++)
858*b1cdbd2cSJim Jagielski {
859*b1cdbd2cSJim Jagielski fLastTimes[a] = fTimePerPaint;
860*b1cdbd2cSJim Jagielski }
861*b1cdbd2cSJim Jagielski
862*b1cdbd2cSJim Jagielski bTimesInited = true;
863*b1cdbd2cSJim Jagielski }
864*b1cdbd2cSJim Jagielski else
865*b1cdbd2cSJim Jagielski {
866*b1cdbd2cSJim Jagielski for(a = 1L; a < REMEMBERED_TIMES_COUNT; a++)
867*b1cdbd2cSJim Jagielski {
868*b1cdbd2cSJim Jagielski fLastTimes[a - 1L] = fLastTimes[a];
869*b1cdbd2cSJim Jagielski }
870*b1cdbd2cSJim Jagielski
871*b1cdbd2cSJim Jagielski fLastTimes[REMEMBERED_TIMES_COUNT - 1L] = fTimePerPaint;
872*b1cdbd2cSJim Jagielski }
873*b1cdbd2cSJim Jagielski
874*b1cdbd2cSJim Jagielski double fAddedTimes(0.0);
875*b1cdbd2cSJim Jagielski
876*b1cdbd2cSJim Jagielski for(a = 0L; a < REMEMBERED_TIMES_COUNT; a++)
877*b1cdbd2cSJim Jagielski {
878*b1cdbd2cSJim Jagielski fAddedTimes += fLastTimes[a];
879*b1cdbd2cSJim Jagielski }
880*b1cdbd2cSJim Jagielski
881*b1cdbd2cSJim Jagielski const double fAverageTimePerPaint(fAddedTimes / (double)REMEMBERED_TIMES_COUNT);
882*b1cdbd2cSJim Jagielski
883*b1cdbd2cSJim Jagielski fprintf(stderr, "-----------(start result)----------\n");
884*b1cdbd2cSJim Jagielski fprintf(stderr, "StartTime : %u, StopTime: %u, NeededTime: %u, TimePerPaint: %f\n", nStartTime, nStopTime, nNeededTime, fTimePerPaint);
885*b1cdbd2cSJim Jagielski fprintf(stderr, "Remembered times: ");
886*b1cdbd2cSJim Jagielski
887*b1cdbd2cSJim Jagielski for(a = 0L; a < REMEMBERED_TIMES_COUNT; a++)
888*b1cdbd2cSJim Jagielski {
889*b1cdbd2cSJim Jagielski fprintf(stderr, "%d: %f ", a, fLastTimes[a]);
890*b1cdbd2cSJim Jagielski }
891*b1cdbd2cSJim Jagielski
892*b1cdbd2cSJim Jagielski fprintf(stderr, "\n");
893*b1cdbd2cSJim Jagielski fprintf(stderr, "AverageTimePerPaint: %f\n", fAverageTimePerPaint);
894*b1cdbd2cSJim Jagielski fprintf(stderr, "-----------(stop result)----------\n");
895*b1cdbd2cSJim Jagielski }
896*b1cdbd2cSJim Jagielski #endif // SVX_REPAINT_TIMER_TEST
897*b1cdbd2cSJim Jagielski }
898*b1cdbd2cSJim Jagielski
899*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
900*b1cdbd2cSJim Jagielski // #i72889#
901*b1cdbd2cSJim Jagielski
BeginCompleteRedraw(OutputDevice * pOut)902*b1cdbd2cSJim Jagielski SdrPaintWindow* SdrPaintView::BeginCompleteRedraw(OutputDevice* pOut)
903*b1cdbd2cSJim Jagielski {
904*b1cdbd2cSJim Jagielski OSL_ENSURE(pOut, "SdrPaintView::BeginCompleteRedraw: No OutDev (!)");
905*b1cdbd2cSJim Jagielski SdrPaintWindow* pPaintWindow = FindPaintWindow(*pOut);
906*b1cdbd2cSJim Jagielski
907*b1cdbd2cSJim Jagielski if(pPaintWindow)
908*b1cdbd2cSJim Jagielski {
909*b1cdbd2cSJim Jagielski // draw preprocessing, only for known devices
910*b1cdbd2cSJim Jagielski // prepare PreRendering
911*b1cdbd2cSJim Jagielski pPaintWindow->PreparePreRenderDevice();
912*b1cdbd2cSJim Jagielski }
913*b1cdbd2cSJim Jagielski else
914*b1cdbd2cSJim Jagielski {
915*b1cdbd2cSJim Jagielski // None of the known OutputDevices is the target of this paint, use
916*b1cdbd2cSJim Jagielski // a temporary SdrPaintWindow for this Redraw.
917*b1cdbd2cSJim Jagielski pPaintWindow = new SdrPaintWindow(*this, *pOut);
918*b1cdbd2cSJim Jagielski pPaintWindow->setTemporaryTarget(true);
919*b1cdbd2cSJim Jagielski }
920*b1cdbd2cSJim Jagielski
921*b1cdbd2cSJim Jagielski return pPaintWindow;
922*b1cdbd2cSJim Jagielski }
923*b1cdbd2cSJim Jagielski
DoCompleteRedraw(SdrPaintWindow & rPaintWindow,const Region & rReg,sdr::contact::ViewObjectContactRedirector * pRedirector)924*b1cdbd2cSJim Jagielski void SdrPaintView::DoCompleteRedraw(SdrPaintWindow& rPaintWindow, const Region& rReg, sdr::contact::ViewObjectContactRedirector* pRedirector)
925*b1cdbd2cSJim Jagielski {
926*b1cdbd2cSJim Jagielski // redraw all PageViews with the target. This may expand the RedrawRegion
927*b1cdbd2cSJim Jagielski // at the PaintWindow, plus taking care of FormLayer expansion
928*b1cdbd2cSJim Jagielski if(mpPageView)
929*b1cdbd2cSJim Jagielski {
930*b1cdbd2cSJim Jagielski mpPageView->CompleteRedraw(rPaintWindow, rReg, pRedirector);
931*b1cdbd2cSJim Jagielski }
932*b1cdbd2cSJim Jagielski }
933*b1cdbd2cSJim Jagielski
EndCompleteRedraw(SdrPaintWindow & rPaintWindow,bool bPaintFormLayer)934*b1cdbd2cSJim Jagielski void SdrPaintView::EndCompleteRedraw(SdrPaintWindow& rPaintWindow, bool bPaintFormLayer)
935*b1cdbd2cSJim Jagielski {
936*b1cdbd2cSJim Jagielski if(rPaintWindow.getTemporaryTarget())
937*b1cdbd2cSJim Jagielski {
938*b1cdbd2cSJim Jagielski // get rid of temp target again
939*b1cdbd2cSJim Jagielski delete (&rPaintWindow);
940*b1cdbd2cSJim Jagielski }
941*b1cdbd2cSJim Jagielski else
942*b1cdbd2cSJim Jagielski {
943*b1cdbd2cSJim Jagielski // draw postprocessing, only for known devices
944*b1cdbd2cSJim Jagielski // it is necessary to always paint FormLayer
945*b1cdbd2cSJim Jagielski if(bPaintFormLayer)
946*b1cdbd2cSJim Jagielski {
947*b1cdbd2cSJim Jagielski ImpFormLayerDrawing(rPaintWindow);
948*b1cdbd2cSJim Jagielski }
949*b1cdbd2cSJim Jagielski
950*b1cdbd2cSJim Jagielski // look for active TextEdit. As long as this cannot be painted to a VDev,
951*b1cdbd2cSJim Jagielski // it cannot get part of buffering. In that case, output evtl. prerender
952*b1cdbd2cSJim Jagielski // early and paint text edit to window.
953*b1cdbd2cSJim Jagielski if(IsTextEdit() && GetSdrPageView())
954*b1cdbd2cSJim Jagielski {
955*b1cdbd2cSJim Jagielski static_cast< SdrView* >(this)->TextEditDrawing(rPaintWindow);
956*b1cdbd2cSJim Jagielski }
957*b1cdbd2cSJim Jagielski
958*b1cdbd2cSJim Jagielski // draw Overlay, also to PreRender device if exists
959*b1cdbd2cSJim Jagielski rPaintWindow.DrawOverlay(rPaintWindow.GetRedrawRegion());
960*b1cdbd2cSJim Jagielski
961*b1cdbd2cSJim Jagielski // output PreRendering
962*b1cdbd2cSJim Jagielski rPaintWindow.OutputPreRenderDevice(rPaintWindow.GetRedrawRegion());
963*b1cdbd2cSJim Jagielski }
964*b1cdbd2cSJim Jagielski }
965*b1cdbd2cSJim Jagielski
966*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
967*b1cdbd2cSJim Jagielski
BeginDrawLayers(OutputDevice * pOut,const Region & rReg,bool bDisableIntersect)968*b1cdbd2cSJim Jagielski SdrPaintWindow* SdrPaintView::BeginDrawLayers(OutputDevice* pOut, const Region& rReg, bool bDisableIntersect)
969*b1cdbd2cSJim Jagielski {
970*b1cdbd2cSJim Jagielski // #i74769# use BeginCompleteRedraw() as common base
971*b1cdbd2cSJim Jagielski SdrPaintWindow* pPaintWindow = BeginCompleteRedraw(pOut);
972*b1cdbd2cSJim Jagielski OSL_ENSURE(pPaintWindow, "SdrPaintView::BeginDrawLayers: No SdrPaintWindow (!)");
973*b1cdbd2cSJim Jagielski
974*b1cdbd2cSJim Jagielski if(mpPageView)
975*b1cdbd2cSJim Jagielski {
976*b1cdbd2cSJim Jagielski SdrPageWindow* pKnownTarget = mpPageView->FindPageWindow(*pPaintWindow);
977*b1cdbd2cSJim Jagielski
978*b1cdbd2cSJim Jagielski if(pKnownTarget)
979*b1cdbd2cSJim Jagielski {
980*b1cdbd2cSJim Jagielski // #i74769# check if pOut is a win and has a ClipRegion. If Yes, the Region
981*b1cdbd2cSJim Jagielski // rReg may be made more granular (fine) with using it. Normally, rReg
982*b1cdbd2cSJim Jagielski // does come from Window::Paint() anyways and thus is based on a single
983*b1cdbd2cSJim Jagielski // rectangle which was derived from exactly that repaint region
984*b1cdbd2cSJim Jagielski Region aOptimizedRepaintRegion(rReg);
985*b1cdbd2cSJim Jagielski
986*b1cdbd2cSJim Jagielski // #i76114# Intersecting the region with the Window's paint region is disabled
987*b1cdbd2cSJim Jagielski // for print preview in Calc, because the intersection can be empty (if the paint
988*b1cdbd2cSJim Jagielski // region is outside of the table area of the page), and then no clip region
989*b1cdbd2cSJim Jagielski // would be set.
990*b1cdbd2cSJim Jagielski if(pOut && OUTDEV_WINDOW == pOut->GetOutDevType() && !bDisableIntersect)
991*b1cdbd2cSJim Jagielski {
992*b1cdbd2cSJim Jagielski Window* pWindow = (Window*)pOut;
993*b1cdbd2cSJim Jagielski
994*b1cdbd2cSJim Jagielski if(pWindow->IsInPaint())
995*b1cdbd2cSJim Jagielski {
996*b1cdbd2cSJim Jagielski if(!pWindow->GetPaintRegion().IsEmpty())
997*b1cdbd2cSJim Jagielski {
998*b1cdbd2cSJim Jagielski aOptimizedRepaintRegion.Intersect(pWindow->GetPaintRegion());
999*b1cdbd2cSJim Jagielski
1000*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
1001*b1cdbd2cSJim Jagielski // #i74769# test-paint repaint region
1002*b1cdbd2cSJim Jagielski static bool bDoPaintForVisualControl(false);
1003*b1cdbd2cSJim Jagielski
1004*b1cdbd2cSJim Jagielski if(bDoPaintForVisualControl)
1005*b1cdbd2cSJim Jagielski {
1006*b1cdbd2cSJim Jagielski RectangleVector aRectangles;
1007*b1cdbd2cSJim Jagielski aOptimizedRepaintRegion.GetRegionRectangles(aRectangles);
1008*b1cdbd2cSJim Jagielski
1009*b1cdbd2cSJim Jagielski pWindow->SetLineColor(COL_LIGHTGREEN);
1010*b1cdbd2cSJim Jagielski pWindow->SetFillColor();
1011*b1cdbd2cSJim Jagielski
1012*b1cdbd2cSJim Jagielski for(RectangleVector::const_iterator aRectIter(aRectangles.begin()); aRectIter != aRectangles.end(); aRectIter++)
1013*b1cdbd2cSJim Jagielski {
1014*b1cdbd2cSJim Jagielski pWindow->DrawRect(*aRectIter);
1015*b1cdbd2cSJim Jagielski }
1016*b1cdbd2cSJim Jagielski
1017*b1cdbd2cSJim Jagielski //RegionHandle aRegionHandle(aOptimizedRepaintRegion.BeginEnumRects());
1018*b1cdbd2cSJim Jagielski //Rectangle aRegionRectangle;
1019*b1cdbd2cSJim Jagielski //
1020*b1cdbd2cSJim Jagielski //while(aOptimizedRepaintRegion.GetEnumRects(aRegionHandle, aRegionRectangle))
1021*b1cdbd2cSJim Jagielski //{
1022*b1cdbd2cSJim Jagielski // pWindow->SetLineColor(COL_LIGHTGREEN);
1023*b1cdbd2cSJim Jagielski // pWindow->SetFillColor();
1024*b1cdbd2cSJim Jagielski // pWindow->DrawRect(aRegionRectangle);
1025*b1cdbd2cSJim Jagielski //}
1026*b1cdbd2cSJim Jagielski //
1027*b1cdbd2cSJim Jagielski //aOptimizedRepaintRegion.EndEnumRects(aRegionHandle);
1028*b1cdbd2cSJim Jagielski }
1029*b1cdbd2cSJim Jagielski #endif
1030*b1cdbd2cSJim Jagielski }
1031*b1cdbd2cSJim Jagielski }
1032*b1cdbd2cSJim Jagielski }
1033*b1cdbd2cSJim Jagielski
1034*b1cdbd2cSJim Jagielski // prepare redraw
1035*b1cdbd2cSJim Jagielski pKnownTarget->PrepareRedraw(aOptimizedRepaintRegion);
1036*b1cdbd2cSJim Jagielski
1037*b1cdbd2cSJim Jagielski // remember prepared SdrPageWindow
1038*b1cdbd2cSJim Jagielski mpPageView->setPreparedPageWindow(pKnownTarget);
1039*b1cdbd2cSJim Jagielski }
1040*b1cdbd2cSJim Jagielski }
1041*b1cdbd2cSJim Jagielski
1042*b1cdbd2cSJim Jagielski return pPaintWindow;
1043*b1cdbd2cSJim Jagielski }
1044*b1cdbd2cSJim Jagielski
EndDrawLayers(SdrPaintWindow & rPaintWindow,bool bPaintFormLayer)1045*b1cdbd2cSJim Jagielski void SdrPaintView::EndDrawLayers(SdrPaintWindow& rPaintWindow, bool bPaintFormLayer)
1046*b1cdbd2cSJim Jagielski {
1047*b1cdbd2cSJim Jagielski // #i74769# use EndCompleteRedraw() as common base
1048*b1cdbd2cSJim Jagielski EndCompleteRedraw(rPaintWindow, bPaintFormLayer);
1049*b1cdbd2cSJim Jagielski
1050*b1cdbd2cSJim Jagielski if(mpPageView)
1051*b1cdbd2cSJim Jagielski {
1052*b1cdbd2cSJim Jagielski // forget prepared SdrPageWindow
1053*b1cdbd2cSJim Jagielski mpPageView->setPreparedPageWindow(0);
1054*b1cdbd2cSJim Jagielski }
1055*b1cdbd2cSJim Jagielski }
1056*b1cdbd2cSJim Jagielski
1057*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
1058*b1cdbd2cSJim Jagielski
ImpFormLayerDrawing(SdrPaintWindow & rPaintWindow) const1059*b1cdbd2cSJim Jagielski void SdrPaintView::ImpFormLayerDrawing(SdrPaintWindow& rPaintWindow) const
1060*b1cdbd2cSJim Jagielski {
1061*b1cdbd2cSJim Jagielski if(mpPageView)
1062*b1cdbd2cSJim Jagielski {
1063*b1cdbd2cSJim Jagielski SdrPageWindow* pKnownTarget = mpPageView->FindPageWindow(rPaintWindow);
1064*b1cdbd2cSJim Jagielski
1065*b1cdbd2cSJim Jagielski if(pKnownTarget)
1066*b1cdbd2cSJim Jagielski {
1067*b1cdbd2cSJim Jagielski const SdrModel& rModel = *(GetModel());
1068*b1cdbd2cSJim Jagielski const SdrLayerAdmin& rLayerAdmin = rModel.GetLayerAdmin();
1069*b1cdbd2cSJim Jagielski const SdrLayerID nControlLayerId = rLayerAdmin.GetLayerID(rLayerAdmin.GetControlLayerName(), sal_False);
1070*b1cdbd2cSJim Jagielski
1071*b1cdbd2cSJim Jagielski // BUFFERED use GetTargetOutputDevice() now, it may be targeted to VDevs, too
1072*b1cdbd2cSJim Jagielski // need to set PreparedPageWindow to make DrawLayer use the correct ObjectContact
1073*b1cdbd2cSJim Jagielski mpPageView->setPreparedPageWindow(pKnownTarget);
1074*b1cdbd2cSJim Jagielski mpPageView->DrawLayer(nControlLayerId, &rPaintWindow.GetTargetOutputDevice());
1075*b1cdbd2cSJim Jagielski mpPageView->setPreparedPageWindow(0);
1076*b1cdbd2cSJim Jagielski }
1077*b1cdbd2cSJim Jagielski }
1078*b1cdbd2cSJim Jagielski }
1079*b1cdbd2cSJim Jagielski
1080*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
1081*b1cdbd2cSJim Jagielski
KeyInput(const KeyEvent &,Window *)1082*b1cdbd2cSJim Jagielski sal_Bool SdrPaintView::KeyInput(const KeyEvent& /*rKEvt*/, Window* /*pWin*/)
1083*b1cdbd2cSJim Jagielski {
1084*b1cdbd2cSJim Jagielski return sal_False;
1085*b1cdbd2cSJim Jagielski }
1086*b1cdbd2cSJim Jagielski
GlueInvalidate() const1087*b1cdbd2cSJim Jagielski void SdrPaintView::GlueInvalidate() const
1088*b1cdbd2cSJim Jagielski {
1089*b1cdbd2cSJim Jagielski const sal_uInt32 nWindowCount(PaintWindowCount());
1090*b1cdbd2cSJim Jagielski
1091*b1cdbd2cSJim Jagielski for(sal_uInt32 nWinNum(0L); nWinNum < nWindowCount; nWinNum++)
1092*b1cdbd2cSJim Jagielski {
1093*b1cdbd2cSJim Jagielski SdrPaintWindow* pPaintWindow = GetPaintWindow(nWinNum);
1094*b1cdbd2cSJim Jagielski
1095*b1cdbd2cSJim Jagielski if(pPaintWindow->OutputToWindow())
1096*b1cdbd2cSJim Jagielski {
1097*b1cdbd2cSJim Jagielski OutputDevice& rOutDev = pPaintWindow->GetOutputDevice();
1098*b1cdbd2cSJim Jagielski
1099*b1cdbd2cSJim Jagielski if(mpPageView)
1100*b1cdbd2cSJim Jagielski {
1101*b1cdbd2cSJim Jagielski const SdrObjList* pOL=mpPageView->GetObjList();
1102*b1cdbd2cSJim Jagielski sal_uIntPtr nObjAnz=pOL->GetObjCount();
1103*b1cdbd2cSJim Jagielski for (sal_uIntPtr nObjNum=0; nObjNum<nObjAnz; nObjNum++) {
1104*b1cdbd2cSJim Jagielski const SdrObject* pObj=pOL->GetObj(nObjNum);
1105*b1cdbd2cSJim Jagielski const SdrGluePointList* pGPL=pObj->GetGluePointList();
1106*b1cdbd2cSJim Jagielski if (pGPL!=NULL && pGPL->GetCount()!=0) {
1107*b1cdbd2cSJim Jagielski pGPL->Invalidate((Window&)rOutDev, pObj);
1108*b1cdbd2cSJim Jagielski }
1109*b1cdbd2cSJim Jagielski }
1110*b1cdbd2cSJim Jagielski }
1111*b1cdbd2cSJim Jagielski }
1112*b1cdbd2cSJim Jagielski }
1113*b1cdbd2cSJim Jagielski }
1114*b1cdbd2cSJim Jagielski
InvalidateAllWin()1115*b1cdbd2cSJim Jagielski void SdrPaintView::InvalidateAllWin()
1116*b1cdbd2cSJim Jagielski {
1117*b1cdbd2cSJim Jagielski const sal_uInt32 nWindowCount(PaintWindowCount());
1118*b1cdbd2cSJim Jagielski
1119*b1cdbd2cSJim Jagielski for(sal_uInt32 a(0L); a < nWindowCount; a++)
1120*b1cdbd2cSJim Jagielski {
1121*b1cdbd2cSJim Jagielski SdrPaintWindow* pPaintWindow = GetPaintWindow(a);
1122*b1cdbd2cSJim Jagielski
1123*b1cdbd2cSJim Jagielski if(pPaintWindow->OutputToWindow())
1124*b1cdbd2cSJim Jagielski {
1125*b1cdbd2cSJim Jagielski InvalidateOneWin((Window&)pPaintWindow->GetOutputDevice());
1126*b1cdbd2cSJim Jagielski }
1127*b1cdbd2cSJim Jagielski }
1128*b1cdbd2cSJim Jagielski }
1129*b1cdbd2cSJim Jagielski
InvalidateAllWin(const Rectangle & rRect,sal_Bool bPlus1Pix)1130*b1cdbd2cSJim Jagielski void SdrPaintView::InvalidateAllWin(const Rectangle& rRect, sal_Bool bPlus1Pix)
1131*b1cdbd2cSJim Jagielski {
1132*b1cdbd2cSJim Jagielski const sal_uInt32 nWindowCount(PaintWindowCount());
1133*b1cdbd2cSJim Jagielski
1134*b1cdbd2cSJim Jagielski for(sal_uInt32 a(0L); a < nWindowCount; a++)
1135*b1cdbd2cSJim Jagielski {
1136*b1cdbd2cSJim Jagielski SdrPaintWindow* pPaintWindow = GetPaintWindow(a);
1137*b1cdbd2cSJim Jagielski
1138*b1cdbd2cSJim Jagielski if(pPaintWindow->OutputToWindow())
1139*b1cdbd2cSJim Jagielski {
1140*b1cdbd2cSJim Jagielski OutputDevice& rOutDev = pPaintWindow->GetOutputDevice();
1141*b1cdbd2cSJim Jagielski Rectangle aRect(rRect);
1142*b1cdbd2cSJim Jagielski
1143*b1cdbd2cSJim Jagielski if(bPlus1Pix)
1144*b1cdbd2cSJim Jagielski {
1145*b1cdbd2cSJim Jagielski Size aPixSiz(1,1);
1146*b1cdbd2cSJim Jagielski Size aSiz(rOutDev.PixelToLogic(aPixSiz));
1147*b1cdbd2cSJim Jagielski aRect.Left ()-=aSiz.Width();
1148*b1cdbd2cSJim Jagielski aRect.Top ()-=aSiz.Height();
1149*b1cdbd2cSJim Jagielski aRect.Right ()+=aSiz.Width();
1150*b1cdbd2cSJim Jagielski aRect.Bottom()+=aSiz.Height();
1151*b1cdbd2cSJim Jagielski }
1152*b1cdbd2cSJim Jagielski
1153*b1cdbd2cSJim Jagielski Point aOrg(rOutDev.GetMapMode().GetOrigin());
1154*b1cdbd2cSJim Jagielski aOrg.X()=-aOrg.X(); aOrg.Y()=-aOrg.Y();
1155*b1cdbd2cSJim Jagielski Rectangle aOutRect(aOrg, rOutDev.GetOutputSize());
1156*b1cdbd2cSJim Jagielski
1157*b1cdbd2cSJim Jagielski if (aRect.IsOver(aOutRect))
1158*b1cdbd2cSJim Jagielski {
1159*b1cdbd2cSJim Jagielski InvalidateOneWin((Window&)rOutDev, aRect);
1160*b1cdbd2cSJim Jagielski }
1161*b1cdbd2cSJim Jagielski }
1162*b1cdbd2cSJim Jagielski }
1163*b1cdbd2cSJim Jagielski }
1164*b1cdbd2cSJim Jagielski
InvalidateOneWin(Window & rWin)1165*b1cdbd2cSJim Jagielski void SdrPaintView::InvalidateOneWin(Window& rWin)
1166*b1cdbd2cSJim Jagielski {
1167*b1cdbd2cSJim Jagielski // #111096#
1168*b1cdbd2cSJim Jagielski // do not erase background, that causes flicker (!)
1169*b1cdbd2cSJim Jagielski rWin.Invalidate(INVALIDATE_NOERASE);
1170*b1cdbd2cSJim Jagielski }
1171*b1cdbd2cSJim Jagielski
InvalidateOneWin(Window & rWin,const Rectangle & rRect)1172*b1cdbd2cSJim Jagielski void SdrPaintView::InvalidateOneWin(Window& rWin, const Rectangle& rRect)
1173*b1cdbd2cSJim Jagielski {
1174*b1cdbd2cSJim Jagielski // #111096#
1175*b1cdbd2cSJim Jagielski // do not erase background, that causes flicker (!)
1176*b1cdbd2cSJim Jagielski rWin.Invalidate(rRect, INVALIDATE_NOERASE);
1177*b1cdbd2cSJim Jagielski }
1178*b1cdbd2cSJim Jagielski
LeaveOneGroup()1179*b1cdbd2cSJim Jagielski void SdrPaintView::LeaveOneGroup()
1180*b1cdbd2cSJim Jagielski {
1181*b1cdbd2cSJim Jagielski if(mpPageView)
1182*b1cdbd2cSJim Jagielski {
1183*b1cdbd2cSJim Jagielski mpPageView->LeaveOneGroup();
1184*b1cdbd2cSJim Jagielski }
1185*b1cdbd2cSJim Jagielski }
1186*b1cdbd2cSJim Jagielski
LeaveAllGroup()1187*b1cdbd2cSJim Jagielski void SdrPaintView::LeaveAllGroup()
1188*b1cdbd2cSJim Jagielski {
1189*b1cdbd2cSJim Jagielski if(mpPageView)
1190*b1cdbd2cSJim Jagielski {
1191*b1cdbd2cSJim Jagielski mpPageView->LeaveAllGroup();
1192*b1cdbd2cSJim Jagielski }
1193*b1cdbd2cSJim Jagielski }
1194*b1cdbd2cSJim Jagielski
IsGroupEntered() const1195*b1cdbd2cSJim Jagielski bool SdrPaintView::IsGroupEntered() const
1196*b1cdbd2cSJim Jagielski {
1197*b1cdbd2cSJim Jagielski if(mpPageView)
1198*b1cdbd2cSJim Jagielski {
1199*b1cdbd2cSJim Jagielski return (mpPageView->GetEnteredLevel() != 0);
1200*b1cdbd2cSJim Jagielski }
1201*b1cdbd2cSJim Jagielski
1202*b1cdbd2cSJim Jagielski return false;
1203*b1cdbd2cSJim Jagielski }
1204*b1cdbd2cSJim Jagielski
SetNotPersistDefaultAttr(const SfxItemSet & rAttr,sal_Bool)1205*b1cdbd2cSJim Jagielski void SdrPaintView::SetNotPersistDefaultAttr(const SfxItemSet& rAttr, sal_Bool /*bReplaceAll*/)
1206*b1cdbd2cSJim Jagielski {
1207*b1cdbd2cSJim Jagielski // bReplaceAll hat hier keinerlei Wirkung
1208*b1cdbd2cSJim Jagielski sal_Bool bMeasure=ISA(SdrView) && ((SdrView*)this)->IsMeasureTool();
1209*b1cdbd2cSJim Jagielski const SfxPoolItem *pPoolItem=NULL;
1210*b1cdbd2cSJim Jagielski if (rAttr.GetItemState(SDRATTR_LAYERID,sal_True,&pPoolItem)==SFX_ITEM_SET) {
1211*b1cdbd2cSJim Jagielski SdrLayerID nLayerId=((const SdrLayerIdItem*)pPoolItem)->GetValue();
1212*b1cdbd2cSJim Jagielski const SdrLayer* pLayer=pMod->GetLayerAdmin().GetLayerPerID(nLayerId);
1213*b1cdbd2cSJim Jagielski if (pLayer!=NULL) {
1214*b1cdbd2cSJim Jagielski if (bMeasure) aMeasureLayer=pLayer->GetName();
1215*b1cdbd2cSJim Jagielski else aAktLayer=pLayer->GetName();
1216*b1cdbd2cSJim Jagielski }
1217*b1cdbd2cSJim Jagielski }
1218*b1cdbd2cSJim Jagielski if (rAttr.GetItemState(SDRATTR_LAYERNAME,sal_True,&pPoolItem)==SFX_ITEM_SET) {
1219*b1cdbd2cSJim Jagielski if (bMeasure) aMeasureLayer=((const SdrLayerNameItem*)pPoolItem)->GetValue();
1220*b1cdbd2cSJim Jagielski else aAktLayer=((const SdrLayerNameItem*)pPoolItem)->GetValue();
1221*b1cdbd2cSJim Jagielski }
1222*b1cdbd2cSJim Jagielski }
1223*b1cdbd2cSJim Jagielski
MergeNotPersistDefaultAttr(SfxItemSet & rAttr,sal_Bool) const1224*b1cdbd2cSJim Jagielski void SdrPaintView::MergeNotPersistDefaultAttr(SfxItemSet& rAttr, sal_Bool /*bOnlyHardAttr*/) const
1225*b1cdbd2cSJim Jagielski {
1226*b1cdbd2cSJim Jagielski // bOnlyHardAttr hat hier keinerlei Wirkung
1227*b1cdbd2cSJim Jagielski sal_Bool bMeasure=ISA(SdrView) && ((SdrView*)this)->IsMeasureTool();
1228*b1cdbd2cSJim Jagielski const XubString& aNam=bMeasure?aMeasureLayer:aAktLayer;
1229*b1cdbd2cSJim Jagielski rAttr.Put(SdrLayerNameItem(aNam));
1230*b1cdbd2cSJim Jagielski SdrLayerID nLayer=pMod->GetLayerAdmin().GetLayerID(aNam,sal_True);
1231*b1cdbd2cSJim Jagielski if (nLayer!=SDRLAYER_NOTFOUND) {
1232*b1cdbd2cSJim Jagielski rAttr.Put(SdrLayerIdItem(nLayer));
1233*b1cdbd2cSJim Jagielski }
1234*b1cdbd2cSJim Jagielski }
1235*b1cdbd2cSJim Jagielski
SetDefaultAttr(const SfxItemSet & rAttr,sal_Bool bReplaceAll)1236*b1cdbd2cSJim Jagielski void SdrPaintView::SetDefaultAttr(const SfxItemSet& rAttr, sal_Bool bReplaceAll)
1237*b1cdbd2cSJim Jagielski {
1238*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
1239*b1cdbd2cSJim Jagielski {
1240*b1cdbd2cSJim Jagielski sal_Bool bHasEEFeatureItems=sal_False;
1241*b1cdbd2cSJim Jagielski SfxItemIter aIter(rAttr);
1242*b1cdbd2cSJim Jagielski const SfxPoolItem* pItem=aIter.FirstItem();
1243*b1cdbd2cSJim Jagielski while (!bHasEEFeatureItems && pItem!=NULL) {
1244*b1cdbd2cSJim Jagielski if (!IsInvalidItem(pItem)) {
1245*b1cdbd2cSJim Jagielski sal_uInt16 nW=pItem->Which();
1246*b1cdbd2cSJim Jagielski if (nW>=EE_FEATURE_START && nW<=EE_FEATURE_END) bHasEEFeatureItems=sal_True;
1247*b1cdbd2cSJim Jagielski }
1248*b1cdbd2cSJim Jagielski pItem=aIter.NextItem();
1249*b1cdbd2cSJim Jagielski }
1250*b1cdbd2cSJim Jagielski
1251*b1cdbd2cSJim Jagielski if(bHasEEFeatureItems)
1252*b1cdbd2cSJim Jagielski {
1253*b1cdbd2cSJim Jagielski String aMessage;
1254*b1cdbd2cSJim Jagielski aMessage.AppendAscii("SdrPaintView::SetDefaultAttr(): Das setzen von EE_FEATURE-Items an der SdrView macht keinen Sinn! Es fuehrt nur zu Overhead und nicht mehr lesbaren Dokumenten.");
1255*b1cdbd2cSJim Jagielski InfoBox(NULL, aMessage).Execute();
1256*b1cdbd2cSJim Jagielski }
1257*b1cdbd2cSJim Jagielski }
1258*b1cdbd2cSJim Jagielski #endif
1259*b1cdbd2cSJim Jagielski if (bReplaceAll) aDefaultAttr.Set(rAttr);
1260*b1cdbd2cSJim Jagielski else aDefaultAttr.Put(rAttr,sal_False); // FALSE= InvalidItems nicht als Default, sondern als "Loecher" betrachten
1261*b1cdbd2cSJim Jagielski SetNotPersistDefaultAttr(rAttr,bReplaceAll);
1262*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
1263*b1cdbd2cSJim Jagielski if (pItemBrowser!=NULL) pItemBrowser->SetDirty();
1264*b1cdbd2cSJim Jagielski #endif
1265*b1cdbd2cSJim Jagielski }
1266*b1cdbd2cSJim Jagielski
SetDefaultStyleSheet(SfxStyleSheet * pStyleSheet,sal_Bool bDontRemoveHardAttr)1267*b1cdbd2cSJim Jagielski void SdrPaintView::SetDefaultStyleSheet(SfxStyleSheet* pStyleSheet, sal_Bool bDontRemoveHardAttr)
1268*b1cdbd2cSJim Jagielski {
1269*b1cdbd2cSJim Jagielski if (pDefaultStyleSheet)
1270*b1cdbd2cSJim Jagielski EndListening(*pDefaultStyleSheet);
1271*b1cdbd2cSJim Jagielski pDefaultStyleSheet=pStyleSheet;
1272*b1cdbd2cSJim Jagielski if (pDefaultStyleSheet)
1273*b1cdbd2cSJim Jagielski StartListening(*pDefaultStyleSheet);
1274*b1cdbd2cSJim Jagielski
1275*b1cdbd2cSJim Jagielski if (pStyleSheet!=NULL && !bDontRemoveHardAttr) {
1276*b1cdbd2cSJim Jagielski SfxWhichIter aIter(pStyleSheet->GetItemSet());
1277*b1cdbd2cSJim Jagielski sal_uInt16 nWhich=aIter.FirstWhich();
1278*b1cdbd2cSJim Jagielski while (nWhich!=0) {
1279*b1cdbd2cSJim Jagielski if (pStyleSheet->GetItemSet().GetItemState(nWhich,sal_True)==SFX_ITEM_SET) {
1280*b1cdbd2cSJim Jagielski aDefaultAttr.ClearItem(nWhich);
1281*b1cdbd2cSJim Jagielski }
1282*b1cdbd2cSJim Jagielski nWhich=aIter.NextWhich();
1283*b1cdbd2cSJim Jagielski }
1284*b1cdbd2cSJim Jagielski }
1285*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
1286*b1cdbd2cSJim Jagielski if (pItemBrowser!=NULL) pItemBrowser->SetDirty();
1287*b1cdbd2cSJim Jagielski #endif
1288*b1cdbd2cSJim Jagielski }
1289*b1cdbd2cSJim Jagielski
1290*b1cdbd2cSJim Jagielski /* new interface src537 */
GetAttributes(SfxItemSet & rTargetSet,sal_Bool bOnlyHardAttr) const1291*b1cdbd2cSJim Jagielski sal_Bool SdrPaintView::GetAttributes(SfxItemSet& rTargetSet, sal_Bool bOnlyHardAttr) const
1292*b1cdbd2cSJim Jagielski {
1293*b1cdbd2cSJim Jagielski if(bOnlyHardAttr || !pDefaultStyleSheet)
1294*b1cdbd2cSJim Jagielski {
1295*b1cdbd2cSJim Jagielski rTargetSet.Put(aDefaultAttr, sal_False);
1296*b1cdbd2cSJim Jagielski }
1297*b1cdbd2cSJim Jagielski else
1298*b1cdbd2cSJim Jagielski {
1299*b1cdbd2cSJim Jagielski // sonst DefStyleSheet dazumergen
1300*b1cdbd2cSJim Jagielski rTargetSet.Put(pDefaultStyleSheet->GetItemSet(), sal_False);
1301*b1cdbd2cSJim Jagielski rTargetSet.Put(aDefaultAttr, sal_False);
1302*b1cdbd2cSJim Jagielski }
1303*b1cdbd2cSJim Jagielski MergeNotPersistDefaultAttr(rTargetSet, bOnlyHardAttr);
1304*b1cdbd2cSJim Jagielski return sal_True;
1305*b1cdbd2cSJim Jagielski }
1306*b1cdbd2cSJim Jagielski
SetAttributes(const SfxItemSet & rSet,sal_Bool bReplaceAll)1307*b1cdbd2cSJim Jagielski sal_Bool SdrPaintView::SetAttributes(const SfxItemSet& rSet, sal_Bool bReplaceAll)
1308*b1cdbd2cSJim Jagielski {
1309*b1cdbd2cSJim Jagielski SetDefaultAttr(rSet,bReplaceAll);
1310*b1cdbd2cSJim Jagielski return sal_True;
1311*b1cdbd2cSJim Jagielski }
1312*b1cdbd2cSJim Jagielski
GetStyleSheet() const1313*b1cdbd2cSJim Jagielski SfxStyleSheet* SdrPaintView::GetStyleSheet() const // SfxStyleSheet* SdrPaintView::GetStyleSheet(sal_Bool& rOk) const
1314*b1cdbd2cSJim Jagielski {
1315*b1cdbd2cSJim Jagielski //rOk=sal_True;
1316*b1cdbd2cSJim Jagielski return GetDefaultStyleSheet();
1317*b1cdbd2cSJim Jagielski }
1318*b1cdbd2cSJim Jagielski
SetStyleSheet(SfxStyleSheet * pStyleSheet,sal_Bool bDontRemoveHardAttr)1319*b1cdbd2cSJim Jagielski sal_Bool SdrPaintView::SetStyleSheet(SfxStyleSheet* pStyleSheet, sal_Bool bDontRemoveHardAttr)
1320*b1cdbd2cSJim Jagielski {
1321*b1cdbd2cSJim Jagielski SetDefaultStyleSheet(pStyleSheet,bDontRemoveHardAttr);
1322*b1cdbd2cSJim Jagielski return sal_True;
1323*b1cdbd2cSJim Jagielski }
1324*b1cdbd2cSJim Jagielski
1325*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
1326*b1cdbd2cSJim Jagielski
1327*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
ShowItemBrowser(sal_Bool bShow)1328*b1cdbd2cSJim Jagielski void SdrPaintView::ShowItemBrowser(sal_Bool bShow)
1329*b1cdbd2cSJim Jagielski {
1330*b1cdbd2cSJim Jagielski if (bShow) {
1331*b1cdbd2cSJim Jagielski if (pItemBrowser==NULL) {
1332*b1cdbd2cSJim Jagielski pItemBrowser=new SdrItemBrowser(*(SdrView*)this);
1333*b1cdbd2cSJim Jagielski pItemBrowser->SetFloatingMode(sal_True);
1334*b1cdbd2cSJim Jagielski }
1335*b1cdbd2cSJim Jagielski pItemBrowser->Show();
1336*b1cdbd2cSJim Jagielski pItemBrowser->GrabFocus();
1337*b1cdbd2cSJim Jagielski } else {
1338*b1cdbd2cSJim Jagielski if (pItemBrowser!=NULL) {
1339*b1cdbd2cSJim Jagielski pItemBrowser->Hide();
1340*b1cdbd2cSJim Jagielski delete pItemBrowser;
1341*b1cdbd2cSJim Jagielski pItemBrowser=NULL;
1342*b1cdbd2cSJim Jagielski }
1343*b1cdbd2cSJim Jagielski }
1344*b1cdbd2cSJim Jagielski }
1345*b1cdbd2cSJim Jagielski #endif
1346*b1cdbd2cSJim Jagielski
MakeVisible(const Rectangle & rRect,Window & rWin)1347*b1cdbd2cSJim Jagielski void SdrPaintView::MakeVisible(const Rectangle& rRect, Window& rWin)
1348*b1cdbd2cSJim Jagielski {
1349*b1cdbd2cSJim Jagielski MapMode aMap(rWin.GetMapMode());
1350*b1cdbd2cSJim Jagielski Size aActualSize(rWin.GetOutputSize());
1351*b1cdbd2cSJim Jagielski
1352*b1cdbd2cSJim Jagielski if( aActualSize.Height() > 0 && aActualSize.Width() > 0 )
1353*b1cdbd2cSJim Jagielski {
1354*b1cdbd2cSJim Jagielski Size aNewSize(rRect.GetSize());
1355*b1cdbd2cSJim Jagielski sal_Bool bNewScale=sal_False;
1356*b1cdbd2cSJim Jagielski sal_Bool bNeedMoreX=aNewSize.Width()>aActualSize.Width();
1357*b1cdbd2cSJim Jagielski sal_Bool bNeedMoreY=aNewSize.Height()>aActualSize.Height();
1358*b1cdbd2cSJim Jagielski if (bNeedMoreX || bNeedMoreY)
1359*b1cdbd2cSJim Jagielski {
1360*b1cdbd2cSJim Jagielski bNewScale=sal_True;
1361*b1cdbd2cSJim Jagielski // Neuen MapMode (Size+Org) setzen und dabei alles invalidieren
1362*b1cdbd2cSJim Jagielski Fraction aXFact(aNewSize.Width(),aActualSize.Width());
1363*b1cdbd2cSJim Jagielski Fraction aYFact(aNewSize.Height(),aActualSize.Height());
1364*b1cdbd2cSJim Jagielski if (aYFact>aXFact) aXFact=aYFact;
1365*b1cdbd2cSJim Jagielski aXFact*=aMap.GetScaleX();
1366*b1cdbd2cSJim Jagielski aXFact.ReduceInaccurate(10); // Um Ueberlaeufe und BigInt-Mapping zu vermeiden
1367*b1cdbd2cSJim Jagielski aMap.SetScaleX(aXFact);
1368*b1cdbd2cSJim Jagielski aMap.SetScaleY(aYFact);
1369*b1cdbd2cSJim Jagielski rWin.SetMapMode(aMap);
1370*b1cdbd2cSJim Jagielski aActualSize=rWin.GetOutputSize();
1371*b1cdbd2cSJim Jagielski }
1372*b1cdbd2cSJim Jagielski Point aOrg(aMap.GetOrigin());
1373*b1cdbd2cSJim Jagielski long dx=0,dy=0;
1374*b1cdbd2cSJim Jagielski long l=-aOrg.X();
1375*b1cdbd2cSJim Jagielski long r=-aOrg.X()+aActualSize.Width()-1;
1376*b1cdbd2cSJim Jagielski long o=-aOrg.Y();
1377*b1cdbd2cSJim Jagielski long u=-aOrg.Y()+aActualSize.Height()-1;
1378*b1cdbd2cSJim Jagielski if (l>rRect.Left()) dx=rRect.Left()-l;
1379*b1cdbd2cSJim Jagielski else if (r<rRect.Right()) dx=rRect.Right()-r;
1380*b1cdbd2cSJim Jagielski if (o>rRect.Top()) dy=rRect.Top()-o;
1381*b1cdbd2cSJim Jagielski else if (u<rRect.Bottom()) dy=rRect.Bottom()-u;
1382*b1cdbd2cSJim Jagielski aMap.SetOrigin(Point(aOrg.X()-dx,aOrg.Y()-dy));
1383*b1cdbd2cSJim Jagielski if (!bNewScale) {
1384*b1cdbd2cSJim Jagielski if (dx!=0 || dy!=0) {
1385*b1cdbd2cSJim Jagielski rWin.Scroll(-dx,-dy);
1386*b1cdbd2cSJim Jagielski rWin.SetMapMode(aMap);
1387*b1cdbd2cSJim Jagielski rWin.Update();
1388*b1cdbd2cSJim Jagielski }
1389*b1cdbd2cSJim Jagielski } else {
1390*b1cdbd2cSJim Jagielski rWin.SetMapMode(aMap);
1391*b1cdbd2cSJim Jagielski InvalidateOneWin(rWin);
1392*b1cdbd2cSJim Jagielski }
1393*b1cdbd2cSJim Jagielski }
1394*b1cdbd2cSJim Jagielski }
1395*b1cdbd2cSJim Jagielski
DoConnect(SdrOle2Obj *)1396*b1cdbd2cSJim Jagielski void SdrPaintView::DoConnect(SdrOle2Obj* /*pOleObj*/)
1397*b1cdbd2cSJim Jagielski {
1398*b1cdbd2cSJim Jagielski }
1399*b1cdbd2cSJim Jagielski
SetAnimationEnabled(sal_Bool bEnable)1400*b1cdbd2cSJim Jagielski void SdrPaintView::SetAnimationEnabled( sal_Bool bEnable )
1401*b1cdbd2cSJim Jagielski {
1402*b1cdbd2cSJim Jagielski SetAnimationMode( bEnable ? SDR_ANIMATION_ANIMATE : SDR_ANIMATION_DISABLE );
1403*b1cdbd2cSJim Jagielski }
1404*b1cdbd2cSJim Jagielski
SetAnimationPause(bool bSet)1405*b1cdbd2cSJim Jagielski void SdrPaintView::SetAnimationPause( bool bSet )
1406*b1cdbd2cSJim Jagielski {
1407*b1cdbd2cSJim Jagielski if((bool)bAnimationPause != bSet)
1408*b1cdbd2cSJim Jagielski {
1409*b1cdbd2cSJim Jagielski bAnimationPause = bSet;
1410*b1cdbd2cSJim Jagielski
1411*b1cdbd2cSJim Jagielski if(mpPageView)
1412*b1cdbd2cSJim Jagielski {
1413*b1cdbd2cSJim Jagielski for(sal_uInt32 b(0L); b < mpPageView->PageWindowCount(); b++)
1414*b1cdbd2cSJim Jagielski {
1415*b1cdbd2cSJim Jagielski const SdrPageWindow& rPageWindow = *(mpPageView->GetPageWindow(b));
1416*b1cdbd2cSJim Jagielski sdr::contact::ObjectContact& rObjectContact = rPageWindow.GetObjectContact();
1417*b1cdbd2cSJim Jagielski sdr::animation::primitiveAnimator& rAnimator = rObjectContact.getPrimitiveAnimator();
1418*b1cdbd2cSJim Jagielski
1419*b1cdbd2cSJim Jagielski if(rAnimator.IsPaused() != bSet)
1420*b1cdbd2cSJim Jagielski {
1421*b1cdbd2cSJim Jagielski rAnimator.SetPaused(bSet);
1422*b1cdbd2cSJim Jagielski }
1423*b1cdbd2cSJim Jagielski }
1424*b1cdbd2cSJim Jagielski }
1425*b1cdbd2cSJim Jagielski }
1426*b1cdbd2cSJim Jagielski }
1427*b1cdbd2cSJim Jagielski
SetAnimationMode(const SdrAnimationMode eMode)1428*b1cdbd2cSJim Jagielski void SdrPaintView::SetAnimationMode( const SdrAnimationMode eMode )
1429*b1cdbd2cSJim Jagielski {
1430*b1cdbd2cSJim Jagielski eAnimationMode = eMode;
1431*b1cdbd2cSJim Jagielski }
1432*b1cdbd2cSJim Jagielski
VisAreaChanged(const OutputDevice * pOut)1433*b1cdbd2cSJim Jagielski void SdrPaintView::VisAreaChanged(const OutputDevice* pOut)
1434*b1cdbd2cSJim Jagielski {
1435*b1cdbd2cSJim Jagielski if(mpPageView)
1436*b1cdbd2cSJim Jagielski {
1437*b1cdbd2cSJim Jagielski if (pOut)
1438*b1cdbd2cSJim Jagielski {
1439*b1cdbd2cSJim Jagielski SdrPageWindow* pWindow = mpPageView->FindPageWindow(*((OutputDevice*)pOut));
1440*b1cdbd2cSJim Jagielski
1441*b1cdbd2cSJim Jagielski if(pWindow)
1442*b1cdbd2cSJim Jagielski {
1443*b1cdbd2cSJim Jagielski VisAreaChanged(*pWindow);
1444*b1cdbd2cSJim Jagielski }
1445*b1cdbd2cSJim Jagielski }
1446*b1cdbd2cSJim Jagielski else
1447*b1cdbd2cSJim Jagielski {
1448*b1cdbd2cSJim Jagielski for(sal_uInt32 a(0L); a < mpPageView->PageWindowCount(); a++)
1449*b1cdbd2cSJim Jagielski {
1450*b1cdbd2cSJim Jagielski VisAreaChanged(*mpPageView->GetPageWindow(a));
1451*b1cdbd2cSJim Jagielski }
1452*b1cdbd2cSJim Jagielski }
1453*b1cdbd2cSJim Jagielski }
1454*b1cdbd2cSJim Jagielski }
1455*b1cdbd2cSJim Jagielski
VisAreaChanged(const SdrPageWindow &)1456*b1cdbd2cSJim Jagielski void SdrPaintView::VisAreaChanged(const SdrPageWindow& /*rWindow*/)
1457*b1cdbd2cSJim Jagielski {
1458*b1cdbd2cSJim Jagielski // notify SfxListener
1459*b1cdbd2cSJim Jagielski Broadcast(SvxViewHint(SvxViewHint::SVX_HINT_VIEWCHANGED));
1460*b1cdbd2cSJim Jagielski }
1461*b1cdbd2cSJim Jagielski
getColorConfig() const1462*b1cdbd2cSJim Jagielski const svtools::ColorConfig& SdrPaintView::getColorConfig() const
1463*b1cdbd2cSJim Jagielski {
1464*b1cdbd2cSJim Jagielski return maColorConfig;
1465*b1cdbd2cSJim Jagielski }
1466*b1cdbd2cSJim Jagielski
onChangeColorConfig()1467*b1cdbd2cSJim Jagielski void SdrPaintView::onChangeColorConfig()
1468*b1cdbd2cSJim Jagielski {
1469*b1cdbd2cSJim Jagielski SetGridColor( Color( maColorConfig.GetColorValue( svtools::DRAWGRID ).nColor ) );
1470*b1cdbd2cSJim Jagielski }
1471*b1cdbd2cSJim Jagielski
SetGridColor(Color aColor)1472*b1cdbd2cSJim Jagielski void SdrPaintView::SetGridColor( Color aColor )
1473*b1cdbd2cSJim Jagielski {
1474*b1cdbd2cSJim Jagielski maGridColor = aColor;
1475*b1cdbd2cSJim Jagielski }
1476*b1cdbd2cSJim Jagielski
GetGridColor() const1477*b1cdbd2cSJim Jagielski Color SdrPaintView::GetGridColor() const
1478*b1cdbd2cSJim Jagielski {
1479*b1cdbd2cSJim Jagielski return maGridColor;
1480*b1cdbd2cSJim Jagielski }
1481*b1cdbd2cSJim Jagielski
1482*b1cdbd2cSJim Jagielski // #103834# Set background color for svx at SdrPageViews
SetApplicationBackgroundColor(Color aBackgroundColor)1483*b1cdbd2cSJim Jagielski void SdrPaintView::SetApplicationBackgroundColor(Color aBackgroundColor)
1484*b1cdbd2cSJim Jagielski {
1485*b1cdbd2cSJim Jagielski if(mpPageView)
1486*b1cdbd2cSJim Jagielski {
1487*b1cdbd2cSJim Jagielski mpPageView->SetApplicationBackgroundColor(aBackgroundColor);
1488*b1cdbd2cSJim Jagielski }
1489*b1cdbd2cSJim Jagielski }
1490*b1cdbd2cSJim Jagielski
1491*b1cdbd2cSJim Jagielski // #103911# Set document color for svx at SdrPageViews
SetApplicationDocumentColor(Color aDocumentColor)1492*b1cdbd2cSJim Jagielski void SdrPaintView::SetApplicationDocumentColor(Color aDocumentColor)
1493*b1cdbd2cSJim Jagielski {
1494*b1cdbd2cSJim Jagielski if(mpPageView)
1495*b1cdbd2cSJim Jagielski {
1496*b1cdbd2cSJim Jagielski mpPageView->SetApplicationDocumentColor(aDocumentColor);
1497*b1cdbd2cSJim Jagielski }
1498*b1cdbd2cSJim Jagielski }
1499*b1cdbd2cSJim Jagielski
1500*b1cdbd2cSJim Jagielski // #114898#
IsBufferedOutputAllowed() const1501*b1cdbd2cSJim Jagielski bool SdrPaintView::IsBufferedOutputAllowed() const
1502*b1cdbd2cSJim Jagielski {
1503*b1cdbd2cSJim Jagielski return (mbBufferedOutputAllowed && maDrawinglayerOpt.IsPaintBuffer());
1504*b1cdbd2cSJim Jagielski }
1505*b1cdbd2cSJim Jagielski
1506*b1cdbd2cSJim Jagielski // #114898#
SetBufferedOutputAllowed(bool bNew)1507*b1cdbd2cSJim Jagielski void SdrPaintView::SetBufferedOutputAllowed(bool bNew)
1508*b1cdbd2cSJim Jagielski {
1509*b1cdbd2cSJim Jagielski if(bNew != (bool)mbBufferedOutputAllowed)
1510*b1cdbd2cSJim Jagielski {
1511*b1cdbd2cSJim Jagielski mbBufferedOutputAllowed = bNew;
1512*b1cdbd2cSJim Jagielski }
1513*b1cdbd2cSJim Jagielski }
1514*b1cdbd2cSJim Jagielski
IsBufferedOverlayAllowed() const1515*b1cdbd2cSJim Jagielski bool SdrPaintView::IsBufferedOverlayAllowed() const
1516*b1cdbd2cSJim Jagielski {
1517*b1cdbd2cSJim Jagielski return (mbBufferedOverlayAllowed && maDrawinglayerOpt.IsOverlayBuffer());
1518*b1cdbd2cSJim Jagielski }
1519*b1cdbd2cSJim Jagielski
SetBufferedOverlayAllowed(bool bNew)1520*b1cdbd2cSJim Jagielski void SdrPaintView::SetBufferedOverlayAllowed(bool bNew)
1521*b1cdbd2cSJim Jagielski {
1522*b1cdbd2cSJim Jagielski if(bNew != (bool)mbBufferedOverlayAllowed)
1523*b1cdbd2cSJim Jagielski {
1524*b1cdbd2cSJim Jagielski mbBufferedOverlayAllowed = bNew;
1525*b1cdbd2cSJim Jagielski }
1526*b1cdbd2cSJim Jagielski }
1527*b1cdbd2cSJim Jagielski
IsPagePaintingAllowed() const1528*b1cdbd2cSJim Jagielski sal_Bool SdrPaintView::IsPagePaintingAllowed() const
1529*b1cdbd2cSJim Jagielski {
1530*b1cdbd2cSJim Jagielski return mbPagePaintingAllowed;
1531*b1cdbd2cSJim Jagielski }
1532*b1cdbd2cSJim Jagielski
SetPagePaintingAllowed(bool bNew)1533*b1cdbd2cSJim Jagielski void SdrPaintView::SetPagePaintingAllowed(bool bNew)
1534*b1cdbd2cSJim Jagielski {
1535*b1cdbd2cSJim Jagielski if(bNew != (bool)mbPagePaintingAllowed)
1536*b1cdbd2cSJim Jagielski {
1537*b1cdbd2cSJim Jagielski mbPagePaintingAllowed = bNew;
1538*b1cdbd2cSJim Jagielski }
1539*b1cdbd2cSJim Jagielski }
1540*b1cdbd2cSJim Jagielski
1541*b1cdbd2cSJim Jagielski // #i38135# Sets the timer for Object animations and restarts.
SetAnimationTimer(sal_uInt32 nTime)1542*b1cdbd2cSJim Jagielski void SdrPaintView::SetAnimationTimer(sal_uInt32 nTime)
1543*b1cdbd2cSJim Jagielski {
1544*b1cdbd2cSJim Jagielski if(mpPageView)
1545*b1cdbd2cSJim Jagielski {
1546*b1cdbd2cSJim Jagielski // first, reset all timers at all windows to 0L
1547*b1cdbd2cSJim Jagielski for(sal_uInt32 a(0L); a < mpPageView->PageWindowCount(); a++)
1548*b1cdbd2cSJim Jagielski {
1549*b1cdbd2cSJim Jagielski const SdrPageWindow& rPageWindow = *mpPageView->GetPageWindow(a);
1550*b1cdbd2cSJim Jagielski sdr::contact::ObjectContact& rObjectContact = rPageWindow.GetObjectContact();
1551*b1cdbd2cSJim Jagielski sdr::animation::primitiveAnimator& rAnimator = rObjectContact.getPrimitiveAnimator();
1552*b1cdbd2cSJim Jagielski rAnimator.SetTime(nTime);
1553*b1cdbd2cSJim Jagielski }
1554*b1cdbd2cSJim Jagielski }
1555*b1cdbd2cSJim Jagielski }
1556*b1cdbd2cSJim Jagielski
1557*b1cdbd2cSJim Jagielski // eof
1558