You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by al...@apache.org on 2014/03/19 11:15:07 UTC

svn commit: r1579184 [24/33] - in /openoffice/branches/alg_writerframes: ./ ext_sources/ extras/l10n/source/de/ extras/l10n/source/es/ extras/l10n/source/eu/ extras/l10n/source/hi/ extras/l10n/source/kk/ extras/l10n/source/lt/ extras/l10n/source/nb/ ex...

Modified: openoffice/branches/alg_writerframes/main/svx/source/dialog/contdlg.src
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/dialog/contdlg.src?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/dialog/contdlg.src (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/dialog/contdlg.src Wed Mar 19 10:14:42 2014
@@ -183,9 +183,8 @@ FloatingWindow RID_SVXDLG_CONTOUR
 		Maximum = 99 ;
 		Last = 99 ;
 		SpinSize = 1 ;
-		Unit = FUNIT_CUSTOM ;
+		Unit = FUNIT_PERCENT ;
 		QuickHelpText [ en-US ] = "Color Tolerance" ;
-		CustomUnitText [ en-US ] = "%" ;
 	};
 	Control CTL_CONTOUR
 	{

Modified: openoffice/branches/alg_writerframes/main/svx/source/dialog/docrecovery.src
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/dialog/docrecovery.src?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/dialog/docrecovery.src (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/dialog/docrecovery.src Wed Mar 19 10:14:42 2014
@@ -152,7 +152,7 @@ TabPage RID_SVXPAGE_DOCRECOVERY_RECOVER
 		Pos = MAP_APPFONT( RECOV_COL1, RECOV_ROW2 );
         Size = MAP_APPFONT( RECOV_CONTROLWIDTH, RECOV_DESCRHEIGHT );
 		WordBreak = TRUE;
-		Text[ en-US ] = "Press 'Start Recovery' to start the recovery process of the documents listed below.\n\nThe 'Status' column shows whether the document could be recovered.";
+		Text[ en-US ] = "Press 'Start Recovery' to start the recovery process of the documents listed below.\n\nThe 'Status' column shows whether the document can be recovered.";
 	};
 	FixedText FT_RECOV_PROGR
 	{

Modified: openoffice/branches/alg_writerframes/main/svx/source/dialog/fontwork.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/dialog/fontwork.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/dialog/fontwork.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/dialog/fontwork.cxx Wed Mar 19 10:14:42 2014
@@ -600,7 +600,7 @@ void SvxFontWorkDialog::SetShadow_Impl(c
 				aMtrFldShadowX.SetSpinSize(10);
 
 //              aFbShadowY.SetBitmap( Bitmap( ResId( RID_SVXBMP_SHADOW_SIZE, _pMgr ) ) );
-				aMtrFldShadowY.SetUnit(FUNIT_CUSTOM);
+				aMtrFldShadowY.SetUnit(FUNIT_PERCENT);
 				aMtrFldShadowY.SetDecimalDigits(0);
                 aMtrFldShadowY.SetMin(-999);
                 aMtrFldShadowY.SetMax( 999);

Modified: openoffice/branches/alg_writerframes/main/svx/source/dialog/fontwork.src
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/dialog/fontwork.src?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/dialog/fontwork.src (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/dialog/fontwork.src Wed Mar 19 10:14:42 2014
@@ -293,7 +293,6 @@ DockingWindow RID_SVXDLG_FONTWORK
 		Last = 5000000 ;
 		SpinSize = 50 ;
 		QuickHelpText [ en-US ] = "Distance Y" ;
-		CustomUnitText [ en-US ] = "%" ;
 	};
 	ListBox CLB_SHADOW_COLOR
 	{

Modified: openoffice/branches/alg_writerframes/main/svx/source/dialog/hyprdlg.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/dialog/hyprdlg.hxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/dialog/hyprdlg.hxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/dialog/hyprdlg.hxx Wed Mar 19 10:14:42 2014
@@ -93,7 +93,6 @@ private:
 	PopupMenu			aLinkPopup;
 	PopupMenu			*pTargetMenu;
 	sal_Bool				bNoDoc;
-	sal_Bool				bSend;
 	sal_Bool				bHasOldName;
 	long				nMaxWidth;
 	long				nMinWidth;

Modified: openoffice/branches/alg_writerframes/main/svx/source/dialog/hyprlink.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/dialog/hyprlink.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/dialog/hyprlink.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/dialog/hyprlink.cxx Wed Mar 19 10:14:42 2014
@@ -114,7 +114,6 @@ SvxHyperlinkDlg::SvxHyperlinkDlg( SfxBin
 	pTargetMenu			( NULL ),
 
     bNoDoc              ( sal_True ),
-    bSend               ( sal_False ),
     bHasOldName         ( sal_False ),
     bHtmlMode           ( sal_False )
 
@@ -344,8 +343,7 @@ IMPL_LINK( SvxHyperlinkDlg, TBClickHdl, 
 	{
 		case BTN_LINK:
 		{
-			if (!bSend)	// Link ins Dokument einfuegen
-				SendToApp(HLINK_DEFAULT);
+			SendToApp(HLINK_DEFAULT);
 		}
 		break;
 
@@ -650,12 +648,23 @@ void SvxHyperlinkDlg::EnableLink()
 
 void SvxHyperlinkDlg::SendToApp(sal_uInt16 nType)
 {
+    static bool bAlreadyWorking(false);
+
+    if(bAlreadyWorking)
+    {
+        OSL_ENSURE(false, "SvxHyperlinkDlg::SendToApp called to potentially run recursively, please check (!)");
+        return;
+    }
+
+    bAlreadyWorking = true;
 	sal_Bool bIsFile = sal_False;
-	bSend = sal_True;
 	String sURL( aUrlCB.GetText() );
 
 	if ( !sURL.Len() )
-		return;
+    {
+        bAlreadyWorking = false;
+        return;
+    }
 
     String aBase = GetBindings().GetDispatcher()->GetFrame()->GetObjectShell()->GetMedium()->GetBaseURL();
     INetURLObject aObj( URIHelper::SmartRel2Abs( INetURLObject(aBase), sURL, URIHelper::GetMaybeFileHdl(), true, false,
@@ -674,7 +683,10 @@ void SvxHyperlinkDlg::SendToApp(sal_uInt
 			LeaveWait();
 			QueryBox aBox( this, SVX_RES( RID_SVXQB_DONTEXIST ) );
 			if ( aBox.Execute() == RET_NO )
+            {
+                bAlreadyWorking = false;
 				return;
+            }
 		}
 		else
 			LeaveWait();
@@ -700,6 +712,8 @@ void SvxHyperlinkDlg::SendToApp(sal_uInt
 
 	if ( sURL != aUrlCB.GetText() )
 		aUrlCB.SetText( sURL );
+
+    bAlreadyWorking = false;
 }
 
 /*--------------------------------------------------------------------

Modified: openoffice/branches/alg_writerframes/main/svx/source/dialog/relfld.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/dialog/relfld.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/dialog/relfld.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/dialog/relfld.cxx Wed Mar 19 10:14:42 2014
@@ -123,8 +123,7 @@ void SvxRelativeField::SetRelative( sal_
 		SetDecimalDigits( 0 );
 		SetMin( nRelMin );
 		SetMax( nRelMax );
-		SetCustomUnitText( String( sal_Unicode( '%' ) ) );
-		SetUnit( FUNIT_CUSTOM );
+        SetUnit( FUNIT_PERCENT );
 	}
 	else
 	{

Modified: openoffice/branches/alg_writerframes/main/svx/source/engine3d/float3d.src
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/engine3d/float3d.src?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/engine3d/float3d.src (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/engine3d/float3d.src Wed Mar 19 10:14:42 2014
@@ -250,8 +250,7 @@ DockingWindow RID_SVXFLOAT_3D
 		SpinSize = 5 ;
 		Maximum = 100 ;
 		Last = 100 ;
-		Unit = FUNIT_CUSTOM ;
-		CustomUnitText = " %" ;
+		Unit = FUNIT_PERCENT ;
 	};
 	FixedText FT_BACKSCALE
 	{
@@ -271,8 +270,7 @@ DockingWindow RID_SVXFLOAT_3D
 		Spin = TRUE ;
 		SpinSize = 5 ;
 		Maximum = 10000 ;
-		Unit = FUNIT_CUSTOM ;
-		CustomUnitText  = " %" ;
+		Unit = FUNIT_PERCENT ;
 		Last = 10000 ;
 	};
 	FixedText FT_END_ANGLE
@@ -1168,8 +1166,7 @@ DockingWindow RID_SVXFLOAT_3D
 		TabStop = TRUE ;
 		Repeat = TRUE ;
 		Spin = TRUE ;
-		Unit = FUNIT_CUSTOM ;
-		CustomUnitText  = " %" ;
+		Unit = FUNIT_PERCENT ;
 		Minimum = 1 ;
 		First = 1 ;
 		Maximum = 100 ;

Modified: openoffice/branches/alg_writerframes/main/svx/source/engine3d/scene3d.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/engine3d/scene3d.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/engine3d/scene3d.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/engine3d/scene3d.cxx Wed Mar 19 10:14:42 2014
@@ -53,6 +53,7 @@
 #include <drawinglayer/geometry/viewinformation3d.hxx>
 #include <basegfx/polygon/b2dpolypolygontools.hxx>
 #include <svx/e3dsceneupdater.hxx>
+#include <svx/svdmodel.hxx>
 
 #define ITEMVALUE(ItemSet,Id,Cast)	((const Cast&)(ItemSet).Get(Id)).GetValue()
 
@@ -455,7 +456,14 @@ void E3dScene::NewObjectInserted(const E
 void E3dScene::StructureChanged()
 {
 	E3dObject::StructureChanged();
-	SetRectsDirty();
+
+    if(!GetModel() || !GetModel()->isLocked())
+    {
+        // #123539# optimization for 3D chart object generation: do not reset
+        // already calculated scene projection data every time an object gets
+        // initialized
+        SetRectsDirty();
+    }
 
 	// #110988#
 	ImpCleanup3DDepthMapper();

Modified: openoffice/branches/alg_writerframes/main/svx/source/gallery2/galtheme.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/gallery2/galtheme.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/gallery2/galtheme.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/gallery2/galtheme.cxx Wed Mar 19 10:14:42 2014
@@ -935,6 +935,11 @@ sal_Bool GalleryTheme::InsertGraphic( co
 			{
 				case( GFX_LINK_TYPE_EPS_BUFFER ): nExportFormat = CVT_SVM; break;
 				case( GFX_LINK_TYPE_NATIVE_GIF ): nExportFormat = CVT_GIF; break;
+
+                // #15508# added BMP type
+                // could not find/trigger a call to this, but should do no harm
+                case( GFX_LINK_TYPE_NATIVE_BMP ): nExportFormat = CVT_BMP; break;
+
 				case( GFX_LINK_TYPE_NATIVE_JPG ): nExportFormat = CVT_JPG; break;
 				case( GFX_LINK_TYPE_NATIVE_PNG ): nExportFormat = CVT_PNG; break;
 				case( GFX_LINK_TYPE_NATIVE_TIF ): nExportFormat = CVT_TIF; break;

Modified: openoffice/branches/alg_writerframes/main/svx/source/items/algitem.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/items/algitem.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/items/algitem.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/items/algitem.cxx Wed Mar 19 10:14:42 2014
@@ -600,18 +600,22 @@ SfxItemPresentation SvxMarginItem::GetPr
 		{
 			rText = SVX_RESSTR(RID_SVXITEMS_MARGIN_LEFT);
             rText += GetMetricText( (long)nLeftMargin, eCoreUnit, ePresUnit, pIntl );
+			rText += sal_Unicode(' ');
 			rText += SVX_RESSTR(GetMetricId(ePresUnit));
 			rText += cpDelim;
 			rText += SVX_RESSTR(RID_SVXITEMS_MARGIN_TOP);
             rText += GetMetricText( (long)nTopMargin, eCoreUnit, ePresUnit, pIntl );
+			rText += sal_Unicode(' ');
 			rText += SVX_RESSTR(GetMetricId(ePresUnit));
 			rText += cpDelim;
 			rText += SVX_RESSTR(RID_SVXITEMS_MARGIN_RIGHT);
             rText += GetMetricText( (long)nRightMargin, eCoreUnit, ePresUnit, pIntl );
+			rText += sal_Unicode(' ');
 			rText += SVX_RESSTR(GetMetricId(ePresUnit));
 			rText += cpDelim;
 			rText += SVX_RESSTR(RID_SVXITEMS_MARGIN_BOTTOM);
             rText += GetMetricText( (long)nBottomMargin, eCoreUnit, ePresUnit, pIntl );
+			rText += sal_Unicode(' ');
 			rText += SVX_RESSTR(GetMetricId(ePresUnit));
 			return SFX_ITEM_PRESENTATION_COMPLETE;
 		}

Modified: openoffice/branches/alg_writerframes/main/svx/source/items/svxitems.src
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/items/svxitems.src?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/items/svxitems.src (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/items/svxitems.src Wed Mar 19 10:14:42 2014
@@ -197,15 +197,15 @@ String RID_SVXITEMS_BRUSHSTYLE_DOWNDIAG
 };
 String RID_SVXITEMS_BRUSHSTYLE_25
 {
-	Text = "25%" ;
+	Text = "25 %" ;
 };
 String RID_SVXITEMS_BRUSHSTYLE_50
 {
-	Text = "50%" ;
+	Text = "50 %" ;
 };
 String RID_SVXITEMS_BRUSHSTYLE_75
 {
-	Text = "75%" ;
+	Text = "75 %" ;
 };
 String RID_SVXITEMS_BRUSHSTYLE_BITMAP
 {

Modified: openoffice/branches/alg_writerframes/main/svx/source/sdr/contact/viewcontactofgraphic.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/sdr/contact/viewcontactofgraphic.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/sdr/contact/viewcontactofgraphic.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/sdr/contact/viewcontactofgraphic.cxx Wed Mar 19 10:14:42 2014
@@ -93,8 +93,7 @@ namespace sdr
 
 		drawinglayer::primitive2d::Primitive2DSequence ViewContactOfGraphic::createVIP2DSForPresObj(
 			const basegfx::B2DHomMatrix& rObjectMatrix,
-			const drawinglayer::attribute::SdrLineFillShadowTextAttribute& rAttribute,
-			const GraphicAttr& rLocalGrafInfo) const
+			const drawinglayer::attribute::SdrLineFillShadowTextAttribute& rAttribute) const
 		{
 			drawinglayer::primitive2d::Primitive2DSequence xRetval;
             GraphicObject aEmptyGraphicObject;
@@ -143,11 +142,12 @@ namespace sdr
 					* aSmallerMatrix;
 
 				const GraphicObject& rGraphicObject = GetGrafObject().GetGraphicObject(false);
+                const GraphicAttr aLocalGrafInfo;
                 const drawinglayer::primitive2d::Primitive2DReference xReferenceB(new drawinglayer::primitive2d::SdrGrafPrimitive2D(
-				    aSmallerMatrix, 
-					drawinglayer::attribute::SdrLineFillShadowTextAttribute(), 
-					rGraphicObject, 
-					rLocalGrafInfo));
+                    aSmallerMatrix, 
+                    drawinglayer::attribute::SdrLineFillShadowTextAttribute(), 
+                    rGraphicObject, 
+                    aLocalGrafInfo));
 
                 drawinglayer::primitive2d::appendPrimitive2DReferenceToPrimitive2DSequence(xRetval, xReferenceB);
             }
@@ -379,7 +379,7 @@ namespace sdr
             {
                 // it's an EmptyPresObj, create the SdrGrafPrimitive2D without content and another scaled one
                 // with the content which is the placeholder graphic
-				xRetval = createVIP2DSForPresObj(aObjectMatrix, aAttribute, aLocalGrafInfo);
+				xRetval = createVIP2DSForPresObj(aObjectMatrix, aAttribute);
             }
             else if(visualisationUsesDraft())
             {
@@ -392,16 +392,16 @@ namespace sdr
             }
             else
             {
-			    // create primitive. Info: Calling the copy-constructor of GraphicObject in this
-				// SdrGrafPrimitive2D constructor will force a full swap-in of the graphic
-			    const drawinglayer::primitive2d::Primitive2DReference xReference(
+                // create primitive. Info: Calling the copy-constructor of GraphicObject in this
+                // SdrGrafPrimitive2D constructor will force a full swap-in of the graphic
+                const drawinglayer::primitive2d::Primitive2DReference xReference(
                     new drawinglayer::primitive2d::SdrGrafPrimitive2D(
                         aObjectMatrix, 
                         aAttribute, 
                         rGraphicObject, 
                         aLocalGrafInfo));
 
-			    xRetval = drawinglayer::primitive2d::Primitive2DSequence(&xReference, 1);
+                xRetval = drawinglayer::primitive2d::Primitive2DSequence(&xReference, 1);
             }
 
 			// always append an invisible outline for the cases where no visible content exists

Modified: openoffice/branches/alg_writerframes/main/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx Wed Mar 19 10:14:42 2014
@@ -58,7 +58,8 @@ namespace sdr
 		}
 
 		ViewContactOfSdrOle2Obj::ViewContactOfSdrOle2Obj(SdrOle2Obj& rOle2Obj)
-		:	ViewContactOfSdrRectObj(rOle2Obj)
+		:	ViewContactOfSdrRectObj(rOle2Obj),
+            mxChartContent()
 		{
 		}
 
@@ -104,30 +105,45 @@ namespace sdr
 
             if(GetOle2Obj().IsChart())
             {
-                // try to get chart primitives and chart range directly from xChartModel
-                basegfx::B2DRange aChartContentRange;
-                const drawinglayer::primitive2d::Primitive2DSequence aChartSequence(
-                    ChartHelper::tryToGetChartContentAsPrimitive2DSequence(
-                        GetOle2Obj().getXModel(),
-                        aChartContentRange));
-                const double fWidth(aChartContentRange.getWidth());
-                const double fHeight(aChartContentRange.getHeight());
-
-                if(aChartSequence.hasElements() 
-                    && basegfx::fTools::more(fWidth, 0.0)
-                    && basegfx::fTools::more(fHeight, 0.0))
+                // #123539# allow buffering and reuse of local chart data to not need to rebuild it
+                // on every ViewObjectContact::getPrimitive2DSequence call. TTTT: No tneeded for
+                // aw080, there this mechanism alraedy works differently
+                if(mxChartContent.is())
                 {
-                    // create embedding transformation
-                    basegfx::B2DHomMatrix aEmbed(
-                        basegfx::tools::createTranslateB2DHomMatrix(
-                            -aChartContentRange.getMinX(), 
-                            -aChartContentRange.getMinY()));
-
-                    aEmbed.scale(1.0 / fWidth, 1.0 / fHeight);
-                    aEmbed = aObjectMatrix * aEmbed;
-                    xContent = new drawinglayer::primitive2d::TransformPrimitive2D(
-                        aEmbed,
-                        aChartSequence);
+                    xContent = mxChartContent;
+                }
+                else
+                {
+                    // try to get chart primitives and chart range directly from xChartModel
+                    basegfx::B2DRange aChartContentRange;
+                    const drawinglayer::primitive2d::Primitive2DSequence aChartSequence(
+                        ChartHelper::tryToGetChartContentAsPrimitive2DSequence(
+                            GetOle2Obj().getXModel(),
+                            aChartContentRange));
+                    const double fWidth(aChartContentRange.getWidth());
+                    const double fHeight(aChartContentRange.getHeight());
+
+                    if(aChartSequence.hasElements() 
+                        && basegfx::fTools::more(fWidth, 0.0)
+                        && basegfx::fTools::more(fHeight, 0.0))
+                    {
+                        // create embedding transformation
+                        basegfx::B2DHomMatrix aEmbed(
+                            basegfx::tools::createTranslateB2DHomMatrix(
+                                -aChartContentRange.getMinX(), 
+                                -aChartContentRange.getMinY()));
+
+                        aEmbed.scale(1.0 / fWidth, 1.0 / fHeight);
+                        aEmbed = aObjectMatrix * aEmbed;
+                        xContent = new drawinglayer::primitive2d::TransformPrimitive2D(
+                            aEmbed,
+                            aChartSequence);
+                    }
+
+                    if(xContent.is())
+                    {
+                        const_cast< ViewContactOfSdrOle2Obj* >(this)->mxChartContent = xContent;
+                    }
                 }
             }
 
@@ -160,6 +176,18 @@ namespace sdr
 			return drawinglayer::primitive2d::Primitive2DSequence(&xReference, 1);
         }
 
+        void ViewContactOfSdrOle2Obj::ActionChanged()
+        {
+            // call parent
+            ViewContactOfSdrRectObj::ActionChanged();
+
+            // #123539# if we have buffered chart data, reset it
+            if(mxChartContent.is())
+            {
+                mxChartContent.clear();
+            }
+        }
+
 		drawinglayer::primitive2d::Primitive2DSequence ViewContactOfSdrOle2Obj::createViewIndependentPrimitive2DSequence() const
 		{
             // do as if no HC and call standard creator

Modified: openoffice/branches/alg_writerframes/main/svx/source/sdr/overlay/overlayanimatedbitmapex.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/sdr/overlay/overlayanimatedbitmapex.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/sdr/overlay/overlayanimatedbitmapex.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/sdr/overlay/overlayanimatedbitmapex.cxx Wed Mar 19 10:14:42 2014
@@ -45,7 +45,9 @@ namespace sdr
                         getBitmapEx1(),
                         getBasePosition(),
                         getCenterX1(),
-                        getCenterY1()));
+                        getCenterY1(),
+                        getShearX(),
+                        getRotation()));
 
                 return drawinglayer::primitive2d::Primitive2DSequence(&aPrimitive, 1);
             }
@@ -56,35 +58,41 @@ namespace sdr
                         getBitmapEx2(),
                         getBasePosition(),
                         getCenterX2(),
-                        getCenterY2()));
+                        getCenterY2(),
+                        getShearX(),
+                        getRotation()));
 
                 return drawinglayer::primitive2d::Primitive2DSequence(&aPrimitive, 1);
             }
 		}
 
-		OverlayAnimatedBitmapEx::OverlayAnimatedBitmapEx(
-			const basegfx::B2DPoint& rBasePos,
-			const BitmapEx& rBitmapEx1, 
-			const BitmapEx& rBitmapEx2, 
-			sal_uInt32 nBlinkTime,
-			sal_uInt16 nCenX1, 
-			sal_uInt16 nCenY1, 
-			sal_uInt16 nCenX2, 
-			sal_uInt16 nCenY2)
-		:	OverlayObjectWithBasePosition(rBasePos, Color(COL_WHITE)),
-			maBitmapEx1(rBitmapEx1),
-			maBitmapEx2(rBitmapEx2),
-			mnCenterX1(nCenX1), mnCenterY1(nCenY1),
-			mnCenterX2(nCenX2), mnCenterY2(nCenY2),
-			mnBlinkTime(nBlinkTime),
-			mbOverlayState(false)
+        OverlayAnimatedBitmapEx::OverlayAnimatedBitmapEx(
+            const basegfx::B2DPoint& rBasePos,
+            const BitmapEx& rBitmapEx1, 
+            const BitmapEx& rBitmapEx2, 
+            sal_uInt32 nBlinkTime,
+            sal_uInt16 nCenX1, 
+            sal_uInt16 nCenY1, 
+            sal_uInt16 nCenX2, 
+            sal_uInt16 nCenY2,
+            double fShearX,
+            double fRotation)
+        :   OverlayObjectWithBasePosition(rBasePos, Color(COL_WHITE)),
+            maBitmapEx1(rBitmapEx1),
+            maBitmapEx2(rBitmapEx2),
+            mnCenterX1(nCenX1), mnCenterY1(nCenY1),
+            mnCenterX2(nCenX2), mnCenterY2(nCenY2),
+            mnBlinkTime(nBlinkTime),
+            mfShearX(fShearX),
+            mfRotation(fRotation),
+            mbOverlayState(false)
         {
-			// set AllowsAnimation flag to mark this object as animation capable
-			mbAllowsAnimation = true;
+            // set AllowsAnimation flag to mark this object as animation capable
+            mbAllowsAnimation = true;
 
-			// #i53216# check blink time value range
-			mnBlinkTime = impCheckBlinkTimeValueRange(mnBlinkTime);
-		}
+            // #i53216# check blink time value range
+            mnBlinkTime = impCheckBlinkTimeValueRange(mnBlinkTime);
+        }
 
 		OverlayAnimatedBitmapEx::~OverlayAnimatedBitmapEx()
 		{

Modified: openoffice/branches/alg_writerframes/main/svx/source/sdr/overlay/overlaybitmapex.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/sdr/overlay/overlaybitmapex.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/sdr/overlay/overlaybitmapex.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/sdr/overlay/overlaybitmapex.cxx Wed Mar 19 10:14:42 2014
@@ -43,7 +43,9 @@ namespace sdr
                     getBitmapEx(),
                     getBasePosition(),
                     getCenterX(),
-                    getCenterY()));
+                    getCenterY(),
+                    getShearX(),
+                    getRotation()));
 
 			if(basegfx::fTools::more(mfAlpha, 0.0))
 			{
@@ -55,17 +57,23 @@ namespace sdr
             return drawinglayer::primitive2d::Primitive2DSequence(&aReference, 1);
 		}
 
-		OverlayBitmapEx::OverlayBitmapEx(
-			const basegfx::B2DPoint& rBasePos,
-			const BitmapEx& rBitmapEx, 
-			sal_uInt16 nCenX, sal_uInt16 nCenY, double fAlpha)
-		:	OverlayObjectWithBasePosition(rBasePos, Color(COL_WHITE)),
-			maBitmapEx(rBitmapEx),
-			mnCenterX(nCenX),
-			mnCenterY(nCenY),
-			mfAlpha(fAlpha)
-		{
-		}
+        OverlayBitmapEx::OverlayBitmapEx(
+            const basegfx::B2DPoint& rBasePos,
+            const BitmapEx& rBitmapEx, 
+            sal_uInt16 nCenX, 
+            sal_uInt16 nCenY, 
+            double fAlpha,
+            double fShearX,
+            double fRotation)
+        :   OverlayObjectWithBasePosition(rBasePos, Color(COL_WHITE)),
+            maBitmapEx(rBitmapEx),
+            mnCenterX(nCenX),
+            mnCenterY(nCenY),
+            mfAlpha(fAlpha),
+            mfShearX(fShearX),
+            mfRotation(fRotation)
+        {
+        }
 
 		OverlayBitmapEx::~OverlayBitmapEx()
 		{

Modified: openoffice/branches/alg_writerframes/main/svx/source/sdr/overlay/overlaytools.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/sdr/overlay/overlaytools.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/sdr/overlay/overlaytools.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/sdr/overlay/overlaytools.cxx Wed Mar 19 10:14:42 2014
@@ -47,12 +47,16 @@ namespace drawinglayer
 			const BitmapEx& rBitmapEx,
 			const basegfx::B2DPoint& rBasePosition,
 			sal_uInt16 nCenterX,
-			sal_uInt16 nCenterY)
+			sal_uInt16 nCenterY,
+            double fShearX,
+            double fRotation)
 		:   DiscreteMetricDependentPrimitive2D(),
 			maBitmapEx(rBitmapEx),
 			maBasePosition(rBasePosition),
 			mnCenterX(nCenterX),
-			mnCenterY(nCenterY)
+			mnCenterY(nCenterY),
+            mfShearX(fShearX),
+            mfRotation(fRotation)
 		{}
 
 		Primitive2DSequence OverlayBitmapExPrimitive::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
@@ -67,18 +71,33 @@ namespace drawinglayer
                 // the prepared one which expresses how many logic units form a discrete unit) 
                 // for this step. This primitive is to be displayed always unscaled (in it's pixel size) 
                 // and unrotated, more like a marker
-                const double fLeft(((0.0 - getCenterX()) * getDiscreteUnit()) + getBasePosition().getX());
-                const double fTop(((0.0 - getCenterY()) * getDiscreteUnit()) + getBasePosition().getY());
-                const double fRight(((aBitmapSize.getWidth() - getCenterX()) * getDiscreteUnit()) + getBasePosition().getX());
-                const double fBottom(((aBitmapSize.getHeight() - getCenterY()) * getDiscreteUnit()) + getBasePosition().getY());
+                const double fLeft((0.0 - getCenterX()) * getDiscreteUnit());
+                const double fTop((0.0 - getCenterY()) * getDiscreteUnit());
+                const double fRight((aBitmapSize.getWidth() - getCenterX()) * getDiscreteUnit());
+                const double fBottom((aBitmapSize.getHeight() - getCenterY()) * getDiscreteUnit());
 
                 // create a BitmapPrimitive2D using those positions
-				basegfx::B2DHomMatrix aTransform;
+                basegfx::B2DHomMatrix aTransform;
+
+                aTransform.set(0, 0, fRight - fLeft);
+                aTransform.set(1, 1, fBottom - fTop);
+                aTransform.set(0, 2, fLeft);
+                aTransform.set(1, 2, fTop);
+
+                // if shearX is used, apply it, too
+                if(!basegfx::fTools::equalZero(getShearX()))
+                {
+                    aTransform.shearX(getShearX());
+                }
+
+                // if rotation is used, apply it, too
+                if(!basegfx::fTools::equalZero(getRotation()))
+                {
+                    aTransform.rotate(getRotation());
+                }
 
-				aTransform.set(0, 0, fRight - fLeft);
-				aTransform.set(1, 1, fBottom - fTop);
-				aTransform.set(0, 2, fLeft);
-				aTransform.set(1, 2, fTop);
+                // add BasePosition
+                aTransform.translate(getBasePosition().getX(), getBasePosition().getY());
 
                 const Primitive2DReference aPrimitive(new BitmapPrimitive2D(getBitmapEx(), aTransform));
                 aRetval = Primitive2DSequence(&aPrimitive, 1);
@@ -96,7 +115,9 @@ namespace drawinglayer
 				return (getBitmapEx() == rCompare.getBitmapEx()
 					&& getBasePosition() == rCompare.getBasePosition()
 					&& getCenterX() == rCompare.getCenterX()
-					&& getCenterY() == rCompare.getCenterY());
+					&& getCenterY() == rCompare.getCenterY()
+                    && getShearX() == rCompare.getShearX()
+                    && getRotation() == rCompare.getRotation());
 			}
 
 			return false;

Modified: openoffice/branches/alg_writerframes/main/svx/source/sdr/primitive2d/sdrattributecreator.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/sdr/primitive2d/sdrattributecreator.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/sdr/primitive2d/sdrattributecreator.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/sdr/primitive2d/sdrattributecreator.cxx Wed Mar 19 10:14:42 2014
@@ -647,26 +647,31 @@ namespace drawinglayer
 
             // convert size and MapMode to destination logical size and MapMode
             const MapUnit aDestinationMapUnit((MapUnit)rSet.GetPool()->GetMetric(0));
+            basegfx::B2DVector aGraphicLogicSize(aGraphic.GetPrefSize().Width(), aGraphic.GetPrefSize().Height());
 
             if(aGraphic.GetPrefMapMode() != aDestinationMapUnit)
             {
                 // #i100360# for MAP_PIXEL, LogicToLogic will not work properly,
                 // so fallback to Application::GetDefaultDevice()
+                Size aNewSize(0, 0);
+
                 if(MAP_PIXEL == aGraphic.GetPrefMapMode().GetMapUnit())
                 {
-                    aGraphic.SetPrefSize(
-                        Application::GetDefaultDevice()->PixelToLogic(
-                            aGraphic.GetPrefSize(), 
-                            aDestinationMapUnit));
+                    aNewSize = Application::GetDefaultDevice()->PixelToLogic(
+                        aGraphic.GetPrefSize(), 
+                        aDestinationMapUnit);
                 }
                 else
                 {
-                    aGraphic.SetPrefSize(
-                        OutputDevice::LogicToLogic(
-                            aGraphic.GetPrefSize(), 
-                            aGraphic.GetPrefMapMode(), 
-                            aDestinationMapUnit));
+                    aNewSize = OutputDevice::LogicToLogic(
+                        aGraphic.GetPrefSize(), 
+                        aGraphic.GetPrefMapMode(), 
+                        aDestinationMapUnit);
                 }
+
+                // #124002# do not set new size using SetPrefSize at the graphic, this will lead to problems.
+                // Instead, adapt the GraphicLogicSize which will be used for further decompositions
+                aGraphicLogicSize = basegfx::B2DVector(aNewSize.Width(), aNewSize.Height());
             }
 
 			// get size
@@ -682,6 +687,7 @@ namespace drawinglayer
 
 			return attribute::SdrFillGraphicAttribute(
 				aGraphic,
+                aGraphicLogicSize,
 				aSize,
 				aOffset,
 				aOffsetPosition,

Modified: openoffice/branches/alg_writerframes/main/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx Wed Mar 19 10:14:42 2014
@@ -281,10 +281,13 @@ namespace drawinglayer
 				aTextAnchorRange.expand(aTopLeft);
 				aTextAnchorRange.expand(aBottomRight);
 
-				// now create a transformation from this basic range (aTextAnchorRange)
-				aAnchorTransform = basegfx::tools::createScaleTranslateB2DHomMatrix(
-					aTextAnchorRange.getWidth(), aTextAnchorRange.getHeight(),
-					aTextAnchorRange.getMinX(), aTextAnchorRange.getMinY());
+                // now create a transformation from this basic range (aTextAnchorRange)
+                // #121494# if we have no scale use at least 1.0 to have a carrier e.g. for
+                // mirror values, else these will get lost
+                aAnchorTransform = basegfx::tools::createScaleTranslateB2DHomMatrix(
+                    basegfx::fTools::equalZero(aTextAnchorRange.getWidth()) ? 1.0 : aTextAnchorRange.getWidth(), 
+                    basegfx::fTools::equalZero(aTextAnchorRange.getHeight()) ? 1.0 : aTextAnchorRange.getHeight(),
+                    aTextAnchorRange.getMinX(), aTextAnchorRange.getMinY());
 
 				// apply mirroring
 				aAnchorTransform.scale(bMirrorX ? -1.0 : 1.0, bMirrorY ? -1.0 : 1.0);

Modified: openoffice/branches/alg_writerframes/main/svx/source/sidebar/area/AreaPropertyPanel.src
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/sidebar/area/AreaPropertyPanel.src?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/sidebar/area/AreaPropertyPanel.src (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/sidebar/area/AreaPropertyPanel.src Wed Mar 19 10:14:42 2014
@@ -144,7 +144,7 @@ Control RID_SIDEBAR_AREA_PANEL
 		Border = TRUE ;
         Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL , SECTIONPAGE_MARGIN_VERTICAL_TOP + 2*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL) + CBOX_HEIGHT + CONTROL_SPACING_VERTICAL ) ;
         Size = MAP_APPFONT ( MBOX_WIDTH , LISTBOX_HEIGHT ) ;
-        QuickHelpText [ en-US ] = "Select the type of transparence to apply." ;
+        QuickHelpText [ en-US ] = "Select the type of transparency to apply." ;
 		TabStop = TRUE ;
 		DropDown = TRUE ;
 		HelpID = HID_PPROPERTYPANEL_AREA_LB_TRGR_TYPES ;
@@ -167,14 +167,13 @@ Control RID_SIDEBAR_AREA_PANEL
         Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL + MBOX_WIDTH + CONTROL_SPACING_HORIZONTAL , SECTIONPAGE_MARGIN_VERTICAL_TOP + 2*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL) + CBOX_HEIGHT + CONTROL_SPACING_VERTICAL ) ;
         Size = MAP_APPFONT ( MBOX_WIDTH + 1 ,MBOX_HEIGHT ) ;
         HelpID = HID_PPROPERTYPANEL_AREA_MTR_TRANSPARENT ;
-        QuickHelpText [ en-US ] = "Specify 0% for fully opaque through 100% for fully transparent." ;
+        QuickHelpText [ en-US ] = "Specify 0 % for fully opaque through 100 % for fully transparent." ;
 		TabStop = TRUE ;
 		Repeat = TRUE ;
 		Spin = TRUE ;
 		Maximum = 100 ;
 		StrictFormat = TRUE ;
-		Unit = FUNIT_CUSTOM ;
-        CustomUnitText = "%" ;
+		Unit = FUNIT_PERCENT ;
 		Last = 100 ;
 		SpinSize = 5 ;
 	};
@@ -226,14 +225,13 @@ Control RID_POPUPPANEL_AREAPAGE_TRGR
 		Border = TRUE ;
         Size = MAP_APPFONT ( CONTROL_WIDTH , MBOX_HEIGHT ) ;
         HelpID = HID_PPROPERTYPANEL_AREA_MTR_TRGR_CENTER_X ;
-        QuickHelpText [ en-US ] = "Specify the horizontal offset percentage from the center for the gradient shading style. 50% is the horizontal center." ;
+        QuickHelpText [ en-US ] = "Specify the horizontal offset percentage from the center for the gradient shading style. 50 % is the horizontal center." ;
 		TabStop = TRUE ;
 		Repeat = TRUE ;
 		Spin = TRUE ;
 		Maximum = 100 ;
 		StrictFormat = TRUE ;
-		Unit = FUNIT_CUSTOM ;
-        CustomUnitText = "%" ;
+		Unit = FUNIT_PERCENT ;
 		Last = 100 ;
 		SpinSize = 5 ;
 	};
@@ -247,14 +245,13 @@ Control RID_POPUPPANEL_AREAPAGE_TRGR
 		Border = TRUE ;
         Size = MAP_APPFONT ( CONTROL_WIDTH , MBOX_HEIGHT ) ;
         HelpID = HID_PPROPERTYPANEL_AREA_MTR_TRGR_CENTER_Y ;
-        QuickHelpText [ en-US ] = "Specify the vertical offset percentage from the center for the gradient shading style.  50% is the vertical center." ;
+        QuickHelpText [ en-US ] = "Specify the vertical offset percentage from the center for the gradient shading style.  50 % is the vertical center." ;
 		TabStop = TRUE ;
 		Repeat = TRUE ;
 		Spin = TRUE ;
 		Maximum = 100 ;
 		StrictFormat = TRUE ;
-		Unit = FUNIT_CUSTOM ;
-        CustomUnitText = "%" ;
+		Unit = FUNIT_PERCENT ;
 		Last = 100 ;
 		SpinSize = 5 ;
 	};
@@ -288,14 +285,13 @@ Control RID_POPUPPANEL_AREAPAGE_TRGR
 		Border = TRUE ;
         Size = MAP_APPFONT ( CONTROL_WIDTH , MBOX_HEIGHT ) ;
         HelpID = HID_PPROPERTYPANEL_AREA_MTR_TRGR_SVALUE ;
-        QuickHelpText [ en-US ] = "Enter a transparency value for the beginning point of the gradient, where 0% is fully opaque and 100% is fully transparent." ;
+        QuickHelpText [ en-US ] = "Enter a transparency value for the beginning point of the gradient, where 0 % is fully opaque and 100 % is fully transparent." ;
 		TabStop = TRUE ;
 		Repeat = TRUE ;
 		Spin = TRUE ;
 		Maximum = 100 ;
 		StrictFormat = TRUE ;
-		Unit = FUNIT_CUSTOM ;
-        CustomUnitText = "%" ;
+		Unit = FUNIT_PERCENT ;
 		Last = 100 ;
 		SpinSize = 5 ;
 	};
@@ -309,14 +305,13 @@ Control RID_POPUPPANEL_AREAPAGE_TRGR
 		Border = TRUE ;
         Size = MAP_APPFONT ( CONTROL_WIDTH , MBOX_HEIGHT ) ;
         HelpID = HID_PPROPERTYPANEL_AREA_MTR_TRGR_EVALUE ;
-        QuickHelpText [ en-US ] = "Enter a transparency value for the endpoint of the gradient, where 0% is fully opaque and 100% is fully transparent." ;
+        QuickHelpText [ en-US ] = "Enter a transparency value for the endpoint of the gradient, where 0 % is fully opaque and 100 % is fully transparent." ;
 		TabStop = TRUE ;
 		Repeat = TRUE ;
 		Spin = TRUE ;
 		Maximum = 100 ;
 		StrictFormat = TRUE ;
-		Unit = FUNIT_CUSTOM ;
-        CustomUnitText = "%" ;
+		Unit = FUNIT_PERCENT ;
 		Last = 100 ;
 		SpinSize = 5 ;
 	};
@@ -330,14 +325,13 @@ Control RID_POPUPPANEL_AREAPAGE_TRGR
 		Border = TRUE ;
         Size = MAP_APPFONT ( CONTROL_WIDTH , MBOX_HEIGHT ) ;
         HelpID = HID_PPROPERTYPANEL_AREA_MTR_TRGR_BORDER ;
-        QuickHelpText [ en-US ] = "Specify the border value of gradient transparence." ;
+        QuickHelpText [ en-US ] = "Specify the border value of gradient transparency." ;
 		TabStop = TRUE ;
 		Repeat = TRUE ;
 		Spin = TRUE ;
 		Maximum = 100 ;
 		StrictFormat = TRUE ;
-		Unit = FUNIT_CUSTOM ;
-		CustomUnitText = "%" ;
+		Unit = FUNIT_PERCENT ;
 		Last = 100 ;
 		SpinSize = 5 ;
 	};	

Modified: openoffice/branches/alg_writerframes/main/svx/source/sidebar/graphic/GraphicPropertyPanel.src
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/sidebar/graphic/GraphicPropertyPanel.src?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/sidebar/graphic/GraphicPropertyPanel.src (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/sidebar/graphic/GraphicPropertyPanel.src Wed Mar 19 10:14:42 2014
@@ -69,8 +69,7 @@ Control RID_SIDEBAR_GRAPHIC_PANEL
 		Maximum = 100 ;
 		Minimum = -100 ;
 		StrictFormat = TRUE ;
-		Unit = FUNIT_CUSTOM ;
-        CustomUnitText = "%" ;
+		Unit = FUNIT_PERCENT ;
 		SpinSize = 1 ;
 	};
 	FixedText FT_CONTRAST
@@ -92,8 +91,7 @@ Control RID_SIDEBAR_GRAPHIC_PANEL
 		Maximum = 100 ;
 		Minimum = -100 ;
 		StrictFormat = TRUE ;
-		Unit = FUNIT_CUSTOM ;
-        CustomUnitText = "%" ;
+		Unit = FUNIT_PERCENT ;
 		SpinSize = 1 ;
 	};
 	FixedText FT_COLOR_MODE
@@ -124,14 +122,13 @@ Control RID_SIDEBAR_GRAPHIC_PANEL
         Pos = MAP_APPFONT (X2, Y3) ;
         Size = MAP_APPFONT ( MBOX_WIDTH ,MBOX_HEIGHT ) ;
         HelpID = HID_PROPERTY_PANEL_GRAPHIC_MTR_TRANSP;
-        QuickHelpText [ en-US ] = "Specify the percentage of transparency; 0% is fully opaque and 100% is fully transparent.";
+        QuickHelpText [ en-US ] = "Specify the percentage of transparency; 0 % is fully opaque and 100 % is fully transparent.";
 		TabStop = TRUE ;
 		Repeat = TRUE ;
 		Spin = TRUE ;
 		Maximum = 100 ;
 		StrictFormat = TRUE ;
-		Unit = FUNIT_CUSTOM ;
-        CustomUnitText = "%" ;
+		Unit = FUNIT_PERCENT ;
 		SpinSize = 1 ;
 	};	
 	MetricField MF_RED
@@ -147,8 +144,7 @@ Control RID_SIDEBAR_GRAPHIC_PANEL
 		Maximum = 100 ;
 		Minimum = -100 ;
 		StrictFormat = TRUE ;
-		Unit = FUNIT_CUSTOM ;
-        CustomUnitText = "%" ;
+		Unit = FUNIT_PERCENT ;
 		SpinSize = 1 ;
 	};
 	MetricField MF_GREEN
@@ -164,8 +160,7 @@ Control RID_SIDEBAR_GRAPHIC_PANEL
 		Maximum = 100 ;
 		Minimum = -100 ;
 		StrictFormat = TRUE ;
-		Unit = FUNIT_CUSTOM ;
-        CustomUnitText = "%" ;
+		Unit = FUNIT_PERCENT ;
 		SpinSize = 1 ;
 	};
 	MetricField MF_BLUE
@@ -181,8 +176,7 @@ Control RID_SIDEBAR_GRAPHIC_PANEL
 		Maximum = 100 ;
 		Minimum = -100 ;
 		StrictFormat = TRUE ;
-		Unit = FUNIT_CUSTOM ;
-        CustomUnitText = "%" ;
+		Unit = FUNIT_PERCENT ;
 		SpinSize = 1 ;
 	};
 	MetricField MF_GAMMA

Modified: openoffice/branches/alg_writerframes/main/svx/source/sidebar/line/LinePropertyPanel.src
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/sidebar/line/LinePropertyPanel.src?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/sidebar/line/LinePropertyPanel.src (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/sidebar/line/LinePropertyPanel.src Wed Mar 19 10:14:42 2014
@@ -131,8 +131,7 @@ Control RID_SIDEBAR_LINE_PANEL
 		Spin = TRUE ;
 		Maximum = 100 ;
 		StrictFormat = TRUE ;
-		Unit = FUNIT_CUSTOM ;
-		CustomUnitText = "%" ;
+		Unit = FUNIT_PERCENT ;
 		Last = 100 ;
 		SpinSize = 5 ;
 		QuickHelpText [ en-US ] = "Specify the transparency of the line.";

Modified: openoffice/branches/alg_writerframes/main/svx/source/sidebar/paragraph/ParaPropertyPanel.src
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/sidebar/paragraph/ParaPropertyPanel.src?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/sidebar/paragraph/ParaPropertyPanel.src (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/sidebar/paragraph/ParaPropertyPanel.src Wed Mar 19 10:14:42 2014
@@ -661,8 +661,7 @@ Control RID_POPUPPANEL_PARAPAGE_LINESPAC
 		Maximum = 200;
 		Value = 100;
 		StrictFormat = TRUE;
-		Unit = FUNIT_CUSTOM ;
-		CustomUnitText = "%";
+		Unit = FUNIT_PERCENT ;
 		First = 50;
 		Last = 200;
 		SpinSize = 1;

Modified: openoffice/branches/alg_writerframes/main/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/sidebar/possize/PosSizePropertyPanel.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/sidebar/possize/PosSizePropertyPanel.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/sidebar/possize/PosSizePropertyPanel.cxx Wed Mar 19 10:14:42 2014
@@ -699,9 +699,11 @@ IMPL_LINK( PosSizePropertyPanel, AngleMo
     }
     sal_Int64 nTmp = dTmp*100;
 
+    // #123993# Need to take UIScale into account when executing rotations
+    const double fUIScale(mpView && mpView->GetModel() ? double(mpView->GetModel()->GetUIScale()) : 1.0);
     SfxInt32Item aAngleItem( SID_ATTR_TRANSFORM_ANGLE,(sal_uInt32) nTmp);
-    SfxInt32Item aRotXItem( SID_ATTR_TRANSFORM_ROT_X,(sal_uInt32) mlRotX);
-    SfxInt32Item aRotYItem( SID_ATTR_TRANSFORM_ROT_Y,(sal_uInt32) mlRotY);
+    SfxInt32Item aRotXItem( SID_ATTR_TRANSFORM_ROT_X, basegfx::fround(mlRotX * fUIScale));
+    SfxInt32Item aRotYItem( SID_ATTR_TRANSFORM_ROT_Y, basegfx::fround(mlRotY * fUIScale));
     
     GetBindings()->GetDispatcher()->Execute(
         SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aAngleItem, &aRotXItem, &aRotYItem, 0L );
@@ -715,9 +717,11 @@ IMPL_LINK( PosSizePropertyPanel, Rotatio
 {
     sal_Int32 nTmp = mpDial->GetRotation();
 
+    // #123993# Need to take UIScale into account when executing rotations
+    const double fUIScale(mpView && mpView->GetModel() ? double(mpView->GetModel()->GetUIScale()) : 1.0);
     SfxInt32Item aAngleItem( SID_ATTR_TRANSFORM_ANGLE,(sal_uInt32) nTmp);
-    SfxInt32Item aRotXItem( SID_ATTR_TRANSFORM_ROT_X,(sal_uInt32) mlRotX);
-    SfxInt32Item aRotYItem( SID_ATTR_TRANSFORM_ROT_Y,(sal_uInt32) mlRotY);
+    SfxInt32Item aRotXItem( SID_ATTR_TRANSFORM_ROT_X, basegfx::fround(mlRotX * fUIScale));
+    SfxInt32Item aRotYItem( SID_ATTR_TRANSFORM_ROT_Y, basegfx::fround(mlRotY * fUIScale));
     
     GetBindings()->GetDispatcher()->Execute(
         SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aAngleItem, &aRotXItem, &aRotYItem, 0L );
@@ -992,6 +996,7 @@ void PosSizePropertyPanel::NotifyItemUpd
             
         case SID_ATTR_METRIC:
             MetricState( eState, pState );
+            UpdateUIScale();
             break;
 
         default:
@@ -1346,6 +1351,28 @@ void PosSizePropertyPanel::DisableContro
 }
 
 
+
+
+void PosSizePropertyPanel::UpdateUIScale (void)
+{
+    const Fraction aUIScale (mpView->GetModel()->GetUIScale());
+    if (maUIScale != aUIScale)
+    {
+        // UI scale has changed.
+
+        // Remember the new UI scale.
+        maUIScale = aUIScale;
+
+        // The content of the position and size boxes is only updated when item changes are notified.
+        // Request such notifications without changing the actual item values.
+        GetBindings()->Invalidate(SID_ATTR_TRANSFORM_POS_X, sal_True, sal_False);
+        GetBindings()->Invalidate(SID_ATTR_TRANSFORM_POS_Y, sal_True, sal_False);
+        GetBindings()->Invalidate(SID_ATTR_TRANSFORM_WIDTH, sal_True, sal_False);
+        GetBindings()->Invalidate(SID_ATTR_TRANSFORM_HEIGHT, sal_True, sal_False);
+    }
+}
+
+
 } } // end of namespace svx::sidebar
 
 // eof

Modified: openoffice/branches/alg_writerframes/main/svx/source/sidebar/possize/PosSizePropertyPanel.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/sidebar/possize/PosSizePropertyPanel.hxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/sidebar/possize/PosSizePropertyPanel.hxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/sidebar/possize/PosSizePropertyPanel.hxx Wed Mar 19 10:14:42 2014
@@ -184,6 +184,18 @@ private:
     void DisableControls();
     void AdaptWidthHeightScalePosition(bool bOriginal);
     void AdaptAngleFlipDialPosition(bool bOriginal);
+
+    /** Check if the UI scale has changed and handle such a change.
+        UI scale is an SD only feature.  The UI scale is represented by items
+        ATTR_OPTIONS_SCALE_X and
+        ATTR_OPTIONS_SCALE_Y.
+        As we have no direct access (there is no dependency of svx on sd) we have to
+        use a small trick (aka hack):
+        a) call this method whenever a change of the metric item is notified,
+        b) check if the UI scale has changed (strangely, the UI scale value is available at the SdrModel.
+        c) invalidate the items for position and size to trigger notifications of their current values.
+    */
+    void UpdateUIScale (void);
 };
 
 

Modified: openoffice/branches/alg_writerframes/main/svx/source/sidebar/text/TextCharacterSpacingControl.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/sidebar/text/TextCharacterSpacingControl.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/sidebar/text/TextCharacterSpacingControl.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/sidebar/text/TextCharacterSpacingControl.cxx Wed Mar 19 10:14:42 2014
@@ -185,6 +185,7 @@ void TextCharacterSpacingControl::Rearra
 		{	
 			String aStrTip( maStrCusE);   //LAST CUSTOM no tip defect //add 
 			aStrTip.Append( String::CreateFromDouble( (double)mnCustomKern / 10));
+			aStrTip.Append( xub_Unicode(' ') );
 			aStrTip.Append(maStrUnit);		// modify 
 			maVSSpacing.SetItemText(6,aStrTip);
 		}
@@ -192,6 +193,7 @@ void TextCharacterSpacingControl::Rearra
 		{	
 			String aStrTip(maStrCusC) ;		//LAST CUSTOM no tip defect //add 
 			aStrTip.Append( String::CreateFromDouble( (double)-mnCustomKern / 10));
+			aStrTip.Append( xub_Unicode( ' ' ) );
 			aStrTip.Append(maStrUnit);		// modify 
 			maVSSpacing.SetItemText( 6, aStrTip );
 		}	

Modified: openoffice/branches/alg_writerframes/main/svx/source/sidebar/text/TextPropertyPanel.src
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/sidebar/text/TextPropertyPanel.src?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/sidebar/text/TextPropertyPanel.src (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/sidebar/text/TextPropertyPanel.src Wed Mar 19 10:14:42 2014
@@ -623,11 +623,11 @@ Control RID_POPUPPANEL_TEXTPAGE_SPACING
 	
 	String STR_VERY_TIGHT_TIP
 	{
-		Text [ en-US ] = " Spacing: Condensed By: 3pt";
+		Text [ en-US ] = " Spacing: Condensed By: 3 pt";
 	};
 	String STR_TIGHT_TIP
 	{
-		Text [ en-US ] = " Spacing: Condensed By: 1.5pt";
+		Text [ en-US ] = " Spacing: Condensed By: 1.5 pt";
 	};
 	String STR_NORMAL_TIP
 	{
@@ -635,11 +635,11 @@ Control RID_POPUPPANEL_TEXTPAGE_SPACING
 	};
 	String STR_LOOSE_TIP
 	{
-		Text [ en-US ] = " Spacing: Expanded By: 3pt";
+		Text [ en-US ] = " Spacing: Expanded By: 3 pt";
 	};
 	String STR_VERY_LOOSE_TIP
 	{
-		Text [ en-US ] = " Spacing: Expanded By: 6pt";
+		Text [ en-US ] = " Spacing: Expanded By: 6 pt";
 	};
 	String STR_CUSTOM_C_TIP
 	{

Modified: openoffice/branches/alg_writerframes/main/svx/source/stbctrls/stbctrls.src
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/stbctrls/stbctrls.src?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/stbctrls/stbctrls.src (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/stbctrls/stbctrls.src Wed Mar 19 10:14:42 2014
@@ -93,31 +93,31 @@ Menu RID_SVXMNU_ZOOM
 		{
 			Identifier = ZOOM_200 ;
 			HelpId = HID_MNU_ZOOM_200 ;
-			Text = "200%" ;
+			Text = "200 %" ;
 		};
 		MenuItem
 		{
 			Identifier = ZOOM_150 ;
 			HelpId = HID_MNU_ZOOM_150 ;
-			Text = "150%" ;
+			Text = "150 %" ;
 		};
 		MenuItem
 		{
 			Identifier = ZOOM_100 ;
 			HelpId = HID_MNU_ZOOM_100 ;
-			Text = "100%" ;
+			Text = "100 %" ;
 		};
 		MenuItem
 		{
 			Identifier = ZOOM_75 ;
 			HelpId = HID_MNU_ZOOM_75 ;
-			Text = "75%" ;
+			Text = "75 %" ;
 		};
 		MenuItem
 		{
 			Identifier = ZOOM_50 ;
 			HelpId = HID_MNU_ZOOM_50 ;
-			Text = "50%" ;
+			Text = "50 %" ;
 		};
 		MenuItem
 		{

Modified: openoffice/branches/alg_writerframes/main/svx/source/stbctrls/zoomctrl.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/stbctrls/zoomctrl.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/stbctrls/zoomctrl.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/stbctrls/zoomctrl.cxx Wed Mar 19 10:14:42 2014
@@ -132,7 +132,7 @@ void SvxZoomStatusBarControl::StateChang
 		const SfxUInt16Item* pItem = (const SfxUInt16Item*)pState;
 		nZoom = pItem->GetValue();
 		String aStr( String::CreateFromInt32(nZoom) );
-		aStr += '%';
+        aStr.AppendAscii( " %" );
 		GetStatusBar().SetItemText( GetId(), aStr );
 
 		if ( pState->ISA(SvxZoomItem) )
@@ -168,7 +168,7 @@ void SvxZoomStatusBarControl::StateChang
 void SvxZoomStatusBarControl::Paint( const UserDrawEvent& )
 {
 	String aStr( String::CreateFromInt32( nZoom ));
-	aStr += '%';
+    aStr.AppendAscii( " %" );
 	GetStatusBar().SetItemText( GetId(), aStr );
 }
 
@@ -212,7 +212,7 @@ void SvxZoomStatusBarControl::Command( c
 
 sal_uIntPtr SvxZoomStatusBarControl::GetDefItemWidth(const StatusBar& rStb)
 {
-	long nWidth1 =  rStb.GetTextWidth(String::CreateFromAscii("XXXXX%"));
+	long nWidth1 =  rStb.GetTextWidth(String::CreateFromAscii("XXXXX %"));
 	return nWidth1;
 }
 

Modified: openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdattr.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdattr.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdattr.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdattr.cxx Wed Mar 19 10:14:42 2014
@@ -1011,6 +1011,7 @@ SfxItemPresentation __EXPORT SdrMetricIt
 	aFmt.TakeStr(nValue,rText);
 	String aStr;
 	aFmt.TakeUnitStr((MapUnit)ePresMetric,aStr);
+	rText += sal_Unicode(' ');
 	rText+=aStr;
 	if (ePres==SFX_ITEM_PRESENTATION_COMPLETE) {
 		String aStr2;

Modified: openoffice/branches/alg_writerframes/main/svx/source/svdraw/svddrgm1.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/svdraw/svddrgm1.hxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/svdraw/svddrgm1.hxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/svdraw/svddrgm1.hxx Wed Mar 19 10:14:42 2014
@@ -256,15 +256,18 @@ public:
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 //   SdrDragCrop
 
-class SdrDragCrop : public SdrDragResize
+// derive from SdrDragObjOwn to have handles aligned to object when it
+// is sheared or rotated
+class SdrDragCrop : public SdrDragObjOwn
 {
 public:
-	TYPEINFO();
-	SdrDragCrop(SdrDragView& rNewView);
+    TYPEINFO();
+    SdrDragCrop(SdrDragView& rNewView);
 
-	virtual void TakeSdrDragComment(String& rStr) const;
-	virtual bool EndSdrDrag(bool bCopy);
-	virtual Pointer GetSdrDragPointer() const;
+    virtual void TakeSdrDragComment(String& rStr) const;
+    virtual bool BeginSdrDrag();
+    virtual bool EndSdrDrag(bool bCopy);
+    virtual Pointer GetSdrDragPointer() const;
 };
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////

Modified: openoffice/branches/alg_writerframes/main/svx/source/svdraw/svddrgmt.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/svdraw/svddrgmt.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/svdraw/svddrgmt.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/svdraw/svddrgmt.cxx Wed Mar 19 10:14:42 2014
@@ -3681,7 +3681,7 @@ void SdrDragDistort::applyCurrentTransfo
 TYPEINIT1(SdrDragCrop,SdrDragResize);
 
 SdrDragCrop::SdrDragCrop(SdrDragView& rNewView)
-:	SdrDragResize(rNewView)
+:   SdrDragObjOwn(rNewView)
 {
 	// switch off solid dragging for crop; it just makes no sense since showing
 	// a 50% transparent object above the original will not be visible
@@ -3706,7 +3706,21 @@ void SdrDragCrop::TakeSdrDragComment(Xub
 		rStr += ImpGetResStr(STR_EditWithCopy);
 }
 
-bool SdrDragCrop::EndSdrDrag(bool bCopy)
+bool SdrDragCrop::BeginSdrDrag()
+{
+    // call parent
+    bool bRetval(SdrDragObjOwn::BeginSdrDrag());
+
+    if(!GetDragHdl())
+    {
+        // we need the DragHdl, break if not there
+        bRetval = false;
+    }
+
+    return bRetval;
+}
+
+bool SdrDragCrop::EndSdrDrag(bool /*bCopy*/)
 {
 	Hide();
 	
@@ -3745,34 +3759,204 @@ bool SdrDragCrop::EndSdrDrag(bool bCopy)
 		ImpTakeDescriptionStr(STR_DragMethCrop, aUndoStr);
 
 	    getSdrDragView().BegUndo( aUndoStr );
-		getSdrDragView().AddUndo( getSdrDragView().GetModel()->GetSdrUndoFactory().CreateUndoGeoObject( *pObj ) );
+		getSdrDragView().AddUndo( getSdrDragView().GetModel()->GetSdrUndoFactory().CreateUndoGeoObject(*pObj));
+        // also need attr undo, the SdrGrafCropItem will be changed
+        getSdrDragView().AddUndo( getSdrDragView().GetModel()->GetSdrUndoFactory().CreateUndoAttrObject(*pObj));
 	}
 
-	Rectangle aOldRect( pObj->GetLogicRect() );
-	getSdrDragView().ResizeMarkedObj(DragStat().Ref1(),aXFact,aYFact,bCopy);
-	Rectangle aNewRect( pObj->GetLogicRect() );
+    // new part to comute the user's drag activities
+    // get the original objects transformation
+    basegfx::B2DHomMatrix aOriginalMatrix;
+    basegfx::B2DPolyPolygon aPolyPolygon;
+    bool bShearCorrected(false);
+
+    // get transformation from object
+    pObj->TRGetBaseGeometry(aOriginalMatrix, aPolyPolygon);
+
+    {   // TTTT correct shear, it comes currently mirrored from TRGetBaseGeometry, can be removed with aw080
+        basegfx::B2DTuple aScale;
+        basegfx::B2DTuple aTranslate;
+        double fRotate(0.0), fShearX(0.0);
+
+        aOriginalMatrix.decompose(aScale, aTranslate, fRotate, fShearX);
+
+        if(!basegfx::fTools::equalZero(fShearX))
+        {
+            bShearCorrected = true;
+            aOriginalMatrix = basegfx::tools::createScaleShearXRotateTranslateB2DHomMatrix(
+                aScale,
+                -fShearX,
+                fRotate,
+                aTranslate);
+        }
+    }
+
+    // invert it to be able to work on unit coordinates
+    basegfx::B2DHomMatrix aInverse(aOriginalMatrix);
+
+    aInverse.invert();
+
+    // gererate start point of original drag vector in unit coordinates (the
+    // vis-a-vis of the drag point)
+    basegfx::B2DPoint aLocalStart(0.0, 0.0);
+    bool bOnAxis(false);
+
+    switch(GetDragHdlKind()) 
+    {
+        case HDL_UPLFT: aLocalStart.setX(1.0); aLocalStart.setY(1.0); break;
+        case HDL_UPPER: aLocalStart.setX(0.5); aLocalStart.setY(1.0); bOnAxis = true; break;
+        case HDL_UPRGT: aLocalStart.setX(0.0); aLocalStart.setY(1.0); break;
+        case HDL_LEFT : aLocalStart.setX(1.0); aLocalStart.setY(0.5); bOnAxis = true; break;
+        case HDL_RIGHT: aLocalStart.setX(0.0); aLocalStart.setY(0.5); bOnAxis = true; break;
+        case HDL_LWLFT: aLocalStart.setX(1.0); aLocalStart.setY(0.0); break;
+        case HDL_LOWER: aLocalStart.setX(0.5); aLocalStart.setY(0.0); bOnAxis = true; break;
+        case HDL_LWRGT: aLocalStart.setX(0.0); aLocalStart.setY(0.0); break;
+        default: break;
+    }
+
+    // create the current drag position in unit coordinates
+    basegfx::B2DPoint aLocalCurrent(aInverse * basegfx::B2DPoint(DragStat().GetNow().X(), DragStat().GetNow().Y()));
+
+    // if one of the edge handles is used, limit to X or Y drag only
+    if(bOnAxis)
+    {
+        if(basegfx::fTools::equal(aLocalStart.getX(), 0.5))
+        {
+            aLocalCurrent.setX(aLocalStart.getX());
+        }
+        else
+        {
+            aLocalCurrent.setY(aLocalStart.getY());
+        }
+    }
+
+    // create internal change in unit coordinates
+    basegfx::B2DHomMatrix aDiscreteChangeMatrix;
+
+    if(!basegfx::fTools::equal(aLocalCurrent.getX(), aLocalStart.getX()))
+    {
+        if(aLocalStart.getX() < 0.5)
+        {
+            aDiscreteChangeMatrix.scale(aLocalCurrent.getX(), 1.0);
+        }
+        else
+        {
+            aDiscreteChangeMatrix.scale(1.0 - aLocalCurrent.getX(), 1.0);
+            aDiscreteChangeMatrix.translate(aLocalCurrent.getX(), 0.0);
+        }
+    }
+
+    if(!basegfx::fTools::equal(aLocalCurrent.getY(), aLocalStart.getY()))
+    {
+        if(aLocalStart.getY() < 0.5)
+        {
+            aDiscreteChangeMatrix.scale(1.0, aLocalCurrent.getY());
+        }
+        else
+        {
+            aDiscreteChangeMatrix.scale(1.0, 1.0 - aLocalCurrent.getY());
+            aDiscreteChangeMatrix.translate(0.0, aLocalCurrent.getY());
+        }
+    }
+
+    // preparematrix to apply to object; evtl. back-correct shear
+    basegfx::B2DHomMatrix aNewObjectMatrix(aOriginalMatrix * aDiscreteChangeMatrix);
 
+    if(bShearCorrected)
+    {
+        // TTTT back-correct shear
+        basegfx::B2DTuple aScale;
+        basegfx::B2DTuple aTranslate;
+        double fRotate(0.0), fShearX(0.0);
+
+        aNewObjectMatrix.decompose(aScale, aTranslate, fRotate, fShearX);
+        aNewObjectMatrix = basegfx::tools::createScaleShearXRotateTranslateB2DHomMatrix(
+            aScale,
+            -fShearX,
+            fRotate,
+            aTranslate);
+    }
+
+    // apply change to object by applying the unit coordinate change followed 
+    // by the original change
+    pObj->TRSetBaseGeometry(aNewObjectMatrix, aPolyPolygon);
+
+    // the following old code uses aOldRect/aNewRect to calculate the crop change for
+    // the crop item. It implies unrotated objects, so create the unrotated original
+    // erctangle and the unrotated modified rectangle. Latter can in case of shear and/or
+    // rotation not be fetched by using
+    //
+    //Rectangle aNewRect( pObj->GetLogicRect() );
+    //
+    // as it was done before because the top-left of that new rect *will* have an offset
+    // caused by the evtl. existing shear and/or rotation, so calculate a unrotated
+    // rectangle how it would be as a result when appling the unit coordinate change 
+    // to the unrotated original transformation.
+    basegfx::B2DTuple aScale;
+    basegfx::B2DTuple aTranslate;
+    double fRotate, fShearX;
+
+    // get access to scale and translate
+    aOriginalMatrix.decompose(aScale, aTranslate, fRotate, fShearX);
+
+    // prepare unsheared/unrotated versions of the old and new transformation
+    const basegfx::B2DHomMatrix aMatrixOriginalNoShearNoRotate(
+        basegfx::tools::createScaleTranslateB2DHomMatrix(
+            basegfx::absolute(aScale), 
+            aTranslate));
+
+    // create the ranges for these
+    basegfx::B2DRange aRangeOriginalNoShearNoRotate(0.0, 0.0, 1.0, 1.0);
+    basegfx::B2DRange aRangeNewNoShearNoRotate(0.0, 0.0, 1.0, 1.0);
+
+    aRangeOriginalNoShearNoRotate.transform(aMatrixOriginalNoShearNoRotate);
+    aRangeNewNoShearNoRotate.transform(aMatrixOriginalNoShearNoRotate * aDiscreteChangeMatrix);
+
+    // extract the old Rectangle structures
+    Rectangle aOldRect(
+        basegfx::fround(aRangeOriginalNoShearNoRotate.getMinX()),
+        basegfx::fround(aRangeOriginalNoShearNoRotate.getMinY()),
+        basegfx::fround(aRangeOriginalNoShearNoRotate.getMaxX()),
+        basegfx::fround(aRangeOriginalNoShearNoRotate.getMaxY()));
+    Rectangle aNewRect(
+        basegfx::fround(aRangeNewNoShearNoRotate.getMinX()),
+        basegfx::fround(aRangeNewNoShearNoRotate.getMinY()),
+        basegfx::fround(aRangeNewNoShearNoRotate.getMaxX()),
+        basegfx::fround(aRangeNewNoShearNoRotate.getMaxY()));
+
+    // continue with the old original stuff
 	double fScaleX = ( aGraphicSize.Width() - rOldCrop.GetLeft() - rOldCrop.GetRight() ) / (double)aOldRect.GetWidth();
 	double fScaleY = ( aGraphicSize.Height() - rOldCrop.GetTop() - rOldCrop.GetBottom() ) / (double)aOldRect.GetHeight();
 
-    // to correct the never working combination of cropped images and mirroring
-    // I have to correct the rectangles the calculation is based on here. In the current
-    // core geometry stuff a vertical mirror is expressed as 180 degree rotation. All
-    // this can be removed again when aw080 will have cleaned up the old 
-    // (non-)transformation mess in the core.
-    if(18000 == pObj->GetGeoStat().nDrehWink)
-    {
-        // old notation of vertical mirror, need to correct diffs since both rects
-        // are rotated by 180 degrees
-        aOldRect = Rectangle(aOldRect.TopLeft() - (aOldRect.BottomRight() - aOldRect.TopLeft()), aOldRect.TopLeft());
-        aNewRect = Rectangle(aNewRect.TopLeft() - (aNewRect.BottomRight() - aNewRect.TopLeft()), aNewRect.TopLeft());
-    }
+    // not needed since the modification is done in unit coordinates, free from shear/rotate and mirror
+    // // TTTT may be removed or exhanged by other stuff in aw080
+    // // to correct the never working combination of cropped images and mirroring
+    // // I have to correct the rectangles the calculation is based on here. In the current
+    // // core geometry stuff a vertical mirror is expressed as 180 degree rotation. All
+    // // this can be removed again when aw080 will have cleaned up the old 
+    // // (non-)transformation mess in the core.
+    // if(18000 == pObj->GetGeoStat().nDrehWink)
+    // {
+    //     // old notation of vertical mirror, need to correct diffs since both rects
+    //     // are rotated by 180 degrees
+    //     aOldRect = Rectangle(aOldRect.TopLeft() - (aOldRect.BottomRight() - aOldRect.TopLeft()), aOldRect.TopLeft());
+    //     aNewRect = Rectangle(aNewRect.TopLeft() - (aNewRect.BottomRight() - aNewRect.TopLeft()), aNewRect.TopLeft());
+    // }
 
 	sal_Int32 nDiffLeft = aNewRect.nLeft - aOldRect.nLeft;
 	sal_Int32 nDiffTop = aNewRect.nTop - aOldRect.nTop;
 	sal_Int32 nDiffRight = aNewRect.nRight - aOldRect.nRight;
 	sal_Int32 nDiffBottom = aNewRect.nBottom - aOldRect.nBottom;
 
+    if(pObj->IsMirrored())
+    {
+        // mirrored X or Y, for old stuff, exchange X
+        // TTTT: check for aw080
+        sal_Int32 nTmp(nDiffLeft);
+        nDiffLeft = -nDiffRight;
+        nDiffRight = -nTmp;
+    }
+
 	sal_Int32 nLeftCrop = static_cast<sal_Int32>( rOldCrop.GetLeft() + nDiffLeft * fScaleX );
 	sal_Int32 nTopCrop = static_cast<sal_Int32>( rOldCrop.GetTop() + nDiffTop * fScaleY );
 	sal_Int32 nRightCrop = static_cast<sal_Int32>( rOldCrop.GetRight() - nDiffRight * fScaleX );

Modified: openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdedtv.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdedtv.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdedtv.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdedtv.cxx Wed Mar 19 10:14:42 2014
@@ -39,6 +39,7 @@
 #include "svx/svdstr.hrc"   // Namen aus der Resource
 #include "svx/svdglob.hxx"  // StringCache
 #include <svx/e3dsceneupdater.hxx>
+#include <svx/svdview.hxx>
 
 // #i13033#
 #include <clonelist.hxx>
@@ -1022,6 +1023,26 @@ sal_Bool SdrEditView::InsertObjectAtView
 
 void SdrEditView::ReplaceObjectAtView(SdrObject* pOldObj, SdrPageView& rPV, SdrObject* pNewObj, sal_Bool bMark)
 {
+    if(IsTextEdit())
+    {
+#ifdef DBG_UTIL
+        if(pOldObj && dynamic_cast< SdrTextObj* >(pOldObj) && static_cast< SdrTextObj* >(pOldObj)->IsTextEditActive())
+        {
+            OSL_ENSURE(false, "OldObject is in TextEdit mode, this has to be ended before replacing it usnig SdrEndTextEdit (!)");
+        }
+
+        if(pNewObj && dynamic_cast< SdrTextObj* >(pNewObj) && static_cast< SdrTextObj* >(pNewObj)->IsTextEditActive())
+        {
+            OSL_ENSURE(false, "NewObject is in TextEdit mode, this has to be ended before replacing it usnig SdrEndTextEdit (!)");
+        }
+#endif
+
+        // #123468# emergency repair situation, needs to cast up to a class derived from
+        // this one; (aw080 has a mechanism for that and the view hierarchy is secured to
+        // always be a SdrView)
+        if(dynamic_cast< SdrView* >(this)) static_cast< SdrView* >(this)->SdrEndTextEdit();
+    }
+
 	SdrObjList* pOL=pOldObj->GetObjList();
 	const bool bUndo = IsUndoEnabled();
 	if( bUndo  )

Modified: openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdhdl.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdhdl.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdhdl.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdhdl.cxx Wed Mar 19 10:14:42 2014
@@ -2296,8 +2296,14 @@ SdrHdl* SdrHdlList::GetHdl(SdrHdlKind eK
 // SdrCropHdl
 // --------------------------------------------------------------------
 
-SdrCropHdl::SdrCropHdl(const Point& rPnt, SdrHdlKind eNewKind)
-: SdrHdl( rPnt, eNewKind )
+SdrCropHdl::SdrCropHdl(
+    const Point& rPnt, 
+    SdrHdlKind eNewKind,
+    double fShearX,
+    double fRotation)
+:   SdrHdl(rPnt, eNewKind),
+    mfShearX(fShearX),
+    mfRotation(fRotation)
 {
 }
 
@@ -2405,29 +2411,40 @@ void SdrCropHdl::CreateB2dIAObject()
 
 					::sdr::overlay::OverlayObject* pOverlayObject = 0L;
 
-					// animate focused handles
-					if(IsFocusHdl() && (pHdlList->GetFocusHdl() == this))
-					{
-						if( nHdlSize >= 2 )
-							nHdlSize = 1;
-
-						BitmapEx aBmpEx2( GetBitmapForHandle( aHandlesBitmap, nHdlSize + 1 ) );
-
-						const sal_uInt32 nBlinkTime = sal::static_int_cast<sal_uInt32>(rStyleSettings.GetCursorBlinkTime());
-
-						pOverlayObject = new ::sdr::overlay::OverlayAnimatedBitmapEx(aPosition, aBmpEx1, aBmpEx2, nBlinkTime,
-							(sal_uInt16)(aBmpEx1.GetSizePixel().Width() - 1) >> 1, 
-							(sal_uInt16)(aBmpEx1.GetSizePixel().Height() - 1) >> 1,
-							(sal_uInt16)(aBmpEx2.GetSizePixel().Width() - 1) >> 1, 
-							(sal_uInt16)(aBmpEx2.GetSizePixel().Height() - 1) >> 1);
-					}
-					else
-					{
-						// create centered handle as default
-						pOverlayObject = new ::sdr::overlay::OverlayBitmapEx(aPosition, aBmpEx1,
-							(sal_uInt16)(aBmpEx1.GetSizePixel().Width() - 1) >> 1,
-							(sal_uInt16)(aBmpEx1.GetSizePixel().Height() - 1) >> 1);
-					}
+                    // animate focused handles
+                    if(IsFocusHdl() && (pHdlList->GetFocusHdl() == this))
+                    {
+                        if( nHdlSize >= 2 )
+                            nHdlSize = 1;
+
+                        BitmapEx aBmpEx2( GetBitmapForHandle( aHandlesBitmap, nHdlSize + 1 ) );
+
+                        const sal_uInt32 nBlinkTime = sal::static_int_cast<sal_uInt32>(rStyleSettings.GetCursorBlinkTime());
+
+                        pOverlayObject = new ::sdr::overlay::OverlayAnimatedBitmapEx(
+                            aPosition, 
+                            aBmpEx1, 
+                            aBmpEx2, 
+                            nBlinkTime,
+                            (sal_uInt16)(aBmpEx1.GetSizePixel().Width() - 1) >> 1, 
+                            (sal_uInt16)(aBmpEx1.GetSizePixel().Height() - 1) >> 1,
+                            (sal_uInt16)(aBmpEx2.GetSizePixel().Width() - 1) >> 1, 
+                            (sal_uInt16)(aBmpEx2.GetSizePixel().Height() - 1) >> 1,
+                            mfShearX, 
+                            mfRotation);
+                    }
+                    else
+                    {
+                        // create centered handle as default
+                        pOverlayObject = new ::sdr::overlay::OverlayBitmapEx(
+                            aPosition, 
+                            aBmpEx1,
+                            (sal_uInt16)(aBmpEx1.GetSizePixel().Width() - 1) >> 1,
+                            (sal_uInt16)(aBmpEx1.GetSizePixel().Height() - 1) >> 1,
+                            0.0,
+                            mfShearX,
+                            mfRotation);
+                    }
 
 					// OVERLAYMANAGER
 					if(pOverlayObject)
@@ -2442,6 +2459,8 @@ void SdrCropHdl::CreateB2dIAObject()
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
+// with the correction of crop handling I could get rid of the extra mirroring flag, adapted stuff
+// accordingly
 
 SdrCropViewHdl::SdrCropViewHdl(
     const basegfx::B2DHomMatrix& rObjectTransform,
@@ -2449,16 +2468,14 @@ SdrCropViewHdl::SdrCropViewHdl(
     double fCropLeft,
     double fCropTop,
     double fCropRight,
-    double fCropBottom,
-    bool bExtraMirrorXFromGraphic)
+    double fCropBottom)
 :   SdrHdl(Point(), HDL_USER),
     maObjectTransform(rObjectTransform),
     maGraphic(rGraphic),
     mfCropLeft(fCropLeft),
     mfCropTop(fCropTop),
     mfCropRight(fCropRight),
-    mfCropBottom(fCropBottom),
-    mbExtraMirrorXFromGraphic(bExtraMirrorXFromGraphic)
+    mfCropBottom(fCropBottom)
 {
 }
 
@@ -2510,15 +2527,11 @@ void SdrCropViewHdl::CreateB2dIAObject()
     if(bMirroredX)
     {
         aScale.setX(-aScale.getX());
-        fCropLeft = mfCropRight;
-        fCropRight = mfCropLeft;
     }
 
     if(bMirroredY)
     {
         aScale.setY(-aScale.getY());
-        fCropTop = mfCropBottom;
-        fCropBottom = mfCropTop;
     }
 
     // create target translate and scale
@@ -2583,14 +2596,14 @@ void SdrCropViewHdl::CreateB2dIAObject()
 
     // create cropped transformation
     basegfx::B2DHomMatrix aCroppedTransform;
-    const bool bCombinedMirrorX(mbExtraMirrorXFromGraphic || bMirroredX);
+    const bool bCombinedMirrorX(bMirroredX);
 
     aCroppedTransform.scale(
-        bCombinedMirrorX ? -aCropped.getWidth() : aCropped.getWidth(), 
-        bMirroredY ? -aCropped.getHeight() : aCropped.getHeight());
+        aCropped.getWidth(), 
+        aCropped.getHeight());
     aCroppedTransform.translate(
-        bCombinedMirrorX ? aCropped.getMaxX() : aCropped.getMinX(), 
-        bMirroredY ? aCropped.getMaxY() : aCropped.getMinY());
+        aCropped.getMinX(), 
+        aCropped.getMinY());
     aCroppedTransform = maObjectTransform * aCroppedTransform;
 
     // prepare graphic primitive (tranformed)

Modified: openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdmrkv.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdmrkv.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdmrkv.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdmrkv.cxx Wed Mar 19 10:14:42 2014
@@ -654,6 +654,13 @@ sal_Bool SdrMarkView::ImpIsFrameHandles(
 			bFrmHdl=!pObj->hasSpecialDrag();
 		}
 	}
+
+    // no FrameHdl for crop
+    if(bFrmHdl && SDRDRAG_CROP == eDragMode)
+    {
+        bFrmHdl = sal_False;
+    }
+
 	return bFrmHdl;
 }
 
@@ -767,136 +774,92 @@ void SdrMarkView::SetMarkHandles()
                         pHdl->SetObjHdlNum(sal_uInt16(i-nSiz0));
                     }
                 }
-                else if( eDragMode==SDRDRAG_CROP )
-				{
-                    const SdrGrafObj* pSdrGrafObj = dynamic_cast< const SdrGrafObj* >(pMarkedObj);
-
-                    if(pSdrGrafObj)
+                else
+                {
+                    sal_Bool bWdt0=aRect.Left()==aRect.Right();
+                    sal_Bool bHgt0=aRect.Top()==aRect.Bottom();
+                    if (bWdt0 && bHgt0) 
                     {
-                        const SdrGrafCropItem& rCrop = static_cast< const SdrGrafCropItem& >(pSdrGrafObj->GetMergedItem(SDRATTR_GRAFCROP));
-
-                        if(rCrop.GetLeft() || rCrop.GetTop() || rCrop.GetRight() ||rCrop.GetBottom())
-                        {
-                            basegfx::B2DHomMatrix aMatrix;
-                            basegfx::B2DPolyPolygon aPolyPolygon;
-
-                            pSdrGrafObj->TRGetBaseGeometry(aMatrix, aPolyPolygon);
+                        aHdl.AddHdl(new SdrHdl(aRect.TopLeft(),HDL_UPLFT));
+                    } 
+                    else if (!bStdDrag && (bWdt0 || bHgt0)) 
+                    {
+                        aHdl.AddHdl(new SdrHdl(aRect.TopLeft()    ,HDL_UPLFT));
+                        aHdl.AddHdl(new SdrHdl(aRect.BottomRight(),HDL_LWRGT));
+                    } 
+                    else 
+                    {
+                        if (!bWdt0 && !bHgt0) aHdl.AddHdl(new SdrHdl(aRect.TopLeft()     ,HDL_UPLFT));
+                        if (          !bHgt0) aHdl.AddHdl(new SdrHdl(aRect.TopCenter()   ,HDL_UPPER));
+                        if (!bWdt0 && !bHgt0) aHdl.AddHdl(new SdrHdl(aRect.TopRight()    ,HDL_UPRGT));
+                        if (!bWdt0          ) aHdl.AddHdl(new SdrHdl(aRect.LeftCenter()  ,HDL_LEFT ));
+                        if (!bWdt0          ) aHdl.AddHdl(new SdrHdl(aRect.RightCenter() ,HDL_RIGHT));
+                        if (!bWdt0 && !bHgt0) aHdl.AddHdl(new SdrHdl(aRect.BottomLeft()  ,HDL_LWLFT));
+                        if (          !bHgt0) aHdl.AddHdl(new SdrHdl(aRect.BottomCenter(),HDL_LOWER));
+                        if (!bWdt0 && !bHgt0) aHdl.AddHdl(new SdrHdl(aRect.BottomRight() ,HDL_LWRGT));
+                    }
+                }
+            }
+        } 
+        else 
+        {
+            bool bDone(false);
 
-                            // decompose to have current translate and scale
-                            basegfx::B2DVector aScale, aTranslate;
-                            double fRotate, fShearX;
+            // moved crop handling to non-frame part and the handle creation to SdrGrafObj
+            if(1 == nMarkAnz && pMarkedObj && SDRDRAG_CROP == eDragMode)
+            {
+                const SdrGrafObj* pSdrGrafObj = dynamic_cast< const SdrGrafObj* >(pMarkedObj);
 
-                            aMatrix.decompose(aScale, aTranslate, fRotate, fShearX);
+                if(pSdrGrafObj)
+                {
+                    pSdrGrafObj->addCropHandles(aHdl);
+                    bDone = true;
+                }
+            }
 
-                            if(!aScale.equalZero())
+            if(!bDone)
+            {
+                for (sal_uIntPtr nMarkNum=0; nMarkNum<nMarkAnz; nMarkNum++) 
+                {
+                    const SdrMark* pM=GetSdrMarkByIndex(nMarkNum);
+                    SdrObject* pObj=pM->GetMarkedSdrObj();
+                    SdrPageView* pPV=pM->GetPageView();
+                    const sal_uIntPtr nSiz0=aHdl.GetHdlCount();
+                    pObj->AddToHdlList(aHdl);
+                    const sal_uIntPtr nSiz1=aHdl.GetHdlCount();
+                    bool bPoly=pObj->IsPolyObj();
+                    const SdrUShortCont* pMrkPnts=pM->GetMarkedPoints();
+                    for (sal_uIntPtr i=nSiz0; i<nSiz1; i++) 
+                    {
+                        SdrHdl* pHdl=aHdl.GetHdl(i);
+                        pHdl->SetObj(pObj);
+                        pHdl->SetPageView(pPV);
+                        pHdl->SetObjHdlNum(sal_uInt16(i-nSiz0));
+                        if (bPoly) 
+                        {
+                            sal_Bool bSelected=pMrkPnts!=NULL && pMrkPnts->Exist(sal_uInt16(i-nSiz0));
+                            pHdl->SetSelected(bSelected);
+                            //sal_Bool bPlus=bPlusHdlAlways;
+                            if (bPlusHdlAlways || bSelected) 
                             {
-                                // get crop scale
-                                const basegfx::B2DVector aCropScaleFactor(
-                                    pSdrGrafObj->GetGraphicObject().calculateCropScaling(
-                                        aScale.getX(),
-                                        aScale.getY(),
-                                        rCrop.GetLeft(),
-                                        rCrop.GetTop(),
-                                        rCrop.GetRight(),
-                                        rCrop.GetBottom()));
-
-                                // apply crop scale
-                                const double fCropLeft(rCrop.GetLeft() * aCropScaleFactor.getX());
-                                const double fCropTop(rCrop.GetTop() * aCropScaleFactor.getY());
-                                const double fCropRight(rCrop.GetRight() * aCropScaleFactor.getX());
-                                const double fCropBottom(rCrop.GetBottom() * aCropScaleFactor.getY());
-
-                                aHdl.AddHdl(
-                                    new SdrCropViewHdl(
-                                        aMatrix,
-                                        pSdrGrafObj->GetGraphicObject().GetGraphic(),
-                                        fCropLeft,
-                                        fCropTop,
-                                        fCropRight,
-                                        fCropBottom,
-                                        pSdrGrafObj->IsMirrored()));
+                                sal_uInt32 nPlusAnz=pObj->GetPlusHdlCount(*pHdl);
+                                for (sal_uInt32 nPlusNum=0; nPlusNum<nPlusAnz; nPlusNum++) 
+                                {
+                                    SdrHdl* pPlusHdl=pObj->GetPlusHdl(*pHdl,nPlusNum);
+                                    if (pPlusHdl!=NULL) 
+                                    {
+                                        pPlusHdl->SetObj(pObj);
+                                        pPlusHdl->SetPageView(pPV);
+                                        pPlusHdl->SetPlusHdl(sal_True);
+                                        aHdl.AddHdl(pPlusHdl);
+                                    }
+                                }
                             }
                         }
                     }
-    
-					aHdl.AddHdl(new SdrCropHdl(aRect.TopLeft()     ,HDL_UPLFT));
-					aHdl.AddHdl(new SdrCropHdl(aRect.TopCenter()   ,HDL_UPPER));
-					aHdl.AddHdl(new SdrCropHdl(aRect.TopRight()    ,HDL_UPRGT));
-					aHdl.AddHdl(new SdrCropHdl(aRect.LeftCenter()  ,HDL_LEFT ));
-					aHdl.AddHdl(new SdrCropHdl(aRect.RightCenter() ,HDL_RIGHT));
-					aHdl.AddHdl(new SdrCropHdl(aRect.BottomLeft()  ,HDL_LWLFT));
-					aHdl.AddHdl(new SdrCropHdl(aRect.BottomCenter(),HDL_LOWER));
-					aHdl.AddHdl(new SdrCropHdl(aRect.BottomRight() ,HDL_LWRGT));
-				}
-				else
-				{
-					sal_Bool bWdt0=aRect.Left()==aRect.Right();
-					sal_Bool bHgt0=aRect.Top()==aRect.Bottom();
-					if (bWdt0 && bHgt0) 
-					{
-						aHdl.AddHdl(new SdrHdl(aRect.TopLeft(),HDL_UPLFT));
-					} 
-					else if (!bStdDrag && (bWdt0 || bHgt0)) 
-					{
-						aHdl.AddHdl(new SdrHdl(aRect.TopLeft()    ,HDL_UPLFT));
-						aHdl.AddHdl(new SdrHdl(aRect.BottomRight(),HDL_LWRGT));
-					} 
-					else 
-					{
-						if (!bWdt0 && !bHgt0) aHdl.AddHdl(new SdrHdl(aRect.TopLeft()     ,HDL_UPLFT));
-						if (          !bHgt0) aHdl.AddHdl(new SdrHdl(aRect.TopCenter()   ,HDL_UPPER));
-						if (!bWdt0 && !bHgt0) aHdl.AddHdl(new SdrHdl(aRect.TopRight()    ,HDL_UPRGT));
-						if (!bWdt0          ) aHdl.AddHdl(new SdrHdl(aRect.LeftCenter()  ,HDL_LEFT ));
-						if (!bWdt0          ) aHdl.AddHdl(new SdrHdl(aRect.RightCenter() ,HDL_RIGHT));
-						if (!bWdt0 && !bHgt0) aHdl.AddHdl(new SdrHdl(aRect.BottomLeft()  ,HDL_LWLFT));
-						if (          !bHgt0) aHdl.AddHdl(new SdrHdl(aRect.BottomCenter(),HDL_LOWER));
-						if (!bWdt0 && !bHgt0) aHdl.AddHdl(new SdrHdl(aRect.BottomRight() ,HDL_LWRGT));
-					}
-				}
-			}
-		} 
-		else 
-		{
-			for (sal_uIntPtr nMarkNum=0; nMarkNum<nMarkAnz; nMarkNum++) 
-			{
-				const SdrMark* pM=GetSdrMarkByIndex(nMarkNum);
-				SdrObject* pObj=pM->GetMarkedSdrObj();
-				SdrPageView* pPV=pM->GetPageView();
-				const sal_uIntPtr nSiz0=aHdl.GetHdlCount();
-				pObj->AddToHdlList(aHdl);
-				const sal_uIntPtr nSiz1=aHdl.GetHdlCount();
-				bool bPoly=pObj->IsPolyObj();
-				const SdrUShortCont* pMrkPnts=pM->GetMarkedPoints();
-				for (sal_uIntPtr i=nSiz0; i<nSiz1; i++) 
-				{
-					SdrHdl* pHdl=aHdl.GetHdl(i);
-					pHdl->SetObj(pObj);
-					pHdl->SetPageView(pPV);
-					pHdl->SetObjHdlNum(sal_uInt16(i-nSiz0));
-					if (bPoly) 
-					{
-						sal_Bool bSelected=pMrkPnts!=NULL && pMrkPnts->Exist(sal_uInt16(i-nSiz0));
-						pHdl->SetSelected(bSelected);
-						//sal_Bool bPlus=bPlusHdlAlways;
-						if (bPlusHdlAlways || bSelected) 
-						{
-							sal_uInt32 nPlusAnz=pObj->GetPlusHdlCount(*pHdl);
-							for (sal_uInt32 nPlusNum=0; nPlusNum<nPlusAnz; nPlusNum++) 
-							{
-								SdrHdl* pPlusHdl=pObj->GetPlusHdl(*pHdl,nPlusNum);
-								if (pPlusHdl!=NULL) 
-								{
-									pPlusHdl->SetObj(pObj);
-									pPlusHdl->SetPageView(pPV);
-									pPlusHdl->SetPlusHdl(sal_True);
-									aHdl.AddHdl(pPlusHdl);
-								}
-							}
-						}
-					}
-				}
-			} // for nMarkNum
-		} // if bFrmHdl else
+                }
+            }
+        }
 
 		// GluePoint-Handles
 		for (sal_uIntPtr nMarkNum=0; nMarkNum<nMarkAnz; nMarkNum++) 

Modified: openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdoashp.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdoashp.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdoashp.cxx (original)
+++ openoffice/branches/alg_writerframes/main/svx/source/svdraw/svdoashp.cxx Wed Mar 19 10:14:42 2014
@@ -2598,10 +2598,10 @@ void SdrObjCustomShape::SetVerticalWriti
 				case SDRTEXTHORZADJUST_BLOCK: aNewSet.Put(SdrTextVertAdjustItem(SDRTEXTVERTADJUST_BLOCK)); break;
 			}
 
-			SetObjectItemSet( aNewSet );
 			pOutlinerParaObject = GetOutlinerParaObject();
 			if ( pOutlinerParaObject )
 				pOutlinerParaObject->SetVertical(bVertical);
+			SetObjectItemSet( aNewSet );
 	
 			// restore object size
 			SetSnapRect(aObjectRect);