View | Details | Raw Unified | Return to issue 118905
Collapse All | Expand All

(-)svx/inc/svx/sdr/overlay/overlaymanagerbuffered.hxx (+6 lines)
Lines 61-66 Link Here
61
			// Default is false.
61
			// Default is false.
62
			unsigned								mbRefreshWithPreRendering : 1;
62
			unsigned								mbRefreshWithPreRendering : 1;
63
63
64
			basegfx::B2IPoint						mnTopLeftOffset;
65
			basegfx::B2IPoint						mnBottomRightOffset;
66
			unsigned							mbUseOffset : 1;
67
			
64
			// link for timer
68
			// link for timer
65
			DECL_LINK(ImpBufferTimerHandler, AutoTimer*);
69
			DECL_LINK(ImpBufferTimerHandler, AutoTimer*);
66
70
Lines 98-103 Link Here
98
			// access to RefreshWithPreRendering Flag
102
			// access to RefreshWithPreRendering Flag
99
			bool DoRefreshWithPreRendering() const { return mbRefreshWithPreRendering; }
103
			bool DoRefreshWithPreRendering() const { return mbRefreshWithPreRendering; }
100
			void SetRefreshWithPreRendering(bool bNew);
104
			void SetRefreshWithPreRendering(bool bNew);
105
			
106
			void SetUseOffset ( sal_Bool bUseOffset ) { mbUseOffset = bUseOffset; }
101
		};
107
		};
102
	} // end of namespace overlay
108
	} // end of namespace overlay
103
} // end of namespace sdr
109
} // end of namespace sdr
(-)svx/source/sdr/overlay/overlaymanagerbuffered.cxx (-2 / +28 lines)
Lines 40-45 Link Here
40
{
40
{
41
	namespace overlay
41
	namespace overlay
42
	{
42
	{
43
		void implExpandRectangle(basegfx::B2IPoint nTopLeftOffset, basegfx::B2IPoint nBottomOffset, Rectangle& rRect)
44
		{
45
			rRect.Left() -= nTopLeftOffset.getX();
46
			rRect.Top() -= nTopLeftOffset.getY();
47
			rRect.Right() += nBottomOffset.getX();
48
			rRect.Bottom() += nBottomOffset.getY();
49
		}
50
		
43
		void OverlayManagerBuffered::ImpPrepareBufferDevice()
51
		void OverlayManagerBuffered::ImpPrepareBufferDevice()
44
		{
52
		{
45
			// compare size of maBufferDevice with size of visible area
53
			// compare size of maBufferDevice with size of visible area
Lines 91-96 Link Here
91
							const basegfx::B2IPoint aNewMaximum(maBufferRememberedRangePixel.getMaximum() + aIPointDestinationOffsetPixel);
99
							const basegfx::B2IPoint aNewMaximum(maBufferRememberedRangePixel.getMaximum() + aIPointDestinationOffsetPixel);
92
							maBufferRememberedRangePixel = basegfx::B2IRange(aNewMinimum, aNewMaximum);
100
							maBufferRememberedRangePixel = basegfx::B2IRange(aNewMinimum, aNewMaximum);
93
						}
101
						}
102
						
103
						mnTopLeftOffset = basegfx::B2IPoint(0,0);
104
						mnBottomRightOffset = basegfx::B2IPoint(0,0);
94
					}
105
					}
95
				}
106
				}
96
107
Lines 197-202 Link Here
197
208
198
			while(aRegion.GetEnumRects(aRegionHandle, aRegionRectanglePixel))
209
			while(aRegion.GetEnumRects(aRegionHandle, aRegionRectanglePixel))
199
			{
210
			{
211
				if( mbUseOffset )
212
				{
213
					implExpandRectangle( mnTopLeftOffset, mnBottomRightOffset, aRegionRectanglePixel);
214
					aRegionRectanglePixel.Intersection(aBufferDeviceRectanglePixel);
215
				}
216
				
200
				// for each rectangle, save the area
217
				// for each rectangle, save the area
201
				Point aTopLeft(aRegionRectanglePixel.TopLeft());
218
				Point aTopLeft(aRegionRectanglePixel.TopLeft());
202
				Size aSize(aRegionRectanglePixel.GetSize());
219
				Size aSize(aRegionRectanglePixel.GetSize());
Lines 424-430 Link Here
424
			OverlayManager* pOldOverlayManager,
441
			OverlayManager* pOldOverlayManager,
425
			bool bRefreshWithPreRendering)
442
			bool bRefreshWithPreRendering)
426
		:	OverlayManager(rOutputDevice, pOldOverlayManager),
443
		:	OverlayManager(rOutputDevice, pOldOverlayManager),
427
			mbRefreshWithPreRendering(bRefreshWithPreRendering)
444
			mbRefreshWithPreRendering(bRefreshWithPreRendering),
445
			mnTopLeftOffset(0, 0),
446
			mnBottomRightOffset(0, 0),
447
			mbUseOffset( false )
