[ooo-build-commit] patches/dev300 patches/test

Kohei Yoshida kohei at kemper.freedesktop.org
Wed Jul 22 12:42:17 PDT 2009


 patches/dev300/apply                                    |    4 
 patches/dev300/calc-copy-range-animated-border-sc.diff  |  449 +++++++++++++++
 patches/dev300/calc-copy-range-animated-border-svx.diff |   22 
 patches/test/calc-copy-range-animated-border.diff       |  471 ----------------
 4 files changed, 475 insertions(+), 471 deletions(-)

New commits:
commit 988f031fe3dd813bfe1b91d1ce12774466234c37
Author: Kohei Yoshida <kyoshida at novell.com>
Date:   Wed Jul 22 15:20:58 2009 -0400

    Moved the animated border patch to dev300.
    
    * patches/dev300/apply: added the new patches.
    
    * patches/test/calc-copy-range-animated-border.diff:
    * patches/dev300/calc-copy-range-animated-border-sc.diff:
    * patches/dev300/calc-copy-range-animated-border-svx.diff: moved &
      split the patch into two patches by module.

diff --git a/patches/dev300/apply b/patches/dev300/apply
index f72ff04..c8e5b3f 100644
--- a/patches/dev300/apply
+++ b/patches/dev300/apply
@@ -3350,5 +3350,9 @@ SectionOwner => kohei
 
 calc-formula-externref-countif-fix.diff, n#521624, i#102750, kohei
 
+# draw an animated dashed border around copied ranges.
+calc-copy-range-animated-border-sc.diff, kohei
+calc-copy-range-animated-border-svx.diff, kohei
+
 [ AutoLayout ]
 layoutcode071809.diff, cocofan
