diff options
Diffstat (limited to 'svx')
24 files changed, 562 insertions, 16 deletions
diff --git a/svx/Library_svx.mk b/svx/Library_svx.mk index 75b20d54506d..0160bc2a4a6d 100644 --- a/svx/Library_svx.mk +++ b/svx/Library_svx.mk @@ -235,6 +235,7 @@ $(eval $(call gb_Library_add_exception_objects,svx,\ svx/source/sidebar/area/AreaPropertyPanelBase \ svx/source/sidebar/area/AreaTransparencyGradientPopup \ svx/source/sidebar/effect/EffectPropertyPanel \ + svx/source/sidebar/effect/TextEffectPropertyPanel \ svx/source/sidebar/fontwork/FontworkPropertyPanel \ svx/source/sidebar/shadow/ShadowPropertyPanel \ svx/source/sidebar/graphic/GraphicPropertyPanel \ diff --git a/svx/UIConfig_svx.mk b/svx/UIConfig_svx.mk index 9a1553005a85..fdbf7027ab35 100644 --- a/svx/UIConfig_svx.mk +++ b/svx/UIConfig_svx.mk @@ -123,6 +123,7 @@ $(eval $(call gb_UIConfig_add_uifiles,svx,\ svx/uiconfig/ui/sidebararea \ svx/uiconfig/ui/sidebarempty \ svx/uiconfig/ui/sidebareffect \ + svx/uiconfig/ui/sidebartexteffect \ svx/uiconfig/ui/sidebarfontwork \ svx/uiconfig/ui/sidebarshadow \ svx/uiconfig/ui/sidebargallery \ diff --git a/svx/inc/sdr/attribute/sdreffectstextattribute.hxx b/svx/inc/sdr/attribute/sdreffectstextattribute.hxx index 95a7ffa3e356..f539dce750c3 100644 --- a/svx/inc/sdr/attribute/sdreffectstextattribute.hxx +++ b/svx/inc/sdr/attribute/sdreffectstextattribute.hxx @@ -22,6 +22,7 @@ #include <drawinglayer/attribute/sdrshadowattribute.hxx> #include <sdr/attribute/sdrtextattribute.hxx> #include <drawinglayer/attribute/sdrglowattribute.hxx> +#include <drawinglayer/attribute/sdrglowtextattribute.hxx> namespace drawinglayer::attribute @@ -35,6 +36,9 @@ namespace drawinglayer::attribute // glow effect SdrGlowAttribute maGlow; + // glow text effect + SdrGlowTextAttribute maGlowText; + // soft edge sal_Int32 mnSoftEdgeRadius = 0; @@ -43,6 +47,7 @@ namespace drawinglayer::attribute SdrShadowAttribute aShadow, SdrTextAttribute aTextAttribute, SdrGlowAttribute aGlow, + SdrGlowTextAttribute aGlowText, sal_Int32 nSoftEdgeRadius); SdrEffectsTextAttribute(); SdrEffectsTextAttribute(const SdrEffectsTextAttribute& rCandidate); @@ -58,6 +63,7 @@ namespace drawinglayer::attribute const SdrShadowAttribute& getShadow() const { return maShadow; } const SdrTextAttribute& getText() const { return maTextAttribute; } const SdrGlowAttribute& getGlow() const { return maGlow; } + const SdrGlowTextAttribute& getGlowText() const { return maGlowText; } sal_Int32 getSoftEdgeRadius() const { return mnSoftEdgeRadius; } }; diff --git a/svx/inc/sdr/attribute/sdrlineeffectstextattribute.hxx b/svx/inc/sdr/attribute/sdrlineeffectstextattribute.hxx index 3134b0b78b4e..345ceacf67c8 100644 --- a/svx/inc/sdr/attribute/sdrlineeffectstextattribute.hxx +++ b/svx/inc/sdr/attribute/sdrlineeffectstextattribute.hxx @@ -21,6 +21,7 @@ #include <sdr/attribute/sdreffectstextattribute.hxx> #include <drawinglayer/attribute/sdrglowattribute.hxx> +#include <drawinglayer/attribute/sdrglowtextattribute.hxx> #include <drawinglayer/attribute/sdrlineattribute.hxx> #include <drawinglayer/attribute/sdrlinestartendattribute.hxx> @@ -40,6 +41,7 @@ namespace drawinglayer::attribute const SdrShadowAttribute& rShadow, const SdrTextAttribute& rTextAttribute, const SdrGlowAttribute& rGlow, + const SdrGlowTextAttribute& rGlowText, sal_Int32 nSoftEdgeRadius); SdrLineEffectsTextAttribute(); SdrLineEffectsTextAttribute(const SdrLineEffectsTextAttribute& rCandidate); diff --git a/svx/inc/sdr/attribute/sdrlinefilleffectstextattribute.hxx b/svx/inc/sdr/attribute/sdrlinefilleffectstextattribute.hxx index 0adb1e49ffc2..56b22f65fe91 100644 --- a/svx/inc/sdr/attribute/sdrlinefilleffectstextattribute.hxx +++ b/svx/inc/sdr/attribute/sdrlinefilleffectstextattribute.hxx @@ -41,6 +41,7 @@ namespace drawinglayer::attribute FillGradientAttribute aFillFloatTransGradient, const SdrTextAttribute& rTextAttribute, const SdrGlowAttribute& rGlow, + const SdrGlowTextAttribute& rGlowText, sal_Int32 nSoftEdgeRadius); SdrLineFillEffectsTextAttribute(); SdrLineFillEffectsTextAttribute(const SdrLineFillEffectsTextAttribute& rCandidate); diff --git a/svx/inc/sdr/primitive2d/sdrattributecreator.hxx b/svx/inc/sdr/primitive2d/sdrattributecreator.hxx index 92a2b102ffdb..1bc3cc2f2f28 100644 --- a/svx/inc/sdr/primitive2d/sdrattributecreator.hxx +++ b/svx/inc/sdr/primitive2d/sdrattributecreator.hxx @@ -26,12 +26,14 @@ // predefines class SfxItemSet; class SdrText; +class SvxFontHeightItem; namespace drawinglayer::attribute { class SdrLineAttribute; class SdrLineStartEndAttribute; class SdrShadowAttribute; class SdrGlowAttribute; + class SdrGlowTextAttribute; class SdrFillAttribute; class SdrTextAttribute; class FillGradientAttribute; diff --git a/svx/inc/sdr/primitive2d/sdrdecompositiontools.hxx b/svx/inc/sdr/primitive2d/sdrdecompositiontools.hxx index e504acd41ab6..48df2f1e6f3d 100644 --- a/svx/inc/sdr/primitive2d/sdrdecompositiontools.hxx +++ b/svx/inc/sdr/primitive2d/sdrdecompositiontools.hxx @@ -21,6 +21,7 @@ #include <basegfx/matrix/b2dhommatrix.hxx> #include <drawinglayer/attribute/sdrglowattribute.hxx> +#include <drawinglayer/attribute/sdrglowtextattribute.hxx> #include <drawinglayer/primitive2d/Primitive2DContainer.hxx> #include <svx/svxdllapi.h> @@ -78,6 +79,10 @@ namespace drawinglayer::primitive2d Primitive2DContainer&& rContent, const attribute::SdrGlowAttribute& rGlow); + Primitive2DContainer SVXCORE_DLLPUBLIC createEmbeddedTextGlowPrimitive( + Primitive2DContainer&& rContent, + const attribute::SdrGlowTextAttribute& rGlow); + Primitive2DContainer SVXCORE_DLLPUBLIC createEmbeddedSoftEdgePrimitive( Primitive2DContainer&& aContent, sal_Int32 nRadius); diff --git a/svx/sdi/svx.sdi b/svx/sdi/svx.sdi index 51ab792cf969..ef8c9e32fd98 100644 --- a/svx/sdi/svx.sdi +++ b/svx/sdi/svx.sdi @@ -12698,6 +12698,57 @@ SdrPercentItem GlowTransparency SID_ATTR_GLOW_TRANSPARENCY GroupId = SfxGroupId::Document; ] +XColorItem GlowTextColor SID_ATTR_GLOW_TEXT_COLOR + +[ + AutoUpdate = TRUE, + FastCall = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + + AccelConfig = FALSE, + MenuConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = SfxGroupId::Document; +] + +SdrMetricItem GlowTextRadius SID_ATTR_GLOW_TEXT_RADIUS + +[ + AutoUpdate = TRUE, + FastCall = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + + AccelConfig = FALSE, + MenuConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = SfxGroupId::Document; +] + +SdrPercentItem GlowTextTransparency SID_ATTR_GLOW_TEXT_TRANSPARENCY + +[ + AutoUpdate = TRUE, + FastCall = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + + AccelConfig = FALSE, + MenuConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = SfxGroupId::Document; +] + SdrMetricItem SoftEdgeRadius SID_ATTR_SOFTEDGE_RADIUS [ diff --git a/svx/source/sdr/attribute/sdreffectstextattribute.cxx b/svx/source/sdr/attribute/sdreffectstextattribute.cxx index 30d8a6db1c1e..9275a965c421 100644 --- a/svx/source/sdr/attribute/sdreffectstextattribute.cxx +++ b/svx/source/sdr/attribute/sdreffectstextattribute.cxx @@ -28,10 +28,12 @@ namespace drawinglayer::attribute SdrShadowAttribute aShadow, SdrTextAttribute aTextAttribute, SdrGlowAttribute aGlow, + SdrGlowTextAttribute aGlowText, sal_Int32 nSoftEdgeRadius) : maShadow(std::move(aShadow)), maTextAttribute(std::move(aTextAttribute)), maGlow(std::move(aGlow)), + maGlowText(std::move(aGlowText)), mnSoftEdgeRadius(nSoftEdgeRadius) { } @@ -44,6 +46,7 @@ namespace drawinglayer::attribute : maShadow(rCandidate.getShadow()), maTextAttribute(rCandidate.getText()), maGlow(rCandidate.maGlow), + maGlowText(rCandidate.maGlowText), mnSoftEdgeRadius(rCandidate.mnSoftEdgeRadius) { } @@ -53,6 +56,7 @@ namespace drawinglayer::attribute maShadow = rCandidate.getShadow(); maTextAttribute = rCandidate.getText(); maGlow = rCandidate.maGlow; + maGlowText = rCandidate.maGlowText; mnSoftEdgeRadius = rCandidate.mnSoftEdgeRadius; return *this; @@ -61,7 +65,8 @@ namespace drawinglayer::attribute bool SdrEffectsTextAttribute::isDefault() const { return (getShadow().isDefault() - && getText().isDefault() && maGlow.isDefault() && getSoftEdgeRadius() == 0); + && getText().isDefault() && maGlow.isDefault() + && maGlowText.isDefault() && getSoftEdgeRadius() == 0); } bool SdrEffectsTextAttribute::operator==(const SdrEffectsTextAttribute& rCandidate) const @@ -69,6 +74,7 @@ namespace drawinglayer::attribute return (getShadow() == rCandidate.getShadow() && getText() == rCandidate.getText() && getGlow() == rCandidate.getGlow() + && getGlowText() == rCandidate.getGlowText() && getSoftEdgeRadius() == rCandidate.getSoftEdgeRadius()); } diff --git a/svx/source/sdr/attribute/sdrlineeffectstextattribute.cxx b/svx/source/sdr/attribute/sdrlineeffectstextattribute.cxx index c3f3dbcb18c4..ca9402c707a1 100644 --- a/svx/source/sdr/attribute/sdrlineeffectstextattribute.cxx +++ b/svx/source/sdr/attribute/sdrlineeffectstextattribute.cxx @@ -30,8 +30,9 @@ namespace drawinglayer::attribute const SdrShadowAttribute& rShadow, const SdrTextAttribute& rTextAttribute, const SdrGlowAttribute& rGlow, + const SdrGlowTextAttribute& rGlowText, sal_Int32 nSoftEdgeRadius) - : SdrEffectsTextAttribute(rShadow, rTextAttribute, rGlow, nSoftEdgeRadius), + : SdrEffectsTextAttribute(rShadow, rTextAttribute, rGlow, rGlowText, nSoftEdgeRadius), maLine(std::move(aLine)), maLineStartEnd(std::move(aLineStartEnd)) { diff --git a/svx/source/sdr/attribute/sdrlinefilleffectstextattribute.cxx b/svx/source/sdr/attribute/sdrlinefilleffectstextattribute.cxx index 4d57225b2fb3..a5b7ab9cac2f 100644 --- a/svx/source/sdr/attribute/sdrlinefilleffectstextattribute.cxx +++ b/svx/source/sdr/attribute/sdrlinefilleffectstextattribute.cxx @@ -32,8 +32,9 @@ namespace drawinglayer::attribute FillGradientAttribute aFillFloatTransGradient, const SdrTextAttribute& rTextAttribute, const SdrGlowAttribute& rGlow, + const SdrGlowTextAttribute& rGlowText, sal_Int32 nSoftEdgeRadius) - : SdrLineEffectsTextAttribute(rLine, rLineStartEnd, rShadow, rTextAttribute, rGlow, nSoftEdgeRadius), + : SdrLineEffectsTextAttribute(rLine, rLineStartEnd, rShadow, rTextAttribute, rGlow, rGlowText, nSoftEdgeRadius), maFill(std::move(aFill)), maFillFloatTransGradient(std::move(aFillFloatTransGradient)) { diff --git a/svx/source/sdr/primitive2d/sdrattributecreator.cxx b/svx/source/sdr/primitive2d/sdrattributecreator.cxx index 4a1f2c6560e2..192e6b080acf 100644 --- a/svx/source/sdr/primitive2d/sdrattributecreator.cxx +++ b/svx/source/sdr/primitive2d/sdrattributecreator.cxx @@ -72,6 +72,9 @@ #include <svx/svdmodel.hxx> #include <svx/xflbmsli.hxx> #include <editeng/editstat.hxx> +#include <editeng/eeitem.hxx> +#include <editeng/fhgtitem.hxx> +#include <editeng/editobj.hxx> #include <osl/diagnose.h> #include <drawinglayer/attribute/fillhatchattribute.hxx> #include <drawinglayer/attribute/fillgradientattribute.hxx> @@ -80,12 +83,15 @@ #include <sdr/attribute/sdrformtextattribute.hxx> #include <sdr/attribute/sdrlinefilleffectstextattribute.hxx> #include <drawinglayer/attribute/sdrglowattribute.hxx> +#include <drawinglayer/attribute/sdrglowtextattribute.hxx> #include <drawinglayer/attribute/sdrsceneattribute3d.hxx> #include <drawinglayer/attribute/sdrlightingattribute3d.hxx> #include <drawinglayer/attribute/sdrlightattribute3d.hxx> #include <sdr/attribute/sdrfilltextattribute.hxx> #include <com/sun/star/drawing/LineCap.hpp> +#include <math.h> + using namespace com::sun::star; namespace drawinglayer @@ -187,9 +193,12 @@ namespace drawinglayer attribute::SdrGlowAttribute createNewSdrGlowAttribute(const SfxItemSet& rSet) { sal_Int32 nRadius = rSet.Get(SDRATTR_GLOW_RADIUS).GetValue(); + if (!nRadius) return attribute::SdrGlowAttribute(); + Color aColor(rSet.Get(SDRATTR_GLOW_COLOR).GetColorValue()); + sal_uInt16 nTransparency(rSet.Get(SDRATTR_GLOW_TRANSPARENCY).GetValue()); if (nTransparency) aColor.SetAlpha(255 - std::round(nTransparency / 100.0 * 255.0)); @@ -198,6 +207,55 @@ namespace drawinglayer return glowAttr; } + attribute::SdrGlowTextAttribute createNewSdrGlowTextAttribute(const SfxItemSet& rSet, const SdrTextObj& rTextObj) + { + sal_Int32 nTextRadius = rSet.Get(SDRATTR_GLOW_TEXT_RADIUS).GetValue(); + + if (!nTextRadius) + return attribute::SdrGlowTextAttribute(); + + Color aTextColor(rSet.Get(SDRATTR_GLOW_TEXT_COLOR).GetColorValue()); + + sal_uInt16 nTextTransparency(rSet.Get(SDRATTR_GLOW_TEXT_TRANSPARENCY).GetValue()); + if (nTextTransparency) + aTextColor.SetAlpha(255 - std::round(nTextTransparency / 100.0 * 255.0)); + + // calculate rendering text glow radius from biggest Char size for the full text in shape + double nRadius = 0.0; + const SvxFontHeightItem& rItem = *rSet.GetItemIfSet(EE_CHAR_FONTHEIGHT); + sal_uInt32 nFontSize = rItem.GetHeight(); + + if (rTextObj.GetOutlinerParaObject()) + { + const EditTextObject& aEdit = rTextObj.GetOutlinerParaObject()->GetTextObject(); + for (sal_Int32 i = 0; i < aEdit.GetParagraphCount(); i++) + { + std::vector<EECharAttrib> aAttribs; + aEdit.GetCharAttribs(i, aAttribs); + for (const auto& attrib : aAttribs) + { + if (const SvxFontHeightItem* pFontHeight = dynamic_cast<const SvxFontHeightItem*>(attrib.pAttr)) + { + if (nFontSize < pFontHeight->GetHeight()) + nFontSize = pFontHeight->GetHeight(); + } + } + } + } + + if (nFontSize) + { + // Rendering_glow_size = Original_glow_size / (154.39 * FontSize ^ -0,621) + // This is an approximate calculation similar to MSO text glow size which is + // depending on font size + nRadius = nTextRadius / (154.39 * pow(nFontSize, -0.621)); + nTextRadius = std::round(nRadius); + } + + attribute::SdrGlowTextAttribute glowTextAttr{ nTextRadius, aTextColor }; + return glowTextAttr; + } + sal_Int32 getSoftEdgeRadius(const SfxItemSet& rSet) { return rSet.Get(SDRATTR_SOFTEDGE_RADIUS).GetValue(); @@ -749,10 +807,11 @@ namespace drawinglayer::primitive2d // try shadow const attribute::SdrShadowAttribute aShadow(createNewSdrShadowAttribute(rSet)); const attribute::SdrGlowAttribute aGlow(createNewSdrGlowAttribute(rSet)); + const attribute::SdrGlowTextAttribute aGlowText(createNewSdrGlowTextAttribute(rSet, pText->GetObject())); const sal_Int32 nSoftEdgeRadius(getSoftEdgeRadius(rSet)); return attribute::SdrEffectsTextAttribute(aShadow, std::move(aText), - aGlow, nSoftEdgeRadius); + aGlow, aGlowText, nSoftEdgeRadius); } attribute::SdrLineEffectsTextAttribute createNewSdrLineEffectsTextAttribute( @@ -796,13 +855,15 @@ namespace drawinglayer::primitive2d // try shadow attribute::SdrShadowAttribute aShadow(createNewSdrShadowAttribute(rSet)); attribute::SdrGlowAttribute aGlow = createNewSdrGlowAttribute(rSet); + attribute::SdrGlowTextAttribute aGlowText = createNewSdrGlowTextAttribute(rSet, pText->GetObject()); const sal_Int32 nSoftEdgeRadius(getSoftEdgeRadius(rSet)); return attribute::SdrLineEffectsTextAttribute(std::move(aLine), std::move(aLineStartEnd), std::move(aShadow), std::move(aText), - std::move(aGlow), nSoftEdgeRadius); + std::move(aGlow), + std::move(aGlowText), nSoftEdgeRadius); } return attribute::SdrLineEffectsTextAttribute(); @@ -868,11 +929,14 @@ namespace drawinglayer::primitive2d // glow const attribute::SdrGlowAttribute aGlow = createNewSdrGlowAttribute(rSet); + // text glow + const attribute::SdrGlowTextAttribute aGlowText = createNewSdrGlowTextAttribute(rSet, pText->GetObject()); + const sal_Int32 nSoftEdgeRadius(getSoftEdgeRadius(rSet)); return attribute::SdrLineFillEffectsTextAttribute(aLine, std::move(aFill), aLineStartEnd, aShadow, std::move(aFillFloatTransGradient), - aText, aGlow, nSoftEdgeRadius); + aText, aGlow, aGlowText, nSoftEdgeRadius); } return attribute::SdrLineFillEffectsTextAttribute(); diff --git a/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx b/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx index bfdd4922f1b3..88cc3cf9bc61 100644 --- a/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx +++ b/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx @@ -44,12 +44,20 @@ namespace drawinglayer::primitive2d getSdrSTAttribute().getSoftEdgeRadius()); } + // tdf#132199: put glow before shadow, to have shadow of the glow, not the opposite + if (!aRetval.empty() && !getSdrSTAttribute().getGlow().isDefault()) + { + // glow + aRetval = createEmbeddedGlowPrimitive(std::move(aRetval), getSdrSTAttribute().getGlow()); + } + // add text if(!getSdrSTAttribute().getText().isDefault()) { const basegfx::B2DPolygon& aUnitOutline(basegfx::utils::createUnitPolygon()); - aRetval.push_back( + Primitive2DContainer aTempContentText; + aTempContentText.push_back( createTextPrimitive( basegfx::B2DPolyPolygon(aUnitOutline), getTextBox(), @@ -57,13 +65,14 @@ namespace drawinglayer::primitive2d attribute::SdrLineAttribute(), false, getWordWrap())); - } - // tdf#132199: put glow before shadow, to have shadow of the glow, not the opposite - if (!aRetval.empty() && !getSdrSTAttribute().getGlow().isDefault()) - { - // glow - aRetval = createEmbeddedGlowPrimitive(std::move(aRetval), getSdrSTAttribute().getGlow()); + // put text glow before, shape glow and shadow + if (!aTempContentText.empty() && !getSdrSTAttribute().getGlowText().isDefault()) + { + // add text glow + aTempContentText = createEmbeddedTextGlowPrimitive(std::move(aTempContentText), getSdrSTAttribute().getGlowText()); + } + aRetval.append(std::move(aTempContentText)); } // add shadow diff --git a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx index b6d97a9fa39b..a29d1cbb1900 100644 --- a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx +++ b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx @@ -52,6 +52,7 @@ #include <drawinglayer/attribute/sdrlinestartendattribute.hxx> #include <drawinglayer/attribute/sdrshadowattribute.hxx> #include <drawinglayer/attribute/sdrglowattribute.hxx> +#include <drawinglayer/attribute/sdrglowtextattribute.hxx> #include <docmodel/theme/FormatScheme.hxx> #include <osl/diagnose.h> @@ -931,6 +932,20 @@ sal_uInt32 SlideBackgroundFillPrimitive2D::getPrimitive2DID() const return aRetval; } + Primitive2DContainer createEmbeddedTextGlowPrimitive( + Primitive2DContainer&& rContent, + const attribute::SdrGlowTextAttribute& rGlow) + { + if (rContent.empty()) + return std::move(rContent); + + Primitive2DContainer aRetval(2); + aRetval[0] = new GlowPrimitive2D(rGlow.getTextColor(), rGlow.getTextRadius(), Primitive2DContainer(rContent)); + aRetval[1] = new GroupPrimitive2D(Primitive2DContainer(std::move(rContent))); + + return aRetval; + } + Primitive2DContainer createEmbeddedSoftEdgePrimitive(Primitive2DContainer&& aContent, sal_Int32 nRadius) { diff --git a/svx/source/sdr/primitive2d/sdrrectangleprimitive2d.cxx b/svx/source/sdr/primitive2d/sdrrectangleprimitive2d.cxx index 2b1f10a81aa6..cdfd75a88b98 100644 --- a/svx/source/sdr/primitive2d/sdrrectangleprimitive2d.cxx +++ b/svx/source/sdr/primitive2d/sdrrectangleprimitive2d.cxx @@ -92,7 +92,8 @@ namespace drawinglayer::primitive2d // add text if(!getSdrLFSTAttribute().getText().isDefault()) { - aRetval.push_back( + Primitive2DContainer aTempContentText; + aTempContentText.push_back( createTextPrimitive( basegfx::B2DPolyPolygon(aUnitOutline), getTransform(), @@ -100,6 +101,14 @@ namespace drawinglayer::primitive2d getSdrLFSTAttribute().getLine(), false, false)); + + // put text glow before, shape glow and shadow + if (!aTempContentText.empty() && !getSdrLFSTAttribute().getGlowText().isDefault()) + { + // add text glow + aTempContentText = createEmbeddedTextGlowPrimitive(std::move(aTempContentText), getSdrLFSTAttribute().getGlowText()); + } + aRetval.append(std::move(aTempContentText)); } // add shadow diff --git a/svx/source/sdr/properties/customshapeproperties.cxx b/svx/source/sdr/properties/customshapeproperties.cxx index 2626d133d1b0..c63d7e4a4b3c 100644 --- a/svx/source/sdr/properties/customshapeproperties.cxx +++ b/svx/source/sdr/properties/customshapeproperties.cxx @@ -71,7 +71,7 @@ namespace sdr::properties // Graphic attributes, 3D properties, CustomShape // properties: SDRATTR_GRAF_FIRST, SDRATTR_CUSTOMSHAPE_LAST, - SDRATTR_GLOW_FIRST, SDRATTR_SOFTEDGE_LAST, + SDRATTR_GLOW_FIRST, SDRATTR_GLOW_TEXT_LAST, SDRATTR_TEXTCOLUMNS_FIRST, SDRATTR_TEXTCOLUMNS_LAST, SDRATTR_WRITINGMODE2, SDRATTR_WRITINGMODE2, // Range from SdrTextObj: diff --git a/svx/source/sdr/properties/textproperties.cxx b/svx/source/sdr/properties/textproperties.cxx index cefb8895878f..bf19b885db5c 100644 --- a/svx/source/sdr/properties/textproperties.cxx +++ b/svx/source/sdr/properties/textproperties.cxx @@ -54,6 +54,7 @@ namespace sdr::properties svl::Items<SDRATTR_START, SDRATTR_SHADOW_LAST, SDRATTR_MISC_FIRST, SDRATTR_MISC_LAST, SDRATTR_TEXTDIRECTION, SDRATTR_TEXTDIRECTION, + SDRATTR_GLOW_TEXT_FIRST, SDRATTR_GLOW_TEXT_LAST, SDRATTR_TEXTCOLUMNS_FIRST, SDRATTR_TEXTCOLUMNS_LAST, // range from SdrTextObj diff --git a/svx/source/sidebar/PanelFactory.cxx b/svx/source/sidebar/PanelFactory.cxx index 6d1bd1cc8c60..20479e8efa65 100644 --- a/svx/source/sidebar/PanelFactory.cxx +++ b/svx/source/sidebar/PanelFactory.cxx @@ -27,6 +27,7 @@ #include "fontwork/FontworkPropertyPanel.hxx" #include "shadow/ShadowPropertyPanel.hxx" #include "effect/EffectPropertyPanel.hxx" +#include "effect/TextEffectPropertyPanel.hxx" #include "graphic/GraphicPropertyPanel.hxx" #include "line/LinePropertyPanel.hxx" #include "possize/PosSizePropertyPanel.hxx" @@ -153,6 +154,10 @@ Reference<ui::XUIElement> SAL_CALL PanelFactory::createUIElement ( { xControl = EffectPropertyPanel::Create(pParent, pBindings); } + else if (rsResourceURL.endsWith("/TextEffectPropertyPanel")) + { + xControl = TextEffectPropertyPanel::Create(pParent, pBindings); + } else if (rsResourceURL.endsWith("/GraphicPropertyPanel")) { xControl = GraphicPropertyPanel::Create(pParent, pBindings); diff --git a/svx/source/sidebar/effect/TextEffectPropertyPanel.cxx b/svx/source/sidebar/effect/TextEffectPropertyPanel.cxx new file mode 100644 index 000000000000..ab8797ee904f --- /dev/null +++ b/svx/source/sidebar/effect/TextEffectPropertyPanel.cxx @@ -0,0 +1,153 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <sal/config.h> + +#include "TextEffectPropertyPanel.hxx" + +#include <sfx2/dispatch.hxx> +#include <svx/colorbox.hxx> +#include <svx/sdmetitm.hxx> +#include <svx/sdprcitm.hxx> +#include <svx/svddef.hxx> +#include <svx/svxids.hrc> +#include <svx/xcolit.hxx> +#include <svl/itemset.hxx> + +namespace svx::sidebar +{ +TextEffectPropertyPanel::TextEffectPropertyPanel(weld::Widget* pParent, SfxBindings* pBindings) + : PanelLayout(pParent, u"TextEffectPropertyPanel"_ustr, u"svx/ui/sidebartexteffect.ui"_ustr) + , maTGlowColorController(SID_ATTR_GLOW_TEXT_COLOR, *pBindings, *this) + , maTGlowRadiusController(SID_ATTR_GLOW_TEXT_RADIUS, *pBindings, *this) + , maTGlowTransparencyController(SID_ATTR_GLOW_TEXT_TRANSPARENCY, *pBindings, *this) + , mxFTTTransparency(m_xBuilder->weld_label(u"texttransparency"_ustr)) + , mpBindings(pBindings) + , mxTGlowRadius( + m_xBuilder->weld_metric_spin_button(u"LB_GLOW_TEXT_RADIUS"_ustr, FieldUnit::POINT)) + , mxLBTGlowColor(new ColorListBox(m_xBuilder->weld_menu_button(u"LB_GLOW_TEXT_COLOR"_ustr), + [this] { return GetFrameWeld(); })) + , mxTGlowTransparency(m_xBuilder->weld_metric_spin_button(u"LB_GLOW_TEXT_TRANSPARENCY"_ustr, + FieldUnit::PERCENT)) + , mxFTTColor(m_xBuilder->weld_label(u"glowtextcolorlabel"_ustr)) +{ + Initialize(); +} + +TextEffectPropertyPanel::~TextEffectPropertyPanel() +{ + mxTGlowRadius.reset(); + mxLBTGlowColor.reset(); + mxTGlowTransparency.reset(); + mxFTTColor.reset(); + mxFTTTransparency.reset(); + + maTGlowColorController.dispose(); + maTGlowRadiusController.dispose(); + maTGlowTransparencyController.dispose(); +} + +void TextEffectPropertyPanel::Initialize() +{ + mxTGlowRadius->connect_value_changed(LINK(this, TextEffectPropertyPanel, ModifyTGlowRadiusHdl)); + mxLBTGlowColor->SetSelectHdl(LINK(this, TextEffectPropertyPanel, ModifyTGlowColorHdl)); + mxTGlowTransparency->connect_value_changed( + LINK(this, TextEffectPropertyPanel, ModifyTGlowTransparencyHdl)); +} + +IMPL_LINK_NOARG(TextEffectPropertyPanel, ModifyTGlowRadiusHdl, weld::MetricSpinButton&, void) +{ + SdrMetricItem aItem(SDRATTR_GLOW_TEXT_RADIUS, mxTGlowRadius->get_value(FieldUnit::MM_100TH)); + mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_GLOW_TEXT_RADIUS, SfxCallMode::RECORD, + { &aItem }); +} + +IMPL_LINK_NOARG(TextEffectPropertyPanel, ModifyTGlowColorHdl, ColorListBox&, void) +{ + XColorItem aItem(SDRATTR_GLOW_TEXT_COLOR, mxLBTGlowColor->GetSelectEntryColor()); + mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_GLOW_TEXT_COLOR, SfxCallMode::RECORD, + { &aItem }); +} + +IMPL_LINK_NOARG(TextEffectPropertyPanel, ModifyTGlowTransparencyHdl, weld::MetricSpinButton&, void) +{ + SdrPercentItem aItem(SDRATTR_GLOW_TEXT_TRANSPARENCY, + mxTGlowTransparency->get_value(FieldUnit::PERCENT)); + mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_GLOW_TEXT_TRANSPARENCY, SfxCallMode::RECORD, + { &aItem }); +} + +void TextEffectPropertyPanel::UpdateControls() +{ + const bool bTEnabled = mxTGlowRadius->get_value(FieldUnit::MM_100TH) != 0; + mxLBTGlowColor->set_sensitive(bTEnabled); + mxTGlowTransparency->set_sensitive(bTEnabled); + mxFTTColor->set_sensitive(bTEnabled); + mxFTTTransparency->set_sensitive(bTEnabled); +} + +void TextEffectPropertyPanel::NotifyItemUpdate(sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState) +{ + switch (nSID) + { + case SID_ATTR_GLOW_TEXT_COLOR: + { + if (eState >= SfxItemState::DEFAULT) + { + const XColorItem* pColorItem = dynamic_cast<const XColorItem*>(pState); + if (pColorItem) + { + mxLBTGlowColor->SelectEntry(pColorItem->GetColorValue()); + } + } + } + break; + case SID_ATTR_GLOW_TEXT_RADIUS: + { + if (eState >= SfxItemState::DEFAULT) + { + const SdrMetricItem* pRadiusItem = dynamic_cast<const SdrMetricItem*>(pState); + if (pRadiusItem) + { + mxTGlowRadius->set_value(pRadiusItem->GetValue(), FieldUnit::MM_100TH); + } + } + } + break; + case SID_ATTR_GLOW_TEXT_TRANSPARENCY: + { + if (eState >= SfxItemState::DEFAULT) + { + if (auto pItem = dynamic_cast<const SdrPercentItem*>(pState)) + { + mxTGlowTransparency->set_value(pItem->GetValue(), FieldUnit::PERCENT); + } + } + } + break; + } + UpdateControls(); +} + +std::unique_ptr<PanelLayout> TextEffectPropertyPanel::Create(weld::Widget* pParent, + SfxBindings* pBindings) +{ + if (pParent == nullptr) + throw css::lang::IllegalArgumentException( + u"no parent Window given to TextEffectPropertyPanel::Create"_ustr, nullptr, 0); + if (pBindings == nullptr) + throw css::lang::IllegalArgumentException( + u"no SfxBindings given to TextEffectPropertyPanel::Create"_ustr, nullptr, 2); + + return std::make_unique<TextEffectPropertyPanel>(pParent, pBindings); +} +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/sidebar/effect/TextEffectPropertyPanel.hxx b/svx/source/sidebar/effect/TextEffectPropertyPanel.hxx new file mode 100644 index 000000000000..5966d407b055 --- /dev/null +++ b/svx/source/sidebar/effect/TextEffectPropertyPanel.hxx @@ -0,0 +1,58 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#ifndef INCLUDED_SVX_SOURCE_SIDEBAR_EFFECT_TEXTEFFECTPROPERTYPANEL_HXX +#define INCLUDED_SVX_SOURCE_SIDEBAR_EFFECT_TEXTEFFECTPROPERTYPANEL_HXX + +#include <sfx2/sidebar/ControllerItem.hxx> +#include <sfx2/sidebar/PanelLayout.hxx> + +class ColorListBox; + +namespace svx::sidebar +{ +class TextEffectPropertyPanel : public PanelLayout, + public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface +{ +public: + TextEffectPropertyPanel(weld::Widget* pParent, SfxBindings* pBindings); + virtual ~TextEffectPropertyPanel() override; + + static std::unique_ptr<PanelLayout> Create(weld::Widget* pParent, SfxBindings* pBindings); + + virtual void NotifyItemUpdate(const sal_uInt16 nSId, const SfxItemState eState, + const SfxPoolItem* pState) override; + + virtual void GetControlState(const sal_uInt16 /*nSId*/, + boost::property_tree::ptree& /*rState*/) override{}; + +private: + sfx2::sidebar::ControllerItem maTGlowColorController; + sfx2::sidebar::ControllerItem maTGlowRadiusController; + sfx2::sidebar::ControllerItem maTGlowTransparencyController; + std::unique_ptr<weld::Label> mxFTTTransparency; + + SfxBindings* mpBindings; + + std::unique_ptr<weld::MetricSpinButton> mxTGlowRadius; + std::unique_ptr<ColorListBox> mxLBTGlowColor; + std::unique_ptr<weld::MetricSpinButton> mxTGlowTransparency; + std::unique_ptr<weld::Label> mxFTTColor; + + void Initialize(); + void UpdateControls(); + + DECL_LINK(ModifyTGlowColorHdl, ColorListBox&, void); + DECL_LINK(ModifyTGlowRadiusHdl, weld::MetricSpinButton&, void); + DECL_LINK(ModifyTGlowTransparencyHdl, weld::MetricSpinButton&, void); +}; +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/svdraw/svdattr.cxx b/svx/source/svdraw/svdattr.cxx index cb6c197dfcd4..ab052e912031 100644 --- a/svx/source/svdraw/svdattr.cxx +++ b/svx/source/svdraw/svdattr.cxx @@ -429,6 +429,10 @@ static ItemInfoPackage& getItemInfoPackageSdr() { SDRATTR_SOFTEDGE_RADIUS, new SdrMetricItem(SDRATTR_SOFTEDGE_RADIUS, 0), SID_ATTR_SOFTEDGE_RADIUS, SFX_ITEMINFOFLAG_NONE }, + { SDRATTR_GLOW_TEXT_RADIUS, new SdrMetricItem(SDRATTR_GLOW_TEXT_RADIUS, 0), SID_ATTR_GLOW_TEXT_RADIUS, SFX_ITEMINFOFLAG_NONE }, + { SDRATTR_GLOW_TEXT_COLOR, new XColorItem(SDRATTR_GLOW_TEXT_COLOR, COL_BLACK), SID_ATTR_GLOW_TEXT_COLOR, SFX_ITEMINFOFLAG_NONE }, + { SDRATTR_GLOW_TEXT_TRANSPARENCY, new SdrPercentItem(SDRATTR_GLOW_TEXT_TRANSPARENCY, 0), SID_ATTR_GLOW_TEXT_TRANSPARENCY, SFX_ITEMINFOFLAG_NONE }, + { SDRATTR_TEXTCOLUMNS_NUMBER, new SfxInt16Item(SDRATTR_TEXTCOLUMNS_NUMBER, 1), 0, SFX_ITEMINFOFLAG_NONE }, { SDRATTR_TEXTCOLUMNS_SPACING, new SdrMetricItem(SDRATTR_TEXTCOLUMNS_SPACING, 0), 0, SFX_ITEMINFOFLAG_NONE }, @@ -603,6 +607,10 @@ OUString SdrItemPool::GetItemName(sal_uInt16 nWhich) case SDRATTR_GLOW_COLOR : pResId = SIP_SA_GLOW_COLOR;break; case SDRATTR_GLOW_TRANSPARENCY : pResId = SIP_SA_GLOW_TRANSPARENCY;break; + case SDRATTR_GLOW_TEXT_RADIUS : pResId = SIP_SA_GLOW_TEXT_RADIUS; break; + case SDRATTR_GLOW_TEXT_COLOR : pResId = SIP_SA_GLOW_TEXT_COLOR; break; + case SDRATTR_GLOW_TEXT_TRANSPARENCY : pResId = SIP_SA_GLOW_TEXT_TRANSPARENCY; break; + case SDRATTR_SOFTEDGE_RADIUS : pResId = SIP_SA_SOFTEDGE_RADIUS; break; case SDRATTR_CAPTIONTYPE : pResId = SIP_SA_CAPTIONTYPE;break; diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx index 6d0d1a57ad76..fd6315976a5e 100644 --- a/svx/source/svdraw/svdedxv.cxx +++ b/svx/source/svdraw/svdedxv.cxx @@ -2900,7 +2900,8 @@ static const WhichRangesContainer& GetFormatRangeImpl(bool bTextOnly, bool withP SDRATTR_MISC_LAST, // table cell formats SDRATTR_GRAF_FIRST, SDRATTR_GRAF_LAST, SDRATTR_TABLE_FIRST, SDRATTR_TABLE_LAST, SDRATTR_GLOW_FIRST, SDRATTR_GLOW_LAST, SDRATTR_SOFTEDGE_FIRST, - SDRATTR_SOFTEDGE_LAST, EE_PARA_START, EE_PARA_END, EE_CHAR_START, EE_CHAR_END>); + SDRATTR_SOFTEDGE_LAST, SDRATTR_GLOW_TEXT_FIRST, SDRATTR_GLOW_TEXT_LAST, + EE_PARA_START, EE_PARA_END, EE_CHAR_START, EE_CHAR_END>); static const WhichRangesContainer gTextOnly( svl::Items<SDRATTR_MISC_FIRST, SDRATTR_MISC_LAST, EE_CHAR_START, EE_CHAR_END>); diff --git a/svx/source/unodraw/unoprov.cxx b/svx/source/unodraw/unoprov.cxx index 356894621c0a..6b88355a88b8 100644 --- a/svx/source/unodraw/unoprov.cxx +++ b/svx/source/unodraw/unoprov.cxx @@ -65,6 +65,7 @@ static std::span<SfxItemPropertyMapEntry const> ImplGetSvxShapePropertyMap() LINKTARGET_PROPERTIES GLOW_PROPERTIES SOFTEDGE_PROPERTIES + GLOW_TEXT_PROPERTIES SHADOW_PROPERTIES TEXT_PROPERTIES // #FontWork# @@ -89,6 +90,7 @@ static std::span<SfxItemPropertyMapEntry const> ImplGetSvxTextShapePropertyMap() LINKTARGET_PROPERTIES GLOW_PROPERTIES SOFTEDGE_PROPERTIES + GLOW_TEXT_PROPERTIES SHADOW_PROPERTIES TEXT_PROPERTIES // #FontWork# @@ -114,6 +116,7 @@ static std::span<SfxItemPropertyMapEntry const> ImplGetSvxConnectorPropertyMap() LINKTARGET_PROPERTIES GLOW_PROPERTIES SOFTEDGE_PROPERTIES + GLOW_TEXT_PROPERTIES SHADOW_PROPERTIES TEXT_PROPERTIES // #FontWork# @@ -139,6 +142,7 @@ static std::span<SfxItemPropertyMapEntry const> ImplGetSvxDimensioningPropertyMa LINKTARGET_PROPERTIES GLOW_PROPERTIES SOFTEDGE_PROPERTIES + GLOW_TEXT_PROPERTIES SHADOW_PROPERTIES TEXT_PROPERTIES // #FontWork# @@ -164,6 +168,7 @@ static std::span<SfxItemPropertyMapEntry const> ImplGetSvxCirclePropertyMap() LINKTARGET_PROPERTIES GLOW_PROPERTIES SOFTEDGE_PROPERTIES + GLOW_TEXT_PROPERTIES SHADOW_PROPERTIES TEXT_PROPERTIES // #FontWork# @@ -191,6 +196,7 @@ static std::span<SfxItemPropertyMapEntry const> ImplGetSvxPolyPolygonPropertyMap LINKTARGET_PROPERTIES GLOW_PROPERTIES SOFTEDGE_PROPERTIES + GLOW_TEXT_PROPERTIES SHADOW_PROPERTIES TEXT_PROPERTIES // #FontWork# @@ -221,6 +227,7 @@ static std::span<SfxItemPropertyMapEntry const> ImplGetSvxGraphicObjectPropertyM LINKTARGET_PROPERTIES GLOW_PROPERTIES SOFTEDGE_PROPERTIES + GLOW_TEXT_PROPERTIES SHADOW_PROPERTIES TEXT_PROPERTIES // #FontWork# @@ -366,6 +373,7 @@ static std::span<SfxItemPropertyMapEntry const> ImplGetSvxAllPropertyMap() { GLOW_PROPERTIES SOFTEDGE_PROPERTIES + GLOW_TEXT_PROPERTIES SHADOW_PROPERTIES LINE_PROPERTIES LINE_PROPERTIES_START_END @@ -428,6 +436,7 @@ static std::span<SfxItemPropertyMapEntry const> ImplGetSvxOle2PropertyMap() LINKTARGET_PROPERTIES GLOW_PROPERTIES SOFTEDGE_PROPERTIES + GLOW_TEXT_PROPERTIES SHADOW_PROPERTIES TEXT_PROPERTIES FONTWORK_PROPERTIES @@ -682,6 +691,7 @@ static std::span<SfxItemPropertyMapEntry const> ImplGetSvxCustomShapePropertyMap LINKTARGET_PROPERTIES GLOW_PROPERTIES SOFTEDGE_PROPERTIES + GLOW_TEXT_PROPERTIES SHADOW_PROPERTIES TEXT_PROPERTIES {u"UserDefinedAttributes"_ustr, SDRATTR_XMLATTRIBUTES, cppu::UnoType<css::container::XNameContainer>::get(), 0, 0}, @@ -764,6 +774,7 @@ static std::span<comphelper::PropertyMapEntry const> ImplGetSvxDrawingDefaultsPr { GLOW_PROPERTIES SOFTEDGE_PROPERTIES + GLOW_TEXT_PROPERTIES SHADOW_PROPERTIES LINE_PROPERTIES_DEFAULTS FILL_PROPERTIES_BMP diff --git a/svx/uiconfig/ui/sidebartexteffect.ui b/svx/uiconfig/ui/sidebartexteffect.ui new file mode 100644 index 000000000000..e6484fc3d4fa --- /dev/null +++ b/svx/uiconfig/ui/sidebartexteffect.ui @@ -0,0 +1,135 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.38.2 --> +<interface domain="svx"> + <requires lib="gtk+" version="3.20"/> + <object class="GtkAdjustment" id="adjustment1"> + <property name="upper">150</property> + <property name="step-increment">1</property> + <property name="page-increment">10</property> + </object> + <object class="GtkAdjustment" id="adjustment2"> + <property name="upper">100</property> + <property name="step-increment">1</property> + <property name="page-increment">10</property> + </object> + <!-- n-columns=1 n-rows=1 --> + <object class="GtkGrid" id="TextEffectPropertyPanel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <child> + <!-- n-columns=2 n-rows=4 --> + <object class="GtkGrid" id="grid1"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="hexpand">True</property> + <property name="border-width">6</property> + <property name="row-spacing">3</property> + <property name="column-spacing">6</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes" context="sidebartextglow|glow">Text Glow</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="left-attach">0</property> + <property name="top-attach">0</property> + <property name="width">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="radiustextglow"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="sidebartextglow|radius">Radius:</property> + <property name="use-underline">True</property> + <property name="mnemonic-widget">LB_GLOW_TEXT_RADIUS</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left-attach">0</property> + <property name="top-attach">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="glowtextcolorlabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="sidebartextglow|color">Color:</property> + <property name="use-underline">True</property> + <property name="mnemonic-widget">LB_GLOW_TEXT_COLOR</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left-attach">0</property> + <property name="top-attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="texttransparency"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="sidebartextglow|transparency">Transparency:</property> + <property name="use-underline">True</property> + <property name="mnemonic-widget">LB_GLOW_TEXT_TRANSPARENCY</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left-attach">0</property> + <property name="top-attach">3</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="LB_GLOW_TEXT_RADIUS"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="hexpand">True</property> + <property name="truncate-multiline">True</property> + <property name="adjustment">adjustment1</property> + </object> + <packing> + <property name="left-attach">1</property> + <property name="top-attach">1</property> + </packing> + </child> + <child> + <object class="GtkMenuButton" id="LB_GLOW_TEXT_COLOR"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> + <property name="valign">center</property> + <property name="xalign">0</property> + <property name="draw-indicator">True</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="left-attach">1</property> + <property name="top-attach">2</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="LB_GLOW_TEXT_TRANSPARENCY"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="truncate-multiline">True</property> + <property name="adjustment">adjustment2</property> + </object> + <packing> + <property name="left-attach">1</property> + <property name="top-attach">3</property> + </packing> + </child> + </object> + <packing> + <property name="left-attach">0</property> + <property name="top-attach">0</property> + </packing> + </child> + </object> +</interface> |