diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2020-05-06 16:13:48 +0300 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2020-05-06 17:30:27 +0200 |
commit | c1c67cca7de5714635bef88de943b6c2e519eddf (patch) | |
tree | 8911bc01834a39bdba3b645955bbc2fd48249b7b /svx | |
parent | 8fa958d7d7f454cbea83fdafdde295ffd960787e (diff) |
tdf#101181: support for transparency attribute of glow effect
Read/write support for ODF and OOXML (in ODF, loext:glow-transparency
attribute of style:graphic-properties has been added).
Added UI on glow sidebar panel.
Not used in actual painting yet.
Change-Id: I21b25d9c52c8611cd796f056374377ebf13cc2f6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93565
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'svx')
-rw-r--r-- | svx/sdi/svx.sdi | 17 | ||||
-rw-r--r-- | svx/source/sidebar/glow/GlowPropertyPanel.cxx | 31 | ||||
-rw-r--r-- | svx/source/sidebar/glow/GlowPropertyPanel.hxx | 4 | ||||
-rw-r--r-- | svx/source/svdraw/svdattr.cxx | 3 | ||||
-rw-r--r-- | svx/uiconfig/ui/sidebarglow.ui | 31 |
5 files changed, 86 insertions, 0 deletions
diff --git a/svx/sdi/svx.sdi b/svx/sdi/svx.sdi index f7925c5c376d..bf3b73f5ab78 100644 --- a/svx/sdi/svx.sdi +++ b/svx/sdi/svx.sdi @@ -12288,3 +12288,20 @@ SdrMetricItem GlowRadius SID_ATTR_GLOW_RADIUS ToolBoxConfig = FALSE, GroupId = SfxGroupId::Document; ] + +SdrPercentItem GlowTransparency SID_ATTR_GLOW_TRANSPARENCY + +[ + AutoUpdate = TRUE, + FastCall = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + + AccelConfig = FALSE, + MenuConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = SfxGroupId::Document; +] diff --git a/svx/source/sidebar/glow/GlowPropertyPanel.cxx b/svx/source/sidebar/glow/GlowPropertyPanel.cxx index 82df3ee5fe17..ef3a1951e128 100644 --- a/svx/source/sidebar/glow/GlowPropertyPanel.cxx +++ b/svx/source/sidebar/glow/GlowPropertyPanel.cxx @@ -15,6 +15,7 @@ #include <svx/colorbox.hxx> #include <svx/sdmetitm.hxx> #include <svx/sdooitm.hxx> +#include <svx/sdprcitm.hxx> #include <svx/svddef.hxx> #include <svx/svxids.hrc> #include <svx/xcolit.hxx> @@ -38,12 +39,16 @@ GlowPropertyPanel::GlowPropertyPanel(vcl::Window* pParent, , maGlowController(SID_ATTR_GLOW, *pBindings, *this) , maGlowColorController(SID_ATTR_GLOW_COLOR, *pBindings, *this) , maGlowRadiusController(SID_ATTR_GLOW_RADIUS, *pBindings, *this) + , maGlowTransparencyController(SID_ATTR_GLOW_TRANSPARENCY, *pBindings, *this) , mpBindings(pBindings) , mxShowGlow(m_xBuilder->weld_check_button("SHOW_GLOW")) , mxGlowRadius(m_xBuilder->weld_metric_spin_button("LB_GLOW_RADIUS", FieldUnit::POINT)) , mxLBGlowColor(new ColorListBox(m_xBuilder->weld_menu_button("LB_GLOW_COLOR"), GetFrameWeld())) + , mxGlowTransparency( + m_xBuilder->weld_metric_spin_button("LB_GLOW_TRANSPARENCY", FieldUnit::PERCENT)) , mxFTRadius(m_xBuilder->weld_label("radius")) , mxFTColor(m_xBuilder->weld_label("color")) + , mxFTTransparency(m_xBuilder->weld_label("transparency")) { Initialize(); } @@ -57,10 +62,13 @@ void GlowPropertyPanel::dispose() mxGlowRadius.reset(); mxFTColor.reset(); mxLBGlowColor.reset(); + mxFTTransparency.reset(); + mxGlowTransparency.reset(); maGlowController.dispose(); maGlowColorController.dispose(); maGlowRadiusController.dispose(); + maGlowTransparencyController.dispose(); PanelLayout::dispose(); } @@ -70,6 +78,8 @@ void GlowPropertyPanel::Initialize() mxShowGlow->connect_toggled(LINK(this, GlowPropertyPanel, ClickGlowHdl)); mxLBGlowColor->SetSelectHdl(LINK(this, GlowPropertyPanel, ModifyGlowColorHdl)); mxGlowRadius->connect_value_changed(LINK(this, GlowPropertyPanel, ModifyGlowRadiusHdl)); + mxGlowTransparency->connect_value_changed( + LINK(this, GlowPropertyPanel, ModifyGlowTransparencyHdl)); } IMPL_LINK_NOARG(GlowPropertyPanel, ClickGlowHdl, weld::ToggleButton&, void) @@ -90,13 +100,23 @@ IMPL_LINK_NOARG(GlowPropertyPanel, ModifyGlowRadiusHdl, weld::MetricSpinButton&, mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_GLOW_RADIUS, SfxCallMode::RECORD, { &aItem }); } +IMPL_LINK_NOARG(GlowPropertyPanel, ModifyGlowTransparencyHdl, weld::MetricSpinButton&, void) +{ + SdrPercentItem aItem(SDRATTR_GLOW_TRANSPARENCY, + mxGlowTransparency->get_value(FieldUnit::PERCENT)); + mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_GLOW_TRANSPARENCY, SfxCallMode::RECORD, + { &aItem }); +} + void GlowPropertyPanel::UpdateControls() { const bool bEnabled = mxShowGlow->get_state() != TRISTATE_FALSE; mxGlowRadius->set_sensitive(bEnabled); mxLBGlowColor->set_sensitive(bEnabled); + mxGlowTransparency->set_sensitive(bEnabled); mxFTRadius->set_sensitive(bEnabled); mxFTColor->set_sensitive(bEnabled); + mxFTTransparency->set_sensitive(bEnabled); } void GlowPropertyPanel::NotifyItemUpdate(sal_uInt16 nSID, SfxItemState eState, @@ -144,6 +164,17 @@ void GlowPropertyPanel::NotifyItemUpdate(sal_uInt16 nSID, SfxItemState eState, } } break; + case SID_ATTR_GLOW_TRANSPARENCY: + { + if (eState >= SfxItemState::DEFAULT) + { + if (auto pItem = dynamic_cast<const SdrPercentItem*>(pState)) + { + mxGlowTransparency->set_value(pItem->GetValue(), FieldUnit::PERCENT); + } + } + } + break; } UpdateControls(); } diff --git a/svx/source/sidebar/glow/GlowPropertyPanel.hxx b/svx/source/sidebar/glow/GlowPropertyPanel.hxx index 7cdf772cbf1a..233ec052e84c 100644 --- a/svx/source/sidebar/glow/GlowPropertyPanel.hxx +++ b/svx/source/sidebar/glow/GlowPropertyPanel.hxx @@ -40,14 +40,17 @@ private: sfx2::sidebar::ControllerItem maGlowController; sfx2::sidebar::ControllerItem maGlowColorController; sfx2::sidebar::ControllerItem maGlowRadiusController; + sfx2::sidebar::ControllerItem maGlowTransparencyController; SfxBindings* mpBindings; std::unique_ptr<weld::CheckButton> mxShowGlow; std::unique_ptr<weld::MetricSpinButton> mxGlowRadius; std::unique_ptr<ColorListBox> mxLBGlowColor; + std::unique_ptr<weld::MetricSpinButton> mxGlowTransparency; std::unique_ptr<weld::Label> mxFTRadius; std::unique_ptr<weld::Label> mxFTColor; + std::unique_ptr<weld::Label> mxFTTransparency; void Initialize(); void UpdateControls(); @@ -55,6 +58,7 @@ private: DECL_LINK(ClickGlowHdl, weld::ToggleButton&, void); DECL_LINK(ModifyGlowColorHdl, ColorListBox&, void); DECL_LINK(ModifyGlowRadiusHdl, weld::MetricSpinButton&, void); + DECL_LINK(ModifyGlowTransparencyHdl, weld::MetricSpinButton&, void); }; } diff --git a/svx/source/svdraw/svdattr.cxx b/svx/source/svdraw/svdattr.cxx index edf73df7e405..1b89cab1da13 100644 --- a/svx/source/svdraw/svdattr.cxx +++ b/svx/source/svdraw/svdattr.cxx @@ -331,6 +331,7 @@ SdrItemPool::SdrItemPool( rPoolDefaults[ SDRATTR_GLOW - SDRATTR_START ] = new SdrOnOffItem(SDRATTR_GLOW, false); rPoolDefaults[ SDRATTR_GLOW_RAD - SDRATTR_START ] = new SdrMetricItem(SDRATTR_GLOW_RAD, 0); rPoolDefaults[ SDRATTR_GLOW_COLOR - SDRATTR_START ] = new XColorItem(SDRATTR_GLOW_COLOR, aNullCol); + rPoolDefaults[ SDRATTR_GLOW_TRANSPARENCY - SDRATTR_START ] = new SdrPercentItem(SDRATTR_GLOW_TRANSPARENCY, 0); // set own ItemInfos mpLocalItemInfos[SDRATTR_SHADOW-SDRATTR_START]._nSID=SID_ATTR_FILL_SHADOW; @@ -349,6 +350,7 @@ SdrItemPool::SdrItemPool( mpLocalItemInfos[SDRATTR_GLOW - SDRATTR_START]._nSID = SID_ATTR_GLOW; mpLocalItemInfos[SDRATTR_GLOW_RAD - SDRATTR_START]._nSID = SID_ATTR_GLOW_RADIUS; mpLocalItemInfos[SDRATTR_GLOW_COLOR - SDRATTR_START]._nSID = SID_ATTR_GLOW_COLOR; + mpLocalItemInfos[SDRATTR_GLOW_TRANSPARENCY - SDRATTR_START]._nSID = SID_ATTR_GLOW_TRANSPARENCY; // it's my own creation level, set Defaults and ItemInfos SetDefaults(mpLocalPoolDefaults); @@ -459,6 +461,7 @@ OUString SdrItemPool::GetItemName(sal_uInt16 nWhich) case SDRATTR_GLOW : pResId = SIP_SA_GLOW;break; case SDRATTR_GLOW_RAD : pResId = SIP_SA_GLOW_RAD;break; case SDRATTR_GLOW_COLOR : pResId = SIP_SA_GLOW_COLOR;break; + case SDRATTR_GLOW_TRANSPARENCY : pResId = SIP_SA_GLOW_TRANSPARENCY;break; case SDRATTR_CAPTIONTYPE : pResId = SIP_SA_CAPTIONTYPE;break; case SDRATTR_CAPTIONFIXEDANGLE: pResId = SIP_SA_CAPTIONFIXEDANGLE;break; diff --git a/svx/uiconfig/ui/sidebarglow.ui b/svx/uiconfig/ui/sidebarglow.ui index cc3accb4f8fa..9580f9939591 100644 --- a/svx/uiconfig/ui/sidebarglow.ui +++ b/svx/uiconfig/ui/sidebarglow.ui @@ -6,6 +6,11 @@ <property name="step_increment">1</property> <property name="page_increment">10</property> </object> + <object class="GtkAdjustment" id="adjustment2"> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + <property name="upper">100</property> + </object> <object class="GtkGrid" id="GlowPropertyPanel"> <property name="visible">True</property> <property name="can_focus">False</property> @@ -88,6 +93,32 @@ </packing> </child> <child> + <object class="GtkLabel" id="transparency"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="sidebarglow|transparency">Transparency:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">LB_GLOW_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_TRANSPARENCY"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hexpand">True</property> + <property name="adjustment">adjustment2</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">3</property> + </packing> + </child> + <child> <placeholder/> </child> </object> |