diff --git a/patches/dev300/calc-copy-range-animated-border-sc.diff b/patches/dev300/calc-copy-range-animated-border-sc.diff
new file mode 100644
index 0000000..8b47cb4
--- /dev/null
+++ b/patches/dev300/calc-copy-range-animated-border-sc.diff
@@ -0,0 +1,449 @@
+diff --git sc/source/ui/inc/gridwin.hxx sc/source/ui/inc/gridwin.hxx
+index 2b62bc5..3ab93fd 100644
+--- sc/source/ui/inc/gridwin.hxx
++++ sc/source/ui/inc/gridwin.hxx
+@@ -356,7 +356,6 @@ private:
+                         sdr::overlay::OverlayObjectCell::RangeVector* pRanges,
+                         const MapMode& rDrawMode,
+                         const RectangleConverter *pConverter = NULL);
+-    void            UpdateCopySourceOverlay(const MapMode& rDrawMode);
+ 
+ protected:
+     using Window::Resize;
+@@ -458,6 +457,8 @@ public:
+     void CursorChanged();
+     void DrawLayerCreated();
+ 
++    void            DeleteCopySourceOverlay();
++    void            UpdateCopySourceOverlay();
+     void            DeleteCursorOverlay();
+     void            UpdateCursorOverlay();
+     void            DeleteSelectionOverlay();
+diff --git sc/source/ui/inc/overlayobject.hxx sc/source/ui/inc/overlayobject.hxx
+new file mode 100644
+index 0000000..5c3e774
+--- /dev/null
++++ sc/source/ui/inc/overlayobject.hxx
+@@ -0,0 +1,58 @@
++/*************************************************************************
++ *
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ * 
++ * Copyright 2008 by Sun Microsystems, Inc.
++ *
++ * OpenOffice.org - a multi-platform office productivity suite
++ *
++ * $RCSfile: gridwin.hxx,v $
++ * $Revision: 1.30 $
++ *
++ * This file is part of OpenOffice.org.
++ *
++ * OpenOffice.org is free software: you can redistribute it and/or modify
++ * it under the terms of the GNU Lesser General Public License version 3
++ * only, as published by the Free Software Foundation.
++ *
++ * OpenOffice.org is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU Lesser General Public License version 3 for more details
++ * (a copy is included in the LICENSE file that accompanied this code).
++ *
++ * You should have received a copy of the GNU Lesser General Public License
++ * version 3 along with OpenOffice.org.  If not, see
++ * <http://www.openoffice.org/license.html>
++ * for a copy of the LGPLv3 License.
++ *
++ ************************************************************************/
++
++#ifndef __SC_OVERLAYOBJECT_HXX__
++#define __SC_OVERLAYOBJECT_HXX__
++
++#include "svx/sdr/overlay/overlayobject.hxx"
++
++class OutputDevice;
++class Window;
++
++class ScOverlayDashedBorder : public ::sdr::overlay::OverlayObject
++{
++public:
++    ScOverlayDashedBorder(const ::basegfx::B2DRange& rRange, const Color& rColor, Window* pWin);
++    virtual ~ScOverlayDashedBorder();
++
++    virtual void Trigger(sal_uInt32 nTime);
++    virtual void transform(const ::basegfx::B2DHomMatrix& rMatrix);
++    virtual void zoomHasChanged();
++
++private:
++    virtual void drawGeometry(OutputDevice& rOutputDevice);
++    virtual void createBaseRange(OutputDevice& rOutputDevice);
++
++private:
++    Window* mpParent;
++    bool mbToggle;
++};
++
++#endif
+diff --git sc/source/ui/inc/tabview.hxx sc/source/ui/inc/tabview.hxx
+index 1c9d508..0288469 100644
+--- sc/source/ui/inc/tabview.hxx
++++ sc/source/ui/inc/tabview.hxx
+@@ -441,6 +441,7 @@ public:
+ 
+     void			CreateAnchorHandles(SdrHdlList& rHdl, const ScAddress& rAddress);
+ 
++    void            UpdateCopySourceOverlay();
+     void            UpdateSelectionOverlay();
+     void            UpdateShrinkOverlay();
+     void            UpdateAllOverlays();
+diff --git sc/source/ui/view/cellsh1.cxx sc/source/ui/view/cellsh1.cxx
+index 8950395..eee4c62 100644
+--- sc/source/ui/view/cellsh1.cxx
++++ sc/source/ui/view/cellsh1.cxx
+@@ -1167,11 +1167,13 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )
+ 
+         case SID_COPY:				// fuer Grafiken in DrawShell
+             {
+-                WaitObject aWait( GetViewData()->GetDialogParent() );
++                ScViewData* pViewData = GetViewData();
++                WaitObject aWait( pViewData->GetDialogParent() );
+                 pTabViewShell->CopyToClip( NULL, FALSE, FALSE, TRUE );
+                 rReq.Done();
+-				GetViewData()->SetPasteMode( (ScPasteFlags) (SC_PASTE_MODE | SC_PASTE_BORDER) );
++				pViewData->SetPasteMode( (ScPasteFlags) (SC_PASTE_MODE | SC_PASTE_BORDER) );
+ 				pTabViewShell->ShowCursor();
++                pTabViewShell->UpdateCopySourceOverlay();
+             }
+             break;
+ 
+@@ -1181,6 +1183,7 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )
+                 pTabViewShell->CutToClip( NULL, TRUE );
+                 rReq.Done();
+ 				GetViewData()->SetPasteMode( SC_PASTE_MODE );
++                pTabViewShell->UpdateCopySourceOverlay();
+             }
+             break;
+ 
+diff --git sc/source/ui/view/gridwin.cxx sc/source/ui/view/gridwin.cxx
+index 8713b06..93a674e 100644
+--- sc/source/ui/view/gridwin.cxx
++++ sc/source/ui/view/gridwin.cxx
+@@ -122,6 +122,8 @@
+ #include "tabprotection.hxx"
+ #include "clipparam.hxx"
+ #include "dpcontrol.hxx"
++#include "overlayobject.hxx"
++#include "basegfx/range/b2drange.hxx"
+ 
+ // #114409#
+ #include <vcl/salbtype.hxx>		// FRound
+@@ -3060,7 +3062,7 @@ void __EXPORT ScGridWindow::KeyInput(const KeyEvent& rKEvt)
+ 
+ 		// hide the border around the copy source
+ 		pViewData->SetPasteMode( SC_PASTE_NONE );
+-		UpdateCursorOverlay();
++		UpdateCopySourceOverlay();
+ 		return;
+ 	}
+     // wenn semi-Modeless-SfxChildWindow-Dialog oben, keine KeyInputs:
+@@ -3069,7 +3071,7 @@ void __EXPORT ScGridWindow::KeyInput(const KeyEvent& rKEvt)
+ 		if (rKeyCode.GetCode() == KEY_ESCAPE)
+ 		{
+ 			pViewData->SetPasteMode( SC_PASTE_NONE );
+-			UpdateCursorOverlay();
++            UpdateCopySourceOverlay();
+ 		}
+         //	query for existing note marker before calling ViewShell's keyboard handling
+         //	which may remove the marker
+@@ -5149,6 +5151,7 @@ void ScGridWindow::CursorChanged()
+ void ScGridWindow::ImpCreateOverlayObjects()
+ {
+     UpdateCursorOverlay();
++    UpdateCopySourceOverlay();
+     UpdateSelectionOverlay();
+     UpdateAutoFillOverlay();
+     UpdateDragRectOverlay();
+@@ -5160,6 +5163,7 @@ void ScGridWindow::ImpCreateOverlayObjects()
+ void ScGridWindow::ImpDestroyOverlayObjects()
+ {
+     DeleteCursorOverlay();
++    DeleteCopySourceOverlay();
+     DeleteSelectionOverlay();
+     DeleteAutoFillOverlay();
+     DeleteDragRectOverlay();
+@@ -5178,7 +5182,6 @@ void ScGridWindow::UpdateAllOverlays()
+ void ScGridWindow::DeleteCursorOverlay()
+ {
+     DELETEZ( mpOOCursors );
+-    DELETEZ( mpOOSelectionBorder );
+ }
+ 
+ void ScGridWindow::ConvertPixelRectsToRangeVector( const ::std::vector< Rectangle >& rPixelRects, 
+@@ -5202,8 +5205,20 @@ void ScGridWindow::ConvertPixelRectsToRangeVector( const ::std::vector< Rectangl
+     }
+ }
+ 
+-void ScGridWindow::UpdateCopySourceOverlay( const MapMode& rDrawMode )
++void ScGridWindow::DeleteCopySourceOverlay()
++{
++    DELETEZ( mpOOSelectionBorder );
++}
++
++void ScGridWindow::UpdateCopySourceOverlay()
+ {
++    MapMode aDrawMode = GetDrawMapMode();
++    MapMode aOldMode = GetMapMode();
++    if ( aOldMode != aDrawMode )
++        SetMapMode( aDrawMode );
++
++    DeleteCopySourceOverlay();
++
+     if (!pViewData->ShowPasteSource())
+         return;
+     ::sdr::overlay::OverlayManager* pOverlayManager = getOverlayManager();
+@@ -5232,33 +5247,24 @@ void ScGridWindow::UpdateCopySourceOverlay( const MapMode& rDrawMode )
+     
+         Point aClipStartScrPos = pViewData->GetScrPos( nClipStartX, nClipStartY, eWhich );
+         Point aClipEndScrPos   = pViewData->GetScrPos( nClipEndX + 1, nClipEndY + 1, eWhich );
+-    
++        aClipStartScrPos -= Point(1, 1);
+         long nSizeXPix = aClipEndScrPos.X() - aClipStartScrPos.X();
+         long nSizeYPix = aClipEndScrPos.Y() - aClipStartScrPos.Y();
+     
+-        aClipStartScrPos.X() -= 2;
+-        aClipStartScrPos.Y() -= 2;
++        Rectangle aRect( aClipStartScrPos, Size(nSizeXPix, nSizeYPix) );
+     
+-        Rectangle aRect( aClipStartScrPos, Size( nSizeXPix + 3, nSizeYPix + 3 ) );
+-    
+-        std::vector<Rectangle> aPixelRects;
+-    
+-        aPixelRects.push_back(Rectangle( aRect.Left(), aRect.Top(), aRect.Left()+2, aRect.Bottom() ));
+-        aPixelRects.push_back(Rectangle( aRect.Right()-2, aRect.Top(), aRect.Right(), aRect.Bottom() ));
+-        aPixelRects.push_back(Rectangle( aRect.Left()+3, aRect.Top(), aRect.Right()-3, aRect.Top()+2 ));
+-        aPixelRects.push_back(Rectangle( aRect.Left()+3, aRect.Bottom()-2, aRect.Right()-3, aRect.Bottom() ));
+-    
+-        sdr::overlay::OverlayObjectCell::RangeVector aRanges;
+-        ConvertPixelRectsToRangeVector( aPixelRects, &aRanges, rDrawMode );
+-    
+-        ScOverlayType eType = SC_OVERLAY_BORDER_TRANSPARENT;
+     
+         Color aHighlight = GetSettings().GetStyleSettings().GetHighlightColor();
+-        sdr::overlay::OverlayObjectCell* pOverlay = new sdr::overlay::OverlayObjectCell( eType, aHighlight, aRanges );
+-    
+-        pOverlayManager->add(*pOverlay);
+-        mpOOSelectionBorder->append(*pOverlay);
++
++        Rectangle aLogic = PixelToLogic(aRect, aDrawMode);
++        ::basegfx::B2DRange aRange(aLogic.Left(), aLogic.Top(), aLogic.Right(), aLogic.Bottom());
++        ScOverlayDashedBorder* pDashedBorder = new ScOverlayDashedBorder(aRange, aHighlight, this);
++        pOverlayManager->add(*pDashedBorder);
++        mpOOSelectionBorder->append(*pDashedBorder);
+     }
++
++    if ( aOldMode != aDrawMode )
++        SetMapMode( aOldMode );
+ }
+ 
+ void ScGridWindow::UpdateCursorOverlay()
+@@ -5273,8 +5280,6 @@ void ScGridWindow::UpdateCursorOverlay()
+ 
+     DeleteCursorOverlay();
+ 
+-    UpdateCopySourceOverlay( aDrawMode );
+-
+     std::vector<Rectangle> aPixelRects;
+ 
+     //
+diff --git sc/source/ui/view/makefile.mk sc/source/ui/view/makefile.mk
+index 312929c..9003498 100644
+--- sc/source/ui/view/makefile.mk
++++ sc/source/ui/view/makefile.mk
+@@ -98,6 +98,7 @@ SLOFILES =  \
+         $(SLO)$/output.obj \
+         $(SLO)$/output2.obj \
+         $(SLO)$/output3.obj \
++        $(SLO)$/overlayobject.obj \
+         $(SLO)$/gridmerg.obj \
+         $(SLO)$/invmerge.obj \
+         $(SLO)$/cellmergeoption.obj \
+@@ -155,6 +156,7 @@ EXCEPTIONSFILES= \
+     $(SLO)$/gridwin.obj \
+     $(SLO)$/invmerge.obj \
+     $(SLO)$/output2.obj \
++    $(SLO)$/overlayobject.obj \
+     $(SLO)$/pfuncache.obj \
+     $(SLO)$/spelldialog.obj \
+     $(SLO)$/cellsh1.obj \
+diff --git sc/source/ui/view/overlayobject.cxx sc/source/ui/view/overlayobject.cxx
+new file mode 100644
+index 0000000..5b16259
+--- /dev/null
++++ sc/source/ui/view/overlayobject.cxx
+@@ -0,0 +1,121 @@
++/*************************************************************************
++ *
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ * 
++ * Copyright 2008 by Sun Microsystems, Inc.
++ *
++ * OpenOffice.org - a multi-platform office productivity suite
++ *
++ * $RCSfile: gridwin.hxx,v $
++ * $Revision: 1.30 $
++ *
++ * This file is part of OpenOffice.org.
++ *
++ * OpenOffice.org is free software: you can redistribute it and/or modify
++ * it under the terms of the GNU Lesser General Public License version 3
++ * only, as published by the Free Software Foundation.
++ *
++ * OpenOffice.org is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU Lesser General Public License version 3 for more details
++ * (a copy is included in the LICENSE file that accompanied this code).
++ *
++ * You should have received a copy of the GNU Lesser General Public License
++ * version 3 along with OpenOffice.org.  If not, see
++ * <http://www.openoffice.org/license.html>
++ * for a copy of the LGPLv3 License.
++ *
++ ************************************************************************/
++
++// MARKER(update_precomp.py): autogen include statement, do not remove
++#include "precompiled_sc.hxx"
++
++#include "overlayobject.hxx"
++#include "vcl/outdev.hxx"
++#include "vcl/lineinfo.hxx"
++#include "vcl/salbtype.hxx"
++#include "vcl/window.hxx"
++#include "tools/fract.hxx"
++#include "basegfx/range/b2drange.hxx"
++#include "basegfx/polygon/b2dpolygon.hxx"
++#include "svx/sdr/overlay/overlaymanager.hxx"
++
++using ::sdr::overlay::OverlayObject;
++using ::sdr::overlay::OverlayManager;
++
++#define DASH_UPDATE_INTERVAL 180    // in msec
++
++ScOverlayDashedBorder::ScOverlayDashedBorder(const ::basegfx::B2DRange& rRange, const Color& rColor, Window* pWin) :
++    OverlayObject(rColor),
++    mpParent(pWin),
++    mbToggle(true)
++{
++    mbAllowsAnimation = true;
++    maBaseRange = rRange;
++}
++
++ScOverlayDashedBorder::~ScOverlayDashedBorder()
++{
++}
++
++void ScOverlayDashedBorder::Trigger(sal_uInt32 nTime)
++{
++    OverlayManager* pMgr = getOverlayManager();
++    if (pMgr)
++    {
++        SetTime(nTime + DASH_UPDATE_INTERVAL);
++        mbToggle = !mbToggle;
++        pMgr->InsertEvent(this);
++        objectChange();
++    }
++}
++
++void ScOverlayDashedBorder::transform(const ::basegfx::B2DHomMatrix& /*rMatrix*/)
++{
++}
++
++void ScOverlayDashedBorder::zoomHasChanged()
++{
++}
++
++void ScOverlayDashedBorder::drawGeometry(OutputDevice& rOutputDevice)
++{
++    using ::basegfx::B2DPoint;
++    using ::basegfx::B2DPolygon;
++
++    OverlayManager* pMgr = getOverlayManager();
++    if (!pMgr)
++        return;
++
++    // save original AA and switch off for selection
++    const sal_uInt16 nOriginalAA(rOutputDevice.GetAntialiasing());
++    rOutputDevice.SetAntialiasing(0);
++
++    if (mbToggle)
++    {    
++        pMgr->setStripeColorA(getBaseColor());
++        pMgr->setStripeColorB(COL_WHITE);
++    }
++    else
++    {
++        pMgr->setStripeColorA(COL_WHITE);
++        pMgr->setStripeColorB(getBaseColor());
++    }
++
++    B2DPolygon aPoly;
++    aPoly.append(B2DPoint(maBaseRange.getMinX(), maBaseRange.getMinY()));
++    aPoly.append(B2DPoint(maBaseRange.getMaxX(), maBaseRange.getMinY()));
++    aPoly.append(B2DPoint(maBaseRange.getMaxX(), maBaseRange.getMaxY()));
++    aPoly.append(B2DPoint(maBaseRange.getMinX(), maBaseRange.getMaxY()));
++    aPoly.append(B2DPoint(maBaseRange.getMinX(), maBaseRange.getMinY()));
++    ImpDrawPolygonStriped(rOutputDevice, aPoly);
++
++    // restore original AA
++    rOutputDevice.SetAntialiasing(nOriginalAA);
++}
++
++void ScOverlayDashedBorder::createBaseRange(OutputDevice& /*rOutputDevice*/)
++{
++}
++
+diff --git sc/source/ui/view/tabview2.cxx sc/source/ui/view/tabview2.cxx
+index ddb584d..0cd6204 100644
+--- sc/source/ui/view/tabview2.cxx
++++ sc/source/ui/view/tabview2.cxx
+@@ -699,6 +699,13 @@ void ScTabView::ExpandBlockArea(SCsCOL nMovX, SCsROW nMovY)
+     ExpandBlock(nAreaX, nAreaY, eMode);
+ }
+ 
++void ScTabView::UpdateCopySourceOverlay()
++{
++    for (sal_uInt8 i = 0; i < 4; ++i)
++        if (pGridWin[i] && pGridWin[i]->IsVisible())
++            pGridWin[i]->UpdateCopySourceOverlay();
++}
++
+ void ScTabView::UpdateSelectionOverlay()
+ {
+     for (USHORT i=0; i<4; i++)
+diff --git sc/source/ui/view/tabview3.cxx sc/source/ui/view/tabview3.cxx
+index 7130fba..ff7c2cf 100644
+--- sc/source/ui/view/tabview3.cxx
++++ sc/source/ui/view/tabview3.cxx
+@@ -1810,6 +1810,7 @@ void ScTabView::MakeEditView( ScEditEngineDefaulter* pEngine, SCCOL nCol, SCROW
+                     pGridWin[i]->HideCursor();
+ 
+                     pGridWin[i]->DeleteCursorOverlay();
++                    pGridWin[i]->DeleteCopySourceOverlay();
+                     pGridWin[i]->DeleteAutoFillOverlay();
+ 
+                     // flush OverlayManager before changing MapMode to text edit
+diff --git sc/source/ui/view/viewfunc.cxx sc/source/ui/view/viewfunc.cxx
+index 7be076a..92ed34b 100644
+--- sc/source/ui/view/viewfunc.cxx
++++ sc/source/ui/view/viewfunc.cxx
+@@ -1940,7 +1940,10 @@ void ScViewFunc::DeleteMulti( BOOL bRows, BOOL bRecord )
+ 
+ void ScViewFunc::DeleteContents( USHORT nFlags, BOOL bRecord )
+ {
+-	GetViewData()->SetPasteMode( SC_PASTE_NONE );
++    ScViewData* pViewData = GetViewData();
++	pViewData->SetPasteMode( SC_PASTE_NONE );
++    pViewData->GetViewShell()->UpdateCopySourceOverlay();
++
+     // nur wegen Matrix nicht editierbar? Attribute trotzdem ok
+     BOOL bOnlyNotBecauseOfMatrix;
+     BOOL bEditable = SelectionEditable( &bOnlyNotBecauseOfMatrix );
diff --git a/patches/dev300/calc-copy-range-animated-border-svx.diff b/patches/dev300/calc-copy-range-animated-border-svx.diff
new file mode 100644
index 0000000..900b812
--- /dev/null
+++ b/patches/dev300/calc-copy-range-animated-border-svx.diff
@@ -0,0 +1,22 @@
+diff --git svx/inc/svx/sdr/animation/scheduler.hxx svx/inc/svx/sdr/animation/scheduler.hxx
+index 6ee3e41..3dd8871 100644
+--- svx/inc/svx/sdr/animation/scheduler.hxx
++++ svx/inc/svx/sdr/animation/scheduler.hxx
+@@ -61,7 +61,7 @@ namespace sdr
+ 
+             // get/set time
+             sal_uInt32 GetTime() const;
+-            void SetTime(sal_uInt32 nNew);
++            void SVX_DLLPUBLIC SetTime(sal_uInt32 nNew);
+ 
+             // execute event
+             virtual void Trigger(sal_uInt32 nTime) = 0;
+@@ -145,7 +145,7 @@ namespace sdr
+             void checkTimeout();
+ 
+             // insert/remove events, wrapper to EventList methods
+-            void InsertEvent(Event* pNew);
++            void SVX_DLLPUBLIC InsertEvent(Event* pNew);
+             void RemoveEvent(Event* pOld);
+ 
+             // get/set pause
diff --git a/patches/test/calc-copy-range-animated-border.diff b/patches/test/calc-copy-range-animated-border.diff
deleted file mode 100644
index 9b14d15..0000000
--- a/patches/test/calc-copy-range-animated-border.diff
+++ /dev/null
@@ -1,471 +0,0 @@
-diff --git sc/source/ui/inc/gridwin.hxx sc/source/ui/inc/gridwin.hxx
-index 2b62bc5..3ab93fd 100644
---- sc/source/ui/inc/gridwin.hxx
-+++ sc/source/ui/inc/gridwin.hxx
-@@ -356,7 +356,6 @@ private:
-                         sdr::overlay::OverlayObjectCell::RangeVector* pRanges,
-                         const MapMode& rDrawMode,
-                         const RectangleConverter *pConverter = NULL);
--    void            UpdateCopySourceOverlay(const MapMode& rDrawMode);
- 
- protected:
-     using Window::Resize;
-@@ -458,6 +457,8 @@ public:
-     void CursorChanged();
-     void DrawLayerCreated();
- 
-+    void            DeleteCopySourceOverlay();
-+    void            UpdateCopySourceOverlay();
-     void            DeleteCursorOverlay();
-     void            UpdateCursorOverlay();
-     void            DeleteSelectionOverlay();
-diff --git sc/source/ui/inc/overlayobject.hxx sc/source/ui/inc/overlayobject.hxx
-new file mode 100644
-index 0000000..5c3e774
---- /dev/null
-+++ sc/source/ui/inc/overlayobject.hxx
-@@ -0,0 +1,58 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * 
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: gridwin.hxx,v $
-+ * $Revision: 1.30 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#ifndef __SC_OVERLAYOBJECT_HXX__
-+#define __SC_OVERLAYOBJECT_HXX__
-+
-+#include "svx/sdr/overlay/overlayobject.hxx"
-+
-+class OutputDevice;
-+class Window;
-+
-+class ScOverlayDashedBorder : public ::sdr::overlay::OverlayObject
-+{
-+public:
-+    ScOverlayDashedBorder(const ::basegfx::B2DRange& rRange, const Color& rColor, Window* pWin);
-+    virtual ~ScOverlayDashedBorder();
-+
-+    virtual void Trigger(sal_uInt32 nTime);
-+    virtual void transform(const ::basegfx::B2DHomMatrix& rMatrix);
-+    virtual void zoomHasChanged();
-+
-+private:
-+    virtual void drawGeometry(OutputDevice& rOutputDevice);
-+    virtual void createBaseRange(OutputDevice& rOutputDevice);
-+
-+private:
-+    Window* mpParent;
-+    bool mbToggle;
-+};
-+
-+#endif
-diff --git sc/source/ui/inc/tabview.hxx sc/source/ui/inc/tabview.hxx
-index 1c9d508..0288469 100644
---- sc/source/ui/inc/tabview.hxx
-+++ sc/source/ui/inc/tabview.hxx
-@@ -441,6 +441,7 @@ public:
- 
-     void			CreateAnchorHandles(SdrHdlList& rHdl, const ScAddress& rAddress);
- 
-+    void            UpdateCopySourceOverlay();
-     void            UpdateSelectionOverlay();
-     void            UpdateShrinkOverlay();
-     void            UpdateAllOverlays();
-diff --git sc/source/ui/view/cellsh1.cxx sc/source/ui/view/cellsh1.cxx
-index 8950395..eee4c62 100644
---- sc/source/ui/view/cellsh1.cxx
-+++ sc/source/ui/view/cellsh1.cxx
-@@ -1167,11 +1167,13 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )
- 
-         case SID_COPY:				// fuer Grafiken in DrawShell
-             {
--                WaitObject aWait( GetViewData()->GetDialogParent() );
-+                ScViewData* pViewData = GetViewData();
-+                WaitObject aWait( pViewData->GetDialogParent() );
-                 pTabViewShell->CopyToClip( NULL, FALSE, FALSE, TRUE );
-                 rReq.Done();
--				GetViewData()->SetPasteMode( (ScPasteFlags) (SC_PASTE_MODE | SC_PASTE_BORDER) );
-+				pViewData->SetPasteMode( (ScPasteFlags) (SC_PASTE_MODE | SC_PASTE_BORDER) );
- 				pTabViewShell->ShowCursor();
-+                pTabViewShell->UpdateCopySourceOverlay();
-             }
-             break;
- 
-@@ -1181,6 +1183,7 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )
-                 pTabViewShell->CutToClip( NULL, TRUE );
-                 rReq.Done();
- 				GetViewData()->SetPasteMode( SC_PASTE_MODE );
-+                pTabViewShell->UpdateCopySourceOverlay();
-             }
-             break;
- 
-diff --git sc/source/ui/view/gridwin.cxx sc/source/ui/view/gridwin.cxx
-index 8713b06..93a674e 100644
---- sc/source/ui/view/gridwin.cxx
-+++ sc/source/ui/view/gridwin.cxx
-@@ -122,6 +122,8 @@
- #include "tabprotection.hxx"
- #include "clipparam.hxx"
- #include "dpcontrol.hxx"
-+#include "overlayobject.hxx"
-+#include "basegfx/range/b2drange.hxx"
- 
- // #114409#
- #include <vcl/salbtype.hxx>		// FRound
-@@ -3060,7 +3062,7 @@ void __EXPORT ScGridWindow::KeyInput(const KeyEvent& rKEvt)
- 
- 		// hide the border around the copy source
- 		pViewData->SetPasteMode( SC_PASTE_NONE );
--		UpdateCursorOverlay();
-+		UpdateCopySourceOverlay();
- 		return;
- 	}
-     // wenn semi-Modeless-SfxChildWindow-Dialog oben, keine KeyInputs:
-@@ -3069,7 +3071,7 @@ void __EXPORT ScGridWindow::KeyInput(const KeyEvent& rKEvt)
- 		if (rKeyCode.GetCode() == KEY_ESCAPE)
- 		{
- 			pViewData->SetPasteMode( SC_PASTE_NONE );
--			UpdateCursorOverlay();
-+            UpdateCopySourceOverlay();
- 		}
-         //	query for existing note marker before calling ViewShell's keyboard handling
-         //	which may remove the marker
-@@ -5149,6 +5151,7 @@ void ScGridWindow::CursorChanged()
- void ScGridWindow::ImpCreateOverlayObjects()
- {
-     UpdateCursorOverlay();
-+    UpdateCopySourceOverlay();
-     UpdateSelectionOverlay();
-     UpdateAutoFillOverlay();
-     UpdateDragRectOverlay();
-@@ -5160,6 +5163,7 @@ void ScGridWindow::ImpCreateOverlayObjects()
- void ScGridWindow::ImpDestroyOverlayObjects()
- {
-     DeleteCursorOverlay();
-+    DeleteCopySourceOverlay();
-     DeleteSelectionOverlay();
-     DeleteAutoFillOverlay();
-     DeleteDragRectOverlay();
-@@ -5178,7 +5182,6 @@ void ScGridWindow::UpdateAllOverlays()
- void ScGridWindow::DeleteCursorOverlay()
- {
-     DELETEZ( mpOOCursors );
--    DELETEZ( mpOOSelectionBorder );
- }
- 
- void ScGridWindow::ConvertPixelRectsToRangeVector( const ::std::vector< Rectangle >& rPixelRects, 
-@@ -5202,8 +5205,20 @@ void ScGridWindow::ConvertPixelRectsToRangeVector( const ::std::vector< Rectangl
-     }
- }
- 
--void ScGridWindow::UpdateCopySourceOverlay( const MapMode& rDrawMode )
-+void ScGridWindow::DeleteCopySourceOverlay()
-+{
-+    DELETEZ( mpOOSelectionBorder );
-+}
-+
-+void ScGridWindow::UpdateCopySourceOverlay()
- {
-+    MapMode aDrawMode = GetDrawMapMode();
-+    MapMode aOldMode = GetMapMode();
-+    if ( aOldMode != aDrawMode )
-+        SetMapMode( aDrawMode );
-+
-+    DeleteCopySourceOverlay();
-+
-     if (!pViewData->ShowPasteSource())
-         return;
-     ::sdr::overlay::OverlayManager* pOverlayManager = getOverlayManager();
-@@ -5232,33 +5247,24 @@ void ScGridWindow::UpdateCopySourceOverlay( const MapMode& rDrawMode )
-     
-         Point aClipStartScrPos = pViewData->GetScrPos( nClipStartX, nClipStartY, eWhich );
-         Point aClipEndScrPos   = pViewData->GetScrPos( nClipEndX + 1, nClipEndY + 1, eWhich );
--    
-+        aClipStartScrPos -= Point(1, 1);
-         long nSizeXPix = aClipEndScrPos.X() - aClipStartScrPos.X();
-         long nSizeYPix = aClipEndScrPos.Y() - aClipStartScrPos.Y();
-     
--        aClipStartScrPos.X() -= 2;
--        aClipStartScrPos.Y() -= 2;
-+        Rectangle aRect( aClipStartScrPos, Size(nSizeXPix, nSizeYPix) );
-     
--        Rectangle aRect( aClipStartScrPos, Size( nSizeXPix + 3, nSizeYPix + 3 ) );
--    
--        std::vector<Rectangle> aPixelRects;
--    
--        aPixelRects.push_back(Rectangle( aRect.Left(), aRect.Top(), aRect.Left()+2, aRect.Bottom() ));
--        aPixelRects.push_back(Rectangle( aRect.Right()-2, aRect.Top(), aRect.Right(), aRect.Bottom() ));
--        aPixelRects.push_back(Rectangle( aRect.Left()+3, aRect.Top(), aRect.Right()-3, aRect.Top()+2 ));
--        aPixelRects.push_back(Rectangle( aRect.Left()+3, aRect.Bottom()-2, aRect.Right()-3, aRect.Bottom() ));
--    
--        sdr::overlay::OverlayObjectCell::RangeVector aRanges;
--        ConvertPixelRectsToRangeVector( aPixelRects, &aRanges, rDrawMode );
--    
--        ScOverlayType eType = SC_OVERLAY_BORDER_TRANSPARENT;
-     
-         Color aHighlight = GetSettings().GetStyleSettings().GetHighlightColor();
--        sdr::overlay::OverlayObjectCell* pOverlay = new sdr::overlay::OverlayObjectCell( eType, aHighlight, aRanges );
--    
--        pOverlayManager->add(*pOverlay);
--        mpOOSelectionBorder->append(*pOverlay);
-+
-+        Rectangle aLogic = PixelToLogic(aRect, aDrawMode);
-+        ::basegfx::B2DRange aRange(aLogic.Left(), aLogic.Top(), aLogic.Right(), aLogic.Bottom());
-+        ScOverlayDashedBorder* pDashedBorder = new ScOverlayDashedBorder(aRange, aHighlight, this);
-+        pOverlayManager->add(*pDashedBorder);
-+        mpOOSelectionBorder->append(*pDashedBorder);
-     }
-+
-+    if ( aOldMode != aDrawMode )
-+        SetMapMode( aOldMode );
- }
- 
- void ScGridWindow::UpdateCursorOverlay()
-@@ -5273,8 +5280,6 @@ void ScGridWindow::UpdateCursorOverlay()
- 
-     DeleteCursorOverlay();
- 
--    UpdateCopySourceOverlay( aDrawMode );
--
-     std::vector<Rectangle> aPixelRects;
- 
-     //
-diff --git sc/source/ui/view/makefile.mk sc/source/ui/view/makefile.mk
-index 312929c..9003498 100644
---- sc/source/ui/view/makefile.mk
-+++ sc/source/ui/view/makefile.mk
-@@ -98,6 +98,7 @@ SLOFILES =  \
-         $(SLO)$/output.obj \
-         $(SLO)$/output2.obj \
-         $(SLO)$/output3.obj \
-+        $(SLO)$/overlayobject.obj \
-         $(SLO)$/gridmerg.obj \
-         $(SLO)$/invmerge.obj \
-         $(SLO)$/cellmergeoption.obj \
-@@ -155,6 +156,7 @@ EXCEPTIONSFILES= \
-     $(SLO)$/gridwin.obj \
-     $(SLO)$/invmerge.obj \
-     $(SLO)$/output2.obj \
-+    $(SLO)$/overlayobject.obj \
-     $(SLO)$/pfuncache.obj \
-     $(SLO)$/spelldialog.obj \
-     $(SLO)$/cellsh1.obj \
-diff --git sc/source/ui/view/overlayobject.cxx sc/source/ui/view/overlayobject.cxx
-new file mode 100644
-index 0000000..5b16259
---- /dev/null
-+++ sc/source/ui/view/overlayobject.cxx
-@@ -0,0 +1,121 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * 
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: gridwin.hxx,v $
-+ * $Revision: 1.30 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+#include "precompiled_sc.hxx"
-+
-+#include "overlayobject.hxx"
-+#include "vcl/outdev.hxx"
-+#include "vcl/lineinfo.hxx"
-+#include "vcl/salbtype.hxx"
-+#include "vcl/window.hxx"
-+#include "tools/fract.hxx"
-+#include "basegfx/range/b2drange.hxx"
-+#include "basegfx/polygon/b2dpolygon.hxx"
-+#include "svx/sdr/overlay/overlaymanager.hxx"
-+
-+using ::sdr::overlay::OverlayObject;
-+using ::sdr::overlay::OverlayManager;
-+
-+#define DASH_UPDATE_INTERVAL 180    // in msec
-+
-+ScOverlayDashedBorder::ScOverlayDashedBorder(const ::basegfx::B2DRange& rRange, const Color& rColor, Window* pWin) :
-+    OverlayObject(rColor),
-+    mpParent(pWin),
-+    mbToggle(true)
-+{
-+    mbAllowsAnimation = true;
-+    maBaseRange = rRange;
-+}
-+
-+ScOverlayDashedBorder::~ScOverlayDashedBorder()
-+{
-+}
-+
-+void ScOverlayDashedBorder::Trigger(sal_uInt32 nTime)
-+{
-+    OverlayManager* pMgr = getOverlayManager();
-+    if (pMgr)
-+    {
-+        SetTime(nTime + DASH_UPDATE_INTERVAL);
-+        mbToggle = !mbToggle;
-+        pMgr->InsertEvent(this);
-+        objectChange();
-+    }
-+}
-+
-+void ScOverlayDashedBorder::transform(const ::basegfx::B2DHomMatrix& /*rMatrix*/)
-+{
-+}
-+
-+void ScOverlayDashedBorder::zoomHasChanged()
-+{
-+}
-+
-+void ScOverlayDashedBorder::drawGeometry(OutputDevice& rOutputDevice)
-+{
-+    using ::basegfx::B2DPoint;
-+    using ::basegfx::B2DPolygon;
-+
-+    OverlayManager* pMgr = getOverlayManager();
-+    if (!pMgr)
-+        return;
-+
-+    // save original AA and switch off for selection
-+    const sal_uInt16 nOriginalAA(rOutputDevice.GetAntialiasing());
-+    rOutputDevice.SetAntialiasing(0);
-+
-+    if (mbToggle)
-+    {    
-+        pMgr->setStripeColorA(getBaseColor());
-+        pMgr->setStripeColorB(COL_WHITE);
-+    }
-+    else
-+    {
-+        pMgr->setStripeColorA(COL_WHITE);
-+        pMgr->setStripeColorB(getBaseColor());
-+    }
-+
-+    B2DPolygon aPoly;
-+    aPoly.append(B2DPoint(maBaseRange.getMinX(), maBaseRange.getMinY()));
-+    aPoly.append(B2DPoint(maBaseRange.getMaxX(), maBaseRange.getMinY()));
-+    aPoly.append(B2DPoint(maBaseRange.getMaxX(), maBaseRange.getMaxY()));
-+    aPoly.append(B2DPoint(maBaseRange.getMinX(), maBaseRange.getMaxY()));
-+    aPoly.append(B2DPoint(maBaseRange.getMinX(), maBaseRange.getMinY()));
-+    ImpDrawPolygonStriped(rOutputDevice, aPoly);
-+
-+    // restore original AA
-+    rOutputDevice.SetAntialiasing(nOriginalAA);
-+}
-+
-+void ScOverlayDashedBorder::createBaseRange(OutputDevice& /*rOutputDevice*/)
-+{
-+}
-+
-diff --git sc/source/ui/view/tabview2.cxx sc/source/ui/view/tabview2.cxx
-index ddb584d..0cd6204 100644
---- sc/source/ui/view/tabview2.cxx
-+++ sc/source/ui/view/tabview2.cxx
-@@ -699,6 +699,13 @@ void ScTabView::ExpandBlockArea(SCsCOL nMovX, SCsROW nMovY)
-     ExpandBlock(nAreaX, nAreaY, eMode);
- }
- 
-+void ScTabView::UpdateCopySourceOverlay()
-+{
-+    for (sal_uInt8 i = 0; i < 4; ++i)
-+        if (pGridWin[i] && pGridWin[i]->IsVisible())
-+            pGridWin[i]->UpdateCopySourceOverlay();
-+}
-+
- void ScTabView::UpdateSelectionOverlay()
- {
-     for (USHORT i=0; i<4; i++)
-diff --git sc/source/ui/view/tabview3.cxx sc/source/ui/view/tabview3.cxx
-index 7130fba..ff7c2cf 100644
---- sc/source/ui/view/tabview3.cxx
-+++ sc/source/ui/view/tabview3.cxx
-@@ -1810,6 +1810,7 @@ void ScTabView::MakeEditView( ScEditEngineDefaulter* pEngine, SCCOL nCol, SCROW
-                     pGridWin[i]->HideCursor();
- 
-                     pGridWin[i]->DeleteCursorOverlay();
-+                    pGridWin[i]->DeleteCopySourceOverlay();
-                     pGridWin[i]->DeleteAutoFillOverlay();
- 
-                     // flush OverlayManager before changing MapMode to text edit
-diff --git sc/source/ui/view/viewfunc.cxx sc/source/ui/view/viewfunc.cxx
-index 7be076a..92ed34b 100644
---- sc/source/ui/view/viewfunc.cxx
-+++ sc/source/ui/view/viewfunc.cxx
-@@ -1940,7 +1940,10 @@ void ScViewFunc::DeleteMulti( BOOL bRows, BOOL bRecord )
- 
- void ScViewFunc::DeleteContents( USHORT nFlags, BOOL bRecord )
- {
--	GetViewData()->SetPasteMode( SC_PASTE_NONE );
-+    ScViewData* pViewData = GetViewData();
-+	pViewData->SetPasteMode( SC_PASTE_NONE );
-+    pViewData->GetViewShell()->UpdateCopySourceOverlay();
-+
-     // nur wegen Matrix nicht editierbar? Attribute trotzdem ok
-     BOOL bOnlyNotBecauseOfMatrix;
-     BOOL bEditable = SelectionEditable( &bOnlyNotBecauseOfMatrix );
-diff --git svx/inc/svx/sdr/animation/scheduler.hxx svx/inc/svx/sdr/animation/scheduler.hxx
-index 6ee3e41..3dd8871 100644
---- svx/inc/svx/sdr/animation/scheduler.hxx
-+++ svx/inc/svx/sdr/animation/scheduler.hxx
-@@ -61,7 +61,7 @@ namespace sdr
- 
-             // get/set time
-             sal_uInt32 GetTime() const;
--            void SetTime(sal_uInt32 nNew);
-+            void SVX_DLLPUBLIC SetTime(sal_uInt32 nNew);
- 
-             // execute event
-             virtual void Trigger(sal_uInt32 nTime) = 0;
-@@ -145,7 +145,7 @@ namespace sdr
-             void checkTimeout();
- 
-             // insert/remove events, wrapper to EventList methods
--            void InsertEvent(Event* pNew);
-+            void SVX_DLLPUBLIC InsertEvent(Event* pNew);
-             void RemoveEvent(Event* pOld);
- 
-             // get/set pause


More information about the ooo-build-commit mailing list