diff options
author | Release Engineers <releng@openoffice.org> | 2009-07-02 14:28:15 +0000 |
---|---|---|
committer | Release Engineers <releng@openoffice.org> | 2009-07-02 14:28:15 +0000 |
commit | be14833d0fe6be523299e09a72ae61d93a04bc04 (patch) | |
tree | c92ec7b430cbd748aa7ed639ad3500af5b70df14 /sc | |
parent | 43bafd9dd74489bac28edb5bbdb8a7d0b2442cc5 (diff) |
CWS-TOOLING: integrate CWS aw065
2009-06-17 13:48:12 +0200 aw r273068 : #99385# corrected small error in SCs selection visualisation
2009-06-16 15:45:28 +0200 wg r273021 : i102838
2009-06-16 12:46:07 +0200 wg r273016 : i102833
2009-06-11 17:40:29 +0200 aw r272895 : #i98870# added implementation for getPageCount helper
2009-06-11 16:39:54 +0200 aw r272885 : #i102663#, #i102667#, #i98870# incluide file typo corrected
2009-06-11 16:24:07 +0200 aw r272881 : #i102663#, #i102667#, #i98870# changes to SdrText, it's usage in SdrTextPrimitive2D and to OverlayObject base implementation. Also support for PageCountField added
2009-06-11 16:23:52 +0200 aw r272880 : #i102663#, #i102667#, #i98870# changes to SdrText, it's usage in SdrTextPrimitive2D and to OverlayObject base implementation. Also support for PageCountField added
2009-06-09 13:50:29 +0200 aw r272769 : #i98917# added support for the OverlayHatchRectanglePrimitive to follow rotation with it's hatch; simplified OverlayHatchRect
2009-06-09 13:04:06 +0200 aw r272766 : #i98870# re-added PageNumber identification in SdrTextPrimitive2D::get2DDecomposition
2009-06-08 18:56:05 +0200 aw r272744 : #i99385# added some last corrections to OverlayObjects in SD (had to do some merges on resync, needed to optically check and correct)
2009-06-08 11:17:57 +0200 aw r272725 : cws aw065: corrections after resync
2009-06-08 11:02:25 +0200 aw r272723 : cws aw065: corrections after resync
2009-06-08 10:36:22 +0200 aw r272722 : cws aw065: corrections after resync
2009-06-05 18:57:06 +0200 aw r272712 : CWS-TOOLING: rebase CWS aw065 to trunk@272291 (milestone: DEV300:m49)
2009-06-05 14:56:34 +0200 aw r272690 : #i89784# stripped old stuff no longer needed due to text-to-polygon conversion using primitives
2009-06-05 14:50:07 +0200 aw r272688 : #102091# removed on-model-lock suppression for SdrObject::ActionChanged()
2009-06-05 14:47:29 +0200 aw r272687 : #102091# corrected local value buffering in ScenePrimitive2D::get2DDecomposition
2009-06-03 17:53:32 +0200 aw r272599 : #i89784# version before stripping
2009-06-03 17:52:18 +0200 aw r272598 : #i89784# version before stripping
2009-05-28 17:15:47 +0200 aw r272420 : #i101872# old stuff removed/stripped
2009-05-28 17:15:32 +0200 aw r272419 : #i101872# old stuff removed/stripped
2009-05-28 17:15:15 +0200 aw r272418 : #i101872# old stuff removed/stripped
2009-05-28 17:14:45 +0200 aw r272417 : #i101872# old stuff removed/stripped
2009-05-28 12:13:56 +0200 aw r272396 : #i101872# stable hybrid state
2009-05-28 12:13:46 +0200 aw r272395 : #i101872# stable hybrid state
2009-05-28 12:13:35 +0200 aw r272394 : #i101872# stable hybrid state
2009-05-28 12:13:20 +0200 aw r272393 : #i101872# stable hybrid state
2009-05-28 12:13:05 +0200 aw r272392 : #i101872# stable hybrid state
2009-05-28 12:12:51 +0200 aw r272391 : #i101872# stable hybrid state
2009-05-15 16:56:02 +0200 aw r271952 : #i101872# HitTest unifications
2009-05-15 16:55:22 +0200 aw r271951 : #i101872# HitTest unifications
2009-05-15 16:55:12 +0200 aw r271950 : #i101872# HitTest unifications
2009-05-15 16:55:01 +0200 aw r271949 : #i101872# HitTest unifications
2009-05-15 16:54:51 +0200 aw r271948 : #i101872# HitTest unifications
2009-05-15 16:54:35 +0200 aw r271947 : #i101872# HitTest unifications
2009-05-15 16:54:22 +0200 aw r271946 : #i101872# HitTest unifications
2009-05-12 19:08:38 +0200 aw r271834 : #i101684# corrected AutoShape's preparation of text transformation due to different definitions in TextBounds
2009-05-12 15:44:49 +0200 aw r271827 : #i89784# expanded TextLayouterDevice::getTextOutlines() to support DXArray and X-Font scaling
2009-05-11 19:40:40 +0200 aw r271790 : #i99385# extended HitTest primitive usage, removed IsHdlHit implementations; prepared further HitTest simplifications
2009-05-11 19:40:25 +0200 aw r271789 : #i99385# extended HitTest primitive usage, removed IsHdlHit implementations; prepared further HitTest simplifications
2009-05-11 19:40:12 +0200 aw r271788 : #i99385# extended HitTest primitive usage, removed IsHdlHit implementations; prepared further HitTest simplifications
2009-05-11 13:01:53 +0200 aw r271765 : #i99385# corrections and optimizations
2009-05-08 14:48:40 +0200 aw r271718 : #i1016180# added optimizations in model operations when model is locked
2009-05-08 14:11:45 +0200 aw r271716 : #i101679# added flush() calls to OverlayManager when interaction step is prepared
2009-05-07 17:44:03 +0200 aw r271689 : #i99385# last corrections/changes
2009-05-07 17:43:47 +0200 aw r271688 : #i99385# last corrections/changes
2009-05-07 13:20:09 +0200 aw r271654 : #i99385# added changes from WFH
2009-05-07 13:19:38 +0200 aw r271653 : #i99385# added changes from WFH
2009-05-07 13:19:11 +0200 aw r271652 : #i99385# added changes from WFH
2009-05-07 11:33:17 +0200 aw r271643 : #i99385# corrections after resync
2009-05-07 11:17:31 +0200 aw r271642 : #i99385# corrections after resync
2009-05-06 18:46:53 +0200 aw r271609 : CWS-TOOLING: rebase CWS aw065 to trunk@271427 (milestone: DEV300:m47)
2009-05-05 18:24:03 +0200 aw r271548 : #i101443# force new text decomposition when TextBackgroundColor has changed
2009-05-05 17:44:42 +0200 aw r271542 : #i99385# 3rd round, simplifications and corrections done
2009-05-05 17:44:32 +0200 aw r271541 : #i99385# 3rd round, simplifications and corrections done
2009-05-05 17:44:20 +0200 aw r271540 : #i99385# 3rd round, simplifications and corrections done
2009-05-05 17:44:09 +0200 aw r271539 : #i99385# 3rd round, simplifications and corrections done
2009-05-05 15:48:38 +0200 aw r271527 : #i99385# 2nd round, usages checked and corrected
2009-05-05 15:48:15 +0200 aw r271526 : #i99385# 2nd round, usages checked and corrected
2009-05-05 15:48:03 +0200 aw r271525 : #i99385# 2nd round, usages checked and corrected
2009-05-05 15:47:51 +0200 aw r271524 : #i99385# 2nd round, usages checked and corrected
2009-04-27 18:33:10 +0200 aw r271300 : #i99385# state commit after all implementations are done
2009-04-27 15:36:53 +0200 aw r271283 : #i99385# state commit after all implementations are done
2009-04-27 15:27:49 +0200 aw r271280 : #i99385# state commit after all implementations are done
2009-04-27 15:27:33 +0200 aw r271279 : #i99385# state commit after all implementations are done
2009-04-27 15:27:00 +0200 aw r271278 : #i99385# state commit after all implementations are done
2009-04-27 15:26:15 +0200 aw r271277 : #i99385# state commit after all implementations are done
2009-04-27 15:25:40 +0200 aw r271275 : #i99385# state commit after all implementations are done
2009-04-27 15:25:19 +0200 aw r271274 : #i99385# state commit after all implementations are done
2009-04-27 15:24:00 +0200 aw r271272 : #i99385# state commit after all implementations are done
2009-03-19 17:12:00 +0100 aw r269757 : #i100360# corrected bitmap's PefSize calculation for bitmap filled objects when Bitmap is Pixel-based on it's mapping
2009-02-19 17:09:47 +0100 aw r268298 : #i98917# corrected attributes
2009-02-19 17:09:30 +0100 aw r268297 : #i98917# corrected attributes
2009-02-19 17:08:22 +0100 aw r268296 : #i98917# corrected attributes
2009-02-19 11:56:25 +0100 aw r268268 : #i98870# added extra code to react on PageNumber change
2009-02-18 16:57:24 +0100 aw r268243 : #i98917# in OverlayHatchRect::getGeometry the rotation was not applied to the TopLeft of the centered rectangle, but to the already extended one, thus the visualisation was rotating around the wrong edge
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/ui/Accessibility/AccessibleDocument.cxx | 25 | ||||
-rw-r--r-- | sc/source/ui/drawfunc/drawsh.cxx | 2 | ||||
-rw-r--r-- | sc/source/ui/drawfunc/fudraw.cxx | 6 | ||||
-rw-r--r-- | sc/source/ui/drawfunc/fupoor.cxx | 5 | ||||
-rw-r--r-- | sc/source/ui/drawfunc/fusel.cxx | 6 | ||||
-rw-r--r-- | sc/source/ui/drawfunc/fusel2.cxx | 3 | ||||
-rw-r--r-- | sc/source/ui/drawfunc/futext.cxx | 4 | ||||
-rw-r--r-- | sc/source/ui/inc/gridwin.hxx | 9 | ||||
-rw-r--r-- | sc/source/ui/unoobj/viewuno.cxx | 5 | ||||
-rw-r--r-- | sc/source/ui/view/gridwin.cxx | 158 | ||||
-rw-r--r-- | sc/source/ui/view/gridwin5.cxx | 4 | ||||
-rw-r--r-- | sc/util/makefile.mk | 2 |
12 files changed, 106 insertions, 123 deletions
diff --git a/sc/source/ui/Accessibility/AccessibleDocument.cxx b/sc/source/ui/Accessibility/AccessibleDocument.cxx index 616071be52d4..3ed9b4062a9d 100644 --- a/sc/source/ui/Accessibility/AccessibleDocument.cxx +++ b/sc/source/ui/Accessibility/AccessibleDocument.cxx @@ -563,31 +563,6 @@ uno::Reference< XAccessible > ScChildrenShapes::GetAt(const awt::Point& rPoint) --i; } -/* Window* pWindow = mpViewShell->GetWindowByPos(meSplitPos); - if (pWindow) - { - Point aPnt( rPoint.X, rPoint.Y ); - aPnt = pWindow->PixelToLogic( aPnt ); - SdrPage* pDrawPage = GetDrawPage(); - if (pDrawPage) - { - SdrObject * pObj = GetDrawPage()->CheckHit(aPnt, 1, NULL, false); - if (pObj) - { - uno::Reference<drawing::XShape> xShape (pObj->getUnoShape(), uno::UNO_QUERY); - SortedShapes::iterator aItr;; - if (FindShape(xShape, aItr)) - { - if ((*aItr) && (*aItr)->pAccShape) - xAccessible = (*aItr)->pAccShape; - else - xAccessible = Get(aItr - maZOrderedShapes.begin()); - } - else - DBG_ERRORFILE("a shape is not in the list"); - } - } - }*/ } return xAccessible; } diff --git a/sc/source/ui/drawfunc/drawsh.cxx b/sc/source/ui/drawfunc/drawsh.cxx index 8b86e0d886ef..63f958763479 100644 --- a/sc/source/ui/drawfunc/drawsh.cxx +++ b/sc/source/ui/drawfunc/drawsh.cxx @@ -230,7 +230,7 @@ void ScDrawShell::ExecDrawAttr( SfxRequest& rReq ) { SdrPageView* pPV = 0; SdrObject* pHit = 0; - if ( pView->PickObj( pWin->PixelToLogic( pViewData->GetMousePosPixel() ), pHit, pPV, SDRSEARCH_DEEP ) ) + if ( pView->PickObj( pWin->PixelToLogic( pViewData->GetMousePosPixel() ), pView->getHitTolLog(), pHit, pPV, SDRSEARCH_DEEP ) ) pObj = pHit; } diff --git a/sc/source/ui/drawfunc/fudraw.cxx b/sc/source/ui/drawfunc/fudraw.cxx index 2dccd6edbfe0..fadb8270b6a6 100644 --- a/sc/source/ui/drawfunc/fudraw.cxx +++ b/sc/source/ui/drawfunc/fudraw.cxx @@ -795,12 +795,12 @@ void FuDraw::ForcePointer(const MouseEvent* pMEvt) SdrPageView* pPV; ScMacroInfo* pInfo = 0; - if ( pView->PickObj(aPnt, pObj, pPV, SDRSEARCH_ALSOONMASTER) ) + if ( pView->PickObj(aPnt, pView->getHitTolLog(), pObj, pPV, SDRSEARCH_ALSOONMASTER) ) { if ( pObj->IsGroupObject() ) { SdrObject* pHit = 0; - if ( pView->PickObj(aMDPos, pHit, pPV, SDRSEARCH_DEEP ) ) + if ( pView->PickObj(aMDPos, pView->getHitTolLog(), pHit, pPV, SDRSEARCH_DEEP ) ) pObj = pHit; } pInfo = ScDrawLayer::GetMacroInfo( pObj ); @@ -825,7 +825,7 @@ void FuDraw::ForcePointer(const MouseEvent* pMEvt) // kann mit ALT unterdrueckt werden pWindow->SetPointer( Pointer( POINTER_REFHAND ) ); // Text-URL / ImageMap } - else if ( !bAlt && pView->PickObj(aPnt, pObj, pPV, SDRSEARCH_PICKMACRO) ) + else if ( !bAlt && pView->PickObj(aPnt, pView->getHitTolLog(), pObj, pPV, SDRSEARCH_PICKMACRO) ) { // kann mit ALT unterdrueckt werden SdrObjMacroHitRec aHitRec; //! muss da noch irgendwas gesetzt werden ???? diff --git a/sc/source/ui/drawfunc/fupoor.cxx b/sc/source/ui/drawfunc/fupoor.cxx index c26d3fdcb5fc..23aefe17c71b 100644 --- a/sc/source/ui/drawfunc/fupoor.cxx +++ b/sc/source/ui/drawfunc/fupoor.cxx @@ -42,6 +42,7 @@ #include "detfunc.hxx" #include "document.hxx" #include <vcl/svapp.hxx> +#include <svx/sdrhittesthelper.hxx> /************************************************************************* |* @@ -333,8 +334,10 @@ BOOL FuPoor::IsDetectiveHit( const Point& rLogicPos ) { USHORT nHitLog = (USHORT) pWindow->PixelToLogic( Size(pView->GetHitTolerancePixel(),0)).Width(); - if ( pObject->IsHit( rLogicPos, nHitLog ) ) + if(SdrObjectPrimitiveHit(*pObject, rLogicPos, nHitLog, *pPV, 0, false)) + { bFound = TRUE; + } } pObject = aIter.Next(); diff --git a/sc/source/ui/drawfunc/fusel.cxx b/sc/source/ui/drawfunc/fusel.cxx index 02fc2e38b0f6..79c466f9f2c3 100644 --- a/sc/source/ui/drawfunc/fusel.cxx +++ b/sc/source/ui/drawfunc/fusel.cxx @@ -171,7 +171,7 @@ BOOL __EXPORT FuSelection::MouseButtonDown(const MouseEvent& rMEvt) else { BOOL bAlt = rMEvt.IsMod2(); - if ( !bAlt && pView->PickObj(aMDPos, pObj, pPV, SDRSEARCH_PICKMACRO) ) + if ( !bAlt && pView->PickObj(aMDPos, pView->getHitTolLog(), pObj, pPV, SDRSEARCH_PICKMACRO) ) { pView->BegMacroObj(aMDPos, pObj, pPV, pWindow); bReturn = TRUE; @@ -179,7 +179,7 @@ BOOL __EXPORT FuSelection::MouseButtonDown(const MouseEvent& rMEvt) else { String sURL, sTarget; - if ( !bAlt && pView->PickObj(aMDPos, pObj, pPV, SDRSEARCH_ALSOONMASTER)) + if ( !bAlt && pView->PickObj(aMDPos, pView->getHitTolLog(), pObj, pPV, SDRSEARCH_ALSOONMASTER)) { // Support for imported Excel docs // Excel is of course not consistent and allows @@ -200,7 +200,7 @@ BOOL __EXPORT FuSelection::MouseButtonDown(const MouseEvent& rMEvt) if ( pObj->IsGroupObject() ) { SdrObject* pHit = NULL; - if ( pView->PickObj(aMDPos, pHit, pPV, SDRSEARCH_DEEP ) ) + if ( pView->PickObj(aMDPos, pView->getHitTolLog(), pHit, pPV, SDRSEARCH_DEEP ) ) pObj = pHit; } diff --git a/sc/source/ui/drawfunc/fusel2.cxx b/sc/source/ui/drawfunc/fusel2.cxx index aa518ee42a81..7c096fd51d71 100644 --- a/sc/source/ui/drawfunc/fusel2.cxx +++ b/sc/source/ui/drawfunc/fusel2.cxx @@ -53,6 +53,7 @@ #include "drwlayer.hxx" #include "docsh.hxx" #include "drawview.hxx" +#include <svx/sdrhittesthelper.hxx> // ----------------------------------------------------------------------- @@ -79,7 +80,7 @@ BOOL FuSelection::TestDetective( SdrPageView* pPV, const Point& rPos ) { USHORT nHitLog = (USHORT) pWindow->PixelToLogic( Size(pView->GetHitTolerancePixel(),0)).Width(); - if ( pObject->IsHit( rPos, nHitLog ) ) + if (SdrObjectPrimitiveHit(*pObject, rPos, nHitLog, *pPV, 0, false)) { ScViewData* pViewData = pViewShell->GetViewData(); ScSplitPos ePos = pViewShell->FindWindow( pWindow ); diff --git a/sc/source/ui/drawfunc/futext.cxx b/sc/source/ui/drawfunc/futext.cxx index 302d1c825a2a..ebcb2ad30802 100644 --- a/sc/source/ui/drawfunc/futext.cxx +++ b/sc/source/ui/drawfunc/futext.cxx @@ -193,7 +193,7 @@ BOOL __EXPORT FuText::MouseButtonDown(const MouseEvent& rMEvt) { if (pHdl == NULL && // pView->TakeTextEditObject(aMDPos, pObj, pPV) ) - pView->PickObj(aMDPos, pObj, pPV, SDRSEARCH_PICKTEXTEDIT) ) + pView->PickObj(aMDPos, pView->getHitTolLog(), pObj, pPV, SDRSEARCH_PICKTEXTEDIT) ) { SdrOutliner* pO = MakeOutliner(); lcl_UpdateHyphenator( *pO, pObj ); @@ -250,7 +250,7 @@ BOOL __EXPORT FuText::MouseButtonDown(const MouseEvent& rMEvt) BOOL bMacro = FALSE; // if (bMacro && pView->TakeMacroObject(aMDPos,pObj,pPV)) - if (bMacro && pView->PickObj(aMDPos, pObj, pPV, SDRSEARCH_PICKMACRO) ) + if (bMacro && pView->PickObj(aMDPos, pView->getHitTolLog(), pObj, pPV, SDRSEARCH_PICKMACRO) ) { pView->BegMacroObj(aMDPos,pObj,pPV,pWindow); diff --git a/sc/source/ui/inc/gridwin.hxx b/sc/source/ui/inc/gridwin.hxx index 9b31289d13d0..844d88055578 100644 --- a/sc/source/ui/inc/gridwin.hxx +++ b/sc/source/ui/inc/gridwin.hxx @@ -116,18 +116,19 @@ namespace sdr public: typedef ::std::vector< basegfx::B2DRange > RangeVector; + protected: + basegfx::B2DPolyPolygon impGetOverlayPolyPolygon() const; + private: ScOverlayType mePaintType; RangeVector maRectangles; - virtual void drawGeometry(OutputDevice& rOutputDevice); - virtual void createBaseRange(OutputDevice& rOutputDevice); + // geometry creation for OverlayObject + virtual drawinglayer::primitive2d::Primitive2DSequence createOverlayObjectPrimitive2DSequence(); public: OverlayObjectCell( ScOverlayType eType, const Color& rColor, const RangeVector& rRects); virtual ~OverlayObjectCell(); - - virtual void transform(const basegfx::B2DHomMatrix& rMatrix); }; } // end of namespace overlay diff --git a/sc/source/ui/unoobj/viewuno.cxx b/sc/source/ui/unoobj/viewuno.cxx index fa27b94a9956..c1af5ac9bb99 100644 --- a/sc/source/ui/unoobj/viewuno.cxx +++ b/sc/source/ui/unoobj/viewuno.cxx @@ -71,6 +71,7 @@ #include "gridwin.hxx" #include <com/sun/star/view/DocumentZoomType.hpp> #include "AccessibilityHints.hxx" +#include <svx/sdrhittesthelper.hxx> using namespace com::sun::star; @@ -1169,7 +1170,7 @@ uno::Reference< uno::XInterface > ScTabViewObj::GetClickedObject(const Point& rP SdrView* pDrawView = GetViewShell()->GetSdrView(); - if (pDrawPage && pDrawView) + if (pDrawPage && pDrawView && pDrawView->GetSdrPageView()) { Window* pActiveWin = pData->GetActiveWin(); Point aPos = pActiveWin->PixelToLogic(rPoint); @@ -1183,7 +1184,7 @@ uno::Reference< uno::XInterface > ScTabViewObj::GetClickedObject(const Point& rP while (i < nCount && !bFound) { SdrObject* pObj = pDrawPage->GetObj(i); - if (pObj && pObj->IsHit(aPos, nHitLog)) + if (pObj && SdrObjectPrimitiveHit(*pObj, aPos, nHitLog, *pDrawView->GetSdrPageView(), 0, false)) { xTarget.set(pObj->getUnoShape(), uno::UNO_QUERY); bFound = sal_True; diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index 918341294e9d..9521f05d4f4e 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -129,6 +129,11 @@ #include <svx/sdr/overlay/overlaymanager.hxx> #include <vcl/svapp.hxx> +#include <drawinglayer/primitive2d/invertprimitive2d.hxx> +#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> +#include <drawinglayer/primitive2d/unifiedalphaprimitive2d.hxx> +#include <basegfx/polygon/b2dpolygontools.hxx> + using namespace com::sun::star; using ::com::sun::star::uno::Sequence; using ::com::sun::star::uno::Any; @@ -5689,112 +5694,107 @@ namespace sdr mePaintType( eType ), maRectangles( rRects ) { + // no AA for selection overlays + allowAntiAliase(false); } OverlayObjectCell::~OverlayObjectCell() { } - void OverlayObjectCell::drawGeometry(OutputDevice& rOutputDevice) + drawinglayer::primitive2d::Primitive2DSequence OverlayObjectCell::createOverlayObjectPrimitive2DSequence() { - // safe original AA and switch off for selection - const sal_uInt16 nOriginalAA(rOutputDevice.GetAntialiasing()); - rOutputDevice.SetAntialiasing(0); - - // set colors - rOutputDevice.SetLineColor(); - rOutputDevice.SetFillColor(getBaseColor()); + drawinglayer::primitive2d::Primitive2DSequence aRetval; + const basegfx::BColor aRGBColor(getBaseColor().getBColor()); + const sal_uInt32 nCount(maRectangles.size()); - if ( mePaintType == SC_OVERLAY_BORDER_TRANSPARENT ) + if(nCount) { - // to draw the border, all rectangles have to be collected into a PolyPolygon - - PolyPolygon aPolyPoly; - sal_uInt32 nRectCount = maRectangles.size(); - for(sal_uInt32 nRect=0; nRect < nRectCount; ++nRect) + // create fill primities for all rectangles + // These ranges are meant as rectangles, so it is not sufficient to replace them + // using the derived polygon. That would leave out the bottom and right lines + // in a discrete width/height due to polygon painting conventions of leaving off those. + // To solve, it is either possible to create a view-dependent rectangle primitive + // handling this internally or to additionally create a hairline primitive to + // cover these areas (which i will do here) + const bool bIsTransparent(SC_OVERLAY_BORDER_TRANSPARENT == mePaintType); + aRetval.realloc(nCount * 2); + + for(sal_uInt32 a(0);a < nCount; a++) { - const basegfx::B2DRange& rRange(maRectangles[nRect]); - Rectangle aRectangle(FRound(rRange.getMinX()), FRound(rRange.getMinY()), FRound(rRange.getMaxX()), FRound(rRange.getMaxY())); - if ( nRectCount == 1 || nRect+1 < nRectCount ) - { - // simply add for all except the last rect - aPolyPoly.Insert( Polygon( aRectangle ) ); - } - else - { - PolyPolygon aTemp( aPolyPoly ); - aTemp.GetUnion( PolyPolygon( Polygon( aRectangle ) ), aPolyPoly ); - } - } - - rOutputDevice.DrawTransparent(aPolyPoly, 75); - - rOutputDevice.SetLineColor(getBaseColor()); - rOutputDevice.SetFillColor(); - - rOutputDevice.DrawPolyPolygon(aPolyPoly); - } - else - { - if ( mePaintType == SC_OVERLAY_INVERT ) - { - rOutputDevice.Push(); - rOutputDevice.SetRasterOp( ROP_XOR ); - rOutputDevice.SetFillColor( COL_WHITE ); + const basegfx::B2DRange& rRange(maRectangles[a]); + const basegfx::B2DPolygon aPolygon(basegfx::tools::createPolygonFromRect(rRange)); + + aRetval[a * 2] = drawinglayer::primitive2d::Primitive2DReference( + new drawinglayer::primitive2d::PolyPolygonColorPrimitive2D( + basegfx::B2DPolyPolygon(aPolygon), + aRGBColor)); + aRetval[(a * 2) + 1] = drawinglayer::primitive2d::Primitive2DReference( + new drawinglayer::primitive2d::PolyPolygonHairlinePrimitive2D( + basegfx::B2DPolyPolygon(aPolygon), + aRGBColor)); } - for(sal_uInt32 a(0L);a < maRectangles.size(); a++) + if(SC_OVERLAY_INVERT == mePaintType) { - const basegfx::B2DRange& rRange(maRectangles[a]); - const Rectangle aRectangle(FRound(rRange.getMinX()), FRound(rRange.getMinY()), FRound(rRange.getMaxX()), FRound(rRange.getMaxY())); + // embed all in invert primitive + const drawinglayer::primitive2d::Primitive2DReference aInvert( + new drawinglayer::primitive2d::InvertPrimitive2D( + aRetval)); - switch(mePaintType) - { - case SC_OVERLAY_INVERT : - { - rOutputDevice.DrawRect( aRectangle ); - break; - } - case SC_OVERLAY_SOLID : - { - rOutputDevice.DrawRect(aRectangle); - break; - } - default: - { - // SC_OVERLAY_BORDER_TRANSPARENT is handled separately - } - } + aRetval = drawinglayer::primitive2d::Primitive2DSequence(&aInvert, 1); } - - if ( mePaintType == SC_OVERLAY_INVERT ) + else if(bIsTransparent) { - rOutputDevice.Pop(); + // embed all rectangles in 75% transparent paint + const drawinglayer::primitive2d::Primitive2DReference aUnifiedAlpha( + new drawinglayer::primitive2d::UnifiedAlphaPrimitive2D( + aRetval, + 0.75)); + + // prepare merged PolyPoygon selection outline + const basegfx::B2DPolyPolygon aPolyPolygon(impGetOverlayPolyPolygon()); + const drawinglayer::primitive2d::Primitive2DReference aSelectionOutline( + new drawinglayer::primitive2d::PolyPolygonHairlinePrimitive2D( + aPolyPolygon, + aRGBColor)); + + // add both to result + aRetval.realloc(2); + aRetval[0] = aUnifiedAlpha; + aRetval[1] = aSelectionOutline; } } - // restore original AA - rOutputDevice.SetAntialiasing(nOriginalAA); + return aRetval; } - void OverlayObjectCell::createBaseRange(OutputDevice& /* rOutputDevice */) + basegfx::B2DPolyPolygon OverlayObjectCell::impGetOverlayPolyPolygon() const { - maBaseRange.reset(); + PolyPolygon aPolyPoly; + const sal_uInt32 nRectCount(maRectangles.size()); - for(sal_uInt32 a(0L); a < maRectangles.size(); a++) + for(sal_uInt32 nRect(0); nRect < nRectCount; ++nRect) { - maBaseRange.expand(maRectangles[a]); - } - } + const basegfx::B2DRange& rRange(maRectangles[nRect]); + const Rectangle aRectangle( + FRound(rRange.getMinX()), FRound(rRange.getMinY()), + FRound(rRange.getMaxX()), FRound(rRange.getMaxY())); - void OverlayObjectCell::transform(const basegfx::B2DHomMatrix& rMatrix) - { - for(sal_uInt32 a(0L); a < maRectangles.size(); a++) - { - maRectangles[a].transform(rMatrix); + if ( nRectCount == 1 || nRect+1 < nRectCount ) + { + // simply add for all except the last rect + aPolyPoly.Insert( Polygon( aRectangle ) ); + } + else + { + PolyPolygon aTemp( aPolyPoly ); + aTemp.GetUnion( PolyPolygon( Polygon( aRectangle ) ), aPolyPoly ); + } } - } + return aPolyPoly.getB2DPolyPolygon(); + } } // end of namespace overlay } // end of namespace sdr diff --git a/sc/source/ui/view/gridwin5.cxx b/sc/source/ui/view/gridwin5.cxx index 8739ee2b0b91..f3d5b2781607 100644 --- a/sc/source/ui/view/gridwin5.cxx +++ b/sc/source/ui/view/gridwin5.cxx @@ -338,12 +338,12 @@ void ScGridWindow::RequestHelp(const HelpEvent& rHEvt) SdrObject* pObj = 0; SdrPageView* pPV = 0; Point aMDPos = PixelToLogic( aPosPixel ); - if ( pDrView->PickObj(aMDPos, pObj, pPV, SDRSEARCH_ALSOONMASTER) ) + if ( pDrView->PickObj(aMDPos, pDrView->getHitTolLog(), pObj, pPV, SDRSEARCH_ALSOONMASTER) ) { if ( pObj->IsGroupObject() ) { SdrObject* pHit = 0; - if ( pDrView->PickObj(aMDPos, pHit, pPV, SDRSEARCH_DEEP ) ) + if ( pDrView->PickObj(aMDPos, pDrView->getHitTolLog(), pHit, pPV, SDRSEARCH_DEEP ) ) pObj = pHit; } #ifdef ISSUE66550_HLINK_FOR_SHAPES diff --git a/sc/util/makefile.mk b/sc/util/makefile.mk index fe2bf6bc636d..3fc0712cd996 100644 --- a/sc/util/makefile.mk +++ b/sc/util/makefile.mk @@ -85,6 +85,7 @@ SHL1STDLIBS= \ $(SVXLIB) \ $(GOODIESLIB) \ $(BASEGFXLIB) \ + $(DRAWINGLAYERLIB) \ $(VCLLIB) \ $(CPPULIB) \ $(CPPUHELPERLIB) \ @@ -189,6 +190,7 @@ SHL6STDLIBS= \ $(SVLLIB) \ $(SVXLIB) \ $(BASEGFXLIB) \ + $(DRAWINGLAYERLIB) \ $(VCLLIB) \ $(CPPULIB) \ $(CPPUHELPERLIB) \ |