tdf#49247: add sidebar panel for soft edges effect

Shapes are handled in all modules; images only in draw/impress (TODO).

Change-Id: Ib96eb4c36fdb69dd605f9b5a507f67a279797286
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94162
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
This commit is contained in:
Mike Kaganski 2020-05-14 00:45:28 +03:00
parent 188aa42a25
commit fcb945e37d
14 changed files with 303 additions and 0 deletions

View File

@ -561,6 +561,32 @@
</prop>
</node>
<node oor:name="SoftEdgePropertyPanel" oor:op="replace">
<prop oor:name="Title" oor:type="xs:string">
<value xml:lang="en-US">Soft Edge</value>
</prop>
<prop oor:name="Id" oor:type="xs:string">
<value>SoftEdgePropertyPanel</value>
</prop>
<prop oor:name="DeckId" oor:type="xs:string">
<value>PropertyDeck</value>
</prop>
<prop oor:name="ContextList">
<value oor:separator=";">
Calc, Draw, hidden ;
DrawImpress, Draw, hidden ;
DrawImpress, Graphic, hidden ;
WriterVariants, Draw, hidden ;
</value>
</prop>
<prop oor:name="ImplementationURL" oor:type="xs:string">
<value>private:resource/toolpanel/SvxPanelFactory/SoftEdgePropertyPanel</value>
</prop>
<prop oor:name="OrderIndex" oor:type="xs:int">
<value>300</value>
</prop>
</node>
<node oor:name="ShadowPropertyPanel" oor:op="replace">
<prop oor:name="Title" oor:type="xs:string">
<value xml:lang="en-US">Shadow</value>

View File

@ -230,6 +230,8 @@ interface TableDraw
SID_ATTR_GLOW_RADIUS [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ]
SID_ATTR_GLOW_TRANSPARENCY [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ]
SID_ATTR_SOFTEDGE_RADIUS [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ]
}

View File

@ -392,6 +392,8 @@ void ScDrawShell::ExecDrawAttr( SfxRequest& rReq )
case SID_ATTR_GLOW:
case SID_ATTR_GLOW_COLOR:
case SID_ATTR_GLOW_RADIUS:
case SID_ATTR_GLOW_TRANSPARENCY:
case SID_ATTR_SOFTEDGE_RADIUS:
if (const SfxItemSet* pNewArgs = rReq.GetArgs())
pView->SetAttrToMarked(*pNewArgs, false);
rReq.Done();

View File

@ -2880,5 +2880,10 @@ interface DrawView
ExecMethod = FuTemporary;
StateMethod = GetAttrState;
]
SID_ATTR_SOFTEDGE_RADIUS
[
ExecMethod = FuTemporary;
StateMethod = GetAttrState;
]
}

View File

@ -3474,6 +3474,7 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
case SID_ATTR_GLOW_COLOR:
case SID_ATTR_GLOW_RADIUS:
case SID_ATTR_GLOW_TRANSPARENCY:
case SID_ATTR_SOFTEDGE_RADIUS:
if (const SfxItemSet* pNewArgs = rReq.GetArgs())
mpDrawView->SetAttributes(*pNewArgs);
rReq.Done();

View File

