summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2020-09-08 17:26:12 +0200
committerMiklos Vajna <vmiklos@collabora.com>2022-11-03 14:32:10 +0100
commitcf08e56ce97259e65109db88f5511b20c2b5897a (patch)
tree32511ada0757f76f29b5ec5bc81e8d6b024a38c2
parent7c893371a5311b685173611b9b14348d8085d520 (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. (cherry picked from commit cd268f0047443ddbb22361cdc15093e881f83588) Conflicts: include/svx/unoshprp.hxx svx/source/unodraw/unoshape.cxx Change-Id: Iff88fcc4c2e67b543687b1d87d614622cbf2e38a
-rw-r--r--include/svl/solar.hrc2
-rw-r--r--include/svx/unoshprp.hxx4
-rw-r--r--svx/source/unodraw/unoshape.cxx33
3 files changed, 37 insertions, 2 deletions
diff --git a/include/svl/solar.hrc b/include/svl/solar.hrc
index 6b4cb07bbc33..317d45a84bc1 100644
--- a/include/svl/solar.hrc
+++ b/include/svl/solar.hrc
@@ -23,7 +23,7 @@
// defines ------------------------------------------------------------------
#define OWN_ATTR_VALUE_START 3900
-#define OWN_ATTR_VALUE_END 4004
+#define OWN_ATTR_VALUE_END 4005
#define RID_LIB_START 10000
#define RID_LIB_END 19999
diff --git a/include/svx/unoshprp.hxx b/include/svx/unoshprp.hxx
index 9aa2ecb16dae..8051634c3e42 100644
--- a/include/svx/unoshprp.hxx
+++ b/include/svx/unoshprp.hxx
@@ -192,7 +192,8 @@
#define OWN_ATTR_SIGNATURELINE_UNSIGNED_IMAGE (OWN_ATTR_VALUE_START+102)
#define OWN_ATTR_SIGNATURELINE_IS_SIGNED (OWN_ATTR_VALUE_START+103)
#define OWN_ATTR_QRCODE (OWN_ATTR_VALUE_START+104)
-// ATTENTION: maximum is OWN_ATTR_VALUE_START+104 svx, see include/svl/solar.hrc
+#define OWN_ATTR_TEXTFITTOSIZESCALE (OWN_ATTR_VALUE_START+105)
+// ATTENTION: maximum is OWN_ATTR_VALUE_START+105 svx, see include/svl/solar.hrc
// #FontWork#
#define FONTWORK_PROPERTIES \
@@ -348,6 +349,7 @@
{ OUString(UNO_NAME_MISC_OBJ_SIZEPROTECT), SDRATTR_OBJSIZEPROTECT , cppu::UnoType<bool>::get(), 0, 0},\
{ OUString("UINameSingular"), OWN_ATTR_UINAME_SINGULAR , ::cppu::UnoType<OUString>::get(), css::beans::PropertyAttribute::READONLY, 0}, \
{ OUString("UINamePlural"), OWN_ATTR_UINAME_PLURAL , ::cppu::UnoType<OUString>::get(), css::beans::PropertyAttribute::READONLY, 0}, \
+ { OUString("TextFitToSizeScale"), OWN_ATTR_TEXTFITTOSIZESCALE, ::cppu::UnoType<sal_Int16>::get(), css::beans::PropertyAttribute::READONLY, 0}, \
/* #i68101# */ \
{ OUString(UNO_NAME_MISC_OBJ_TITLE), OWN_ATTR_MISC_OBJ_TITLE , ::cppu::UnoType<OUString>::get(), 0, 0}, \
{ OUString(UNO_NAME_MISC_OBJ_DESCRIPTION), OWN_ATTR_MISC_OBJ_DESCRIPTION , ::cppu::UnoType<OUString>::get(), 0, 0},
diff --git a/svx/source/unodraw/unoshape.cxx b/svx/source/unodraw/unoshape.cxx
index 2bab0013c112..7802e5dde0fa 100644
--- a/svx/source/unodraw/unoshape.cxx
+++ b/svx/source/unodraw/unoshape.cxx
@@ -83,6 +83,8 @@
#include <vcl/gdimtf.hxx>
#include <vcl/wmf.hxx>
#include <svx/svdopath.hxx>
+#include <svx/sdtfsitm.hxx>
+#include <svx/svdoutl.hxx>
#include <memory>
#include <vector>
@@ -166,6 +168,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 )
@@ -2848,6 +2875,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();