diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2020-09-08 17:26:12 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2020-09-08 22:52:10 +0200 |
commit | cd268f0047443ddbb22361cdc15093e881f83588 (patch) | |
tree | 2a22df23fa36a00ba7b94b3db97fc28e7112d5f8 /svx | |
parent | 02d431279c59a4be8e2d01d5605a3c5e41666b01 (diff) |
svx UNO API for shapes: expose what scaling factor is used for autofit scaling
TextFitToSizeScale is 0 when the shape has no text or autofit is not
enabled, 100 when there is autofit (but no scale-down), a value between
the two otherwise.
Towards allowing both "autofit" and "same font size for these shapes" at
the same time for SmartArt purposes.
Change-Id: Iff88fcc4c2e67b543687b1d87d614622cbf2e38a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102266
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/unodraw/unoshape.cxx | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/svx/source/unodraw/unoshape.cxx b/svx/source/unodraw/unoshape.cxx index d1e76804133e..c78f5f65a71e 100644 --- a/svx/source/unodraw/unoshape.cxx +++ b/svx/source/unodraw/unoshape.cxx @@ -82,6 +82,8 @@ #include <vcl/gdimtf.hxx> #include <vcl/wmf.hxx> +#include <svx/sdtfsitm.hxx> +#include <svx/svdoutl.hxx> #include <memory> #include <vector> @@ -165,6 +167,31 @@ protected: } }; +/// Calculates what scaling factor will be used for autofit text scaling of this shape. +sal_Int16 GetTextFitToSizeScale(SdrObject* pObject) +{ + SdrTextObj* pTextObj = dynamic_cast<SdrTextObj*>(pObject); + if (!pTextObj) + { + return 0; + } + + const SfxItemSet& rTextObjSet = pTextObj->GetMergedItemSet(); + if (rTextObjSet.GetItem<SdrTextFitToSizeTypeItem>(SDRATTR_TEXT_FITTOSIZE)->GetValue() + != drawing::TextFitToSizeType_AUTOFIT) + { + return 0; + } + + std::unique_ptr<SdrOutliner> pOutliner + = pTextObj->getSdrModelFromSdrObject().createOutliner(OutlinerMode::TextObject); + tools::Rectangle aBoundRect(pTextObj->GetCurrentBoundRect()); + pTextObj->SetupOutlinerFormatting(*pOutliner, aBoundRect); + sal_uInt16 nX = 0; + sal_uInt16 nY = 0; + pOutliner->GetGlobalCharStretching(nX, nY); + return nY; +} } SvxShape::SvxShape( SdrObject* pObject ) @@ -2833,6 +2860,12 @@ bool SvxShape::getPropertyValueImpl( const OUString&, const SfxItemPropertySimpl break; } + case OWN_ATTR_TEXTFITTOSIZESCALE: + { + rValue <<= GetTextFitToSizeScale(GetSdrObject()); + break; + } + case OWN_ATTR_UINAME_PLURAL: { rValue <<= GetSdrObject()->TakeObjNamePlural(); |