@ -441,6 +441,7 @@ void DrawViewShell::GetAttrState( SfxItemSet& rSet )
case SID_ATTR_GLOW_COLOR:
case SID_ATTR_GLOW_RADIUS:
case SID_ATTR_GLOW_TRANSPARENCY:
case SID_ATTR_SOFTEDGE_RADIUS:
case SID_SET_SUB_SCRIPT:
case SID_SET_SUPER_SCRIPT:
{

View File

@ -198,6 +198,7 @@ $(eval $(call gb_Library_add_exception_objects,svx,\
svx/source/sidebar/area/AreaPropertyPanelBase \
svx/source/sidebar/area/AreaTransparencyGradientPopup \
svx/source/sidebar/glow/GlowPropertyPanel \
svx/source/sidebar/softedge/SoftEdgePropertyPanel \
svx/source/sidebar/shadow/ShadowPropertyPanel \
svx/source/sidebar/graphic/GraphicPropertyPanel \
svx/source/sidebar/line/LinePropertyPanel \

View File

@ -119,6 +119,7 @@ $(eval $(call gb_UIConfig_add_uifiles,svx,\
svx/uiconfig/ui/sidebarempty \
svx/uiconfig/ui/sidebarglow \
svx/uiconfig/ui/sidebarshadow \
svx/uiconfig/ui/sidebarsoftedge \
svx/uiconfig/ui/sidebargallery \
svx/uiconfig/ui/sidebargraphic \
svx/uiconfig/ui/sidebarline \

View File

@ -12321,3 +12321,20 @@ SdrPercentItem GlowTransparency SID_ATTR_GLOW_TRANSPARENCY
ToolBoxConfig = FALSE,
GroupId = SfxGroupId::Document;
]
SdrMetricItem SoftEdgeRad SID_ATTR_SOFTEDGE_RADIUS
[
AutoUpdate = TRUE,
FastCall = FALSE,
ReadOnlyDoc = FALSE,
Toggle = FALSE,
Container = FALSE,
RecordAbsolute = FALSE,
RecordPerSet;
AccelConfig = FALSE,
MenuConfig = FALSE,
ToolBoxConfig = FALSE,
GroupId = SfxGroupId::Document;
]

View File

@ -26,6 +26,7 @@
#include "area/AreaPropertyPanel.hxx"
#include "glow/GlowPropertyPanel.hxx"
#include "shadow/ShadowPropertyPanel.hxx"
#include "softedge/SoftEdgePropertyPanel.hxx"
#include "graphic/GraphicPropertyPanel.hxx"
#include "line/LinePropertyPanel.hxx"
#include "possize/PosSizePropertyPanel.hxx"
@ -147,6 +148,10 @@ Reference<ui::XUIElement> SAL_CALL PanelFactory::createUIElement (
{
pControl = ShadowPropertyPanel::Create(pParentWindow, xFrame, pBindings);
}
else if (rsResourceURL.endsWith("/SoftEdgePropertyPanel"))
{
pControl = SoftEdgePropertyPanel::Create(pParentWindow, xFrame, pBindings);
}
else if (rsResourceURL.endsWith("/GraphicPropertyPanel"))
{
pControl = GraphicPropertyPanel::Create(pParentWindow, xFrame, pBindings);

View File

@ -0,0 +1,96 @@
/* -*- 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 "SoftEdgePropertyPanel.hxx"
#include <sfx2/dispatch.hxx>
#include <svx/sdmetitm.hxx>
#include <svx/svddef.hxx>
#include <svx/svxids.hrc>
#include <svx/xcolit.hxx>
namespace svx::sidebar
{
SoftEdgePropertyPanel::SoftEdgePropertyPanel(vcl::Window* pParent,
const css::uno::Reference<css::frame::XFrame>& rxFrame,
SfxBindings* pBindings)
: PanelLayout(pParent, "SoftEdgePropertyPanel", "svx/ui/sidebarsoftedge.ui", rxFrame)
, maSoftEdgeRadiusController(SID_ATTR_SOFTEDGE_RADIUS, *pBindings, *this)
, mpBindings(pBindings)
, mxSoftEdgeRadius(m_xBuilder->weld_metric_spin_button("SB_SOFTEDGE_RADIUS", FieldUnit::POINT))
, mxFTRadius(m_xBuilder->weld_label("radius"))
{
Initialize();
}
SoftEdgePropertyPanel::~SoftEdgePropertyPanel() { disposeOnce(); }
void SoftEdgePropertyPanel::dispose()
{
mxFTRadius.reset();
mxSoftEdgeRadius.reset();
maSoftEdgeRadiusController.dispose();
PanelLayout::dispose();
}
void SoftEdgePropertyPanel::Initialize()
{
mxSoftEdgeRadius->connect_value_changed(
LINK(this, SoftEdgePropertyPanel, ModifySoftEdgeRadiusHdl));
}
IMPL_LINK_NOARG(SoftEdgePropertyPanel, ModifySoftEdgeRadiusHdl, weld::MetricSpinButton&, void)
{
SdrMetricItem aItem(SDRATTR_SOFTEDGE_RAD, mxSoftEdgeRadius->get_value(FieldUnit::MM_100TH));
mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_SOFTEDGE_RADIUS, SfxCallMode::RECORD,
{ &aItem });
}
void SoftEdgePropertyPanel::NotifyItemUpdate(sal_uInt16 nSID, SfxItemState eState,
const SfxPoolItem* pState)
{
switch (nSID)
{
case SID_ATTR_SOFTEDGE_RADIUS:
{
if (eState >= SfxItemState::DEFAULT)
{
const SdrMetricItem* pRadiusItem = dynamic_cast<const SdrMetricItem*>(pState);
if (pRadiusItem)
{
mxSoftEdgeRadius->set_value(pRadiusItem->GetValue(), FieldUnit::MM_100TH);
}
}
}
break;
}
}
VclPtr<vcl::Window>
SoftEdgePropertyPanel::Create(vcl::Window* pParent,
const css::uno::Reference<css::frame::XFrame>& rxFrame,
SfxBindings* pBindings)
{
if (pParent == nullptr)
throw css::lang::IllegalArgumentException(
"no parent Window given to SoftEdgePropertyPanel::Create", nullptr, 0);
if (!rxFrame.is())
throw css::lang::IllegalArgumentException(
"no XFrame given to SoftEdgePropertyPanel::Create", nullptr, 1);
if (pBindings == nullptr)
throw css::lang::IllegalArgumentException(
"no SfxBindings given to SoftEdgePropertyPanel::Create", nullptr, 2);
return VclPtr<SoftEdgePropertyPanel>::Create(pParent, rxFrame, pBindings);
}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@ -0,0 +1,56 @@
/* -*- 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_SOFTEDGE_SOFTEDGEPROPERTYPANEL_HXX
#define INCLUDED_SVX_SOURCE_SIDEBAR_SOFTEDGE_SOFTEDGEPROPERTYPANEL_HXX
#include <vcl/vclptr.hxx>
#include <sfx2/sidebar/ControllerItem.hxx>
#include <sfx2/sidebar/PanelLayout.hxx>
class ColorListBox;
namespace svx::sidebar
{
class SoftEdgePropertyPanel : public PanelLayout,
public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface
{
public:
SoftEdgePropertyPanel(vcl::Window* pParent,
const css::uno::Reference<css::frame::XFrame>& rxFrame,
SfxBindings* pBindings);
virtual ~SoftEdgePropertyPanel() override;
virtual void dispose() override;
static VclPtr<vcl::Window> Create(vcl::Window* pParent,
const css::uno::Reference<css::frame::XFrame>& rxFrame,
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 maSoftEdgeRadiusController;
SfxBindings* mpBindings;
std::unique_ptr<weld::MetricSpinButton> mxSoftEdgeRadius;
std::unique_ptr<weld::Label> mxFTRadius;
void Initialize();
DECL_LINK(ModifySoftEdgeRadiusHdl, weld::MetricSpinButton&, void);
};
}
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface domain="svx">
<requires lib="gtk+" version="3.18"/>
<object class="GtkAdjustment" id="adjustment1">
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkGrid" id="SoftEdgePropertyPanel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkGrid" id="grid3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="border_width">6</property>
<child>
<object class="GtkBox" id="box2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="row_spacing">6</property>
<property name="column_spacing">6</property>
<child>
<object class="GtkLabel" id="radius">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="sidebarsoftedge|radius">Radius:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">SB_SOFTEDGE_RADIUS</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="SB_SOFTEDGE_RADIUS">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="adjustment">adjustment1</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
</object>
</interface>

View File

@ -216,6 +216,14 @@ interface TextDraw : TextDrawBase
DisableFlags="SfxDisableFlags::SwOnProtectedCursor";
]
SID_ATTR_SOFTEDGE_RADIUS
[
Export = FALSE;
ExecMethod = ExecDrawAttrArgs ;
StateMethod = GetDrawAttrState ;
DisableFlags="SfxDisableFlags::SwOnProtectedCursor";
]
SID_ATTRIBUTES_LINE
[
ExecMethod = ExecDrawDlg ;