428
		{
448
		{
429
			// Init timer
449
			// Init timer
430
			maBufferTimer.SetTimeout(1);
450
			maBufferTimer.SetTimeout(1);
Lines 480-486 Link Here
480
500
481
		void OverlayManagerBuffered::invalidateRange(const basegfx::B2DRange& rRange)
501
		void OverlayManagerBuffered::invalidateRange(const basegfx::B2DRange& rRange)
482
		{
502
		{
483
            if(!rRange.isEmpty())
503
            if(!rRange.isEmpty() && rRange.getWidth() !=0 && rRange.getHeight() != 0)
484
            {
504
            {
485
			    // buffered output, do not invalidate but use the timer
505
			    // buffered output, do not invalidate but use the timer
486
			    // to trigger a timer event for refresh
506
			    // to trigger a timer event for refresh
Lines 506-511 Link Here
506
					    (sal_Int32)ceil(aDiscreteRange.getMaxX() + fDiscreteOne), 
526
					    (sal_Int32)ceil(aDiscreteRange.getMaxX() + fDiscreteOne), 
507
					    (sal_Int32)ceil(aDiscreteRange.getMaxY() + fDiscreteOne));
527
					    (sal_Int32)ceil(aDiscreteRange.getMaxY() + fDiscreteOne));
508
528
529
					mnTopLeftOffset = basegfx::B2IPoint (floor(fDiscreteOne), floor(fDiscreteOne) );
530
					mnBottomRightOffset = basegfx::B2IPoint( ceil(fDiscreteOne), ceil(fDiscreteOne));
531
					
509
				    maBufferRememberedRangePixel.expand(aTopLeft);
532
				    maBufferRememberedRangePixel.expand(aTopLeft);
510
				    maBufferRememberedRangePixel.expand(aBottomRight);
533
				    maBufferRememberedRangePixel.expand(aBottomRight);
511
			    }
534
			    }
Lines 514-519 Link Here
514
				    const basegfx::B2IPoint aTopLeft((sal_Int32)floor(aDiscreteRange.getMinX()), (sal_Int32)floor(aDiscreteRange.getMinY()));
537
				    const basegfx::B2IPoint aTopLeft((sal_Int32)floor(aDiscreteRange.getMinX()), (sal_Int32)floor(aDiscreteRange.getMinY()));
515
				    const basegfx::B2IPoint aBottomRight((sal_Int32)ceil(aDiscreteRange.getMaxX()), (sal_Int32)ceil(aDiscreteRange.getMaxY()));
538
				    const basegfx::B2IPoint aBottomRight((sal_Int32)ceil(aDiscreteRange.getMaxX()), (sal_Int32)ceil(aDiscreteRange.getMaxY()));
516
539
540
					mnTopLeftOffset = basegfx::B2IPoint(0,0);
541
					mnBottomRightOffset = basegfx::B2IPoint(ceil(aDiscreteRange.getMaxX()) - floor(aDiscreteRange.getMaxX()),
542
															ceil(aDiscreteRange.getMaxY()) - floor(aDiscreteRange.getMaxY()));
517
				    maBufferRememberedRangePixel.expand(aTopLeft);
543
				    maBufferRememberedRangePixel.expand(aTopLeft);
518
				    maBufferRememberedRangePixel.expand(aBottomRight);
544
				    maBufferRememberedRangePixel.expand(aBottomRight);
519
			    }
545
			    }
(-)svx/source/svdraw/sdrpaintwindow.cxx (+11 lines)
Lines 133-138 Link Here
133
				// Also hand over the evtl. existing old OverlayManager; this means to take over 
133
				// Also hand over the evtl. existing old OverlayManager; this means to take over 
134
				// the registered OverlayObjects from it
134
				// the registered OverlayObjects from it
135
				mpOverlayManager = new ::sdr::overlay::OverlayManagerBuffered(GetOutputDevice(), pOldOverlayManager, true);
135
				mpOverlayManager = new ::sdr::overlay::OverlayManagerBuffered(GetOutputDevice(), pOldOverlayManager, true);
136
				
137
				// Switch from not use buffer to use buffer
138
				// Need to save background with the offset
139
				if(pOldOverlayManager != NULL)
140
					((::sdr::overlay::OverlayManagerBuffered *)mpOverlayManager)->SetUseOffset(true);
136
			}
141
			}
137
			else
142
			else
138
			{
143
			{
Lines 166-171 Link Here
166
			mpOverlayManager->setStripeLengthPixel(GetPaintView().getOptionsDrawinglayer().GetStripeLength());
171
			mpOverlayManager->setStripeLengthPixel(GetPaintView().getOptionsDrawinglayer().GetStripeLength());
167
		}
172
		}
168
	}
173
	}
174
	else
175
	{
176
		::sdr::overlay::OverlayManagerBuffered *pOverlayBufferedManager = dynamic_cast< ::sdr::overlay::OverlayManagerBuffered * > (mpOverlayManager);
177
		if(pOverlayBufferedManager)
178
			pOverlayBufferedManager->SetUseOffset(false);
179
	}
169
180
170
	// OverlayObjects are transfered for the evtl. newly created OverlayManager by handing over
181
	// OverlayObjects are transfered for the evtl. newly created OverlayManager by handing over
171
	// at construction time
182
	// at construction time

Return to issue 118905