xref: /aoo4110/main/svx/source/svdraw/svdpntv.cxx (revision b1cdbd2c)
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