Add UI for blur radius in shadow panel
Update shadow property panel with spin button to control blur radius of the shadow.
Change-Id: I5856e86a7963682c81d9e53a1bef857aba2f3c21
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98718
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
diff --git a/sc/sdi/drawsh.sdi b/sc/sdi/drawsh.sdi
index b29cf20d..9abf961 100644
--- a/sc/sdi/drawsh.sdi
+++ b/sc/sdi/drawsh.sdi
@@ -75,6 +75,8 @@ interface TableDraw
[ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ]
SID_ATTR_SHADOW_TRANSPARENCE
[ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ]
SID_ATTR_SHADOW_BLUR
[ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ]
SID_ATTR_SHADOW_XDISTANCE
[ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ]
SID_ATTR_SHADOW_YDISTANCE
diff --git a/sd/sdi/_drvwsh.sdi b/sd/sdi/_drvwsh.sdi
index 6d5d574..63f956e 100644
--- a/sd/sdi/_drvwsh.sdi
+++ b/sd/sdi/_drvwsh.sdi
@@ -1829,6 +1829,11 @@ interface DrawView
ExecMethod = FuTemporary ;
StateMethod = GetAttrState ;
]
SID_ATTR_SHADOW_BLUR
[
ExecMethod = FuTemporary ;
StateMethod = GetAttrState ;
]
SID_ATTR_SHADOW_XDISTANCE
[
ExecMethod = FuTemporary;
diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx
index 16a31a5..322829a 100644
--- a/sd/source/ui/view/drviews2.cxx
+++ b/sd/source/ui/view/drviews2.cxx
@@ -666,6 +666,7 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
case SID_ATTR_FILL_SHADOW:
case SID_ATTR_SHADOW_COLOR:
case SID_ATTR_SHADOW_TRANSPARENCE:
case SID_ATTR_SHADOW_BLUR:
case SID_ATTR_SHADOW_XDISTANCE:
case SID_ATTR_SHADOW_YDISTANCE:
case SID_ATTR_FILL_TRANSPARENCE:
@@ -698,6 +699,7 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
case SID_ATTR_FILL_SHADOW:
case SID_ATTR_SHADOW_COLOR:
case SID_ATTR_SHADOW_TRANSPARENCE:
case SID_ATTR_SHADOW_BLUR:
case SID_ATTR_SHADOW_XDISTANCE:
case SID_ATTR_SHADOW_YDISTANCE:
case SID_ATTR_FILL_STYLE:
diff --git a/sd/source/ui/view/drviewsf.cxx b/sd/source/ui/view/drviewsf.cxx
index bcaea40..4446bb6 100644
--- a/sd/source/ui/view/drviewsf.cxx
+++ b/sd/source/ui/view/drviewsf.cxx
@@ -413,6 +413,7 @@ void DrawViewShell::GetAttrState( SfxItemSet& rSet )
case SID_ATTR_FILL_SHADOW:
case SID_ATTR_SHADOW_COLOR:
case SID_ATTR_SHADOW_TRANSPARENCE:
case SID_ATTR_SHADOW_BLUR:
case SID_ATTR_SHADOW_XDISTANCE:
case SID_ATTR_SHADOW_YDISTANCE:
case SID_ATTR_FILL_TRANSPARENCE:
diff --git a/svx/sdi/svx.sdi b/svx/sdi/svx.sdi
index b7d5283fcb..b647dbe 100644
--- a/svx/sdi/svx.sdi
+++ b/svx/sdi/svx.sdi
@@ -7708,6 +7708,23 @@ SdrPercentItem FillShadowTransparency SID_ATTR_SHADOW_TRANSPARENCE
GroupId = SfxGroupId::Document;
]
SdrMetricItem ShadowBlur SID_ATTR_SHADOW_BLUR
[
AutoUpdate = TRUE,
FastCall = FALSE,
ReadOnlyDoc = FALSE,
Toggle = FALSE,
Container = FALSE,
RecordAbsolute = FALSE,
RecordPerSet;
AccelConfig = FALSE,
MenuConfig = FALSE,
ToolBoxConfig = FALSE,
GroupId = SfxGroupId::Document;
]
SdrMetricItem FillShadowXDistance SID_ATTR_SHADOW_XDISTANCE
[
diff --git a/svx/source/sidebar/shadow/ShadowPropertyPanel.cxx b/svx/source/sidebar/shadow/ShadowPropertyPanel.cxx
index 4fec06b..0d69afa 100644
--- a/svx/source/sidebar/shadow/ShadowPropertyPanel.cxx
+++ b/svx/source/sidebar/shadow/ShadowPropertyPanel.cxx
@@ -34,6 +34,7 @@ ShadowPropertyPanel::ShadowPropertyPanel(
: PanelLayout(pParent, "ShadowPropertyPanel", "svx/ui/sidebarshadow.ui", rxFrame),
maShadowController(SID_ATTR_FILL_SHADOW, *pBindings, *this),
maShadowTransController(SID_ATTR_SHADOW_TRANSPARENCE, *pBindings, *this),
maShadowBlurController(SID_ATTR_SHADOW_BLUR, *pBindings, *this),
maShadowColorController(SID_ATTR_SHADOW_COLOR, *pBindings, *this),
maShadowXDistanceController(SID_ATTR_SHADOW_XDISTANCE, *pBindings, *this),
maShadowYDistanceController(SID_ATTR_SHADOW_YDISTANCE, *pBindings, *this),
@@ -48,9 +49,11 @@ ShadowPropertyPanel::ShadowPropertyPanel(
mxFTAngle(m_xBuilder->weld_label("angle")),
mxFTDistance(m_xBuilder->weld_label("distance")),
mxFTTransparency(m_xBuilder->weld_label("transparency_label")),
mxFTBlur(m_xBuilder->weld_label("blur_label")),
mxFTColor(m_xBuilder->weld_label("color")),
mxShadowTransSlider(m_xBuilder->weld_scale("transparency_slider")),
mxShadowTransMetric(m_xBuilder->weld_metric_spin_button("FIELD_TRANSPARENCY", FieldUnit::PERCENT))
mxShadowTransMetric(m_xBuilder->weld_metric_spin_button("FIELD_TRANSPARENCY", FieldUnit::PERCENT)),
mxShadowBlurMetric(m_xBuilder->weld_metric_spin_button("LB_SHADOW_BLUR", FieldUnit::POINT))
{
Initialize();
}
@@ -70,11 +73,14 @@ void ShadowPropertyPanel::dispose()
mxFTTransparency.reset();
mxShadowTransSlider.reset();
mxShadowTransMetric.reset();
mxShadowBlurMetric.reset();
mxFTBlur.reset();
mxFTColor.reset();
mxLBShadowColor.reset();
maShadowController.dispose();
maShadowTransController.dispose();
maShadowBlurController.dispose();
maShadowColorController.dispose();
maShadowXDistanceController.dispose();
maShadowYDistanceController.dispose();
@@ -91,6 +97,8 @@ void ShadowPropertyPanel::Initialize()
mxShadowDistance->connect_value_changed( LINK(this, ShadowPropertyPanel, ModifyShadowDistanceHdl) );
mxShadowTransSlider->set_range(0, 100);
mxShadowTransSlider->connect_value_changed( LINK(this, ShadowPropertyPanel, ModifyShadowTransSliderHdl) );
mxShadowBlurMetric->set_range(0, 150, FieldUnit::POINT);
mxShadowBlurMetric->connect_value_changed(LINK(this, ShadowPropertyPanel, ModifyShadowBlurMetricHdl));
InsertAngleValues();
}
@@ -126,6 +134,13 @@ IMPL_LINK_NOARG(ShadowPropertyPanel, ModifyShadowTransMetricHdl, weld::MetricSpi
SfxCallMode::RECORD, { &aItem });
}
IMPL_LINK_NOARG(ShadowPropertyPanel, ModifyShadowBlurMetricHdl, weld::MetricSpinButton&, void)
{
SdrMetricItem aItem(SDRATTR_SHADOWBLUR, mxShadowBlurMetric->get_value(FieldUnit::MM_100TH));
mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_SHADOW_BLUR, SfxCallMode::RECORD, { &aItem });
}
IMPL_LINK_NOARG(ShadowPropertyPanel, ModifyShadowTransSliderHdl, weld::Scale&, void)
{
sal_uInt16 nVal = mxShadowTransSlider->get_value();
@@ -178,9 +193,12 @@ void ShadowPropertyPanel::UpdateControls()
mxFTAngle->set_sensitive(false);
mxFTDistance->set_sensitive(false);
mxFTTransparency->set_sensitive(false);
mxFTBlur->set_sensitive(false);
mxFTColor->set_sensitive(false);
mxShadowTransSlider->set_sensitive(false);
mxShadowTransMetric->set_sensitive(false);
mxShadowBlurMetric->set_sensitive(false);
return;
}
else
@@ -191,9 +209,11 @@ void ShadowPropertyPanel::UpdateControls()
mxFTAngle->set_sensitive(true);
mxFTDistance->set_sensitive(true);
mxFTTransparency->set_sensitive(true);
mxFTBlur->set_sensitive(true);
mxFTColor->set_sensitive(true);
mxShadowTransSlider->set_sensitive(true);
mxShadowTransMetric->set_sensitive(true);
mxShadowBlurMetric->set_sensitive(true);
}
if(nX > 0 && nY == 0) { mxShadowAngle->set_active(0); nXY = nX; }
@@ -274,7 +294,18 @@ void ShadowPropertyPanel::NotifyItemUpdate(
}
}
break;
case SID_ATTR_SHADOW_BLUR:
{
if (eState >= SfxItemState::DEFAULT)
{
const SdrMetricItem* pRadiusItem = dynamic_cast<const SdrMetricItem*>(pState);
if (pRadiusItem)
{
mxShadowBlurMetric->set_value(pRadiusItem->GetValue(), FieldUnit::MM_100TH);
}
}
}
break;
case SID_ATTR_SHADOW_COLOR:
{
if(eState >= SfxItemState::DEFAULT)
diff --git a/svx/source/sidebar/shadow/ShadowPropertyPanel.hxx b/svx/source/sidebar/shadow/ShadowPropertyPanel.hxx
index 8926058..e2540ac 100644
--- a/svx/source/sidebar/shadow/ShadowPropertyPanel.hxx
+++ b/svx/source/sidebar/shadow/ShadowPropertyPanel.hxx
@@ -54,6 +54,7 @@ public:
private:
::sfx2::sidebar::ControllerItem maShadowController;
::sfx2::sidebar::ControllerItem maShadowTransController;
::sfx2::sidebar::ControllerItem maShadowBlurController;
::sfx2::sidebar::ControllerItem maShadowColorController;
::sfx2::sidebar::ControllerItem maShadowXDistanceController;
::sfx2::sidebar::ControllerItem maShadowYDistanceController;
@@ -68,9 +69,11 @@ private:
std::unique_ptr<weld::Label> mxFTAngle;
std::unique_ptr<weld::Label> mxFTDistance;
std::unique_ptr<weld::Label> mxFTTransparency;
std::unique_ptr<weld::Label> mxFTBlur;
std::unique_ptr<weld::Label> mxFTColor;
std::unique_ptr<weld::Scale> mxShadowTransSlider;
std::unique_ptr<weld::MetricSpinButton> mxShadowTransMetric;
std::unique_ptr<weld::MetricSpinButton> mxShadowBlurMetric;
void InsertAngleValues();
void SetTransparencyValue(long);
@@ -83,6 +86,7 @@ private:
DECL_LINK(ModifyShadowAngleHdl, weld::ComboBox&, void);
DECL_LINK(ModifyShadowDistanceHdl, weld::MetricSpinButton&, void);
DECL_LINK(ModifyShadowTransSliderHdl, weld::Scale&, void);
DECL_LINK(ModifyShadowBlurMetricHdl, weld::MetricSpinButton&, void);
};
}
diff --git a/svx/uiconfig/ui/sidebarshadow.ui b/svx/uiconfig/ui/sidebarshadow.ui
index ad0d3fc..1369e0d 100644
--- a/svx/uiconfig/ui/sidebarshadow.ui
+++ b/svx/uiconfig/ui/sidebarshadow.ui
@@ -16,6 +16,11 @@
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkAdjustment" id="adjustment4">
<property name="lower">0</property>
<property name="upper">150</property>
<property name="step_increment">1</property>
</object>
<object class="GtkGrid" id="ShadowPropertyPanel">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -112,6 +117,32 @@
</packing>
</child>
<child>
<object class="GtkLabel" id="blur_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="sidebarshadow|blur_label">Blur:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">LB_SHADOW_BLUR</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_SHADOW_BLUR">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="adjustment">adjustment4</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="transparency_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -120,7 +151,7 @@
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">3</property>
<property name="top_attach">4</property>
</packing>
</child>
<child>