summaryrefslogtreecommitdiff
path: root/svx/source
diff options
context:
space:
mode:
authorJens-Heiner Rechtien <hr@openoffice.org>2008-11-19 14:05:59 +0000
committerJens-Heiner Rechtien <hr@openoffice.org>2008-11-19 14:05:59 +0000
commitddcf9b9ff2caaffcc59d250b2d7f50ca3ab20330 (patch)
treead470e65da542ad344e126f1964ed2d7c248e3a2 /svx/source
parent1d100003531c186944b2d5dee020246d9d2f9a0b (diff)
CWS-TOOLING: integrate CWS aw058
2008-11-19 14:27:57 +0100 aw r263994 : #i95264# corrected line primitive range calculation for hairlines 2008-11-18 11:31:52 +0100 wg r263754 : i96156 2008-11-18 11:22:38 +0100 wg r263752 : i96156 2008-11-13 11:46:49 +0100 aw r263626 : #i93169# used flag the wrong way; true means that nothing was done yet 2008-11-12 15:33:41 +0100 wg r263601 : i96156 2008-11-12 13:22:38 +0100 wg r263592 : i95527 2008-11-12 13:18:51 +0100 wg r263591 : i95527 2008-10-29 13:22:02 +0100 aw r262794 : #i93485# identified reason and with PL's help changed problem accordingly with usage of an old fallback. This will need to be optimized again by HDU when he finds the time. 2008-10-28 18:23:04 +0100 aw r262763 : unxmacxi compiler warning fixed 2008-10-28 18:17:01 +0100 aw r262762 : unxmacxi compiler warning fixed 2008-10-28 17:55:18 +0100 aw r262761 : unxmacxi compiler warning fixed 2008-10-28 13:48:22 +0100 aw r262743 : #i93485# added UnifiedAlphaPrimitive2D to VclRenderer; corrected getB2DRange implementations for hairlines which are view-dependent 2008-10-28 12:40:55 +0100 aw r262735 : #i93485# had to move Pre/PostPaint to LocalPre/PostPaint since PrePaint is a virtual window method 2008-10-27 15:54:10 +0100 aw r262679 : #i19871# adapted the call order to parent implementations in some Nbc methods in SdrPathObj due to errors in SnapRect recalculation when GluePoints are involved 2008-10-24 18:31:48 +0200 aw r262661 : #i77187# disable all buttons in bezier toolbar when move and/or resize protected object is involved 2008-10-24 18:30:16 +0200 aw r262660 : #i77187# simplified and secured model changers, added toolbar update, disabled move drag start when polygon point is selected 2008-10-24 12:57:50 +0200 hdu r262635 : #i93485# use device transformation for SAL layer 2008-10-24 12:41:37 +0200 hdu r262634 : #i93485# use device transformation for SAL layer 2008-10-23 19:46:12 +0200 aw r262630 : mac compiler warning fixed 2008-10-23 18:15:02 +0200 aw r262628 : #i93485# modified dialog previews to use prerendering 2008-10-23 18:14:27 +0200 aw r262627 : #i93485# added assert when render helper uses Window as copy source 2008-10-22 18:07:30 +0200 aw r262610 : #i95264# fixes assertion 2008-10-22 14:31:51 +0200 aw r262606 : #i89661# also enabling DrawTransparent shortcut for VCL-Renderer 2008-10-22 14:10:31 +0200 aw r262604 : #i89661# new HitTest 2D primitive to support BoundRect and HitTest calculations/tests 2008-10-22 14:09:22 +0200 aw r262603 : #i89661# new HitTest tolerance, new TextFrame selection overlay, support for HitTest geometry 2008-10-22 14:08:16 +0200 aw r262602 : #i89661# correcting old HitTest tolerance expansion 2008-10-20 15:31:48 +0200 aw r262321 : #i89661# added patch to test it 2008-10-20 11:50:31 +0200 aw r262310 : #i87762# removed no longer used icons (aw053) 2008-10-17 15:41:48 +0200 aw r262288 : #i93169#, #i93180# FormControl corrections for Primitive handling 2008-10-17 15:40:54 +0200 aw r262287 : #i93169#, #i93180# FormControl corrections for Primitive handling 2008-10-16 11:12:44 +0200 aw r262253 : #i93595# removed superfluous grid interface 2008-10-16 11:11:20 +0200 aw r262252 : #i93595# changed grid display to sub-grid usage and new defaults 2008-10-15 15:09:40 +0200 aw r262234 : #i93597# moved flag for only vertical PageBorder, added reacting on it to primitive creation 2008-10-15 15:09:09 +0200 aw r262233 : #i93597# moved flag for only vertical PageBorder 2008-10-15 15:08:46 +0200 aw r262232 : #i93597# moved flag for only vertical PageBorder, added reacting on it to primitive creation 2008-10-14 16:27:07 +0200 aw r262207 : #i93648# (flushViewObjectContacts) and #i93318# (propertyChange) 2008-10-14 16:25:10 +0200 aw r262206 : #i93318# back to old state since detecting a change is not placed well at the primitive (which is a graphical information at the itme it was fetched). Instead i will add the needed check and flush at the FormControl's VOC 2008-10-14 13:47:38 +0200 aw r262201 : #i93318# added a change listener to the XControlModel and code to make the operator== at control primitive fail
Diffstat (limited to 'svx/source')
-rw-r--r--svx/source/accessibility/AccessibleStaticTextBase.cxx4
-rw-r--r--svx/source/dialog/dlgctrl.cxx341
-rw-r--r--svx/source/sdr/contact/viewcontact.cxx25
-rw-r--r--svx/source/sdr/contact/viewcontactofe3d.cxx9
-rw-r--r--svx/source/sdr/contact/viewcontactofsdrpage.cxx28
-rw-r--r--svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx84
-rw-r--r--svx/source/sdr/overlay/makefile.mk1
-rw-r--r--svx/source/sdr/overlay/overlayhatchrect.cxx149
-rw-r--r--svx/source/sdr/primitive2d/sdrcaptionprimitive2d.cxx12
-rw-r--r--svx/source/sdr/primitive2d/sdrconnectorprimitive2d.cxx10
-rw-r--r--svx/source/sdr/primitive2d/sdrellipseprimitive2d.cxx21
-rw-r--r--svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx10
-rw-r--r--svx/source/sdr/primitive2d/sdrmeasureprimitive2d.cxx48
-rw-r--r--svx/source/sdr/primitive2d/sdrole2primitive2d.cxx55
-rw-r--r--svx/source/sdr/primitive2d/sdrpathprimitive2d.cxx14
-rw-r--r--svx/source/sdr/primitive2d/sdrrectangleprimitive2d.cxx36
-rw-r--r--svx/source/svdraw/sdrmasterpagedescriptor.cxx9
-rw-r--r--svx/source/svdraw/svddrgv.cxx39
-rw-r--r--svx/source/svdraw/svdedtv1.cxx84
-rw-r--r--svx/source/svdraw/svdhdl.cxx139
-rw-r--r--svx/source/svdraw/svdmrkv.cxx77
-rw-r--r--svx/source/svdraw/svdobj.cxx31
-rw-r--r--svx/source/svdraw/svdopath.cxx34
-rw-r--r--svx/source/svdraw/svdorect.cxx46
-rw-r--r--svx/source/svdraw/svdouno.cxx6
-rw-r--r--svx/source/svdraw/svdpage.cxx78
-rw-r--r--svx/source/svdraw/svdpntv.cxx1
-rw-r--r--svx/source/unodraw/unoshape.cxx16
-rw-r--r--svx/source/unoedit/unoedprx.cxx4
29 files changed, 916 insertions, 495 deletions
diff --git a/svx/source/accessibility/AccessibleStaticTextBase.cxx b/svx/source/accessibility/AccessibleStaticTextBase.cxx
index d945044b1cf1..b611b62b47e6 100644
--- a/svx/source/accessibility/AccessibleStaticTextBase.cxx
+++ b/svx/source/accessibility/AccessibleStaticTextBase.cxx
@@ -722,8 +722,8 @@ namespace accessibility
// #104481# Return the empty string for 'no selection'
if( nStart < 0 || nEnd < 0 )
return ::rtl::OUString();
- else
- return getTextRange( nStart, nEnd );
+
+ return getTextRange( nStart, nEnd );
}
sal_Int32 SAL_CALL AccessibleStaticTextBase::getSelectionStart() throw (uno::RuntimeException)
diff --git a/svx/source/dialog/dlgctrl.cxx b/svx/source/dialog/dlgctrl.cxx
index c48e74e1946a..beef4fe8ae48 100644
--- a/svx/source/dialog/dlgctrl.cxx
+++ b/svx/source/dialog/dlgctrl.cxx
@@ -56,6 +56,11 @@
#include <basegfx/polygon/b2dpolygon.hxx>
#include <svx/svdorect.hxx>
+#include <svx/svdmodel.hxx>
+#include <svx/svdopath.hxx>
+#include <svx/sdr/contact/objectcontactofobjlistpainter.hxx>
+#include <svx/sdr/contact/displayinfo.hxx>
+
#define OUTPUT_DRAWMODE_COLOR (DRAWMODE_DEFAULT)
#define OUTPUT_DRAWMODE_CONTRAST (DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT)
@@ -1895,36 +1900,146 @@ void LineEndLB::Modify( XLineEndEntry* pEntry, USHORT nPos, Bitmap* pBmp,
InsertEntry( pEntry->GetName(), nPos );
}
+//////////////////////////////////////////////////////////////////////////////
+
+void SvxPreviewBase::InitSettings(bool bForeground, bool bBackground)
+{
+ const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
+
+ if(bForeground)
+ {
+ svtools::ColorConfig aColorConfig;
+ Color aTextColor(aColorConfig.GetColorValue(svtools::FONTCOLOR).nColor);
+
+ if(IsControlForeground())
+ {
+ aTextColor = GetControlForeground();
+ }
+
+ getBufferDevice().SetTextColor(aTextColor);
+ }
+
+ if(bBackground)
+ {
+ if(IsControlBackground())
+ {
+ getBufferDevice().SetBackground(GetControlBackground());
+ }
+ else
+ {
+ getBufferDevice().SetBackground(rStyleSettings.GetWindowColor());
+ }
+ }
+
+ // do not paint background self, it gets painted buffered
+ SetControlBackground();
+ SetBackground();
+
+ Invalidate();
+}
+
+SvxPreviewBase::SvxPreviewBase( Window* pParent, const ResId& rResId )
+: Control( pParent, rResId ),
+ mpModel( new SdrModel() ),
+ mpBufferDevice( new VirtualDevice(*this) )
+{
+ // Draw the control's border as a flat thin black line.
+ SetBorderStyle(WINDOW_BORDER_MONO);
+ SetDrawMode( GetDisplayBackground().GetColor().IsDark() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR );
+ SetMapMode(MAP_100TH_MM);
+
+ // init model
+ mpModel->GetItemPool().FreezeIdRanges();
+}
+
+SvxPreviewBase::~SvxPreviewBase()
+{
+ delete mpModel;
+ delete mpBufferDevice;
+}
+
+void SvxPreviewBase::LocalPrePaint()
+{
+ // init BufferDevice
+ if(mpBufferDevice->GetOutputSizePixel() != GetOutputSizePixel())
+ {
+ mpBufferDevice->SetDrawMode(GetDrawMode());
+ mpBufferDevice->SetSettings(GetSettings());
+ mpBufferDevice->SetAntialiasing(GetAntialiasing());
+ mpBufferDevice->SetOutputSizePixel(GetOutputSizePixel());
+ mpBufferDevice->SetMapMode(GetMapMode());
+ }
+
+ mpBufferDevice->Erase();
+}
+
+void SvxPreviewBase::LocalPostPaint()
+{
+ // copy to front (in pixel mode)
+ const bool bWasEnabledSrc(mpBufferDevice->IsMapModeEnabled());
+ const bool bWasEnabledDst(IsMapModeEnabled());
+ const Point aEmptyPoint;
+
+ mpBufferDevice->EnableMapMode(false);
+ EnableMapMode(false);
+
+ DrawOutDev(
+ aEmptyPoint, GetOutputSizePixel(),
+ aEmptyPoint, GetOutputSizePixel(),
+ *mpBufferDevice);
+
+ mpBufferDevice->EnableMapMode(bWasEnabledSrc);
+ EnableMapMode(bWasEnabledDst);
+}
+
+void SvxPreviewBase::StateChanged(StateChangedType nType)
+{
+ Control::StateChanged(nType);
+
+ if(STATE_CHANGE_CONTROLFOREGROUND == nType)
+ {
+ InitSettings(true, false);
+ }
+ else if(STATE_CHANGE_CONTROLBACKGROUND == nType)
+ {
+ InitSettings(false, true);
+ }
+}
+
+void SvxPreviewBase::DataChanged(const DataChangedEvent& rDCEvt)
+{
+ SetDrawMode(GetDisplayBackground().GetColor().IsDark() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR);
+
+ if((DATACHANGED_SETTINGS == rDCEvt.GetType()) && (rDCEvt.GetFlags() & SETTINGS_STYLE))
+ {
+ InitSettings(true, true);
+ }
+ else
+ {
+ Control::DataChanged(rDCEvt);
+ }
+}
+
/*************************************************************************
|*
|* SvxXLinePreview::SvxXLinePreview()
|*
*************************************************************************/
-#include <svx/svdmodel.hxx>
-#include <svx/svdopath.hxx>
-#include <svx/sdr/contact/objectcontactofobjlistpainter.hxx>
-#include <svx/sdr/contact/displayinfo.hxx>
SvxXLinePreview::SvxXLinePreview( Window* pParent, const ResId& rResId )
-: Control( pParent, rResId ),
+: SvxPreviewBase( pParent, rResId ),
mpLineObjA( 0L ),
mpLineObjB( 0L ),
mpLineObjC( 0L ),
- mpModel( 0L ),
mpGraphic( 0L ),
mbWithSymbol( sal_False )
{
- SetMapMode( MAP_100TH_MM );
const Size aOutputSize(GetOutputSize());
InitSettings( TRUE, TRUE );
const sal_Int32 nDistance(500L);
const sal_Int32 nAvailableLength(aOutputSize.Width() - (4 * nDistance));
- // create model
- mpModel = new SdrModel();
- mpModel->GetItemPool().FreezeIdRanges();
-
// create DrawObectA
const sal_Int32 aYPosA(aOutputSize.Height() / 2);
const basegfx::B2DPoint aPointA1( nDistance, aYPosA);
@@ -1933,7 +2048,7 @@ SvxXLinePreview::SvxXLinePreview( Window* pParent, const ResId& rResId )
aPolygonA.append(aPointA1);
aPolygonA.append(aPointA2);
mpLineObjA = new SdrPathObj(OBJ_LINE, basegfx::B2DPolyPolygon(aPolygonA));
- mpLineObjA->SetModel(mpModel);
+ mpLineObjA->SetModel(&getModel());
// create DrawObectB
const sal_Int32 aYPosB1((aOutputSize.Height() * 3) / 4);
@@ -1946,7 +2061,7 @@ SvxXLinePreview::SvxXLinePreview( Window* pParent, const ResId& rResId )
aPolygonB.append(aPointB2);
aPolygonB.append(aPointB3);
mpLineObjB = new SdrPathObj(OBJ_PLIN, basegfx::B2DPolyPolygon(aPolygonB));
- mpLineObjB->SetModel(mpModel);
+ mpLineObjB->SetModel(&getModel());
// create DrawObectC
const basegfx::B2DPoint aPointC1( aPointB3.getX() + nDistance, aYPosB1);
@@ -1957,11 +2072,7 @@ SvxXLinePreview::SvxXLinePreview( Window* pParent, const ResId& rResId )
aPolygonC.append(aPointC2);
aPolygonC.append(aPointC3);
mpLineObjC = new SdrPathObj(OBJ_PLIN, basegfx::B2DPolyPolygon(aPolygonC));
- mpLineObjC->SetModel(mpModel);
-
- // Draw the control's border as a flat thin black line.
- SetBorderStyle (WINDOW_BORDER_MONO);
- SetDrawMode( GetDisplayBackground().GetColor().IsDark() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR );
+ mpLineObjC->SetModel(&getModel());
}
SvxXLinePreview::~SvxXLinePreview()
@@ -1969,33 +2080,6 @@ SvxXLinePreview::~SvxXLinePreview()
SdrObject::Free( mpLineObjA );
SdrObject::Free( mpLineObjB );
SdrObject::Free( mpLineObjC );
- delete mpModel;
-}
-
-// -----------------------------------------------------------------------
-
-void SvxXLinePreview::InitSettings( BOOL bForeground, BOOL bBackground )
-{
- const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
-
- if ( bForeground )
- {
- svtools::ColorConfig aColorConfig;
- Color aTextColor( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor );
-
- if ( IsControlForeground() )
- aTextColor = GetControlForeground();
- SetTextColor( aTextColor );
- }
-
- if ( bBackground )
- {
- if ( IsControlBackground() )
- SetBackground( GetControlBackground() );
- else
- SetBackground( rStyleSettings.GetWindowColor() );
- }
- Invalidate();
}
// -----------------------------------------------------------------------
@@ -2037,15 +2121,15 @@ void SvxXLinePreview::SetLineAttributes(const SfxItemSet& rItemSet)
void SvxXLinePreview::Paint( const Rectangle& )
{
- const Size aOutputSize(GetOutputSize());
+ LocalPrePaint();
- // paint objects
+ // paint objects to buffer device
sdr::contact::SdrObjectVector aObjectVector;
aObjectVector.push_back(mpLineObjA);
aObjectVector.push_back(mpLineObjB);
aObjectVector.push_back(mpLineObjC);
- sdr::contact::ObjectContactOfObjListPainter aPainter(*this, aObjectVector, 0);
+ sdr::contact::ObjectContactOfObjListPainter aPainter(getBufferDevice(), aObjectVector, 0);
sdr::contact::DisplayInfo aDisplayInfo;
// do processing
@@ -2053,35 +2137,14 @@ void SvxXLinePreview::Paint( const Rectangle& )
if ( mbWithSymbol && mpGraphic )
{
+ const Size aOutputSize(GetOutputSize());
Point aPos = Point( aOutputSize.Width() / 3, aOutputSize.Height() / 2 );
aPos.X() -= maSymbolSize.Width() / 2;
aPos.Y() -= maSymbolSize.Height() / 2;
- mpGraphic->Draw( this, aPos, maSymbolSize );
+ mpGraphic->Draw( &getBufferDevice(), aPos, maSymbolSize );
}
-}
-
-// -----------------------------------------------------------------------
-
-void SvxXLinePreview::StateChanged( StateChangedType nType )
-{
- if ( nType == STATE_CHANGE_CONTROLFOREGROUND )
- InitSettings( TRUE, FALSE );
- else if ( nType == STATE_CHANGE_CONTROLBACKGROUND )
- InitSettings( FALSE, TRUE );
-
- Control::StateChanged( nType );
-}
-
-// -----------------------------------------------------------------------
-
-void SvxXLinePreview::DataChanged( const DataChangedEvent& rDCEvt )
-{
- if ( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
- InitSettings( TRUE, TRUE );
- else
- Control::DataChanged( rDCEvt );
- SetDrawMode( GetDisplayBackground().GetColor().IsDark() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR );
+ LocalPostPaint();
}
/*************************************************************************
@@ -2090,57 +2153,21 @@ void SvxXLinePreview::DataChanged( const DataChangedEvent& rDCEvt )
|*
*************************************************************************/
-void SvxXRectPreview::InitSettings(bool bForeground, bool bBackground)
-{
- const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
-
- if ( bForeground )
- {
- svtools::ColorConfig aColorConfig;
- Color aTextColor( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor );
-
- if ( IsControlForeground() )
- aTextColor = GetControlForeground();
- SetTextColor( aTextColor );
- }
-
- if ( bBackground )
- {
- if ( IsControlBackground() )
- SetBackground( GetControlBackground() );
- else
- SetBackground( rStyleSettings.GetWindowColor() );
- }
- Invalidate();
-}
-
SvxXRectPreview::SvxXRectPreview( Window* pParent, const ResId& rResId )
-: Control( pParent, rResId ),
- mpRectangleObject(0),
- mpModel(0)
+: SvxPreviewBase( pParent, rResId ),
+ mpRectangleObject(0)
{
- SetBorderStyle(WINDOW_BORDER_MONO);
- SetMapMode(MAP_100TH_MM);
InitSettings(true, true);
- // create model
- mpModel = new SdrModel();
- mpModel->GetItemPool().FreezeIdRanges();
-
// create RectangleObject
const Rectangle aObjectSize(Point(), GetOutputSize());
mpRectangleObject = new SdrRectObj(aObjectSize);
- mpRectangleObject->SetModel(mpModel);
-
- // Draw the control's border as a flat thin black line.
- SetBorderStyle (WINDOW_BORDER_MONO);
- SetDrawMode( GetDisplayBackground().GetColor().IsDark() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR );
+ mpRectangleObject->SetModel(&getModel());
}
SvxXRectPreview::~SvxXRectPreview()
{
SdrObject::Free(mpRectangleObject);
- delete mpModel;
}
void SvxXRectPreview::SetAttributes(const SfxItemSet& rItemSet)
@@ -2151,30 +2178,18 @@ void SvxXRectPreview::SetAttributes(const SfxItemSet& rItemSet)
void SvxXRectPreview::Paint( const Rectangle& )
{
+ LocalPrePaint();
+
sdr::contact::SdrObjectVector aObjectVector;
+
aObjectVector.push_back(mpRectangleObject);
- sdr::contact::ObjectContactOfObjListPainter aPainter(*this, aObjectVector, 0);
+
+ sdr::contact::ObjectContactOfObjListPainter aPainter(getBufferDevice(), aObjectVector, 0);
sdr::contact::DisplayInfo aDisplayInfo;
aPainter.ProcessDisplay(aDisplayInfo);
-}
-void SvxXRectPreview::StateChanged( StateChangedType nType )
-{
- if ( nType == STATE_CHANGE_CONTROLFOREGROUND )
- InitSettings(true, false);
- else if ( nType == STATE_CHANGE_CONTROLBACKGROUND )
- InitSettings(false, true);
-
- Control::StateChanged( nType );
-}
-
-void SvxXRectPreview::DataChanged( const DataChangedEvent& rDCEvt )
-{
- if ( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
- InitSettings(true, true);
- else
- Control::DataChanged( rDCEvt );
+ LocalPostPaint();
}
/*************************************************************************
@@ -2183,44 +2198,13 @@ void SvxXRectPreview::DataChanged( const DataChangedEvent& rDCEvt )
|*
*************************************************************************/
-void SvxXShadowPreview::InitSettings(bool bForeground, bool bBackground)
-{
- const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
-
- if ( bForeground )
- {
- svtools::ColorConfig aColorConfig;
- Color aTextColor( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor );
-
- if ( IsControlForeground() )
- aTextColor = GetControlForeground();
- SetTextColor( aTextColor );
- }
-
- if ( bBackground )
- {
- if ( IsControlBackground() )
- SetBackground( GetControlBackground() );
- else
- SetBackground( rStyleSettings.GetWindowColor() );
- }
- Invalidate();
-}
-
SvxXShadowPreview::SvxXShadowPreview( Window* pParent, const ResId& rResId )
-: Control( pParent, rResId ),
+: SvxPreviewBase( pParent, rResId ),
mpRectangleObject(0),
- mpRectangleShadow(0),
- mpModel(0)
+ mpRectangleShadow(0)
{
- SetBorderStyle(WINDOW_BORDER_MONO);
- SetMapMode(MAP_100TH_MM);
InitSettings(true, true);
- // create model
- mpModel = new SdrModel();
- mpModel->GetItemPool().FreezeIdRanges();
-
// prepare size
Size aSize = GetOutputSize();
aSize.Width() = aSize.Width() / 3;
@@ -2229,23 +2213,18 @@ SvxXShadowPreview::SvxXShadowPreview( Window* pParent, const ResId& rResId )
// create RectangleObject
const Rectangle aObjectSize( Point( aSize.Width(), aSize.Height() ), aSize );
mpRectangleObject = new SdrRectObj(aObjectSize);
- mpRectangleObject->SetModel(mpModel);
+ mpRectangleObject->SetModel(&getModel());
// create ShadowObject
const Rectangle aShadowSize( Point( aSize.Width(), aSize.Height() ), aSize );
mpRectangleShadow = new SdrRectObj(aShadowSize);
- mpRectangleShadow->SetModel(mpModel);
-
- // Draw the control's border as a flat thin black line.
- SetBorderStyle (WINDOW_BORDER_MONO);
- SetDrawMode( GetDisplayBackground().GetColor().IsDark() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR );
+ mpRectangleShadow->SetModel(&getModel());
}
SvxXShadowPreview::~SvxXShadowPreview()
{
SdrObject::Free(mpRectangleObject);
SdrObject::Free(mpRectangleShadow);
- delete mpModel;
}
void SvxXShadowPreview::SetRectangleAttributes(const SfxItemSet& rItemSet)
@@ -2269,31 +2248,19 @@ void SvxXShadowPreview::SetShadowPosition(const Point& rPos)
void SvxXShadowPreview::Paint( const Rectangle& )
{
+ LocalPrePaint();
+
sdr::contact::SdrObjectVector aObjectVector;
+
aObjectVector.push_back(mpRectangleShadow);
aObjectVector.push_back(mpRectangleObject);
- sdr::contact::ObjectContactOfObjListPainter aPainter(*this, aObjectVector, 0);
+
+ sdr::contact::ObjectContactOfObjListPainter aPainter(getBufferDevice(), aObjectVector, 0);
sdr::contact::DisplayInfo aDisplayInfo;
aPainter.ProcessDisplay(aDisplayInfo);
-}
-
-void SvxXShadowPreview::StateChanged( StateChangedType nType )
-{
- if ( nType == STATE_CHANGE_CONTROLFOREGROUND )
- InitSettings( TRUE, FALSE );
- else if ( nType == STATE_CHANGE_CONTROLBACKGROUND )
- InitSettings( FALSE, TRUE );
- Control::StateChanged( nType );
-}
-
-void SvxXShadowPreview::DataChanged( const DataChangedEvent& rDCEvt )
-{
- if ( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
- InitSettings( TRUE, TRUE );
- else
- Control::DataChanged( rDCEvt );
+ LocalPostPaint();
}
// -----------------------------------------------------------------------
diff --git a/svx/source/sdr/contact/viewcontact.cxx b/svx/source/sdr/contact/viewcontact.cxx
index d3f09bcffdfe..fa9bc88d8f73 100644
--- a/svx/source/sdr/contact/viewcontact.cxx
+++ b/svx/source/sdr/contact/viewcontact.cxx
@@ -73,7 +73,12 @@ namespace sdr
ViewContact::~ViewContact()
{
- // get rid of all contacts
+ deleteAllVOCs();
+ }
+
+ void ViewContact::deleteAllVOCs()
+ {
+ // get rid of all VOCs
// #i84257# To avoid that each 'delete pCandidate' again uses
// the local RemoveViewObjectContact with a search and removal in the
// vector, simply copy and clear local vector.
@@ -301,6 +306,24 @@ namespace sdr
// default returns empty reference
return drawinglayer::primitive2d::Primitive2DSequence();
}
+
+ void ViewContact::flushViewObjectContacts(bool bWithHierarchy)
+ {
+ if(bWithHierarchy)
+ {
+ // flush DrawingLayer hierarchy
+ const sal_uInt32 nCount(GetObjectCount());
+
+ for(sal_uInt32 a(0); a < nCount; a++)
+ {
+ ViewContact& rChild = GetViewContact(a);
+ rChild.flushViewObjectContacts(bWithHierarchy);
+ }
+ }
+
+ // delete local VOCs
+ deleteAllVOCs();
+ }
} // end of namespace contact
} // end of namespace sdr
diff --git a/svx/source/sdr/contact/viewcontactofe3d.cxx b/svx/source/sdr/contact/viewcontactofe3d.cxx
index f8d2558baf90..77a5bf4dff3c 100644
--- a/svx/source/sdr/contact/viewcontactofe3d.cxx
+++ b/svx/source/sdr/contact/viewcontactofe3d.cxx
@@ -211,14 +211,7 @@ namespace sdr
if(bFallbackToCreateAsLineForTest)
{
- ::std::vector< double > aEmptyVector;
- return new drawinglayer::attribute::SdrLineAttribute(
- basegfx::B2DLINEJOIN_NONE,
- 0.0,
- 0.0,
- rBColor,
- aEmptyVector,
- 0.0);
+ return new drawinglayer::attribute::SdrLineAttribute(rBColor);
}
else
{
diff --git a/svx/source/sdr/contact/viewcontactofsdrpage.cxx b/svx/source/sdr/contact/viewcontactofsdrpage.cxx
index de45da9e0b51..01eb6699c4aa 100644
--- a/svx/source/sdr/contact/viewcontactofsdrpage.cxx
+++ b/svx/source/sdr/contact/viewcontactofsdrpage.cxx
@@ -305,18 +305,40 @@ namespace sdr
drawinglayer::primitive2d::Primitive2DSequence ViewContactOfOuterPageBorder::createViewIndependentPrimitive2DSequence() const
{
+ drawinglayer::primitive2d::Primitive2DSequence xRetval;
const SdrPage& rPage = getPage();
const basegfx::B2DRange aPageBorderRange(0.0, 0.0, (double)rPage.GetWdt(), (double)rPage.GetHgt());
- const basegfx::B2DPolygon aPageBorderPolygon(basegfx::tools::createPolygonFromRect(aPageBorderRange));
// We have only the page information, not the view information. Use the
// svtools::FONTCOLOR color for initialisation
const svtools::ColorConfig aColorConfig;
const Color aBorderColor(aColorConfig.GetColorValue(svtools::FONTCOLOR).nColor);
const basegfx::BColor aRGBBorderColor(aBorderColor.getBColor());
- const drawinglayer::primitive2d::Primitive2DReference xReference(new drawinglayer::primitive2d::PolygonHairlinePrimitive2D(aPageBorderPolygon, aRGBBorderColor));
- return drawinglayer::primitive2d::Primitive2DSequence(&xReference, 1);
+ if(rPage.getPageBorderOnlyLeftRight())
+ {
+ // #i93597# for Report Designer, the page border shall be only displayed right and left,
+ // but not top and bottom. Create simplified geometry.
+ basegfx::B2DPolygon aLeft, aRight;
+
+ aLeft.append(basegfx::B2DPoint(aPageBorderRange.getMinX(), aPageBorderRange.getMinY()));
+ aLeft.append(basegfx::B2DPoint(aPageBorderRange.getMinX(), aPageBorderRange.getMaxY()));
+
+ aRight.append(basegfx::B2DPoint(aPageBorderRange.getMaxX(), aPageBorderRange.getMinY()));
+ aRight.append(basegfx::B2DPoint(aPageBorderRange.getMaxX(), aPageBorderRange.getMaxY()));
+
+ xRetval.realloc(2);
+ xRetval[0] = drawinglayer::primitive2d::Primitive2DReference(new drawinglayer::primitive2d::PolygonHairlinePrimitive2D(aLeft, aRGBBorderColor));
+ xRetval[1] = drawinglayer::primitive2d::Primitive2DReference(new drawinglayer::primitive2d::PolygonHairlinePrimitive2D(aRight, aRGBBorderColor));
+ }
+ else
+ {
+ xRetval.realloc(1);
+ const basegfx::B2DPolygon aPageBorderPolygon(basegfx::tools::createPolygonFromRect(aPageBorderRange));
+ xRetval[0] = drawinglayer::primitive2d::Primitive2DReference(new drawinglayer::primitive2d::PolygonHairlinePrimitive2D(aPageBorderPolygon, aRGBBorderColor));
+ }
+
+ return xRetval;
}
ViewContactOfOuterPageBorder::ViewContactOfOuterPageBorder(ViewContactOfSdrPage& rParentViewContactOfSdrPage)
diff --git a/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx b/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx
index 2631bc50c276..ea260f3285f7 100644
--- a/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx
+++ b/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx
@@ -1347,7 +1347,9 @@ namespace sdr { namespace contact {
// a generic property changed. If we're in design mode, we need to repaint the control
if ( impl_isControlDesignMode_nothrow() )
- m_pAntiImpl->GetObjectContact().InvalidatePartOfView( m_pAntiImpl->getObjectRange() );
+ {
+ m_pAntiImpl->propertyChange();
+ }
}
//--------------------------------------------------------------------
@@ -1477,7 +1479,7 @@ namespace sdr { namespace contact {
DBG_NAME( ViewObjectContactOfUnoControl )
//--------------------------------------------------------------------
ViewObjectContactOfUnoControl::ViewObjectContactOfUnoControl( ObjectContact& _rObjectContact, ViewContactOfUnoControl& _rViewContact )
- :ViewObjectContact( _rObjectContact, _rViewContact )
+ :ViewObjectContactOfSdrObj( _rObjectContact, _rViewContact )
,m_pImpl( new ViewObjectContactOfUnoControl_Impl( this ) )
{
DBG_CTOR( ViewObjectContactOfUnoControl, NULL );
@@ -1569,6 +1571,14 @@ namespace sdr { namespace contact {
{
VOCGuard aGuard( *m_pImpl );
m_pImpl->setControlDesignMode( _bDesignMode );
+
+ if(!_bDesignMode)
+ {
+ // when live mode is switched on, a refresh is needed. The edit mode visualisation
+ // needs to be repainted and the now used VCL-Window needs to be positioned and
+ // sized. Both is done from the repant refresh.
+ const_cast< ViewObjectContactOfUnoControl* >(this)->ActionChanged();
+ }
}
//--------------------------------------------------------------------
@@ -1581,36 +1591,10 @@ namespace sdr { namespace contact {
//--------------------------------------------------------------------
drawinglayer::primitive2d::Primitive2DSequence ViewObjectContactOfUnoControl::createPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const
{
- // current vsiualisation call. This is necessary to actually incarnate, position and size
- // a control which is represented as VCL-ChildWindow. This mechanism is placed here ATM for
- // convenience but may be placed to the View completely later:
- //
- // Let the OC (ObjectContact) aka View have a Pre-Run through the draw hierarchy and handle
- // necessary changes at xShapes which ARE controls. This needs to be done in Preparation of a
- // Paint.
- //
- // There is also the possibility to create a ControlPrimitiveRenderer which may be used as
- // paint-pre-run and records/handles all ControlPrimitives he finds.
- //
- // To test the possibility that the renderer does the positioning and sizing i added a
- // static flag here which will force a xControl to exist as a VCL Child window and it will
- // be added to the Primitive. There is an analog flag in the VCL pixel renderer in drawinglayer
- // to position and size he control there (look for bDoSizeAndPositionControlsA)
- static bool bDoSizeAndPositionControlsA(true);
-
- if(bDoSizeAndPositionControlsA)
- {
- if(rDisplayInfo.GetControlLayerProcessingActive())
- {
- positionControlForPaint(rDisplayInfo);
- }
- }
- else
- {
- // force control here to make it a VCL ChildWindow. Will be fetched
- // and used below by getExistentControl()
- m_pImpl->ensureControl();
- }
+ // force control here to make it a VCL ChildWindow. Will be fetched
+ // and used below by getExistentControl()
+ m_pImpl->ensureControl();
+ m_pImpl->positionControlForPaint(rDisplayInfo);
// get needed data
const ViewContactOfUnoControl& rViewContactOfUnoControl(static_cast< const ViewContactOfUnoControl& >(GetViewContact()));
@@ -1650,6 +1634,42 @@ namespace sdr { namespace contact {
}
}
+ void ViewObjectContactOfUnoControl::propertyChange()
+ {
+ // graphical invalidate at all views
+ ActionChanged();
+
+ // #i93318# flush Primitive2DSequence to force recreation with updated XControlModel
+ // since e.g. background color has changed and existing decompositions are evtl. no
+ // longer valid. Unfortunately this is not detected from ControlPrimitive2D::operator==
+ // since it only has a uno reference to the XControlModel
+ flushPrimitive2DSequence();
+ }
+
+ void ViewObjectContactOfUnoControl::ActionChanged()
+ {
+ // call parent
+ ViewObjectContactOfSdrObj::ActionChanged();
+ const ControlHolder& rControl(m_pImpl->getExistentControl());
+
+ if(rControl.is() && !rControl.isDesignMode())
+ {
+ // #i93180# if layer visibility has changed and control is in live mode, it is necessary
+ // to correct visibility to make those control vanish on SdrObject LayerID changes
+ const SdrPageView* pSdrPageView = GetObjectContact().TryToGetSdrPageView();
+
+ if(pSdrPageView)
+ {
+ const bool bIsLayerVisible(pSdrPageView->GetVisibleLayers().IsSet(getSdrObject().GetLayer()));
+
+ if(rControl.isVisible() != bIsLayerVisible)
+ {
+ rControl.setVisible(bIsLayerVisible);
+ }
+ }
+ }
+ }
+
//====================================================================
//= UnoControlDefaultContact
//====================================================================
diff --git a/svx/source/sdr/overlay/makefile.mk b/svx/source/sdr/overlay/makefile.mk
index 636e1f7c1d02..fa12baba4c5d 100644
--- a/svx/source/sdr/overlay/makefile.mk
+++ b/svx/source/sdr/overlay/makefile.mk
@@ -54,6 +54,7 @@ SLOFILES=\
$(SLO)$/overlaytriangle.obj \
$(SLO)$/overlaycrosshair.obj \
$(SLO)$/overlayhelpline.obj \
+ $(SLO)$/overlayhatchrect.obj \
$(SLO)$/overlayrollingrectangle.obj \
$(SLO)$/overlaypolypolygon.obj \
$(SLO)$/overlaysdrobject.obj \
diff --git a/svx/source/sdr/overlay/overlayhatchrect.cxx b/svx/source/sdr/overlay/overlayhatchrect.cxx
new file mode 100644
index 000000000000..a15d38f16bc9
--- /dev/null
+++ b/svx/source/sdr/overlay/overlayhatchrect.cxx
@@ -0,0 +1,149 @@
+/*************************************************************************
+ *
+ * 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: overlaybitmap.cxx,v $
+ * $Revision: 1.5 $
+ *
+ * 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_svx.hxx"
+
+#include <svx/sdr/overlay/overlayhatchrect.hxx>
+#include <vcl/hatch.hxx>
+#include <vcl/outdev.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/numeric/ftools.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace sdr
+{
+ namespace overlay
+ {
+ basegfx::B2DPolyPolygon OverlayHatchRect::getGeometry(OutputDevice& rOutputDevice)
+ {
+ const basegfx::B2DPoint aDiscreteTopLeft(rOutputDevice.GetViewTransformation() * getBasePosition());
+ const basegfx::B2DPoint aDiscreteBottomRight(rOutputDevice.GetViewTransformation() * getSecondPosition());
+
+ basegfx::B2DRange aInnerRange(
+ floor(aDiscreteTopLeft.getX()), floor(aDiscreteTopLeft.getY()),
+ floor(aDiscreteBottomRight.getX()), floor(aDiscreteBottomRight.getY()));
+ basegfx::B2DRange aOuterRange(aInnerRange);
+ basegfx::B2DPolyPolygon aRetval;
+
+ aOuterRange.grow(getDiscreteWidth() * 0.5);
+ aInnerRange.grow(getDiscreteWidth() * -0.5);
+
+ aRetval.append(basegfx::tools::createPolygonFromRect(aOuterRange));
+ aRetval.append(basegfx::tools::createPolygonFromRect(aInnerRange));
+
+ if(!basegfx::fTools::equalZero(mfRotation))
+ {
+ basegfx::B2DHomMatrix aTransform;
+
+ aTransform.translate(-aOuterRange.getMinX(), -aOuterRange.getMinY());
+ aTransform.rotate(getRotation());
+ aTransform.translate(aOuterRange.getMinX(), aOuterRange.getMinY());
+
+ aRetval.transform(aTransform);
+ }
+
+ return aRetval;
+ }
+
+ void OverlayHatchRect::drawGeometry(OutputDevice& rOutputDevice)
+ {
+ const basegfx::B2DPolyPolygon aB2DGeometry(getGeometry(rOutputDevice));
+ const bool bMapModeWasEnabled(rOutputDevice.IsMapModeEnabled());
+
+ // use VCL polygon and methodology for paint
+ double fFullRotation(getHatchRotation() - getRotation());
+
+ while(fFullRotation < 0.0)
+ {
+ fFullRotation += F_2PI;
+ }
+
+ while(fFullRotation >= F_2PI)
+ {
+ fFullRotation -= F_2PI;
+ }
+
+ const Hatch aHatch(HATCH_SINGLE, getBaseColor(), 3, (sal_uInt16)basegfx::fround(fFullRotation * ( 10.0 / F_PI180)));
+ rOutputDevice.EnableMapMode(false);
+ rOutputDevice.DrawHatch(PolyPolygon(aB2DGeometry), aHatch);
+ rOutputDevice.EnableMapMode(bMapModeWasEnabled);
+ }
+
+ void OverlayHatchRect::createBaseRange(OutputDevice& rOutputDevice)
+ {
+ // reset range and expand with fresh geometry
+ maBaseRange = getGeometry(rOutputDevice).getB2DRange();
+
+ // getGeometry data is in discrete coordinates (pixels), so transform back to
+ // world coordinates (logic)
+ maBaseRange.transform(rOutputDevice.GetInverseViewTransformation());
+ }
+
+ OverlayHatchRect::OverlayHatchRect(
+ const basegfx::B2DPoint& rBasePosition,
+ const basegfx::B2DPoint& rSecondPosition,
+ const Color& rHatchColor,
+ double fDiscreteWidth,
+ double fHatchRotation,
+ double fRotation)
+ : OverlayObjectWithBasePosition(rBasePosition, rHatchColor),
+ maSecondPosition(rSecondPosition),
+ mfDiscreteWidth(fDiscreteWidth),
+ mfHatchRotation(fHatchRotation),
+ mfRotation(fRotation)
+ {
+ }
+
+ void OverlayHatchRect::setSecondPosition(const basegfx::B2DPoint& rNew)
+ {
+ if(rNew != maSecondPosition)
+ {
+ // remember new value
+ maSecondPosition = rNew;
+
+ // register change (after change)
+ objectChange();
+ }
+ }
+
+ void OverlayHatchRect::zoomHasChanged()
+ {
+ // reset validity of range in logical coor to force recalculation
+ mbIsChanged = sal_True;
+ }
+ } // end of namespace overlay
+} // end of namespace sdr
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/svx/source/sdr/primitive2d/sdrcaptionprimitive2d.cxx b/svx/source/sdr/primitive2d/sdrcaptionprimitive2d.cxx
index 506792cb185d..d935cf3d2438 100644
--- a/svx/source/sdr/primitive2d/sdrcaptionprimitive2d.cxx
+++ b/svx/source/sdr/primitive2d/sdrcaptionprimitive2d.cxx
@@ -34,6 +34,7 @@
#include <svx/sdr/primitive2d/sdrdecompositiontools.hxx>
#include <drawinglayer/primitive2d/groupprimitive2d.hxx>
#include <svx/sdr/primitive2d/svx_primitivetypes2d.hxx>
+#include <drawinglayer/primitive2d/hittestprimitive2d.hxx>
//////////////////////////////////////////////////////////////////////////////
@@ -64,6 +65,17 @@ namespace drawinglayer
appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, createPolygonLinePrimitive(aUnitOutline, getTransform(), *getSdrLFSTAttribute().getLine()));
appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, createPolygonLinePrimitive(getTail(), getTransform(), *getSdrLFSTAttribute().getLine(), getSdrLFSTAttribute().getLineStartEnd()));
}
+ else
+ {
+ // if initially no line is defined, create one for HitTest and BoundRect
+ Primitive2DSequence aLineSequence(2);
+ const attribute::SdrLineAttribute aBlackHairline(basegfx::BColor(0.0, 0.0, 0.0));
+
+ aLineSequence[0] = createPolygonLinePrimitive(aUnitOutline, getTransform(), aBlackHairline);
+ aLineSequence[1] = createPolygonLinePrimitive(getTail(), getTransform(), aBlackHairline);
+
+ appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, Primitive2DReference(new HitTestPrimitive2D(aLineSequence)));
+ }
// add text
if(getSdrLFSTAttribute().getText())
diff --git a/svx/source/sdr/primitive2d/sdrconnectorprimitive2d.cxx b/svx/source/sdr/primitive2d/sdrconnectorprimitive2d.cxx
index f560ddf2f73e..157bb3b5ec77 100644
--- a/svx/source/sdr/primitive2d/sdrconnectorprimitive2d.cxx
+++ b/svx/source/sdr/primitive2d/sdrconnectorprimitive2d.cxx
@@ -34,6 +34,7 @@
#include <basegfx/matrix/b2dhommatrix.hxx>
#include <drawinglayer/primitive2d/groupprimitive2d.hxx>
#include <svx/sdr/primitive2d/svx_primitivetypes2d.hxx>
+#include <drawinglayer/primitive2d/hittestprimitive2d.hxx>
//////////////////////////////////////////////////////////////////////////////
@@ -57,6 +58,15 @@ namespace drawinglayer
{
appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, createPolygonLinePrimitive(getUnitPolygon(), aEmptyMatrix, *getSdrLSTAttribute().getLine(), getSdrLSTAttribute().getLineStartEnd()));
}
+ else
+ {
+ // if initially no line is defined, create one for HitTest and BoundRect
+ const attribute::SdrLineAttribute aBlackHairline(basegfx::BColor(0.0, 0.0, 0.0));
+ const Primitive2DReference xHiddenLineReference(createPolygonLinePrimitive(getUnitPolygon(), aEmptyMatrix, aBlackHairline));
+ const Primitive2DSequence xHiddenLineSequence(&xHiddenLineReference, 1);
+
+ appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, Primitive2DReference(new HitTestPrimitive2D(xHiddenLineSequence)));
+ }
// add text
if(getSdrLSTAttribute().getText())
diff --git a/svx/source/sdr/primitive2d/sdrellipseprimitive2d.cxx b/svx/source/sdr/primitive2d/sdrellipseprimitive2d.cxx
index 4f99a2bce348..4c075453bd70 100644
--- a/svx/source/sdr/primitive2d/sdrellipseprimitive2d.cxx
+++ b/svx/source/sdr/primitive2d/sdrellipseprimitive2d.cxx
@@ -35,6 +35,9 @@
#include <svx/sdr/primitive2d/sdrdecompositiontools.hxx>
#include <drawinglayer/primitive2d/groupprimitive2d.hxx>
#include <svx/sdr/primitive2d/svx_primitivetypes2d.hxx>
+#include <drawinglayer/primitive2d/hittestprimitive2d.hxx>
+#include <basegfx/color/bcolor.hxx>
+#include <drawinglayer/attribute/sdrattribute.hxx>
//////////////////////////////////////////////////////////////////////////////
@@ -77,6 +80,15 @@ namespace drawinglayer
{
appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, createPolygonLinePrimitive(aUnitOutline, getTransform(), *getSdrLFSTAttribute().getLine()));
}
+ else
+ {
+ // if initially no line is defined, create one for HitTest and BoundRect
+ const attribute::SdrLineAttribute aBlackHairline(basegfx::BColor(0.0, 0.0, 0.0));
+ const Primitive2DReference xHiddenLineReference(createPolygonLinePrimitive(aUnitOutline, getTransform(), aBlackHairline));
+ const Primitive2DSequence xHiddenLineSequence(&xHiddenLineReference, 1);
+
+ appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, Primitive2DReference(new HitTestPrimitive2D(xHiddenLineSequence)));
+ }
// add text
if(getSdrLFSTAttribute().getText())
@@ -174,6 +186,15 @@ namespace drawinglayer
{
appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, createPolygonLinePrimitive(aUnitOutline, getTransform(), *getSdrLFSTAttribute().getLine(), getSdrLFSTAttribute().getLineStartEnd()));
}
+ else
+ {
+ // if initially no line is defined, create one for HitTest and BoundRect
+ const attribute::SdrLineAttribute aBlackHairline(basegfx::BColor(0.0, 0.0, 0.0));
+ const Primitive2DReference xHiddenLineReference(createPolygonLinePrimitive(aUnitOutline, getTransform(), aBlackHairline));
+ const Primitive2DSequence xHiddenLineSequence(&xHiddenLineReference, 1);
+
+ appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, Primitive2DReference(new HitTestPrimitive2D(xHiddenLineSequence)));
+ }
// add text
if(getSdrLFSTAttribute().getText())
diff --git a/svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx b/svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx
index 7122918aaed2..0d774c02dbe1 100644
--- a/svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx
+++ b/svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx
@@ -35,6 +35,7 @@
#include <svx/sdr/primitive2d/sdrdecompositiontools.hxx>
#include <drawinglayer/primitive2d/groupprimitive2d.hxx>
#include <svx/sdr/primitive2d/svx_primitivetypes2d.hxx>
+#include <drawinglayer/primitive2d/hittestprimitive2d.hxx>
//////////////////////////////////////////////////////////////////////////////
@@ -82,6 +83,15 @@ namespace drawinglayer
appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, createPolygonLinePrimitive(aUnitOutline, getTransform(), *getSdrLFSTAttribute().getLine()));
}
}
+ else
+ {
+ // if initially no line is defined, create one for HitTest and BoundRect
+ const attribute::SdrLineAttribute aBlackHairline(basegfx::BColor(0.0, 0.0, 0.0));
+ const Primitive2DReference xHiddenLineReference(createPolygonLinePrimitive(aUnitOutline, getTransform(), aBlackHairline));
+ const Primitive2DSequence xHiddenLineSequence(&xHiddenLineReference, 1);
+
+ appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, Primitive2DReference(new HitTestPrimitive2D(xHiddenLineSequence)));
+ }
// add graphic content
if(255L != getGraphicAttr().GetTransparency())
diff --git a/svx/source/sdr/primitive2d/sdrmeasureprimitive2d.cxx b/svx/source/sdr/primitive2d/sdrmeasureprimitive2d.cxx
index b21757b26620..c4074a47217e 100644
--- a/svx/source/sdr/primitive2d/sdrmeasureprimitive2d.cxx
+++ b/svx/source/sdr/primitive2d/sdrmeasureprimitive2d.cxx
@@ -38,6 +38,7 @@
#include <basegfx/tools/canvastools.hxx>
#include <drawinglayer/primitive2d/groupprimitive2d.hxx>
#include <svx/sdr/primitive2d/svx_primitivetypes2d.hxx>
+#include <drawinglayer/primitive2d/hittestprimitive2d.hxx>
//////////////////////////////////////////////////////////////////////////////
@@ -64,22 +65,21 @@ namespace drawinglayer
{
return createPolygonLinePrimitive(aPolygon, rObjectMatrix, *maSdrLSTAttribute.getLine(), 0L);
}
- else if(bLeftActive && bRightActive)
+
+ if(bLeftActive && bRightActive)
{
return createPolygonLinePrimitive(aPolygon, rObjectMatrix, *maSdrLSTAttribute.getLine(), maSdrLSTAttribute.getLineStartEnd());
}
- else
- {
- const attribute::SdrLineStartEndAttribute* pLineStartEnd = maSdrLSTAttribute.getLineStartEnd();
- const ::basegfx::B2DPolyPolygon aEmpty;
- const attribute::SdrLineStartEndAttribute aLineStartEnd(
- bLeftActive ? pLineStartEnd->getStartPolyPolygon() : aEmpty, bRightActive ? pLineStartEnd->getEndPolyPolygon() : aEmpty,
- bLeftActive ? pLineStartEnd->getStartWidth() : 0.0, bRightActive ? pLineStartEnd->getEndWidth() : 0.0,
- bLeftActive ? pLineStartEnd->isStartActive() : false, bRightActive ? pLineStartEnd->isEndActive() : false,
- bLeftActive ? pLineStartEnd->isStartCentered() : false, bRightActive? pLineStartEnd->isEndCentered() : false);
-
- return createPolygonLinePrimitive(aPolygon, rObjectMatrix, *maSdrLSTAttribute.getLine(), &aLineStartEnd);
- }
+
+ const attribute::SdrLineStartEndAttribute* pLineStartEnd = maSdrLSTAttribute.getLineStartEnd();
+ const ::basegfx::B2DPolyPolygon aEmpty;
+ const attribute::SdrLineStartEndAttribute aLineStartEnd(
+ bLeftActive ? pLineStartEnd->getStartPolyPolygon() : aEmpty, bRightActive ? pLineStartEnd->getEndPolyPolygon() : aEmpty,
+ bLeftActive ? pLineStartEnd->getStartWidth() : 0.0, bRightActive ? pLineStartEnd->getEndWidth() : 0.0,
+ bLeftActive ? pLineStartEnd->isStartActive() : false, bRightActive ? pLineStartEnd->isEndActive() : false,
+ bLeftActive ? pLineStartEnd->isStartCentered() : false, bRightActive? pLineStartEnd->isEndCentered() : false);
+
+ return createPolygonLinePrimitive(aPolygon, rObjectMatrix, *maSdrLSTAttribute.getLine(), &aLineStartEnd);
}
Primitive2DSequence SdrMeasurePrimitive2D::createLocalDecomposition(const geometry::ViewInformation2D& aViewInformation) const
@@ -128,7 +128,15 @@ namespace drawinglayer
aTextRange = pBlockText->getB2DRange(aViewInformation);
}
- if(maSdrLSTAttribute.getLine())
+ // prepare line attribute and result
+ const attribute::SdrLineAttribute* pLineAttribute(maSdrLSTAttribute.getLine());
+
+ if(!pLineAttribute)
+ {
+ // if initially no line is defined, create one for HitTest and BoundRect
+ pLineAttribute = new attribute::SdrLineAttribute(basegfx::BColor(0.0, 0.0, 0.0));
+ }
+
{
bool bArrowsOutside(false);
bool bMainLineSplitted(false);
@@ -167,7 +175,7 @@ namespace drawinglayer
const double fSpaceNeededByArrows(fStartArrowH + fEndArrowH + ((fStartArrowW + fEndArrowW) * 0.5));
const double fArrowsOutsideLen((fStartArrowH + fEndArrowH + fStartArrowW + fEndArrowW) * 0.5);
- const double fHalfLineWidth(maSdrLSTAttribute.getLine()->getWidth() * 0.5);
+ const double fHalfLineWidth(pLineAttribute->getWidth() * 0.5);
if(fSpaceNeededByArrows > fDistance)
{
@@ -380,6 +388,16 @@ namespace drawinglayer
}
}
+ if(!maSdrLSTAttribute.getLine())
+ {
+ // embed line geometry to invisible line group
+ const Primitive2DReference xHiddenLines(new HitTestPrimitive2D(aRetval));
+ aRetval = Primitive2DSequence(&xHiddenLines, 1);
+
+ // delete temporary LineAttribute again
+ delete pLineAttribute;
+ }
+
if(pBlockText)
{
// create transformation to text primitive end position
diff --git a/svx/source/sdr/primitive2d/sdrole2primitive2d.cxx b/svx/source/sdr/primitive2d/sdrole2primitive2d.cxx
index 84dc238eb7e6..e30678bdbf77 100644
--- a/svx/source/sdr/primitive2d/sdrole2primitive2d.cxx
+++ b/svx/source/sdr/primitive2d/sdrole2primitive2d.cxx
@@ -33,6 +33,7 @@
#include <svx/sdr/primitive2d/svx_primitivetypes2d.hxx>
#include <basegfx/polygon/b2dpolygontools.hxx>
#include <svx/sdr/primitive2d/sdrdecompositiontools.hxx>
+#include <drawinglayer/primitive2d/hittestprimitive2d.hxx>
//////////////////////////////////////////////////////////////////////////////
@@ -64,31 +65,43 @@ namespace drawinglayer
}
// add line
- if(!bBehaveCompatibleToPaintVersion && getSdrLFSTAttribute().getLine())
+ if(getSdrLFSTAttribute().getLine())
{
- // if line width is given, polygon needs to be grown by half of it to make the
- // outline to be outside of the bitmap
- if(0.0 != getSdrLFSTAttribute().getLine()->getWidth())
+ if(bBehaveCompatibleToPaintVersion)
{
- // decompose to get scale
- basegfx::B2DVector aScale, aTranslate;
- double fRotate, fShearX;
- getTransform().decompose(aScale, aTranslate, fRotate, fShearX);
-
- // create expanded range (add relative half line width to unit rectangle)
- double fHalfLineWidth(getSdrLFSTAttribute().getLine()->getWidth() * 0.5);
- double fScaleX(0.0 != aScale.getX() ? fHalfLineWidth / fabs(aScale.getX()) : 1.0);
- double fScaleY(0.0 != aScale.getY() ? fHalfLineWidth / fabs(aScale.getY()) : 1.0);
- const basegfx::B2DRange aExpandedRange(-fScaleX, -fScaleY, 1.0 + fScaleX, 1.0 + fScaleY);
- basegfx::B2DPolygon aExpandedUnitOutline(basegfx::tools::createPolygonFromRect(aExpandedRange));
-
- appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, createPolygonLinePrimitive(aExpandedUnitOutline, getTransform(), *getSdrLFSTAttribute().getLine()));
- }
- else
- {
- appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, createPolygonLinePrimitive(aUnitOutline, getTransform(), *getSdrLFSTAttribute().getLine()));
+ // if line width is given, polygon needs to be grown by half of it to make the
+ // outline to be outside of the bitmap
+ if(0.0 != getSdrLFSTAttribute().getLine()->getWidth())
+ {
+ // decompose to get scale
+ basegfx::B2DVector aScale, aTranslate;
+ double fRotate, fShearX;
+ getTransform().decompose(aScale, aTranslate, fRotate, fShearX);
+
+ // create expanded range (add relative half line width to unit rectangle)
+ double fHalfLineWidth(getSdrLFSTAttribute().getLine()->getWidth() * 0.5);
+ double fScaleX(0.0 != aScale.getX() ? fHalfLineWidth / fabs(aScale.getX()) : 1.0);
+ double fScaleY(0.0 != aScale.getY() ? fHalfLineWidth / fabs(aScale.getY()) : 1.0);
+ const basegfx::B2DRange aExpandedRange(-fScaleX, -fScaleY, 1.0 + fScaleX, 1.0 + fScaleY);
+ basegfx::B2DPolygon aExpandedUnitOutline(basegfx::tools::createPolygonFromRect(aExpandedRange));
+
+ appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, createPolygonLinePrimitive(aExpandedUnitOutline, getTransform(), *getSdrLFSTAttribute().getLine()));
+ }
+ else
+ {
+ appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, createPolygonLinePrimitive(aUnitOutline, getTransform(), *getSdrLFSTAttribute().getLine()));
+ }
}
}
+ else
+ {
+ // if initially no line is defined, create one for HitTest and BoundRect
+ const attribute::SdrLineAttribute aBlackHairline(basegfx::BColor(0.0, 0.0, 0.0));
+ const Primitive2DReference xHiddenLineReference(createPolygonLinePrimitive(aUnitOutline, getTransform(), aBlackHairline));
+ const Primitive2DSequence xHiddenLineSequence(&xHiddenLineReference, 1);
+
+ appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, Primitive2DReference(new HitTestPrimitive2D(xHiddenLineSequence)));
+ }
// add graphic content
appendPrimitive2DSequenceToPrimitive2DSequence(aRetval, getChildren());
diff --git a/svx/source/sdr/primitive2d/sdrpathprimitive2d.cxx b/svx/source/sdr/primitive2d/sdrpathprimitive2d.cxx
index 7409100e9f7e..20367e49f5f0 100644
--- a/svx/source/sdr/primitive2d/sdrpathprimitive2d.cxx
+++ b/svx/source/sdr/primitive2d/sdrpathprimitive2d.cxx
@@ -34,6 +34,7 @@
#include <basegfx/polygon/b2dpolypolygontools.hxx>
#include <drawinglayer/primitive2d/groupprimitive2d.hxx>
#include <svx/sdr/primitive2d/svx_primitivetypes2d.hxx>
+#include <drawinglayer/primitive2d/hittestprimitive2d.hxx>
//////////////////////////////////////////////////////////////////////////////
@@ -70,6 +71,19 @@ namespace drawinglayer
appendPrimitive2DSequenceToPrimitive2DSequence(aRetval, aTemp);
}
+ else
+ {
+ // if initially no line is defined, create one for HitTest and BoundRect
+ const attribute::SdrLineAttribute aBlackHairline(basegfx::BColor(0.0, 0.0, 0.0));
+ Primitive2DSequence xHiddenLineSequence(maUnitPolyPolygon.count());
+
+ for(sal_uInt32 a(0); a < maUnitPolyPolygon.count(); a++)
+ {
+ xHiddenLineSequence[a] = createPolygonLinePrimitive(maUnitPolyPolygon.getB2DPolygon(a), maTransform, aBlackHairline);
+ }
+
+ appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, Primitive2DReference(new HitTestPrimitive2D(xHiddenLineSequence)));
+ }
// add text
if(maSdrLFSTAttribute.getText())
diff --git a/svx/source/sdr/primitive2d/sdrrectangleprimitive2d.cxx b/svx/source/sdr/primitive2d/sdrrectangleprimitive2d.cxx
index 6ffb9f9f08fd..ab54e1af1af5 100644
--- a/svx/source/sdr/primitive2d/sdrrectangleprimitive2d.cxx
+++ b/svx/source/sdr/primitive2d/sdrrectangleprimitive2d.cxx
@@ -34,6 +34,7 @@
#include <svx/sdr/primitive2d/sdrdecompositiontools.hxx>
#include <drawinglayer/primitive2d/groupprimitive2d.hxx>
#include <svx/sdr/primitive2d/svx_primitivetypes2d.hxx>
+#include <drawinglayer/primitive2d/hittestprimitive2d.hxx>
//////////////////////////////////////////////////////////////////////////////
@@ -50,31 +51,40 @@ namespace drawinglayer
Primitive2DSequence aRetval;
// create unit outline polygon
- ::basegfx::B2DPolygon aUnitOutline(::basegfx::tools::createPolygonFromRect(::basegfx::B2DRange(0.0, 0.0, 1.0, 1.0), mfCornerRadiusX, mfCornerRadiusY));
+ ::basegfx::B2DPolygon aUnitOutline(::basegfx::tools::createPolygonFromRect(::basegfx::B2DRange(0.0, 0.0, 1.0, 1.0), getCornerRadiusX(), getCornerRadiusY()));
// add fill
- if(maSdrLFSTAttribute.getFill())
+ if(getSdrLFSTAttribute().getFill())
{
- appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, createPolyPolygonFillPrimitive(::basegfx::B2DPolyPolygon(aUnitOutline), maTransform, *maSdrLFSTAttribute.getFill(), maSdrLFSTAttribute.getFillFloatTransGradient()));
+ appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, createPolyPolygonFillPrimitive(::basegfx::B2DPolyPolygon(aUnitOutline), getTransform(), *getSdrLFSTAttribute().getFill(), getSdrLFSTAttribute().getFillFloatTransGradient()));
}
// add line
- if(maSdrLFSTAttribute.getLine())
+ if(getSdrLFSTAttribute().getLine())
{
- appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, createPolygonLinePrimitive(aUnitOutline, maTransform, *maSdrLFSTAttribute.getLine()));
+ appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, createPolygonLinePrimitive(aUnitOutline, getTransform(), *getSdrLFSTAttribute().getLine()));
+ }
+ else
+ {
+ // if initially no line is defined, create one for HitTest and BoundRect
+ const attribute::SdrLineAttribute aBlackHairline(basegfx::BColor(0.0, 0.0, 0.0));
+ const Primitive2DReference xHiddenLineReference(createPolygonLinePrimitive(aUnitOutline, getTransform(), aBlackHairline));
+ const Primitive2DSequence xHiddenLineSequence(&xHiddenLineReference, 1);
+
+ appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, Primitive2DReference(new HitTestPrimitive2D(xHiddenLineSequence)));
}
// add text
- if(maSdrLFSTAttribute.getText())
+ if(getSdrLFSTAttribute().getText())
{
- appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, createTextPrimitive(::basegfx::B2DPolyPolygon(aUnitOutline), maTransform, *maSdrLFSTAttribute.getText(), maSdrLFSTAttribute.getLine(), false, false));
+ appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, createTextPrimitive(::basegfx::B2DPolyPolygon(aUnitOutline), getTransform(), *getSdrLFSTAttribute().getText(), getSdrLFSTAttribute().getLine(), false));
}
// add shadow
- if(maSdrLFSTAttribute.getShadow())
+ if(getSdrLFSTAttribute().getShadow())
{
// attention: shadow is added BEFORE object stuff to render it BEHIND object (!)
- const Primitive2DReference xShadow(createShadowPrimitive(aRetval, *maSdrLFSTAttribute.getShadow()));
+ const Primitive2DReference xShadow(createShadowPrimitive(aRetval, *getSdrLFSTAttribute().getShadow()));
if(xShadow.is())
{
@@ -107,10 +117,10 @@ namespace drawinglayer
{
const SdrRectanglePrimitive2D& rCompare = (SdrRectanglePrimitive2D&)rPrimitive;
- return (mfCornerRadiusX == rCompare.mfCornerRadiusX
- && mfCornerRadiusY == rCompare.mfCornerRadiusY
- && maTransform == rCompare.maTransform
- && maSdrLFSTAttribute == rCompare.maSdrLFSTAttribute);
+ return (getCornerRadiusX() == rCompare.getCornerRadiusX()
+ && getCornerRadiusY() == rCompare.getCornerRadiusY()
+ && getTransform() == rCompare.getTransform()
+ && getSdrLFSTAttribute() == rCompare.getSdrLFSTAttribute());
}
return false;
diff --git a/svx/source/svdraw/sdrmasterpagedescriptor.cxx b/svx/source/svdraw/sdrmasterpagedescriptor.cxx
index 9500c350e8d0..652327f3ff85 100644
--- a/svx/source/svdraw/sdrmasterpagedescriptor.cxx
+++ b/svx/source/svdraw/sdrmasterpagedescriptor.cxx
@@ -82,15 +82,6 @@ namespace sdr
return *mpViewContact;
}
- void MasterPageDescriptor::FlushViewContact() const
- {
- if(mpViewContact)
- {
- delete mpViewContact;
- ((MasterPageDescriptor*)this)->mpViewContact = 0;
- }
- }
-
// this method is called form the destructor of the referenced page.
// do all necessary action to forget the page. It is not necessary to call
// RemovePageUser(), that is done form the destructor.
diff --git a/svx/source/svdraw/svddrgv.cxx b/svx/source/svdraw/svddrgv.cxx
index 4d99598bed78..6cc43df61a3e 100644
--- a/svx/source/svdraw/svddrgv.cxx
+++ b/svx/source/svdraw/svddrgv.cxx
@@ -634,32 +634,49 @@ BOOL SdrDragView::BegDragObj(const Point& rPnt, OutputDevice* pOut, SdrHdl* pHdl
} break;
default:
- { // SDRDRAG_MOVE
- if ( ( eDragHdl == HDL_MOVE ) && !IsMoveAllowed() )
+ {
+ // SDRDRAG_MOVE
+ if((eDragHdl == HDL_MOVE) && !IsMoveAllowed())
+ {
return FALSE;
- else if ( eDragHdl==HDL_GLUE )
+ }
+ else if(eDragHdl == HDL_GLUE)
+ {
pDragBla = new SdrDragMove(*this);
+ }
else
{
- if ( bFramDrag )
+ if(bFramDrag)
{
- if ( eDragHdl == HDL_MOVE )
+ if(eDragHdl == HDL_MOVE)
+ {
pDragBla=new SdrDragMove(*this);
+ }
else
{
- if (!IsResizeAllowed(TRUE)) return FALSE;
- pDragBla=new SdrDragResize(*this);
+ if(!IsResizeAllowed(TRUE))
+ {
+ return FALSE;
+ }
+
+ pDragBla = new SdrDragResize(*this);
}
}
else
{
- if ( ( eDragHdl == HDL_MOVE ) && ( GetMarkedObjectCount() == 1 )
- && GetMarkedObjectByIndex( 0 )->ISA( SdrObjCustomShape ) )
+ if((eDragHdl == HDL_MOVE) && (GetMarkedObjectCount() == 1) && GetMarkedObjectByIndex(0)->ISA(SdrObjCustomShape))
+ {
pDragBla = new SdrDragMove( *this );
+ }
+ else if((eDragHdl == HDL_POLY) && (!IsMoveAllowed() || !IsResizeAllowed()))
+ {
+ // #i77187# do not allow move of polygon points if object is move or size protected
+ return FALSE;
+ }
else
{
- bDragSpecial=TRUE;
- pDragBla=new SdrDragObjOwn(*this);
+ bDragSpecial = TRUE;
+ pDragBla = new SdrDragObjOwn(*this);
}
}
}
diff --git a/svx/source/svdraw/svdedtv1.cxx b/svx/source/svdraw/svdedtv1.cxx
index 632761bb819c..ba1f8914ba8b 100644
--- a/svx/source/svdraw/svdedtv1.cxx
+++ b/svx/source/svdraw/svdedtv1.cxx
@@ -1410,40 +1410,74 @@ void SdrEditView::SetGeoAttrToMarked(const SfxItemSet& rAttr)
MoveMarkedObj(Size(nPosDX,nPosDY));
}
- // Position geschuetzt
- if (SFX_ITEM_SET==rAttr.GetItemState(SID_ATTR_TRANSFORM_PROTECT_POS,TRUE,&pPoolItem))
+ // protect position
+ if(SFX_ITEM_SET == rAttr.GetItemState(SID_ATTR_TRANSFORM_PROTECT_POS, TRUE, &pPoolItem))
{
- BOOL bProtPos=((const SfxBoolItem*)pPoolItem)->GetValue();
- for (ULONG i=0; i<nMarkCount; i++) {
- pObj=rMarkList.GetMark(i)->GetMarkedSdrObj();
- pObj->SetMoveProtect(bProtPos);
- if( bProtPos )
- pObj->SetResizeProtect(true);
+ const sal_Bool bProtPos(((const SfxBoolItem*)pPoolItem)->GetValue());
+ bool bChanged(false);
+
+ for(sal_uInt32 i(0); i < nMarkCount; i++)
+ {
+ pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
+
+ if(pObj->IsMoveProtect() != bProtPos)
+ {
+ bChanged = true;
+ pObj->SetMoveProtect(bProtPos);
+
+ if(bProtPos)
+ {
+ pObj->SetResizeProtect(true);
+ }
+ }
+ }
+
+ if(bChanged)
+ {
+ bMoveProtect = bProtPos;
+
+ if(bProtPos)
+ {
+ bResizeProtect = true;
+ }
+
+ // #i77187# there is no simple method to get the toolbars updated
+ // in the application. The App is listening to selection change and i
+ // will use it here (even if not true). It's acceptable since changing
+ // this model data is pretty rare and only possible using the F4 dialog
+ MarkListHasChanged();
}
- // BugFix 13897: hier muesste besser ein Broadcast her!
- // Ausserdem fehlt Undo
- // oder -> bProtPos/Size als Item (Interface)
- bMoveProtect=bProtPos;
- if( bProtPos )
- bResizeProtect=true;
}
- if( !bMoveProtect )
+ if(!bMoveProtect)
{
- // Groesse geschuetzt
- if (SFX_ITEM_SET==rAttr.GetItemState(SID_ATTR_TRANSFORM_PROTECT_SIZE,TRUE,&pPoolItem))
+ // protect size
+ if(SFX_ITEM_SET == rAttr.GetItemState(SID_ATTR_TRANSFORM_PROTECT_SIZE, TRUE, &pPoolItem))
{
- BOOL bProtSize=((const SfxBoolItem*)pPoolItem)->GetValue();
- for (ULONG i=0; i<nMarkCount; i++) {
- pObj=rMarkList.GetMark(i)->GetMarkedSdrObj();
- pObj->SetResizeProtect(bProtSize);
+ const sal_Bool bProtSize(((const SfxBoolItem*)pPoolItem)->GetValue());
+ bool bChanged(false);
+
+ for(sal_uInt32 i(0); i < nMarkCount; i++)
+ {
+ pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
+
+ if(pObj->IsResizeProtect() != bProtSize)
+ {
+ bChanged = true;
+ pObj->SetResizeProtect(bProtSize);
+ }
+ }
+
+ if(bChanged)
+ {
+ bResizeProtect = bProtSize;
+
+ // #i77187# see above
+ MarkListHasChanged();
}
- // BugFix 13897: hier muesste besser ein Broadcast her!
- // Ausserdem fehlt Undo
- // oder -> bProtPos/Size als Item (Interface)
- bResizeProtect=bProtSize;
}
}
+
EndUndo();
}
diff --git a/svx/source/svdraw/svdhdl.cxx b/svx/source/svdraw/svdhdl.cxx
index 8ada8ace73fa..c338d9845c21 100644
--- a/svx/source/svdraw/svdhdl.cxx
+++ b/svx/source/svdraw/svdhdl.cxx
@@ -65,6 +65,7 @@
#include <svx/sdr/overlay/overlaybitmap.hxx>
#include <svx/sdr/overlay/overlaylinestriped.hxx>
#include <svx/sdr/overlay/overlaytriangle.hxx>
+#include <svx/sdr/overlay/overlayhatchrect.hxx>
#include <svx/sdrpagewindow.hxx>
#include <sdrpaintwindow.hxx>
#include <vcl/svapp.hxx>
@@ -815,55 +816,50 @@ bool SdrHdl::IsHdlHit(const Point& rPnt) const
Pointer SdrHdl::GetPointer() const
{
PointerStyle ePtr=POINTER_MOVE;
- BOOL bSize=eKind>=HDL_UPLFT && eKind<=HDL_LWRGT;
- // Fuer Resize von gedrehten Rechtecken die Mauszeiger etwas mitdrehen
- if (bSize && nDrehWink!=0)
- {
- long nHdlWink=0;
+ const BOOL bSize=eKind>=HDL_UPLFT && eKind<=HDL_LWRGT;
+ const BOOL bRot=pHdlList!=NULL && pHdlList->IsRotateShear();
+ const BOOL bDis=pHdlList!=NULL && pHdlList->IsDistortShear();
+ if (bSize && pHdlList!=NULL && (bRot || bDis)) {
switch (eKind) {
- case HDL_UPLFT: nHdlWink=13500; break;
- case HDL_UPPER: nHdlWink=9000; break;
- case HDL_UPRGT: nHdlWink=4500; break;
- case HDL_LEFT : nHdlWink=0; break;
- case HDL_RIGHT: nHdlWink=0; break;
- case HDL_LWLFT: nHdlWink=4500; break;
- case HDL_LOWER: nHdlWink=9000; break;
- case HDL_LWRGT: nHdlWink=13500; break;
+ case HDL_UPLFT: case HDL_UPRGT:
+ case HDL_LWLFT: case HDL_LWRGT: ePtr=bRot ? POINTER_ROTATE : POINTER_REFHAND; break;
+ case HDL_LEFT : case HDL_RIGHT: ePtr=POINTER_VSHEAR; break;
+ case HDL_UPPER: case HDL_LOWER: ePtr=POINTER_HSHEAR; break;
default:
break;
}
- nHdlWink+=nDrehWink+2249; // und etwas drauf (zum runden)
- while (nHdlWink<0) nHdlWink+=18000;
- while (nHdlWink>=18000) nHdlWink-=18000;
- nHdlWink/=4500;
- switch ((BYTE)nHdlWink)
- {
- case 0: ePtr=POINTER_ESIZE; break;
- case 1: ePtr=POINTER_NESIZE; break;
- case 2: ePtr=POINTER_SSIZE; break;
- case 3: ePtr=POINTER_SESIZE; break;
- } // switch
- }
- if (ePtr==POINTER_MOVE)
- {
- BOOL bRot=pHdlList!=NULL && pHdlList->IsRotateShear();
- BOOL bDis=pHdlList!=NULL && pHdlList->IsDistortShear();
- if (bSize && pHdlList!=NULL && (bRot || bDis))
- {
- switch (eKind)
- {
- case HDL_UPLFT: case HDL_UPRGT:
- case HDL_LWLFT: case HDL_LWRGT: ePtr=bRot ? POINTER_ROTATE : POINTER_REFHAND; break;
- case HDL_LEFT : case HDL_RIGHT: ePtr=POINTER_VSHEAR; break;
- case HDL_UPPER: case HDL_LOWER: ePtr=POINTER_HSHEAR; break;
+ } else {
+ // Fuer Resize von gedrehten Rechtecken die Mauszeiger etwas mitdrehen
+ if (bSize && nDrehWink!=0) {
+ long nHdlWink=0;
+ switch (eKind) {
+ case HDL_LWRGT: nHdlWink=31500; break;
+ case HDL_LOWER: nHdlWink=27000; break;
+ case HDL_LWLFT: nHdlWink=22500; break;
+ case HDL_LEFT : nHdlWink=18000; break;
+ case HDL_UPLFT: nHdlWink=13500; break;
+ case HDL_UPPER: nHdlWink=9000; break;
+ case HDL_UPRGT: nHdlWink=4500; break;
+ case HDL_RIGHT: nHdlWink=0; break;
default:
break;
}
- }
- else
- {
- switch (eKind)
- {
+ nHdlWink+=nDrehWink+2249; // und etwas drauf (zum runden)
+ while (nHdlWink<0) nHdlWink+=36000;
+ while (nHdlWink>=36000) nHdlWink-=36000;
+ nHdlWink/=4500;
+ switch ((BYTE)nHdlWink) {
+ case 0: ePtr=POINTER_ESIZE; break;
+ case 1: ePtr=POINTER_NESIZE; break;
+ case 2: ePtr=POINTER_NSIZE; break;
+ case 3: ePtr=POINTER_NWSIZE; break;
+ case 4: ePtr=POINTER_WSIZE; break;
+ case 5: ePtr=POINTER_SWSIZE; break;
+ case 6: ePtr=POINTER_SSIZE; break;
+ case 7: ePtr=POINTER_SESIZE; break;
+ } // switch
+ } else {
+ switch (eKind) {
case HDL_UPLFT: ePtr=POINTER_NWSIZE; break;
case HDL_UPPER: ePtr=POINTER_NSIZE; break;
case HDL_UPRGT: ePtr=POINTER_NESIZE; break;
@@ -1655,6 +1651,65 @@ Pointer ImpMeasureHdl::GetPointer() const
////////////////////////////////////////////////////////////////////////////////////////////////////
+ImpTextframeHdl::ImpTextframeHdl(const Rectangle& rRect) :
+ SdrHdl(rRect.TopLeft(),HDL_MOVE),
+ maRect(rRect)
+{
+}
+
+void ImpTextframeHdl::CreateB2dIAObject()
+{
+ // first throw away old one
+ GetRidOfIAObject();
+
+ if(pHdlList)
+ {
+ SdrMarkView* pView = pHdlList->GetView();
+
+ if(pView && !pView->areMarkHandlesHidden())
+ {
+ SdrPageView* pPageView = pView->GetSdrPageView();
+
+ if(pPageView)
+ {
+ for(sal_uInt32 b(0L); b < pPageView->PageWindowCount(); b++)
+ {
+ const SdrPageWindow& rPageWindow = *pPageView->GetPageWindow(b);
+
+ if(rPageWindow.GetPaintWindow().OutputToWindow())
+ {
+ if(rPageWindow.GetOverlayManager())
+ {
+ const basegfx::B2DPoint aTopLeft(maRect.Left(), maRect.Top());
+ const basegfx::B2DPoint aBottomRight(maRect.Right(), maRect.Bottom());
+ const svtools::ColorConfig aColorConfig;
+ const Color aHatchCol( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor );
+
+ ::sdr::overlay::OverlayHatchRect* pNewOverlayObject = new ::sdr::overlay::OverlayHatchRect(
+ aTopLeft,
+ aBottomRight,
+ aHatchCol,
+ 6.0,
+ 45 * F_PI180,
+ nDrehWink * -F_PI18000);
+ pNewOverlayObject->setHittable(false);
+
+ // OVERLAYMANAGER
+ if(pNewOverlayObject)
+ {
+ rPageWindow.GetOverlayManager()->add(*pNewOverlayObject);
+ maOverlayGroup.append(*pNewOverlayObject);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
class ImpSdrHdlListSorter: public ContainerSorter {
public:
ImpSdrHdlListSorter(Container& rNewCont): ContainerSorter(rNewCont) {}
diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx
index 97793ffa769e..fb5f76d41229 100644
--- a/svx/source/svdraw/svdmrkv.cxx
+++ b/svx/source/svdraw/svdmrkv.cxx
@@ -696,10 +696,15 @@ void SdrMarkView::SetMarkHandles()
{
ULONG nMarkAnz=GetMarkedObjectCount();
BOOL bStdDrag=eDragMode==SDRDRAG_MOVE;
+ BOOL bSingleTextObjMark=FALSE;
if (nMarkAnz==1)
{
pMarkedObj=GetMarkedObjectByIndex(0);
+ bSingleTextObjMark =
+ pMarkedObj &&
+ pMarkedObj->ISA(SdrTextObj) &&
+ static_cast<SdrTextObj*>(pMarkedObj)->IsTextFrame();
}
BOOL bFrmHdl=ImpIsFrameHandles();
@@ -732,8 +737,20 @@ void SdrMarkView::SetMarkHandles()
if(!aRect.IsEmpty() && !bHideHandlesWhenInTextEdit)
{ // sonst nix gefunden
-
- if( eDragMode==SDRDRAG_CROP )
+ if( bSingleTextObjMark )
+ {
+ const ULONG nSiz0=aHdl.GetHdlCount();
+ pMarkedObj->AddToHdlList(aHdl);
+ const ULONG nSiz1=aHdl.GetHdlCount();
+ for (ULONG i=nSiz0; i<nSiz1; i++)
+ {
+ SdrHdl* pHdl=aHdl.GetHdl(i);
+ pHdl->SetObj(pMarkedObj);
+ pHdl->SetPageView(pMarkedPV);
+ pHdl->SetObjHdlNum(USHORT(i-nSiz0));
+ }
+ }
+ else if( eDragMode==SDRDRAG_CROP )
{
aHdl.AddHdl(new SdrCropHdl(aRect.TopLeft() ,HDL_UPLFT));
aHdl.AddHdl(new SdrCropHdl(aRect.TopCenter() ,HDL_UPPER));
@@ -778,9 +795,9 @@ void SdrMarkView::SetMarkHandles()
const SdrMark* pM=GetSdrMarkByIndex(nMarkNum);
SdrObject* pObj=pM->GetMarkedSdrObj();
SdrPageView* pPV=pM->GetPageView();
- ULONG nSiz0=aHdl.GetHdlCount();
+ const ULONG nSiz0=aHdl.GetHdlCount();
pObj->AddToHdlList(aHdl);
- ULONG nSiz1=aHdl.GetHdlCount();
+ const ULONG nSiz1=aHdl.GetHdlCount();
bool bPoly=pObj->IsPolyObj();
const SdrUShortCont* pMrkPnts=pM->GetMarkedPoints();
for (ULONG i=nSiz0; i<nSiz1; i++)
@@ -1572,47 +1589,69 @@ void SdrMarkView::SetMarkHdlSizePixel(USHORT nSiz)
#define SDRSEARCH_IMPISMASTER 0x80000000 /* MasterPage wird gerade durchsucht */
SdrObject* SdrMarkView::ImpCheckObjHit(const Point& rPnt, USHORT nTol, SdrObject* pObj, SdrPageView* pPV, ULONG nOptions, const SetOfByte* pMVisLay) const
{
- if ((nOptions & SDRSEARCH_IMPISMASTER) !=0 && pObj->IsNotVisibleAsMaster()) {
+ if((nOptions & SDRSEARCH_IMPISMASTER) && pObj->IsNotVisibleAsMaster())
+ {
return NULL;
}
- BOOL bCheckIfMarkable=(nOptions & SDRSEARCH_TESTMARKABLE)!=0;
- //BOOL bBack=(nOptions & SDRSEARCH_BACKWARD)!=0;
- BOOL bDeep=(nOptions & SDRSEARCH_DEEP)!=0;
- BOOL bOLE=pObj->ISA(SdrOle2Obj);
+
+ const bool bCheckIfMarkable(nOptions & SDRSEARCH_TESTMARKABLE);
+ const bool bDeep(nOptions & SDRSEARCH_DEEP);
+ const bool bOLE(pObj->ISA(SdrOle2Obj));
+ const bool bTXT(pObj->ISA(SdrTextObj) && ((SdrTextObj*)pObj)->IsTextFrame());
SdrObject* pRet=NULL;
Rectangle aRect(pObj->GetCurrentBoundRect());
- USHORT nTol2=nTol;
- // Doppelte Tolezanz fuer ein an dieser View im TextEdit befindliches Objekt
- if (bOLE || pObj==((SdrObjEditView*)this)->GetTextEditObject()) nTol2*=2;
+ USHORT nTol2(nTol);
+
+ // double tolerance for OLE, text frames and objects in
+ // active text edit
+ if(bOLE || bTXT || pObj==((SdrObjEditView*)this)->GetTextEditObject())
+ {
+ nTol2*=2;
+ }
+
aRect.Left ()-=nTol2; // Einmal Toleranz drauf fuer alle Objekte
aRect.Top ()-=nTol2;
aRect.Right ()+=nTol2;
aRect.Bottom()+=nTol2;
- if (aRect.IsInside(rPnt)) {
- if ((!bCheckIfMarkable || IsObjMarkable(pObj,pPV))) {
+
+ if (aRect.IsInside(rPnt))
+ {
+ if ((!bCheckIfMarkable || IsObjMarkable(pObj,pPV)))
+ {
SdrObjList* pOL=pObj->GetSubList();
- if (pOL!=NULL && pOL->GetObjCount()!=0) {
+
+ if (pOL!=NULL && pOL->GetObjCount()!=0)
+ {
SdrObject* pTmpObj;
// OD 30.06.2003 #108784# - adjustment hit point for virtual
// objects.
Point aPnt( rPnt );
+
if ( pObj->ISA(SdrVirtObj) )
{
Point aOffset = static_cast<SdrVirtObj*>(pObj)->GetOffset();
aPnt.Move( -aOffset.X(), -aOffset.Y() );
}
+
pRet=ImpCheckObjHit(aPnt,nTol,pOL,pPV,nOptions,pMVisLay,pTmpObj);
- } else {
+ }
+ else
+ {
SdrLayerID nLay=pObj->GetLayer();
- if (pPV->GetVisibleLayers().IsSet(nLay) &&
- (pMVisLay==NULL || pMVisLay->IsSet(nLay)))
+
+ if(pPV->GetVisibleLayers().IsSet(nLay) && (pMVisLay==NULL || pMVisLay->IsSet(nLay)))
{
pRet=pObj->CheckHit(rPnt,nTol2,&pPV->GetVisibleLayers());
}
}
}
}
- if (!bDeep && pRet!=NULL) pRet=pObj;
+
+ if (!bDeep && pRet!=NULL)
+ {
+ pRet=pObj;
+ }
+
return pRet;
}
diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx
index b68dddbd4637..514d78e2cbf9 100644
--- a/svx/source/svdraw/svdobj.cxx
+++ b/svx/source/svdraw/svdobj.cxx
@@ -365,15 +365,6 @@ sdr::contact::ViewContact& SdrObject::GetViewContact() const
return *mpViewContact;
}
-void SdrObject::FlushViewContact() const
-{
- if(mpViewContact)
- {
- delete mpViewContact;
- ((SdrObject*)this)->mpViewContact = 0;
- }
-}
-
// DrawContact support: Methods for handling Object changes
void SdrObject::ActionChanged() const
{
@@ -2637,23 +2628,23 @@ void SdrObject::SetInserted(sal_Bool bIns)
void SdrObject::SetMoveProtect(sal_Bool bProt)
{
- bMovProt = bProt;
- SetChanged();
-
- if(IsInserted() && pModel)
+ if(IsMoveProtect() != bProt)
{
- SdrHint aHint(*this);
- pModel->Broadcast(aHint);
+ // #i77187# secured and simplified
+ bMovProt = bProt;
+ SetChanged();
+ BroadcastObjectChange();
}
}
void SdrObject::SetResizeProtect(sal_Bool bProt)
{
- bSizProt=bProt;
- SetChanged();
- if (IsInserted() && pModel!=NULL) {
- SdrHint aHint(*this);
- pModel->Broadcast(aHint);
+ if(IsResizeProtect() != bProt)
+ {
+ // #i77187# secured and simplified
+ bSizProt = bProt;
+ SetChanged();
+ BroadcastObjectChange();
}
}
diff --git a/svx/source/svdraw/svdopath.cxx b/svx/source/svdraw/svdopath.cxx
index 6dd5003ae2ef..0f8213d37e9e 100644
--- a/svx/source/svdraw/svdopath.cxx
+++ b/svx/source/svdraw/svdopath.cxx
@@ -2346,50 +2346,52 @@ Pointer SdrPathObj::GetCreatePointer() const
void SdrPathObj::NbcMove(const Size& rSiz)
{
- SdrTextObj::NbcMove(rSiz);
-
basegfx::B2DHomMatrix aTrans;
aTrans.translate(rSiz.Width(), rSiz.Height());
maPathPolygon.transform(aTrans);
+
+ // #i19871# first modify locally, then call parent (to get correct SnapRect with GluePoints)
+ SdrTextObj::NbcMove(rSiz);
}
void SdrPathObj::NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact)
{
- SdrTextObj::NbcResize(rRef,xFact,yFact);
-
basegfx::B2DHomMatrix aTrans;
aTrans.translate(-rRef.X(), -rRef.Y());
aTrans.scale(double(xFact), double(yFact));
aTrans.translate(rRef.X(), rRef.Y());
maPathPolygon.transform(aTrans);
+
+ // #i19871# first modify locally, then call parent (to get correct SnapRect with GluePoints)
+ SdrTextObj::NbcResize(rRef,xFact,yFact);
}
void SdrPathObj::NbcRotate(const Point& rRef, long nWink, double sn, double cs)
{
- SdrTextObj::NbcRotate(rRef,nWink,sn,cs);
-
basegfx::B2DHomMatrix aTrans;
aTrans.translate(-rRef.X(), -rRef.Y());
aTrans.rotate(-nWink * nPi180); // Thank JOE, the angles are defined mirrored to the mathematical meanings
aTrans.translate(rRef.X(), rRef.Y());
maPathPolygon.transform(aTrans);
+
+ // #i19871# first modify locally, then call parent (to get correct SnapRect with GluePoints)
+ SdrTextObj::NbcRotate(rRef,nWink,sn,cs);
}
void SdrPathObj::NbcShear(const Point& rRefPnt, long nAngle, double fTan, FASTBOOL bVShear)
{
- SdrTextObj::NbcShear(rRefPnt,nAngle,fTan,bVShear);
-
basegfx::B2DHomMatrix aTrans;
aTrans.translate(-rRefPnt.X(), -rRefPnt.Y());
aTrans.shearX(-fTan); // Thank JOE, the angles are defined mirrored to the mathematical meanings
aTrans.translate(rRefPnt.X(), rRefPnt.Y());
maPathPolygon.transform(aTrans);
+
+ // #i19871# first modify locally, then call parent (to get correct SnapRect with GluePoints)
+ SdrTextObj::NbcShear(rRefPnt,nAngle,fTan,bVShear);
}
void SdrPathObj::NbcMirror(const Point& rRefPnt1, const Point& rRefPnt2)
{
- SdrTextObj::NbcMirror(rRefPnt1,rRefPnt2);
-
basegfx::B2DHomMatrix aTrans;
const double fDiffX(rRefPnt2.X() - rRefPnt1.X());
const double fDiffY(rRefPnt2.Y() - rRefPnt1.Y());
@@ -2403,13 +2405,19 @@ void SdrPathObj::NbcMirror(const Point& rRefPnt1, const Point& rRefPnt2)
// #97538# Do Joe's special handling for lines when mirroring, too
ImpForceKind();
+
+ // #i19871# first modify locally, then call parent (to get correct SnapRect with GluePoints)
+ SdrTextObj::NbcMirror(rRefPnt1,rRefPnt2);
}
void SdrPathObj::TakeUnrotatedSnapRect(Rectangle& rRect) const
{
- if (aGeo.nDrehWink==0) {
- rRect=GetSnapRect();
- } else {
+ if(!aGeo.nDrehWink)
+ {
+ rRect = GetSnapRect();
+ }
+ else
+ {
XPolyPolygon aXPP(GetPathPoly());
RotateXPoly(aXPP,Point(),-aGeo.nSin,aGeo.nCos);
rRect=aXPP.GetBoundRect();
diff --git a/svx/source/svdraw/svdorect.cxx b/svx/source/svdraw/svdorect.cxx
index a338889afa48..8620110d6979 100644
--- a/svx/source/svdraw/svdorect.cxx
+++ b/svx/source/svdraw/svdorect.cxx
@@ -403,24 +403,34 @@ SdrHdl* SdrRectObj::GetHdl(sal_uInt32 nHdlNum) const
SdrHdl* pH=NULL;
Point aPnt;
SdrHdlKind eKind=HDL_MOVE;
- switch (nHdlNum) {
- case 0: {
- long a=GetEckenradius();
- long b=Max(aRect.GetWidth(),aRect.GetHeight())/2; // Wird aufgerundet, da GetWidth() eins draufaddiert
- if (a>b) a=b;
- if (a<0) a=0;
- aPnt=aRect.TopLeft();
- aPnt.X()+=a;
- eKind=HDL_CIRC;
- } break; // Eckenradius
- case 1: aPnt=aRect.TopLeft(); eKind=HDL_UPLFT; break; // Oben links
- case 2: aPnt=aRect.TopCenter(); eKind=HDL_UPPER; break; // Oben
- case 3: aPnt=aRect.TopRight(); eKind=HDL_UPRGT; break; // Oben rechts
- case 4: aPnt=aRect.LeftCenter(); eKind=HDL_LEFT ; break; // Links
- case 5: aPnt=aRect.RightCenter(); eKind=HDL_RIGHT; break; // Rechts
- case 6: aPnt=aRect.BottomLeft(); eKind=HDL_LWLFT; break; // Unten links
- case 7: aPnt=aRect.BottomCenter(); eKind=HDL_LOWER; break; // Unten
- case 8: aPnt=aRect.BottomRight(); eKind=HDL_LWRGT; break; // Unten rechts
+ if( IsTextFrame() && !nHdlNum )
+ {
+ pH=new ImpTextframeHdl(aRect);
+ pH->SetObj((SdrObject*)this);
+ pH->SetDrehWink(aGeo.nDrehWink);
+ return pH;
+ }
+ else
+ {
+ switch (nHdlNum) {
+ case 0: {
+ long a=GetEckenradius();
+ long b=Max(aRect.GetWidth(),aRect.GetHeight())/2; // Wird aufgerundet, da GetWidth() eins draufaddiert
+ if (a>b) a=b;
+ if (a<0) a=0;
+ aPnt=aRect.TopLeft();
+ aPnt.X()+=a;
+ eKind=HDL_CIRC;
+ } break; // Eckenradius
+ case 1: aPnt=aRect.TopLeft(); eKind=HDL_UPLFT; break; // Oben links
+ case 2: aPnt=aRect.TopCenter(); eKind=HDL_UPPER; break; // Oben
+ case 3: aPnt=aRect.TopRight(); eKind=HDL_UPRGT; break; // Oben rechts
+ case 4: aPnt=aRect.LeftCenter(); eKind=HDL_LEFT ; break; // Links
+ case 5: aPnt=aRect.RightCenter(); eKind=HDL_RIGHT; break; // Rechts
+ case 6: aPnt=aRect.BottomLeft(); eKind=HDL_LWLFT; break; // Unten links
+ case 7: aPnt=aRect.BottomCenter(); eKind=HDL_LOWER; break; // Unten
+ case 8: aPnt=aRect.BottomRight(); eKind=HDL_LWRGT; break; // Unten rechts
+ }
}
if (aGeo.nShearWink!=0) ShearPoint(aPnt,aRect.TopLeft(),aGeo.nTan);
if (aGeo.nDrehWink!=0) RotatePoint(aPnt,aRect.TopLeft(),aGeo.nSin,aGeo.nCos);
diff --git a/svx/source/svdraw/svdouno.cxx b/svx/source/svdraw/svdouno.cxx
index ddf6e87fe51a..2c42adfd63c6 100644
--- a/svx/source/svdraw/svdouno.cxx
+++ b/svx/source/svdraw/svdouno.cxx
@@ -559,9 +559,9 @@ void SdrUnoObj::SetUnoControlModel( uno::Reference< awt::XControlModel > xModel)
ViewContactOfUnoControl* pVC = NULL;
if ( impl_getViewContact( pVC ) )
{
- // FlushViewContact() removes all existing VOCs. This is always allowed
- // since they will be re-created on demand (and with the changed model)
- FlushViewContact();
+ // flushViewObjectContacts() removes all existing VOCs for the local DrawHierarchy. This
+ // is always allowed since they will be re-created on demand (and with the changed model)
+ GetViewContact().flushViewObjectContacts(true);
}
}
diff --git a/svx/source/svdraw/svdpage.cxx b/svx/source/svdraw/svdpage.cxx
index f7dca8ee7e00..2986cb482aae 100644
--- a/svx/source/svdraw/svdpage.cxx
+++ b/svx/source/svdraw/svdpage.cxx
@@ -257,9 +257,9 @@ void SdrObjList::Clear()
SdrObject* pObj = maList.back();
RemoveObjectFromContainer(maList.size()-1);
- // FlushViewContact() is done since SdrObject::Free is not guaranteed
+ // flushViewObjectContacts() is done since SdrObject::Free is not guaranteed
// to delete the object and thus refresh visualisations
- pObj->FlushViewContact();
+ pObj->GetViewContact().flushViewObjectContacts(true);
bObjectsRemoved = sal_True;
@@ -441,8 +441,8 @@ SdrObject* SdrObjList::NbcRemoveObject(ULONG nObjNum)
SdrObject* pObj=maList[nObjNum];
RemoveObjectFromContainer(nObjNum);
- // FlushViewContact() clears the VOC's and those invalidate
- pObj->FlushViewContact();
+ // flushViewObjectContacts() clears the VOC's and those invalidate
+ pObj->GetViewContact().flushViewObjectContacts(true);
DBG_ASSERT(pObj!=NULL,"Object zum Removen nicht gefunden");
if (pObj!=NULL) {
@@ -475,8 +475,8 @@ SdrObject* SdrObjList::RemoveObject(ULONG nObjNum)
DBG_ASSERT(pObj!=NULL,"Object zum Removen nicht gefunden");
if(pObj)
{
- // FlushViewContact() clears the VOC's and those invalidate
- pObj->FlushViewContact();
+ // flushViewObjectContacts() clears the VOC's and those invalidate
+ pObj->GetViewContact().flushViewObjectContacts(true);
DBG_ASSERT(pObj->IsInserted(),"ZObjekt hat keinen Inserted-Status");
if (pModel!=NULL) {
@@ -526,8 +526,8 @@ SdrObject* SdrObjList::NbcReplaceObject(SdrObject* pNewObj, ULONG nObjNum)
pObj->SetPage(NULL);
ReplaceObjectInContainer(*pNewObj,nObjNum);
- // FlushViewContact() clears the VOC's and those invalidate
- pObj->FlushViewContact();
+ // flushViewObjectContacts() clears the VOC's and those invalidate
+ pObj->GetViewContact().flushViewObjectContacts(true);
pNewObj->SetOrdNum(nObjNum);
pNewObj->SetObjList(this);
@@ -573,8 +573,8 @@ SdrObject* SdrObjList::ReplaceObject(SdrObject* pNewObj, ULONG nObjNum)
pObj->SetPage(NULL);
ReplaceObjectInContainer(*pNewObj,nObjNum);
- // FlushViewContact() clears the VOC's and those invalidate
- pObj->FlushViewContact();
+ // flushViewObjectContacts() clears the VOC's and those invalidate
+ pObj->GetViewContact().flushViewObjectContacts(true);
pNewObj->SetOrdNum(nObjNum);
pNewObj->SetObjList(this);
@@ -1231,15 +1231,6 @@ sdr::contact::ViewContact& SdrPage::GetViewContact() const
return *mpViewContact;
}
-void SdrPage::FlushViewContact() const
-{
- if(mpViewContact)
- {
- delete mpViewContact;
- ((SdrPage*)this)->mpViewContact = 0;
- }
-}
-
////////////////////////////////////////////////////////////////////////////////////////////////////
TYPEINIT1(SdrPage,SdrObjList);
@@ -1257,10 +1248,11 @@ SdrPage::SdrPage(SdrModel& rNewModel, bool bMasterPage)
pBackgroundObj(0L),
mpMasterPageDescriptor(0L),
nPageNum(0L),
- bMaster(bMasterPage),
- bInserted(sal_False),
- bObjectsNotPersistent(sal_False),
- bSwappingLocked(sal_False)
+ mbMaster(bMasterPage),
+ mbInserted(false),
+ mbObjectsNotPersistent(false),
+ mbSwappingLocked(false),
+ mbPageBorderOnlyLeftRight(false)
{
DBG_CTOR(SdrPage,NULL);
aPrefVisiLayers.SetAll();
@@ -1281,14 +1273,15 @@ SdrPage::SdrPage(const SdrPage& rSrcPage)
pBackgroundObj(0L),
mpMasterPageDescriptor(0L),
nPageNum(rSrcPage.nPageNum),
- bMaster(rSrcPage.bMaster),
- bInserted(sal_False),
- bObjectsNotPersistent(rSrcPage.bObjectsNotPersistent),
- bSwappingLocked(rSrcPage.bSwappingLocked)
+ mbMaster(rSrcPage.mbMaster),
+ mbInserted(false),
+ mbObjectsNotPersistent(rSrcPage.mbObjectsNotPersistent),
+ mbSwappingLocked(rSrcPage.mbSwappingLocked),
+ mbPageBorderOnlyLeftRight(rSrcPage.mbPageBorderOnlyLeftRight)
{
DBG_CTOR(SdrPage,NULL);
aPrefVisiLayers.SetAll();
- eListKind = (bMaster) ? SDROBJLIST_MASTERPAGE : SDROBJLIST_DRAWPAGE;
+ eListKind = (mbMaster) ? SDROBJLIST_MASTERPAGE : SDROBJLIST_DRAWPAGE;
// copy things from source
// Warning: this leads to slicing (see issue 93186) and has to be
@@ -1297,7 +1290,7 @@ SdrPage::SdrPage(const SdrPage& rSrcPage)
// be careful and correct eListKind, a member of SdrObjList which
// will be changed by the SdrOIbjList::operator= before...
- eListKind = (bMaster) ? SDROBJLIST_MASTERPAGE : SDROBJLIST_DRAWPAGE;
+ eListKind = (mbMaster) ? SDROBJLIST_MASTERPAGE : SDROBJLIST_DRAWPAGE;
// The previous assignment to *this may have resulted in a call to
// createUnoPage at a partially initialized (sliced) SdrPage object.
@@ -1377,8 +1370,9 @@ void SdrPage::operator=(const SdrPage& rSrcPage)
// copy all the local parameters to make this instance
// a valid copy od source page before copying and inserting
// the contained objects
- bMaster = rSrcPage.bMaster;
- bSwappingLocked = rSrcPage.bSwappingLocked;
+ mbMaster = rSrcPage.mbMaster;
+ mbSwappingLocked = rSrcPage.mbSwappingLocked;
+ mbPageBorderOnlyLeftRight = rSrcPage.mbPageBorderOnlyLeftRight;
aPrefVisiLayers = rSrcPage.aPrefVisiLayers;
nWdt = rSrcPage.nWdt;
nHgt = rSrcPage.nHgt;
@@ -1399,7 +1393,7 @@ void SdrPage::operator=(const SdrPage& rSrcPage)
}
//aMasters = rSrcPage.aMasters;
- bObjectsNotPersistent = rSrcPage.bObjectsNotPersistent;
+ mbObjectsNotPersistent = rSrcPage.mbObjectsNotPersistent;
if(rSrcPage.pBackgroundObj)
{
@@ -1621,8 +1615,10 @@ void SdrPage::SetPageNum(sal_uInt16 nNew)
USHORT SdrPage::GetPageNum() const
{
- if (!bInserted) return 0;
- if (bMaster) {
+ if (!mbInserted)
+ return 0;
+
+ if (mbMaster) {
if (pModel && pModel->IsMPgNumsDirty())
((SdrModel*)pModel)->RecalcPageNums(TRUE);
} else {
@@ -1666,8 +1662,8 @@ void SdrPage::TRG_ClearMasterPage()
{
SetChanged();
- // the FlushViewContact() will do needed invalidates by deleting the involved VOCs
- mpMasterPageDescriptor->GetUsedPage().FlushViewContact();
+ // the flushViewObjectContacts() will do needed invalidates by deleting the involved VOCs
+ mpMasterPageDescriptor->GetUsedPage().GetViewContact().flushViewObjectContacts(true);
delete mpMasterPageDescriptor;
mpMasterPageDescriptor = 0L;
@@ -1718,7 +1714,7 @@ FASTBOOL SdrPage::ImplGetFillColor(const Point& rPnt, const SetOfByte& rVisLayer
{
if (pModel==NULL) return FALSE;
FASTBOOL bRet=SdrObjList::GetFillColor(rPnt,rVisLayers,/*bLayerSorted,*/rCol);
- if (!bRet && !bMaster)
+ if (!bRet && !mbMaster)
{
// nun zu den Masterpages
if(TRG_HasMasterPage())
@@ -1787,11 +1783,11 @@ void SdrPage::SetBackgroundObj( SdrObject* pObj )
pBackgroundObj = pObj;
}
-void SdrPage::SetInserted( FASTBOOL bIns )
+void SdrPage::SetInserted( bool bIns )
{
- if( bInserted != bIns )
+ if( mbInserted != bIns )
{
- bInserted = bIns;
+ mbInserted = bIns;
SdrObjListIter aIter( *this, IM_FLAT );
while ( aIter.IsMore() )
@@ -1799,7 +1795,7 @@ void SdrPage::SetInserted( FASTBOOL bIns )
SdrObject* pObj = aIter.Next();
if ( pObj->ISA(SdrOle2Obj) )
{
- if( bInserted )
+ if( mbInserted )
( (SdrOle2Obj*) pObj)->Connect();
else
( (SdrOle2Obj*) pObj)->Disconnect();
diff --git a/svx/source/svdraw/svdpntv.cxx b/svx/source/svdraw/svdpntv.cxx
index be6805c3c544..da0f28cce54c 100644
--- a/svx/source/svdraw/svdpntv.cxx
+++ b/svx/source/svdraw/svdpntv.cxx
@@ -228,7 +228,6 @@ void SdrPaintView::ImpClearVars()
bPageVisible=TRUE;
bPageBorderVisible=TRUE;
bBordVisible=TRUE;
- bBordVisibleOnlyLeftRight=FALSE;
bGridVisible=TRUE;
bGridFront =FALSE;
bHlplVisible=TRUE;
diff --git a/svx/source/unodraw/unoshape.cxx b/svx/source/unodraw/unoshape.cxx
index 1cc33d2560aa..9af61cebf6af 100644
--- a/svx/source/unodraw/unoshape.cxx
+++ b/svx/source/unodraw/unoshape.cxx
@@ -3221,17 +3221,15 @@ uno::Any SAL_CALL SvxShape::_getPropertyDefault( const OUString& aPropertyName )
{
return getPropertyValue( aPropertyName );
}
- else
- {
- // Default aus ItemPool holen
- if(!mpModel->GetItemPool().IsWhich(pMap->nWID))
- throw beans::UnknownPropertyException();
- SfxItemSet aSet( mpModel->GetItemPool(), pMap->nWID, pMap->nWID);
- aSet.Put(mpModel->GetItemPool().GetDefaultItem(pMap->nWID));
+ // Default aus ItemPool holen
+ if(!mpModel->GetItemPool().IsWhich(pMap->nWID))
+ throw beans::UnknownPropertyException();
- return GetAnyForItem( aSet, pMap );
- }
+ SfxItemSet aSet( mpModel->GetItemPool(), pMap->nWID, pMap->nWID);
+ aSet.Put(mpModel->GetItemPool().GetDefaultItem(pMap->nWID));
+
+ return GetAnyForItem( aSet, pMap );
}
// XMultiPropertyStates
diff --git a/svx/source/unoedit/unoedprx.cxx b/svx/source/unoedit/unoedprx.cxx
index 44c4c302e506..7c31f8b14ffc 100644
--- a/svx/source/unoedit/unoedprx.cxx
+++ b/svx/source/unoedit/unoedprx.cxx
@@ -811,8 +811,8 @@ Rectangle SvxAccessibleTextAdapter::GetParaBounds( USHORT nPara ) const
return aRect;
}
- else
- return mrTextForwarder->GetParaBounds( nPara );
+
+ return mrTextForwarder->GetParaBounds( nPara );
}
MapMode SvxAccessibleTextAdapter::GetMapMode() const