[Libreoffice-commits] core.git: 7 commits - include/svx sd/qa svx/source
David Tardon
dtardon at redhat.com
Sat Mar 22 22:58:15 PDT 2014
include/svx/sdr/properties/customshapeproperties.hxx | 7 -
include/svx/svdoashp.hxx | 4
include/svx/svdotext.hxx | 12 +
sd/qa/unit/data/xml/shapes-test_page2.xml | 2
svx/source/sdr/properties/customshapeproperties.cxx | 120 ++++++++++---------
svx/source/svdraw/svdoashp.cxx | 105 +++++++++-------
svx/source/svdraw/svdotext.cxx | 109 +++++++++++++----
svx/source/svdraw/svdotxdr.cxx | 20 ---
svx/source/svdraw/svdotxtr.cxx | 31 +++-
9 files changed, 258 insertions(+), 152 deletions(-)
New commits:
commit 1a67b7cc3d5dc3dcd0de0e247f638c33d57dea1b
Author: David Tardon <dtardon at redhat.com>
Date: Sat Mar 22 15:44:47 2014 +0100
init only required items
Change-Id: Iccbdea89fe2b5142bdd5213bb90e7656fc7eda8a
diff --git a/svx/source/svdraw/svdoashp.cxx b/svx/source/svdraw/svdoashp.cxx
index 6ced8d6..b86e76c 100644
--- a/svx/source/svdraw/svdoashp.cxx
+++ b/svx/source/svdraw/svdoashp.cxx
@@ -1451,7 +1451,11 @@ void SdrObjCustomShape::AdaptTextMinSize()
if(!pModel || !pModel->IsPasteResize())
{
const bool bResizeShapeToFitText(0 != static_cast< const SdrTextAutoGrowHeightItem& >(GetObjectItem(SDRATTR_TEXT_AUTOGROWHEIGHT)).GetValue());
- SfxItemSet aSet(GetObjectItemSet());
+ SfxItemSet aSet(
+ *GetObjectItemSet().GetPool(),
+ SDRATTR_TEXT_MINFRAMEHEIGHT, SDRATTR_TEXT_AUTOGROWHEIGHT,
+ SDRATTR_TEXT_MINFRAMEWIDTH, SDRATTR_TEXT_AUTOGROWWIDTH, // contains SDRATTR_TEXT_MAXFRAMEWIDTH
+ 0, 0);
bool bChanged(false);
if(bResizeShapeToFitText)
commit 363119a9f2f0710a55530909330efb343d5a8bae
Author: David Tardon <dtardon at redhat.com>
Date: Sun Mar 9 12:48:48 2014 +0100
avoid infinite loop when setting vert. text dir.
Change-Id: I8ff1d61af9ff383f00062894ad10efca534318bd
diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx
index 02a91d3..170c5ec 100644
--- a/svx/source/svdraw/svdotext.cxx
+++ b/svx/source/svdraw/svdotext.cxx
@@ -1617,15 +1617,17 @@ void SdrTextObj::SetVerticalWriting(bool bVertical)
case SDRTEXTHORZADJUST_BLOCK: aNewSet.Put(SdrTextVertAdjustItem(SDRTEXTVERTADJUST_BLOCK)); break;
}
- SetObjectItemSet(aNewSet);
-
pOutlinerParaObject = GetOutlinerParaObject();
if( pOutlinerParaObject )
{
- // set ParaObject orientation accordingly
+ // Set ParaObject orientation accordingly. This _must_ be
+ // done before applying the updated item set, otherwise we
+ // get stuck in a loop leading to eventual stack overflow.
pOutlinerParaObject->SetVertical(bVertical);
}
+ SetObjectItemSet(aNewSet);
+
// restore object size
SetSnapRect(aObjectRect);
}
commit 33c310b6ff9feb277c001ce61db96864baedc3bc
Author: Armin Le Grand <alg at apache.org>
Date: Mon Jan 27 21:14:39 2014 +0000
i123932 Init only needed items in
diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx
index 3a4c9ab..02a91d3 100644
--- a/svx/source/svdraw/svdotext.cxx
+++ b/svx/source/svdraw/svdotext.cxx
@@ -573,7 +573,11 @@ void SdrTextObj::AdaptTextMinSize()
if(bW || bH)
{
- SfxItemSet aSet(GetObjectItemSet());
+ SfxItemSet aSet(
+ *GetObjectItemSet().GetPool(),
+ SDRATTR_TEXT_MINFRAMEHEIGHT, SDRATTR_TEXT_AUTOGROWHEIGHT,
+ SDRATTR_TEXT_MINFRAMEWIDTH, SDRATTR_TEXT_AUTOGROWWIDTH, // contains SDRATTR_TEXT_MAXFRAMEWIDTH
+ 0, 0);
if(bW)
{
commit 872b5642f9c81f7e09b5fe592d9f92b9367d337c
Author: Armin Le Grand <alg at apache.org>
Date: Thu Oct 31 11:53:29 2013 +0000
i123573 corrected reaction on ItemChanges for CustomShapes
Conflicts:
svx/source/sdr/properties/customshapeproperties.cxx
Change-Id: I9f37893bab72b2d9b9f8874f6827ca6bee5dfbe1
diff --git a/include/svx/sdr/properties/customshapeproperties.hxx b/include/svx/sdr/properties/customshapeproperties.hxx
index d92db87..f28c90f 100644
--- a/include/svx/sdr/properties/customshapeproperties.hxx
+++ b/include/svx/sdr/properties/customshapeproperties.hxx
@@ -30,7 +30,8 @@ namespace sdr
{
class CustomShapeProperties : public TextProperties
{
- void UpdateTextFrameStatus();
+ private:
+ void UpdateTextFrameStatus(bool bInvalidateRenderGeometry);
protected:
// create a new itemset
diff --git a/svx/source/sdr/properties/customshapeproperties.cxx b/svx/source/sdr/properties/customshapeproperties.cxx
index 35b4d07..729709e 100644
--- a/svx/source/sdr/properties/customshapeproperties.cxx
+++ b/svx/source/sdr/properties/customshapeproperties.cxx
@@ -32,21 +32,32 @@ namespace sdr
{
namespace properties
{
- void CustomShapeProperties::UpdateTextFrameStatus()
+ void CustomShapeProperties::UpdateTextFrameStatus(bool bInvalidateRenderGeometry)
{
SdrObjCustomShape& rObj = static_cast< SdrObjCustomShape& >(GetSdrObject());
const bool bOld(rObj.bTextFrame);
+ // change TextFrame flag when bResizeShapeToFitText changes (which is mapped
+ // on the item SDRATTR_TEXT_AUTOGROWHEIGHT for custom shapes, argh)
rObj.bTextFrame = 0 != static_cast< const SdrTextAutoGrowHeightItem& >(GetObjectItemSet().Get(SDRATTR_TEXT_AUTOGROWHEIGHT)).GetValue();
+ // check if it did change
if(rObj.bTextFrame != bOld)
{
- rObj.InvalidateRenderGeometry();
+ // on change also invalidate render geometry
+ bInvalidateRenderGeometry = true;
// #115391# Potential recursion, since it calls SetObjectItemSet again, but rObj.bTextFrame
- // will not change again, thus it will be only one level and terminate
+ // will not change again. Thus it will be only one level and terminate safely
rObj.AdaptTextMinSize();
}
+
+ if(bInvalidateRenderGeometry)
+ {
+ // if asked for or bResizeShapeToFitText changed, make sure that
+ // the render geometry is reconstructed using changed parameters
+ rObj.InvalidateRenderGeometry();
+ }
}
SfxItemSet& CustomShapeProperties::CreateObjectSpecificItemSet(SfxItemPool& rPool)
@@ -127,7 +138,7 @@ namespace sdr
TextProperties::ItemSetChanged(rSet);
// update bTextFrame and RenderGeometry
- UpdateTextFrameStatus();
+ UpdateTextFrameStatus(true);
}
void CustomShapeProperties::PostItemChange(const sal_uInt16 nWhich)
@@ -137,7 +148,7 @@ namespace sdr
case SDRATTR_TEXT_AUTOGROWHEIGHT:
{
// #115391# update bTextFrame and RenderGeometry using AdaptTextMinSize()
- UpdateTextFrameStatus();
+ UpdateTextFrameStatus(false);
break;
}
default:
@@ -156,7 +167,7 @@ namespace sdr
TextProperties::ItemChange( nWhich, pNewItem );
// update bTextFrame and RenderGeometry
- UpdateTextFrameStatus();
+ UpdateTextFrameStatus(true);
}
void CustomShapeProperties::SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr)
@@ -165,13 +176,13 @@ namespace sdr
TextProperties::SetStyleSheet( pNewStyleSheet, bDontRemoveHardAttr );
// update bTextFrame and RenderGeometry
- UpdateTextFrameStatus();
+ UpdateTextFrameStatus(true);
}
void CustomShapeProperties::ForceDefaultAttributes()
{
// update bTextFrame and RenderGeometry
- UpdateTextFrameStatus();
+ UpdateTextFrameStatus(true);
// SJ: Following is no good if creating customshapes, leading to objects that are white after loading via xml
// This means: Do *not* call parent here is by purpose...
@@ -219,11 +230,8 @@ namespace sdr
bRemoveRenderGeometry = sal_True;
}
- if ( bRemoveRenderGeometry )
- {
// update bTextFrame and RenderGeometry
- UpdateTextFrameStatus();
- }
+ UpdateTextFrameStatus(bRemoveRenderGeometry);
}
} // end of namespace properties
} // end of namespace sdr
commit d74fc692a9ee403851b29bb93b252a79404ba007
Author: Armin Le Grand <alg at apache.org>
Date: Thu Sep 19 11:21:03 2013 +0000
i115391 corected from SetObejctItem to usage of local SfxItemSet
diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx
index 5c24ec0..3a4c9ab 100644
--- a/svx/source/svdraw/svdotext.cxx
+++ b/svx/source/svdraw/svdotext.cxx
@@ -599,7 +599,7 @@ void SdrTextObj::AdaptTextMinSize()
if(IsVerticalWriting() && bDisableAutoWidthOnDragging)
{
bDisableAutoWidthOnDragging = false;
- SetObjectItem(SdrTextAutoGrowHeightItem(false));
+ aSet.Put(SdrTextAutoGrowHeightItem(false));
}
}
commit acd03d705029ac4a4bbdbfae4403697d27367979
Author: David Tardon <dtardon at redhat.com>
Date: Sun Mar 9 13:04:10 2014 +0100
fix unit test
diff --git a/sd/qa/unit/data/xml/shapes-test_page2.xml b/sd/qa/unit/data/xml/shapes-test_page2.xml
index f7ecaa6..fb81de6 100644
--- a/sd/qa/unit/data/xml/shapes-test_page2.xml
+++ b/sd/qa/unit/data/xml/shapes-test_page2.xml
@@ -577,7 +577,7 @@
<PropertyValue name="Handles" handle="0" propertyState="DIRECT_VALUE"/>
</CustomShapeGeometry>
</XShape>
- <XShape positionX="23400" positionY="1400" sizeX="2800" sizeY="2600" type="com.sun.star.drawing.CustomShape" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="true" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="TOP" textLeftDistance="250" textRightDistance="250" textUpperDistance="125" textLowerDistance="125" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="666" textMinimumFrameWidth="486" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="SOLID" fillColor="cfe7f5" fillTransparence="0" fillTransparenceGradientName="">
+ <XShape positionX="23400" positionY="1400" sizeX="2800" sizeY="2600" type="com.sun.star.drawing.CustomShape" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="true" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="TOP" textLeftDistance="250" textRightDistance="250" textUpperDistance="125" textLowerDistance="125" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="SOLID" fillColor="cfe7f5" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillGradient style="LINEAR" startColor="3465a4" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
commit 120e469d176026ceb59abbf74d2ad255323cbc9a
Author: Armin Le Grand <alg at apache.org>
Date: Thu Sep 19 10:11:03 2013 +0000
i#115391 better support for MinTextSize settings
... for TextShapes and CustomShapes
Conflicts:
include/svx/svdotext.hxx
svx/source/sdr/properties/customshapeproperties.cxx
svx/source/svdraw/svdoashp.cxx
svx/source/svdraw/svdotext.cxx
svx/source/svdraw/svdotxdr.cxx
svx/source/svdraw/svdotxtr.cxx
Change-Id: Ie6f490801b6887568135ed5f83c8bbe7ab6daa08
diff --git a/include/svx/sdr/properties/customshapeproperties.hxx b/include/svx/sdr/properties/customshapeproperties.hxx
index 23a0181..d92db87 100644
--- a/include/svx/sdr/properties/customshapeproperties.hxx
+++ b/include/svx/sdr/properties/customshapeproperties.hxx
@@ -45,6 +45,10 @@ namespace sdr
// react on Item change
virtual void ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem);
+ // Called after ItemChange() is done for all items. Allows local reactions on
+ // specific item changes
+ virtual void PostItemChange(const sal_uInt16 nWhich);
+
// clear single item
virtual void ClearObjectItem(const sal_uInt16 nWhich = 0);
diff --git a/include/svx/svdoashp.hxx b/include/svx/svdoashp.hxx
index be3c7a7..00b4afe 100644
--- a/include/svx/svdoashp.hxx
+++ b/include/svx/svdoashp.hxx
@@ -130,6 +130,10 @@ public:
static basegfx::B2DPolyPolygon GetLineGeometry( const SdrObjCustomShape* pCustomShape, const bool bBezierAllowed );
protected:
+ // #115391# new method for SdrObjCustomShape and SdrTextObj to correctly handle and set
+ // SdrTextMinFrameWidthItem and SdrTextMinFrameHeightItem based on all settings, necessities
+ // and object sizes
+ virtual void AdaptTextMinSize();
OUString aName;
diff --git a/include/svx/svdotext.hxx b/include/svx/svdotext.hxx
index 91a935c..8e184c3 100644
--- a/include/svx/svdotext.hxx
+++ b/include/svx/svdotext.hxx
@@ -290,8 +290,16 @@ protected:
virtual void SaveGeoData(SdrObjGeoData& rGeo) const;
virtual void RestGeoData(const SdrObjGeoData& rGeo);
bool NbcSetEckenradius(long nRad);
- bool NbcSetMinTextFrameHeight(long nHgt);
- bool NbcSetMinTextFrameWidth(long nWdt);
+ bool NbcSetAutoGrowHeight(bool bAuto);
+ bool NbcSetMaxTextFrameHeight(long nHgt);
+ bool NbcSetAutoGrowWidth(bool bAuto);
+ bool NbcSetMaxTextFrameWidth(long nWdt);
+ bool NbcSetFitToSize(SdrFitToSizeType eFit);
+
+ // #115391# new method for SdrObjCustomShape and SdrTextObj to correctly handle and set
+ // SdrTextMinFrameWidthItem and SdrTextMinFrameHeightItem based on all settings, necessities
+ // and object sizes
+ virtual void AdaptTextMinSize();
// Konstruktoren fuer beschriftete Zeichenobjekte
SdrTextObj();
diff --git a/svx/source/sdr/properties/customshapeproperties.cxx b/svx/source/sdr/properties/customshapeproperties.cxx
index 13f167c..35b4d07 100644
--- a/svx/source/sdr/properties/customshapeproperties.cxx
+++ b/svx/source/sdr/properties/customshapeproperties.cxx
@@ -34,13 +34,19 @@ namespace sdr
{
void CustomShapeProperties::UpdateTextFrameStatus()
{
- SdrTextObj& rObj = (SdrTextObj&)GetSdrObject();
- SdrTextAutoGrowHeightItem& rAutoGrowHeightItem =
- (SdrTextAutoGrowHeightItem&)rObj.GetMergedItem( SDRATTR_TEXT_AUTOGROWHEIGHT );
- rObj.bTextFrame = rAutoGrowHeightItem.GetValue();
+ SdrObjCustomShape& rObj = static_cast< SdrObjCustomShape& >(GetSdrObject());
+ const bool bOld(rObj.bTextFrame);
- if ( rObj.bTextFrame )
- rObj.NbcAdjustTextFrameWidthAndHeight();
+ rObj.bTextFrame = 0 != static_cast< const SdrTextAutoGrowHeightItem& >(GetObjectItemSet().Get(SDRATTR_TEXT_AUTOGROWHEIGHT)).GetValue();
+
+ if(rObj.bTextFrame != bOld)
+ {
+ rObj.InvalidateRenderGeometry();
+
+ // #115391# Potential recursion, since it calls SetObjectItemSet again, but rObj.bTextFrame
+ // will not change again, thus it will be only one level and terminate
+ rObj.AdaptTextMinSize();
+ }
}
SfxItemSet& CustomShapeProperties::CreateObjectSpecificItemSet(SfxItemPool& rPool)
@@ -67,6 +73,7 @@ namespace sdr
// end
0, 0));
}
+
bool CustomShapeProperties::AllowItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem ) const
{
sal_Bool bAllowItemChange = sal_True;
@@ -79,6 +86,7 @@ namespace sdr
bAllowItemChange = TextProperties::AllowItemChange( nWhich, pNewItem );
return bAllowItemChange;
}
+
void CustomShapeProperties::ClearObjectItem(const sal_uInt16 nWhich)
{
if ( !nWhich )
@@ -96,6 +104,7 @@ namespace sdr
else
TextProperties::ClearObjectItem( nWhich );
}
+
void CustomShapeProperties::ClearObjectItemDirect(const sal_uInt16 nWhich)
{
if ( !nWhich )
@@ -111,66 +120,63 @@ namespace sdr
else
TextProperties::ClearObjectItemDirect( nWhich );
}
+
void CustomShapeProperties::ItemSetChanged(const SfxItemSet& rSet)
{
- SdrObjCustomShape& rObj = (SdrObjCustomShape&)GetSdrObject();
+ // call parent
+ TextProperties::ItemSetChanged(rSet);
+
+ // update bTextFrame and RenderGeometry
+ UpdateTextFrameStatus();
+ }
- if( SFX_ITEM_SET == rSet.GetItemState( SDRATTR_TEXT_AUTOGROWHEIGHT ) )
+ void CustomShapeProperties::PostItemChange(const sal_uInt16 nWhich)
+ {
+ switch(nWhich)
{
- rObj.bTextFrame = ((SdrTextAutoGrowHeightItem&)rSet.Get( SDRATTR_TEXT_AUTOGROWHEIGHT )).GetValue();
+ case SDRATTR_TEXT_AUTOGROWHEIGHT:
+ {
+ // #115391# update bTextFrame and RenderGeometry using AdaptTextMinSize()
+ UpdateTextFrameStatus();
+ break;
+ }
+ default:
+ {
+ break;
+ }
}
// call parent
- TextProperties::ItemSetChanged(rSet);
-
- // local changes, removing cached objects
- rObj.InvalidateRenderGeometry();
+ TextProperties::PostItemChange(nWhich);
}
+
void CustomShapeProperties::ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem)
{
- SdrObjCustomShape& rObj = (SdrObjCustomShape&)GetSdrObject();
- //OutlinerParaObject* pParaObj = rObj.GetOutlinerParaObject();
-
- if( pNewItem && ( SDRATTR_TEXT_AUTOGROWHEIGHT == nWhich ) )
- {
- rObj.bTextFrame = ((SdrTextAutoGrowHeightItem*)pNewItem)->GetValue();
- }
// call parent
TextProperties::ItemChange( nWhich, pNewItem );
- rObj.InvalidateRenderGeometry();
+ // update bTextFrame and RenderGeometry
+ UpdateTextFrameStatus();
}
+
void CustomShapeProperties::SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr)
{
+ // call parent
TextProperties::SetStyleSheet( pNewStyleSheet, bDontRemoveHardAttr );
+
+ // update bTextFrame and RenderGeometry
UpdateTextFrameStatus();
}
+
void CustomShapeProperties::ForceDefaultAttributes()
{
+ // update bTextFrame and RenderGeometry
UpdateTextFrameStatus();
-/* SJ: Following is no good if creating customshapes, leading to objects that are white after loading via xml
-
- SdrTextObj& rObj = (SdrTextObj&)GetSdrObject();
- sal_Bool bTextFrame(rObj.IsTextFrame());
-
- // force ItemSet
- GetObjectItemSet();
-
- if(bTextFrame)
- {
- mpItemSet->Put(XLineStyleItem(XLINE_NONE));
- mpItemSet->Put(XFillColorItem(String(), Color(COL_WHITE)));
- mpItemSet->Put(XFillStyleItem(XFILL_NONE));
- }
- else
- {
- mpItemSet->Put(SvxAdjustItem(SVX_ADJUST_CENTER));
- mpItemSet->Put(SdrTextHorzAdjustItem(SDRTEXTHORZADJUST_CENTER));
- mpItemSet->Put(SdrTextVertAdjustItem(SDRTEXTVERTADJUST_CENTER));
- }
-*/
+ // SJ: Following is no good if creating customshapes, leading to objects that are white after loading via xml
+ // This means: Do *not* call parent here is by purpose...
}
+
CustomShapeProperties::CustomShapeProperties(SdrObject& rObj)
: TextProperties(rObj)
{
@@ -189,14 +195,15 @@ namespace sdr
{
return *(new CustomShapeProperties(*this, rObj));
}
+
void CustomShapeProperties::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
{
TextProperties::Notify( rBC, rHint );
sal_Bool bRemoveRenderGeometry = sal_False;
-
const SfxStyleSheetHint *pStyleHint = PTR_CAST( SfxStyleSheetHint, &rHint );
const SfxSimpleHint *pSimpleHint = PTR_CAST( SfxSimpleHint, &rHint );
+
if ( pStyleHint && pStyleHint->GetStyleSheet() == GetStyleSheet() )
{
switch( pStyleHint->GetHint() )
@@ -211,15 +218,12 @@ namespace sdr
{
bRemoveRenderGeometry = sal_True;
}
+
if ( bRemoveRenderGeometry )
{
+ // update bTextFrame and RenderGeometry
UpdateTextFrameStatus();
-
- // local changes, removing cached objects
- SdrObjCustomShape& rObj = (SdrObjCustomShape&)GetSdrObject();
- rObj.InvalidateRenderGeometry();
}
-
}
} // end of namespace properties
} // end of namespace sdr
diff --git a/svx/source/svdraw/svdoashp.cxx b/svx/source/svdraw/svdoashp.cxx
index dee5960..6ced8d6 100644
--- a/svx/source/svdraw/svdoashp.cxx
+++ b/svx/source/svdraw/svdoashp.cxx
@@ -1443,27 +1443,60 @@ const Rectangle& SdrObjCustomShape::GetLogicRect() const
{
return SdrTextObj::GetLogicRect();
}
-void SdrObjCustomShape::NbcSetSnapRect( const Rectangle& rRect )
+
+// #115391# This implementation is based on the TextFrame size of the CustomShape and the
+// state of the ResizeShapeToFitText flag to correctly set TextMinFrameWidth/Height
+void SdrObjCustomShape::AdaptTextMinSize()
{
- aRect=rRect;
- ImpJustifyRect(aRect);
- InvalidateRenderGeometry();
- Rectangle aTextBound( aRect );
- if ( GetTextBounds( aTextBound ) )
+ if(!pModel || !pModel->IsPasteResize())
{
- if ( pModel==NULL || !pModel->IsPasteResize() )
+ const bool bResizeShapeToFitText(0 != static_cast< const SdrTextAutoGrowHeightItem& >(GetObjectItem(SDRATTR_TEXT_AUTOGROWHEIGHT)).GetValue());
+ SfxItemSet aSet(GetObjectItemSet());
+ bool bChanged(false);
+
+ if(bResizeShapeToFitText)
{
- long nHDist=GetTextLeftDistance()+GetTextRightDistance();
- long nVDist=GetTextUpperDistance()+GetTextLowerDistance();
- long nTWdt=aTextBound.GetWidth ()-1-nHDist; if (nTWdt<0) nTWdt=0;
- long nTHgt=aTextBound.GetHeight()-1-nVDist; if (nTHgt<0) nTHgt=0;
- if ( IsAutoGrowWidth() )
- NbcSetMinTextFrameWidth( nTWdt );
- if ( IsAutoGrowHeight() )
- NbcSetMinTextFrameHeight( nTHgt );
+ // always reset MinWidthHeight to zero to only rely on text size and frame size
+ // to allow resizing being completely dependent on text size only
+ aSet.Put(SdrTextMinFrameWidthItem(0));
+ aSet.Put(SdrTextMinFrameHeightItem(0));
+ bChanged = true;
+ }
+ else
+ {
+ // recreate from CustomShape-specific TextBounds
+ Rectangle aTextBound(aRect);
+
+ if(GetTextBounds(aTextBound))
+ {
+ const long nHDist(GetTextLeftDistance() + GetTextRightDistance());
+ const long nVDist(GetTextUpperDistance() + GetTextLowerDistance());
+ const long nTWdt(std::max(long(0), (long)(aTextBound.GetWidth() - 1 - nHDist)));
+ const long nTHgt(std::max(long(0), (long)(aTextBound.GetHeight() - 1 - nVDist)));
+
+ aSet.Put(SdrTextMinFrameWidthItem(nTWdt));
+ aSet.Put(SdrTextMinFrameHeightItem(nTHgt));
+ bChanged = true;
+ }
+ }
+
+ if(bChanged)
+ {
+ SetObjectItemSet(aSet);
NbcAdjustTextFrameWidthAndHeight();
}
}
+}
+
+void SdrObjCustomShape::NbcSetSnapRect( const Rectangle& rRect )
+{
+ aRect=rRect;
+ ImpJustifyRect(aRect);
+ InvalidateRenderGeometry();
+
+ // #115391#
+ AdaptTextMinSize();
+
ImpCheckShear();
SetRectsDirty();
SetChanged();
@@ -1482,20 +1515,10 @@ void SdrObjCustomShape::NbcSetLogicRect( const Rectangle& rRect )
aRect = rRect;
ImpJustifyRect( aRect );
InvalidateRenderGeometry();
- Rectangle aTextBound( aRect );
- if ( GetTextBounds( aTextBound ) )
- {
- long nHDist=GetTextLeftDistance()+GetTextRightDistance();
- long nVDist=GetTextUpperDistance()+GetTextLowerDistance();
- long nTWdt=aTextBound.GetWidth()-1-nHDist; if (nTWdt<0) nTWdt=0;
- long nTHgt=aTextBound.GetHeight()-1-nVDist; if (nTHgt<0) nTHgt=0;
- if ( IsAutoGrowWidth() )
- NbcSetMinTextFrameWidth( nTWdt );
- if ( IsAutoGrowHeight() )
- NbcSetMinTextFrameHeight( nTHgt );
- NbcAdjustTextFrameWidthAndHeight();
- }
+ // #115391#
+ AdaptTextMinSize();
+
SetRectsDirty();
SetChanged();
}
@@ -2197,25 +2220,9 @@ bool SdrObjCustomShape::EndCreate( SdrDragStat& rStat, SdrCreateCmd eCmd )
{
DragCreateObject( rStat );
- if ( bTextFrame )
- {
- if ( IsAutoGrowHeight() )
- {
- // MinTextHeight
- long nHgt=aRect.GetHeight()-1;
- if (nHgt==1) nHgt=0;
- NbcSetMinTextFrameHeight( nHgt );
- }
- if ( IsAutoGrowWidth() )
- {
- // MinTextWidth
- long nWdt=aRect.GetWidth()-1;
- if (nWdt==1) nWdt=0;
- NbcSetMinTextFrameWidth( nWdt );
- }
- // re-calculate text frame
- NbcAdjustTextFrameWidthAndHeight();
- }
+ // #115391#
+ AdaptTextMinSize();
+
SetRectsDirty();
return ( eCmd == SDRCREATE_FORCEEND || rStat.GetPointAnz() >= 2 );
}
diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx
index 214f22a..5c24ec0 100644
--- a/svx/source/svdraw/svdotext.cxx
+++ b/svx/source/svdraw/svdotext.cxx
@@ -542,39 +542,98 @@ bool SdrTextObj::NbcSetEckenradius(long nRad)
return true;
}
-bool SdrTextObj::NbcSetMinTextFrameHeight(long nHgt)
+bool SdrTextObj::NbcSetAutoGrowHeight(bool bAuto)
{
- if( bTextFrame && ( !pModel || !pModel->isLocked() ) ) // #i44922#
+ if(bTextFrame)
{
- SetObjectItem(SdrTextMinFrameHeightItem(nHgt));
-
- // use bDisableAutoWidthOnDragging as
- // bDisableAutoHeightOnDragging if vertical.
- if(IsVerticalWriting() && bDisableAutoWidthOnDragging)
- {
- bDisableAutoWidthOnDragging = false;
- SetObjectItem(SdrTextAutoGrowHeightItem(false));
- }
+ SetObjectItem(SdrTextAutoGrowHeightItem(bAuto));
+ return true;
+ }
+ return false;
+}
+bool SdrTextObj::NbcSetMaxTextFrameHeight(long nHgt)
+{
+ if(bTextFrame)
+ {
+ SetObjectItem(SdrTextMaxFrameHeightItem(nHgt));
return true;
}
return false;
}
-bool SdrTextObj::NbcSetMinTextFrameWidth(long nWdt)
+// #115391# This implementation is based on the object size (aRect) and the
+// states of IsAutoGrowWidth/Height to correctly set TextMinFrameWidth/Height
+void SdrTextObj::AdaptTextMinSize()
{
- if( bTextFrame && ( !pModel || !pModel->isLocked() ) ) // #i44922#
+ if(bTextFrame && (!pModel || !pModel->isLocked()))
{
- SetObjectItem(SdrTextMinFrameWidthItem(nWdt));
+ const bool bW(IsAutoGrowWidth());
+ const bool bH(IsAutoGrowHeight());
- // use bDisableAutoWidthOnDragging only
- // when not vertical.
- if(!IsVerticalWriting() && bDisableAutoWidthOnDragging)
+ if(bW || bH)
{
- bDisableAutoWidthOnDragging = false;
- SetObjectItem(SdrTextAutoGrowWidthItem(false));
+ SfxItemSet aSet(GetObjectItemSet());
+
+ if(bW)
+ {
+ const long nDist(GetTextLeftDistance() + GetTextRightDistance());
+ const long nW(std::max(long(0), (long)(aRect.GetWidth() - 1 - nDist)));
+
+ aSet.Put(SdrTextMinFrameWidthItem(nW));
+
+ if(!IsVerticalWriting() && bDisableAutoWidthOnDragging)
+ {
+ bDisableAutoWidthOnDragging = true;
+ aSet.Put(SdrTextAutoGrowWidthItem(false));
+ }
+ }
+
+ if(bH)
+ {
+ const long nDist(GetTextUpperDistance() + GetTextLowerDistance());
+ const long nH(std::max(long(0), (long)(aRect.GetHeight() - 1 - nDist)));
+
+ aSet.Put(SdrTextMinFrameHeightItem(nH));
+
+ if(IsVerticalWriting() && bDisableAutoWidthOnDragging)
+ {
+ bDisableAutoWidthOnDragging = false;
+ SetObjectItem(SdrTextAutoGrowHeightItem(false));
+ }
+ }
+
+ SetObjectItemSet(aSet);
+ NbcAdjustTextFrameWidthAndHeight();
}
+ }
+}
+bool SdrTextObj::NbcSetAutoGrowWidth(bool bAuto)
+{
+ if(bTextFrame)
+ {
+ SetObjectItem(SdrTextAutoGrowWidthItem(bAuto));
+ return true;
+ }
+ return false;
+}
+
+bool SdrTextObj::NbcSetMaxTextFrameWidth(long nWdt)
+{
+ if(bTextFrame)
+ {
+ SetObjectItem(SdrTextMaxFrameWidthItem(nWdt));
+ return true;
+ }
+ return false;
+}
+
+bool SdrTextObj::NbcSetFitToSize(SdrFitToSizeType eFit)
+{
+ if(bTextFrame)
+ {
+ SetObjectItem(SdrTextFitToSizeTypeItem(eFit));
return true;
}
return false;
diff --git a/svx/source/svdraw/svdotxdr.cxx b/svx/source/svdraw/svdotxdr.cxx
index 7e81766..cd98685 100644
--- a/svx/source/svdraw/svdotxdr.cxx
+++ b/svx/source/svdraw/svdotxdr.cxx
@@ -210,22 +210,10 @@ bool SdrTextObj::EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd)
{
rStat.TakeCreateRect(aRect);
ImpJustifyRect(aRect);
- if (bTextFrame) {
- if (IsAutoGrowHeight()) {
- // MinTextHeight
- long nHgt=aRect.GetHeight()-1;
- if (nHgt==1) nHgt=0;
- NbcSetMinTextFrameHeight(nHgt);
- }
- if (IsAutoGrowWidth()) {
- // MinTextWidth
- long nWdt=aRect.GetWidth()-1;
- if (nWdt==1) nWdt=0;
- NbcSetMinTextFrameWidth(nWdt);
- }
- // re-calculate text frame
- NbcAdjustTextFrameWidthAndHeight();
- }
+
+ // #115391#
+ AdaptTextMinSize();
+
SetRectsDirty();
if (HAS_BASE(SdrRectObj,this)) {
((SdrRectObj*)this)->SetXPolyDirty();
diff --git a/svx/source/svdraw/svdotxtr.cxx b/svx/source/svdraw/svdotxtr.cxx
index 409af9f..a0267dd 100644
--- a/svx/source/svdraw/svdotxtr.cxx
+++ b/svx/source/svdraw/svdotxtr.cxx
@@ -58,11 +58,15 @@ void SdrTextObj::NbcSetSnapRect(const Rectangle& rRect)
long nTHgt1=rRect.GetHeight()-1-nVDist; if (nTHgt1<0) nTHgt1=0;
aRect=rRect;
ImpJustifyRect(aRect);
- if (bTextFrame && (pModel==NULL || !pModel->IsPasteResize())) {
- if (nTWdt0!=nTWdt1 && IsAutoGrowWidth() ) NbcSetMinTextFrameWidth(nTWdt1);
- if (nTHgt0!=nTHgt1 && IsAutoGrowHeight()) NbcSetMinTextFrameHeight(nTHgt1);
+
+ // #115391#
+ AdaptTextMinSize();
+
+ if (bTextFrame && (pModel==NULL || !pModel->IsPasteResize()))
+ {
NbcAdjustTextFrameWidthAndHeight();
}
+
ImpCheckShear();
SetRectsDirty();
}
@@ -83,11 +87,15 @@ void SdrTextObj::NbcSetLogicRect(const Rectangle& rRect)
long nTHgt1=rRect.GetHeight()-1-nVDist; if (nTHgt1<0) nTHgt1=0;
aRect=rRect;
ImpJustifyRect(aRect);
- if (bTextFrame) {
- if (nTWdt0!=nTWdt1 && IsAutoGrowWidth() ) NbcSetMinTextFrameWidth(nTWdt1);
- if (nTHgt0!=nTHgt1 && IsAutoGrowHeight()) NbcSetMinTextFrameHeight(nTHgt1);
+
+ // #115391#
+ AdaptTextMinSize();
+
+ if(bTextFrame)
+ {
NbcAdjustTextFrameWidthAndHeight();
}
+
SetRectsDirty();
}
@@ -185,13 +193,18 @@ void SdrTextObj::NbcResize(const Point& rRef, const Fraction& xFact, const Fract
}
ImpJustifyRect(aRect);
+
long nTWdt1=aRect.GetWidth ()-1-nHDist; if (nTWdt1<0) nTWdt1=0;
long nTHgt1=aRect.GetHeight()-1-nVDist; if (nTHgt1<0) nTHgt1=0;
- if (bTextFrame && (pModel==NULL || !pModel->IsPasteResize())) {
- if (nTWdt0!=nTWdt1 && IsAutoGrowWidth() ) NbcSetMinTextFrameWidth(nTWdt1);
- if (nTHgt0!=nTHgt1 && IsAutoGrowHeight()) NbcSetMinTextFrameHeight(nTHgt1);
+
+ // #115391#
+ AdaptTextMinSize();
+
+ if(bTextFrame && (!pModel || !pModel->IsPasteResize()))
+ {
NbcAdjustTextFrameWidthAndHeight();
}
+
ImpCheckShear();
SetRectsDirty();
}
More information about the Libreoffice-commits
mailing list