[Libreoffice-commits] core.git: Branch 'libreoffice-6-1' - cui/source cui/uiconfig include/svx include/vcl svx/source

Caolán McNamara caolanm at redhat.com
Tue Jun 12 15:46:51 UTC 2018


 cui/source/inc/cuitabarea.hxx          |   65 +++---
 cui/source/tabpages/tptrans.cxx        |  352 +++++++++++++++------------------
 cui/uiconfig/ui/transparencytabpage.ui |  162 ++++++++++-----
 include/svx/dlgctrl.hxx                |   51 ++++
 include/vcl/customweld.hxx             |    1 
 svx/source/dialog/dlgctrl.cxx          |  149 +++++++++++++
 6 files changed, 511 insertions(+), 269 deletions(-)

New commits:
commit f8480defc137d0eb9f9cd20294909546c2cfc598
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Jun 12 11:22:15 2018 +0100

    weld SvxTransparenceTabPage
    
    Change-Id: If8c8a6cf74664f9acd360d877c57e8dd9de2f2b5
    Reviewed-on: https://gerrit.libreoffice.org/55694
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/cui/source/inc/cuitabarea.hxx b/cui/source/inc/cuitabarea.hxx
index da368bf460e0..7a72431bb9a5 100644
--- a/cui/source/inc/cuitabarea.hxx
+++ b/cui/source/inc/cuitabarea.hxx
@@ -146,42 +146,48 @@ class SvxTransparenceTabPage : public SvxTabPage
     PageType               nPageType;
     sal_uInt16             nDlgType;
 
+    bool                bBitmap;
+
+    XFillAttrSetItem    aXFillAttr;
+    SfxItemSet&         rXFSet;
+
+    XRectPreview     m_aCtlBitmapPreview;
+    XRectPreview     m_aCtlXRectPreview;
+
     // main selection
-    VclPtr<RadioButton>        m_pRbtTransOff;
-    VclPtr<RadioButton>        m_pRbtTransLinear;
-    VclPtr<RadioButton>        m_pRbtTransGradient;
+    std::unique_ptr<weld::RadioButton> m_xRbtTransOff;
+    std::unique_ptr<weld::RadioButton> m_xRbtTransLinear;
+    std::unique_ptr<weld::RadioButton> m_xRbtTransGradient;
 
     /// linear transparency
-    VclPtr<MetricField>        m_pMtrTransparent;
+    std::unique_ptr<weld::MetricSpinButton> m_xMtrTransparent;
 
     // gradient transparency
-    VclPtr<VclGrid>            m_pGridGradient;
-    VclPtr<ListBox>            m_pLbTrgrGradientType;
-    VclPtr<FixedText>          m_pFtTrgrCenterX;
-    VclPtr<MetricField>        m_pMtrTrgrCenterX;
-    VclPtr<FixedText>          m_pFtTrgrCenterY;
-    VclPtr<MetricField>        m_pMtrTrgrCenterY;
-    VclPtr<FixedText>          m_pFtTrgrAngle;
-    VclPtr<MetricField>        m_pMtrTrgrAngle;
-    VclPtr<MetricField>        m_pMtrTrgrBorder;
-    VclPtr<MetricField>        m_pMtrTrgrStartValue;
-    VclPtr<MetricField>        m_pMtrTrgrEndValue;
+    std::unique_ptr<weld::Widget> m_xGridGradient;
+    std::unique_ptr<weld::ComboBoxText> m_xLbTrgrGradientType;
+    std::unique_ptr<weld::Label> m_xFtTrgrCenterX;
+    std::unique_ptr<weld::MetricSpinButton> m_xMtrTrgrCenterX;
+    std::unique_ptr<weld::Label> m_xFtTrgrCenterY;
+    std::unique_ptr<weld::MetricSpinButton> m_xMtrTrgrCenterY;
+    std::unique_ptr<weld::Label> m_xFtTrgrAngle;
+    std::unique_ptr<weld::MetricSpinButton> m_xMtrTrgrAngle;
+    std::unique_ptr<weld::MetricSpinButton> m_xMtrTrgrBorder;
+    std::unique_ptr<weld::MetricSpinButton> m_xMtrTrgrStartValue;
+    std::unique_ptr<weld::MetricSpinButton> m_xMtrTrgrEndValue;
+    std::unique_ptr<weld::Widget> m_xCtlBitmapBorder;
+    std::unique_ptr<weld::Widget> m_xCtlXRectBorder;
 
     // preview
-    VclPtr<SvxXRectPreview>    m_pCtlBitmapPreview;
-    VclPtr<SvxXRectPreview>    m_pCtlXRectPreview;
-    bool                bBitmap;
-
-    XFillAttrSetItem    aXFillAttr;
-    SfxItemSet&         rXFSet;
+    std::unique_ptr<weld::CustomWeld> m_xCtlBitmapPreview;
+    std::unique_ptr<weld::CustomWeld> m_xCtlXRectPreview;
 
-    DECL_LINK(ClickTransOffHdl_Impl, Button*, void );
-    DECL_LINK(ClickTransLinearHdl_Impl, Button*, void );
-    DECL_LINK(ClickTransGradientHdl_Impl, Button*, void );
-    DECL_LINK(ModifyTransparentHdl_Impl, Edit&, void);
-    DECL_LINK(ModifiedTrgrEditHdl_Impl, Edit&, void);
-    DECL_LINK(ModifiedTrgrListBoxHdl_Impl, ListBox&, void);
-    void ModifiedTrgrHdl_Impl(void const *);
+    DECL_LINK(ClickTransOffHdl_Impl, weld::ToggleButton&, void);
+    DECL_LINK(ClickTransLinearHdl_Impl, weld::ToggleButton&, void);
+    DECL_LINK(ClickTransGradientHdl_Impl, weld::ToggleButton&, void );
+    DECL_LINK(ModifyTransparentHdl_Impl, weld::MetricSpinButton&, void);
+    DECL_LINK(ModifiedTrgrEditHdl_Impl, weld::MetricSpinButton&, void);
+    DECL_LINK(ModifiedTrgrListBoxHdl_Impl, weld::ComboBoxText&, void);
+    void ModifiedTrgrHdl_Impl(const weld::ComboBoxText*);
 
     void ActivateLinear(bool bActivate);
     void ActivateGradient(bool bActivate);
@@ -191,9 +197,8 @@ class SvxTransparenceTabPage : public SvxTabPage
     void InvalidatePreview (bool bEnable = true );
 
 public:
-    SvxTransparenceTabPage(vcl::Window* pParent, const SfxItemSet& rInAttrs);
+    SvxTransparenceTabPage(TabPageParent pParent, const SfxItemSet& rInAttrs);
     virtual ~SvxTransparenceTabPage() override;
-    virtual void dispose() override;
 
     static VclPtr<SfxTabPage> Create(TabPageParent, const SfxItemSet*);
     static const sal_uInt16* GetRanges() { return pTransparenceRanges; }
diff --git a/cui/source/tabpages/tptrans.cxx b/cui/source/tabpages/tptrans.cxx
index 1f6fc20da7dd..f75416c0c94b 100644
--- a/cui/source/tabpages/tptrans.cxx
+++ b/cui/source/tabpages/tptrans.cxx
@@ -59,22 +59,22 @@ const sal_uInt16 SvxTransparenceTabPage::pTransparenceRanges[] =
 |*
 \************************************************************************/
 
-IMPL_LINK_NOARG(SvxTransparenceTabPage, ClickTransOffHdl_Impl, Button*, void)
+IMPL_LINK_NOARG(SvxTransparenceTabPage, ClickTransOffHdl_Impl, weld::ToggleButton&, void)
 {
     // disable all other controls
     ActivateLinear(false);
     ActivateGradient(false);
 
     // Preview
-    rXFSet.ClearItem (XATTR_FILLTRANSPARENCE);
-    rXFSet.ClearItem (XATTR_FILLFLOATTRANSPARENCE);
-    m_pCtlXRectPreview->SetAttributes( aXFillAttr.GetItemSet() );
-    m_pCtlBitmapPreview->SetAttributes( aXFillAttr.GetItemSet() );
+    rXFSet.ClearItem(XATTR_FILLTRANSPARENCE);
+    rXFSet.ClearItem(XATTR_FILLFLOATTRANSPARENCE);
+    m_aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() );
+    m_aCtlBitmapPreview.SetAttributes( aXFillAttr.GetItemSet() );
 
-    InvalidatePreview( false );
+    InvalidatePreview(false);
 }
 
-IMPL_LINK_NOARG(SvxTransparenceTabPage, ClickTransLinearHdl_Impl, Button*, void)
+IMPL_LINK_NOARG(SvxTransparenceTabPage, ClickTransLinearHdl_Impl, weld::ToggleButton&, void)
 {
     // enable linear, disable other
     ActivateLinear(true);
@@ -82,10 +82,10 @@ IMPL_LINK_NOARG(SvxTransparenceTabPage, ClickTransLinearHdl_Impl, Button*, void)
 
     // preview
     rXFSet.ClearItem (XATTR_FILLFLOATTRANSPARENCE);
-    ModifyTransparentHdl_Impl (*m_pMtrTransparent);
+    ModifyTransparentHdl_Impl(*m_xMtrTransparent);
 }
 
-IMPL_LINK_NOARG(SvxTransparenceTabPage, ClickTransGradientHdl_Impl, Button*, void)
+IMPL_LINK_NOARG(SvxTransparenceTabPage, ClickTransGradientHdl_Impl, weld::ToggleButton&, void)
 {
     // enable gradient, disable other
     ActivateLinear(false);
@@ -93,79 +93,56 @@ IMPL_LINK_NOARG(SvxTransparenceTabPage, ClickTransGradientHdl_Impl, Button*, voi
 
     // preview
     rXFSet.ClearItem (XATTR_FILLTRANSPARENCE);
-    ModifiedTrgrHdl_Impl (nullptr);
+    ModifiedTrgrHdl_Impl(nullptr);
 }
 
 SvxTransparenceTabPage::~SvxTransparenceTabPage()
 {
-    disposeOnce();
-}
-
-void SvxTransparenceTabPage::dispose()
-{
-    m_pRbtTransOff.clear();
-    m_pRbtTransLinear.clear();
-    m_pRbtTransGradient.clear();
-    m_pMtrTransparent.clear();
-    m_pGridGradient.clear();
-    m_pLbTrgrGradientType.clear();
-    m_pFtTrgrCenterX.clear();
-    m_pMtrTrgrCenterX.clear();
-    m_pFtTrgrCenterY.clear();
-    m_pMtrTrgrCenterY.clear();
-    m_pFtTrgrAngle.clear();
-    m_pMtrTrgrAngle.clear();
-    m_pMtrTrgrBorder.clear();
-    m_pMtrTrgrStartValue.clear();
-    m_pMtrTrgrEndValue.clear();
-    m_pCtlBitmapPreview.clear();
-    m_pCtlXRectPreview.clear();
-    SvxTabPage::dispose();
 }
 
 void SvxTransparenceTabPage::ActivateLinear(bool bActivate)
 {
-    m_pMtrTransparent->Enable(bActivate);
+    m_xMtrTransparent->set_sensitive(bActivate);
 }
 
-IMPL_LINK_NOARG(SvxTransparenceTabPage, ModifyTransparentHdl_Impl, Edit&, void)
+IMPL_LINK_NOARG(SvxTransparenceTabPage, ModifyTransparentHdl_Impl, weld::MetricSpinButton&, void)
 {
-    sal_uInt16 nPos = static_cast<sal_uInt16>(m_pMtrTransparent->GetValue());
+    sal_uInt16 nPos = m_xMtrTransparent->get_value(FUNIT_PERCENT);
     rXFSet.Put(XFillTransparenceItem(nPos));
 
     // preview
     InvalidatePreview();
 }
 
-IMPL_LINK(SvxTransparenceTabPage, ModifiedTrgrListBoxHdl_Impl, ListBox&, rListBox, void)
+IMPL_LINK(SvxTransparenceTabPage, ModifiedTrgrListBoxHdl_Impl, weld::ComboBoxText&, rListBox, void)
 {
     ModifiedTrgrHdl_Impl(&rListBox);
 }
 
-IMPL_LINK(SvxTransparenceTabPage, ModifiedTrgrEditHdl_Impl, Edit&, rBox, void)
+IMPL_LINK_NOARG(SvxTransparenceTabPage, ModifiedTrgrEditHdl_Impl, weld::MetricSpinButton&, void)
 {
-    ModifiedTrgrHdl_Impl(&rBox);
+    ModifiedTrgrHdl_Impl(nullptr);
 }
 
-void SvxTransparenceTabPage::ModifiedTrgrHdl_Impl(void const * pControl)
+void SvxTransparenceTabPage::ModifiedTrgrHdl_Impl(const weld::ComboBoxText* pControl)
 {
-    if(pControl == m_pLbTrgrGradientType || pControl == this)
+    if (pControl == m_xLbTrgrGradientType.get())
     {
-        css::awt::GradientStyle eXGS = static_cast<css::awt::GradientStyle>(m_pLbTrgrGradientType->GetSelectedEntryPos());
+        css::awt::GradientStyle eXGS = static_cast<css::awt::GradientStyle>(m_xLbTrgrGradientType->get_active());
         SetControlState_Impl( eXGS );
     }
 
     // preview
-    sal_uInt8 nStartCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(m_pMtrTrgrStartValue->GetValue()) * 255) / 100);
-    sal_uInt8 nEndCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(m_pMtrTrgrEndValue->GetValue()) * 255) / 100);
+    sal_uInt8 nStartCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(m_xMtrTrgrStartValue->get_value(FUNIT_PERCENT)) * 255) / 100);
+    sal_uInt8 nEndCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(m_xMtrTrgrEndValue->get_value(FUNIT_PERCENT)) * 255) / 100);
     XGradient aTmpGradient(
                 Color(nStartCol, nStartCol, nStartCol),
                 Color(nEndCol, nEndCol, nEndCol),
-                static_cast<css::awt::GradientStyle>(m_pLbTrgrGradientType->GetSelectedEntryPos()),
-                static_cast<sal_uInt16>(m_pMtrTrgrAngle->GetValue()) * 10,
-                static_cast<sal_uInt16>(m_pMtrTrgrCenterX->GetValue()),
-                static_cast<sal_uInt16>(m_pMtrTrgrCenterY->GetValue()),
-                static_cast<sal_uInt16>(m_pMtrTrgrBorder->GetValue()),
+                static_cast<css::awt::GradientStyle>(m_xLbTrgrGradientType->get_active()),
+                static_cast<sal_uInt16>(m_xMtrTrgrAngle->get_value(FUNIT_DEGREE)) * 10,
+                static_cast<sal_uInt16>(m_xMtrTrgrCenterX->get_value(FUNIT_PERCENT)),
+                static_cast<sal_uInt16>(m_xMtrTrgrCenterY->get_value(FUNIT_PERCENT)),
+                static_cast<sal_uInt16>(m_xMtrTrgrBorder->get_value(FUNIT_PERCENT)),
                 100, 100);
 
     XFillFloatTransparenceItem aItem( aTmpGradient);
@@ -176,11 +153,11 @@ void SvxTransparenceTabPage::ModifiedTrgrHdl_Impl(void const * pControl)
 
 void SvxTransparenceTabPage::ActivateGradient(bool bActivate)
 {
-    m_pGridGradient->Enable(bActivate);
+    m_xGridGradient->set_sensitive(bActivate);
 
-    if(bActivate)
+    if (bActivate)
     {
-        css::awt::GradientStyle eXGS = static_cast<css::awt::GradientStyle>(m_pLbTrgrGradientType->GetSelectedEntryPos());
+        css::awt::GradientStyle eXGS = static_cast<css::awt::GradientStyle>(m_xLbTrgrGradientType->get_active());
         SetControlState_Impl( eXGS );
     }
 }
@@ -191,107 +168,102 @@ void SvxTransparenceTabPage::SetControlState_Impl(css::awt::GradientStyle eXGS)
     {
         case css::awt::GradientStyle_LINEAR:
         case css::awt::GradientStyle_AXIAL:
-            m_pFtTrgrCenterX->Disable();
-            m_pMtrTrgrCenterX->Disable();
-            m_pFtTrgrCenterY->Disable();
-            m_pMtrTrgrCenterY->Disable();
-            m_pFtTrgrAngle->Enable();
-            m_pMtrTrgrAngle->Enable();
+            m_xFtTrgrCenterX->set_sensitive(false);
+            m_xMtrTrgrCenterX->set_sensitive(false);
+            m_xFtTrgrCenterY->set_sensitive(false);
+            m_xMtrTrgrCenterY->set_sensitive(false);
+            m_xFtTrgrAngle->set_sensitive(true);
+            m_xMtrTrgrAngle->set_sensitive(true);
             break;
 
         case css::awt::GradientStyle_RADIAL:
-            m_pFtTrgrCenterX->Enable();
-            m_pMtrTrgrCenterX->Enable();
-            m_pFtTrgrCenterY->Enable();
-            m_pMtrTrgrCenterY->Enable();
-            m_pFtTrgrAngle->Disable();
-            m_pMtrTrgrAngle->Disable();
+            m_xFtTrgrCenterX->set_sensitive(true);
+            m_xMtrTrgrCenterX->set_sensitive(true);
+            m_xFtTrgrCenterY->set_sensitive(true);
+            m_xMtrTrgrCenterY->set_sensitive(true);
+            m_xFtTrgrAngle->set_sensitive(false);
+            m_xMtrTrgrAngle->set_sensitive(false);
             break;
 
         case css::awt::GradientStyle_ELLIPTICAL:
-            m_pFtTrgrCenterX->Enable();
-            m_pMtrTrgrCenterX->Enable();
-            m_pFtTrgrCenterY->Enable();
-            m_pMtrTrgrCenterY->Enable();
-            m_pFtTrgrAngle->Enable();
-            m_pMtrTrgrAngle->Enable();
+            m_xFtTrgrCenterX->set_sensitive(true);
+            m_xMtrTrgrCenterX->set_sensitive(true);
+            m_xFtTrgrCenterY->set_sensitive(true);
+            m_xMtrTrgrCenterY->set_sensitive(true);
+            m_xFtTrgrAngle->set_sensitive(true);
+            m_xMtrTrgrAngle->set_sensitive(true);
             break;
 
         case css::awt::GradientStyle_SQUARE:
         case css::awt::GradientStyle_RECT:
-            m_pFtTrgrCenterX->Enable();
-            m_pMtrTrgrCenterX->Enable();
-            m_pFtTrgrCenterY->Enable();
-            m_pMtrTrgrCenterY->Enable();
-            m_pFtTrgrAngle->Enable();
-            m_pMtrTrgrAngle->Enable();
+            m_xFtTrgrCenterX->set_sensitive(true);
+            m_xMtrTrgrCenterX->set_sensitive(true);
+            m_xFtTrgrCenterY->set_sensitive(true);
+            m_xMtrTrgrCenterY->set_sensitive(true);
+            m_xFtTrgrAngle->set_sensitive(true);
+            m_xMtrTrgrAngle->set_sensitive(true);
             break;
         default:
             break;
     }
 }
 
-SvxTransparenceTabPage::SvxTransparenceTabPage(vcl::Window* pParent, const SfxItemSet& rInAttrs)
-:   SvxTabPage          ( pParent,
-                          "TransparencyTabPage",
-                          "cui/ui/transparencytabpage.ui",
-                          rInAttrs),
-    rOutAttrs           ( rInAttrs ),
-    nPageType           ( PageType::Area ),
-    nDlgType            (0),
-    bBitmap             ( false ),
-    aXFillAttr          ( rInAttrs.GetPool() ),
-    rXFSet              ( aXFillAttr.GetItemSet() )
+SvxTransparenceTabPage::SvxTransparenceTabPage(TabPageParent pParent, const SfxItemSet& rInAttrs)
+    : SvxTabPage(pParent, "cui/ui/transparencytabpage.ui", "TransparencyTabPage", rInAttrs)
+    , rOutAttrs(rInAttrs)
+    , nPageType(PageType::Area)
+    , nDlgType(0)
+    , bBitmap(false)
+    , aXFillAttr(rInAttrs.GetPool())
+    , rXFSet(aXFillAttr.GetItemSet())
+    , m_xRbtTransOff(m_xBuilder->weld_radio_button("RBT_TRANS_OFF"))
+    , m_xRbtTransLinear(m_xBuilder->weld_radio_button("RBT_TRANS_LINEAR"))
+    , m_xRbtTransGradient(m_xBuilder->weld_radio_button("RBT_TRANS_GRADIENT"))
+    , m_xMtrTransparent(m_xBuilder->weld_metric_spin_button("MTR_TRANSPARENT", FUNIT_PERCENT))
+    , m_xGridGradient(m_xBuilder->weld_widget("gridGradient"))
+    , m_xLbTrgrGradientType(m_xBuilder->weld_combo_box_text("LB_TRGR_GRADIENT_TYPES"))
+    , m_xFtTrgrCenterX(m_xBuilder->weld_label("FT_TRGR_CENTER_X"))
+    , m_xMtrTrgrCenterX(m_xBuilder->weld_metric_spin_button("MTR_TRGR_CENTER_X", FUNIT_PERCENT))
+    , m_xFtTrgrCenterY(m_xBuilder->weld_label("FT_TRGR_CENTER_Y"))
+    , m_xMtrTrgrCenterY(m_xBuilder->weld_metric_spin_button("MTR_TRGR_CENTER_Y", FUNIT_PERCENT))
+    , m_xFtTrgrAngle(m_xBuilder->weld_label("FT_TRGR_ANGLE"))
+    , m_xMtrTrgrAngle(m_xBuilder->weld_metric_spin_button("MTR_TRGR_ANGLE", FUNIT_DEGREE))
+    , m_xMtrTrgrBorder(m_xBuilder->weld_metric_spin_button("MTR_TRGR_BORDER", FUNIT_PERCENT))
+    , m_xMtrTrgrStartValue(m_xBuilder->weld_metric_spin_button("MTR_TRGR_START_VALUE", FUNIT_PERCENT))
+    , m_xMtrTrgrEndValue(m_xBuilder->weld_metric_spin_button("MTR_TRGR_END_VALUE", FUNIT_PERCENT))
+    , m_xCtlBitmapBorder(m_xBuilder->weld_widget("bitmap_border"))
+    , m_xCtlXRectBorder(m_xBuilder->weld_widget("trans_border"))
+    , m_xCtlBitmapPreview(new weld::CustomWeld(*m_xBuilder, "CTL_BITMAP_PREVIEW", m_aCtlBitmapPreview))
+    , m_xCtlXRectPreview(new weld::CustomWeld(*m_xBuilder, "CTL_TRANS_PREVIEW", m_aCtlXRectPreview))
 {
-    get(m_pRbtTransOff,"RBT_TRANS_OFF");
-    get(m_pRbtTransLinear,"RBT_TRANS_LINEAR");
-    get(m_pRbtTransGradient,"RBT_TRANS_GRADIENT");
-
-    get(m_pMtrTransparent,"MTR_TRANSPARENT");
-
-    get(m_pGridGradient,"gridGradient");
-    get(m_pLbTrgrGradientType,"LB_TRGR_GRADIENT_TYPES");
-    get(m_pFtTrgrCenterX,"FT_TRGR_CENTER_X");
-    get(m_pMtrTrgrCenterX,"MTR_TRGR_CENTER_X");
-    get(m_pFtTrgrCenterY,"FT_TRGR_CENTER_Y");
-    get(m_pMtrTrgrCenterY,"MTR_TRGR_CENTER_Y");
-    get(m_pFtTrgrAngle,"FT_TRGR_ANGLE");
-    get(m_pMtrTrgrAngle,"MTR_TRGR_ANGLE");
-    get(m_pMtrTrgrBorder,"MTR_TRGR_BORDER");
-    get(m_pMtrTrgrStartValue,"MTR_TRGR_START_VALUE");
-    get(m_pMtrTrgrEndValue,"MTR_TRGR_END_VALUE");
-
-    get(m_pCtlBitmapPreview,"CTL_BITMAP_PREVIEW");
-    get(m_pCtlXRectPreview,"CTL_TRANS_PREVIEW");
-
     // main selection
-    m_pRbtTransOff->SetClickHdl(LINK(this, SvxTransparenceTabPage, ClickTransOffHdl_Impl));
-    m_pRbtTransLinear->SetClickHdl(LINK(this, SvxTransparenceTabPage, ClickTransLinearHdl_Impl));
-    m_pRbtTransGradient->SetClickHdl(LINK(this, SvxTransparenceTabPage, ClickTransGradientHdl_Impl));
+    m_xRbtTransOff->connect_toggled(LINK(this, SvxTransparenceTabPage, ClickTransOffHdl_Impl));
+    m_xRbtTransLinear->connect_toggled(LINK(this, SvxTransparenceTabPage, ClickTransLinearHdl_Impl));
+    m_xRbtTransGradient->connect_toggled(LINK(this, SvxTransparenceTabPage, ClickTransGradientHdl_Impl));
 
     // linear transparency
-    m_pMtrTransparent->SetValue( 50 );
-    m_pMtrTransparent->SetModifyHdl(LINK(this, SvxTransparenceTabPage, ModifyTransparentHdl_Impl));
+    m_xMtrTransparent->set_value(50, FUNIT_PERCENT);
+    m_xMtrTransparent->connect_value_changed(LINK(this, SvxTransparenceTabPage, ModifyTransparentHdl_Impl));
 
     // gradient transparency
-    m_pMtrTrgrEndValue->SetValue( 100 );
-    m_pMtrTrgrStartValue->SetValue( 0 );
-    Link<Edit&,void> aLink = LINK( this, SvxTransparenceTabPage, ModifiedTrgrEditHdl_Impl);
-    m_pLbTrgrGradientType->SetSelectHdl( LINK( this, SvxTransparenceTabPage, ModifiedTrgrListBoxHdl_Impl) );
-    m_pMtrTrgrCenterX->SetModifyHdl( aLink );
-    m_pMtrTrgrCenterY->SetModifyHdl( aLink );
-    m_pMtrTrgrAngle->SetModifyHdl( aLink );
-    m_pMtrTrgrBorder->SetModifyHdl( aLink );
-    m_pMtrTrgrStartValue->SetModifyHdl( aLink );
-    m_pMtrTrgrEndValue->SetModifyHdl( aLink );
+    m_xMtrTrgrEndValue->set_value(100, FUNIT_PERCENT);
+    m_xMtrTrgrStartValue->set_value(0, FUNIT_PERCENT);
+    Link<weld::MetricSpinButton&,void> aLink = LINK( this, SvxTransparenceTabPage, ModifiedTrgrEditHdl_Impl);
+    m_xLbTrgrGradientType->connect_changed(LINK(this, SvxTransparenceTabPage, ModifiedTrgrListBoxHdl_Impl));
+    m_xMtrTrgrCenterX->connect_value_changed( aLink );
+    m_xMtrTrgrCenterY->connect_value_changed( aLink );
+    m_xMtrTrgrAngle->connect_value_changed( aLink );
+    m_xMtrTrgrBorder->connect_value_changed( aLink );
+    m_xMtrTrgrStartValue->connect_value_changed( aLink );
+    m_xMtrTrgrEndValue->connect_value_changed( aLink );
 
     // this page needs ExchangeSupport
     SetExchangeSupport();
 }
 
-VclPtr<SfxTabPage> SvxTransparenceTabPage::Create(TabPageParent pWindow, const SfxItemSet* rAttrs)
+VclPtr<SfxTabPage> SvxTransparenceTabPage::Create(TabPageParent pParent, const SfxItemSet* rAttrs)
 {
-    return VclPtr<SvxTransparenceTabPage>::Create(pWindow.pParent, *rAttrs);
+    return VclPtr<SvxTransparenceTabPage>::Create(pParent, *rAttrs);
 }
 
 bool SvxTransparenceTabPage::FillItemSet(SfxItemSet* rAttrs)
@@ -310,11 +282,11 @@ bool SvxTransparenceTabPage::FillItemSet(SfxItemSet* rAttrs)
     bool bSwitchOffLinear(false);
     bool bSwitchOffGradient(false);
 
-    if(m_pMtrTransparent->IsEnabled())
+    if (m_xMtrTransparent->get_sensitive())
     {
         // linear transparence
-        sal_uInt16 nPos = static_cast<sal_uInt16>(m_pMtrTransparent->GetValue());
-        if(m_pMtrTransparent->IsValueChangedFromSaved() || !bLinearActive)
+        sal_uInt16 nPos = m_xMtrTransparent->get_value(FUNIT_PERCENT);
+        if (m_xMtrTransparent->get_value_changed_from_saved() || !bLinearActive)
         {
             XFillTransparenceItem aItem(nPos);
             SdrPercentItem aShadowItem(makeSdrShadowTransparenceItem(nPos));
@@ -328,28 +300,28 @@ bool SvxTransparenceTabPage::FillItemSet(SfxItemSet* rAttrs)
             }
         }
     }
-    else if(m_pLbTrgrGradientType->IsEnabled())
+    else if (m_xLbTrgrGradientType->get_active())
     {
         // transparence gradient, fill ItemSet from values
-        if(!bGradActive
-            || m_pLbTrgrGradientType->IsValueChangedFromSaved()
-            || m_pMtrTrgrAngle->IsValueChangedFromSaved()
-            || m_pMtrTrgrCenterX->IsValueChangedFromSaved()
-            || m_pMtrTrgrCenterY->IsValueChangedFromSaved()
-            || m_pMtrTrgrBorder->IsValueChangedFromSaved()
-            || m_pMtrTrgrStartValue->IsValueChangedFromSaved()
-            || m_pMtrTrgrEndValue->IsValueChangedFromSaved() )
+        if (!bGradActive
+            || m_xLbTrgrGradientType->get_value_changed_from_saved()
+            || m_xMtrTrgrAngle->get_value_changed_from_saved()
+            || m_xMtrTrgrCenterX->get_value_changed_from_saved()
+            || m_xMtrTrgrCenterY->get_value_changed_from_saved()
+            || m_xMtrTrgrBorder->get_value_changed_from_saved()
+            || m_xMtrTrgrStartValue->get_value_changed_from_saved()
+            || m_xMtrTrgrEndValue->get_value_changed_from_saved())
         {
-            sal_uInt8 nStartCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(m_pMtrTrgrStartValue->GetValue()) * 255) / 100);
-            sal_uInt8 nEndCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(m_pMtrTrgrEndValue->GetValue()) * 255) / 100);
+            sal_uInt8 nStartCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(m_xMtrTrgrStartValue->get_value(FUNIT_PERCENT)) * 255) / 100);
+            sal_uInt8 nEndCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(m_xMtrTrgrEndValue->get_value(FUNIT_PERCENT)) * 255) / 100);
             XGradient aTmpGradient(
                         Color(nStartCol, nStartCol, nStartCol),
                         Color(nEndCol, nEndCol, nEndCol),
-                        static_cast<css::awt::GradientStyle>(m_pLbTrgrGradientType->GetSelectedEntryPos()),
-                        static_cast<sal_uInt16>(m_pMtrTrgrAngle->GetValue()) * 10,
-                        static_cast<sal_uInt16>(m_pMtrTrgrCenterX->GetValue()),
-                        static_cast<sal_uInt16>(m_pMtrTrgrCenterY->GetValue()),
-                        static_cast<sal_uInt16>(m_pMtrTrgrBorder->GetValue()),
+                        static_cast<css::awt::GradientStyle>(m_xLbTrgrGradientType->get_active()),
+                        static_cast<sal_uInt16>(m_xMtrTrgrAngle->get_value(FUNIT_DEGREE)) * 10,
+                        static_cast<sal_uInt16>(m_xMtrTrgrCenterX->get_value(FUNIT_PERCENT)),
+                        static_cast<sal_uInt16>(m_xMtrTrgrCenterY->get_value(FUNIT_PERCENT)),
+                        static_cast<sal_uInt16>(m_xMtrTrgrBorder->get_value(FUNIT_PERCENT)),
                         100, 100);
 
             XFillFloatTransparenceItem aItem(aTmpGradient);
@@ -412,37 +384,37 @@ void SvxTransparenceTabPage::Reset(const SfxItemSet* rAttrs)
     // transparence gradient
     const XGradient& rGradient = static_cast<const XFillFloatTransparenceItem*>(pGradientItem)->GetGradientValue();
     css::awt::GradientStyle eXGS(rGradient.GetGradientStyle());
-    m_pLbTrgrGradientType->SelectEntryPos(sal::static_int_cast< sal_Int32 >(eXGS));
-    m_pMtrTrgrAngle->SetValue(rGradient.GetAngle() / 10);
-    m_pMtrTrgrBorder->SetValue(rGradient.GetBorder());
-    m_pMtrTrgrCenterX->SetValue(rGradient.GetXOffset());
-    m_pMtrTrgrCenterY->SetValue(rGradient.GetYOffset());
-    m_pMtrTrgrStartValue->SetValue(static_cast<sal_uInt16>(((static_cast<sal_uInt16>(rGradient.GetStartColor().GetRed()) + 1) * 100) / 255));
-    m_pMtrTrgrEndValue->SetValue(static_cast<sal_uInt16>(((static_cast<sal_uInt16>(rGradient.GetEndColor().GetRed()) + 1) * 100) / 255));
+    m_xLbTrgrGradientType->set_active(sal::static_int_cast< sal_Int32 >(eXGS));
+    m_xMtrTrgrAngle->set_value(rGradient.GetAngle() / 10, FUNIT_DEGREE);
+    m_xMtrTrgrBorder->set_value(rGradient.GetBorder(), FUNIT_PERCENT);
+    m_xMtrTrgrCenterX->set_value(rGradient.GetXOffset(), FUNIT_PERCENT);
+    m_xMtrTrgrCenterY->set_value(rGradient.GetYOffset(), FUNIT_PERCENT);
+    m_xMtrTrgrStartValue->set_value(static_cast<sal_uInt16>(((static_cast<sal_uInt16>(rGradient.GetStartColor().GetRed()) + 1) * 100) / 255), FUNIT_PERCENT);
+    m_xMtrTrgrEndValue->set_value(static_cast<sal_uInt16>(((static_cast<sal_uInt16>(rGradient.GetEndColor().GetRed()) + 1) * 100) / 255), FUNIT_PERCENT);
 
     // linear transparence
     sal_uInt16 nTransp = static_cast<const XFillTransparenceItem*>(pLinearItem)->GetValue();
-    m_pMtrTransparent->SetValue(bLinearActive ? nTransp : 50);
-    ModifyTransparentHdl_Impl(*m_pMtrTransparent);
+    m_xMtrTransparent->set_value(bLinearActive ? nTransp : 50, FUNIT_PERCENT);
+    ModifyTransparentHdl_Impl(*m_xMtrTransparent);
 
     // select the correct radio button
     if(bGradActive)
     {
         // transparence gradient, set controls appropriate to item
-        m_pRbtTransGradient->Check();
-        ClickTransGradientHdl_Impl(nullptr);
+        m_xRbtTransGradient->set_active(true);
+        ClickTransGradientHdl_Impl(*m_xRbtTransGradient);
     }
     else if(bLinearActive)
     {
         // linear transparence
-        m_pRbtTransLinear->Check();
-        ClickTransLinearHdl_Impl(nullptr);
+        m_xRbtTransLinear->set_active(true);
+        ClickTransLinearHdl_Impl(*m_xRbtTransLinear);
     }
     else
     {
         // no transparence
-        m_pRbtTransOff->Check();
-        ClickTransOffHdl_Impl(nullptr);
+        m_xRbtTransOff->set_active(true);
+        ClickTransOffHdl_Impl(*m_xRbtTransOff);
         ModifiedTrgrHdl_Impl(nullptr);
     }
 
@@ -454,14 +426,14 @@ void SvxTransparenceTabPage::Reset(const SfxItemSet* rAttrs)
 
 void SvxTransparenceTabPage::ChangesApplied()
 {
-    m_pMtrTransparent->SaveValue();
-    m_pLbTrgrGradientType->SaveValue();
-    m_pMtrTrgrCenterX->SaveValue();
-    m_pMtrTrgrCenterY->SaveValue();
-    m_pMtrTrgrAngle->SaveValue();
-    m_pMtrTrgrBorder->SaveValue();
-    m_pMtrTrgrStartValue->SaveValue();
-    m_pMtrTrgrEndValue->SaveValue();
+    m_xMtrTransparent->save_value();
+    m_xLbTrgrGradientType->save_value();
+    m_xMtrTrgrCenterX->save_value();
+    m_xMtrTrgrCenterY->save_value();
+    m_xMtrTrgrAngle->save_value();
+    m_xMtrTrgrBorder->save_value();
+    m_xMtrTrgrStartValue->save_value();
+    m_xMtrTrgrEndValue->save_value();
 }
 
 void SvxTransparenceTabPage::ActivatePage(const SfxItemSet& rSet)
@@ -493,18 +465,20 @@ void SvxTransparenceTabPage::PointChanged(weld::DrawingArea*, RectPoint)
 
 // Preview-Methods
 
-bool SvxTransparenceTabPage::InitPreview ( const SfxItemSet& rSet )
+bool SvxTransparenceTabPage::InitPreview(const SfxItemSet& rSet)
 {
     // set transparencetype for preview
-    if ( m_pRbtTransOff->IsChecked() )
+    if (m_xRbtTransOff->get_active())
     {
-        ClickTransOffHdl_Impl(nullptr);
-    } else if ( m_pRbtTransLinear->IsChecked() )
+        ClickTransOffHdl_Impl(*m_xRbtTransOff);
+    }
+    else if (m_xRbtTransLinear->get_active())
     {
-        ClickTransLinearHdl_Impl(nullptr);
-    } else if ( m_pRbtTransGradient->IsChecked() )
+        ClickTransLinearHdl_Impl(*m_xRbtTransLinear);
+    }
+    else if (m_xRbtTransGradient->get_active())
     {
-        ClickTransGradientHdl_Impl(nullptr);
+        ClickTransGradientHdl_Impl(*m_xRbtTransGradient);
     }
 
     // Get fillstyle for preview
@@ -515,24 +489,24 @@ bool SvxTransparenceTabPage::InitPreview ( const SfxItemSet& rSet )
     rXFSet.Put ( rSet.Get(XATTR_FILLBACKGROUND) );
     rXFSet.Put ( rSet.Get(XATTR_FILLBITMAP) );
 
-    m_pCtlXRectPreview->SetAttributes( aXFillAttr.GetItemSet() );
-    m_pCtlBitmapPreview->SetAttributes( aXFillAttr.GetItemSet() );
+    m_aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() );
+    m_aCtlBitmapPreview.SetAttributes( aXFillAttr.GetItemSet() );
 
     bBitmap = rSet.Get(XATTR_FILLSTYLE).GetValue() == drawing::FillStyle_BITMAP;
 
     // show the right preview window
     if ( bBitmap )
     {
-        m_pCtlBitmapPreview->Show();
-        m_pCtlXRectPreview->Hide();
+        m_xCtlBitmapBorder->show();
+        m_xCtlXRectBorder->hide();
     }
     else
     {
-        m_pCtlBitmapPreview->Hide();
-        m_pCtlXRectPreview->Show();
+        m_xCtlBitmapBorder->hide();
+        m_xCtlXRectBorder->show();
     }
 
-    return !m_pRbtTransOff->IsChecked();
+    return !m_xRbtTransOff->get_active();
 }
 
 void SvxTransparenceTabPage::InvalidatePreview (bool bEnable)
@@ -541,23 +515,23 @@ void SvxTransparenceTabPage::InvalidatePreview (bool bEnable)
     {
         if ( bEnable )
         {
-            m_pCtlBitmapPreview->Enable();
-            m_pCtlBitmapPreview->SetAttributes( aXFillAttr.GetItemSet() );
+            m_xCtlBitmapPreview->set_sensitive(true);
+            m_aCtlBitmapPreview.SetAttributes( aXFillAttr.GetItemSet() );
         }
         else
-            m_pCtlBitmapPreview->Disable();
-        m_pCtlBitmapPreview->Invalidate();
+            m_xCtlBitmapPreview->set_sensitive(false);
+        m_xCtlBitmapPreview->queue_draw();
     }
     else
     {
         if ( bEnable )
         {
-            m_pCtlXRectPreview->Enable();
-            m_pCtlXRectPreview->SetAttributes( aXFillAttr.GetItemSet() );
+            m_xCtlXRectPreview->set_sensitive(true);
+            m_aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() );
         }
         else
-            m_pCtlXRectPreview->Disable();
-        m_pCtlXRectPreview->Invalidate();
+            m_xCtlXRectPreview->set_sensitive(false);
+        m_xCtlXRectPreview->queue_draw();
     }
 }
 
diff --git a/cui/uiconfig/ui/transparencytabpage.ui b/cui/uiconfig/ui/transparencytabpage.ui
index 4ae85c2b1701..efb31b319517 100644
--- a/cui/uiconfig/ui/transparencytabpage.ui
+++ b/cui/uiconfig/ui/transparencytabpage.ui
@@ -1,8 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.18.3 -->
+<!-- Generated with glade 3.22.1 -->
 <interface domain="cui">
   <requires lib="gtk+" version="3.18"/>
-  <requires lib="LibreOffice" version="1.0"/>
   <object class="GtkAdjustment" id="adjustmentDegrees">
     <property name="upper">359</property>
     <property name="step_increment">1</property>
@@ -13,6 +12,31 @@
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
+  <object class="GtkAdjustment" id="adjustmentPercent1">
+    <property name="upper">100</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="adjustmentPercent2">
+    <property name="upper">100</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="adjustmentPercent3">
+    <property name="upper">100</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="adjustmentPercent4">
+    <property name="upper">100</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="adjustmentPercent5">
+    <property name="upper">100</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
   <object class="GtkListStore" id="liststoreTYPE">
     <columns>
       <!-- column-name gchararray1 -->
@@ -91,7 +115,6 @@
                         <property name="image_position">bottom</property>
                         <property name="active">True</property>
                         <property name="draw_indicator">True</property>
-                        <property name="group">RBT_TRANS_LINEAR</property>
                       </object>
                       <packing>
                         <property name="left_attach">0</property>
@@ -107,11 +130,10 @@
                         <property name="use_underline">True</property>
                         <property name="xalign">0</property>
                         <property name="image_position">right</property>
-                        <property name="active">True</property>
                         <property name="draw_indicator">True</property>
-                        <property name="group">RBT_TRANS_GRADIENT</property>
+                        <property name="group">RBT_TRANS_OFF</property>
                         <accessibility>
-                          <relation type="label-for" target="MTR_TRANSPARENT:0%"/>
+                          <relation type="label-for" target="MTR_TRANSPARENT"/>
                         </accessibility>
                       </object>
                       <packing>
@@ -127,7 +149,6 @@
                         <property name="receives_default">False</property>
                         <property name="use_underline">True</property>
                         <property name="xalign">0</property>
-                        <property name="active">True</property>
                         <property name="draw_indicator">True</property>
                         <property name="group">RBT_TRANS_OFF</property>
                       </object>
@@ -137,9 +158,10 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkSpinButton" id="MTR_TRANSPARENT:0%">
+                      <object class="GtkSpinButton" id="MTR_TRANSPARENT">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
+                        <property name="activates_default">True</property>
                         <property name="adjustment">adjustmentPercent</property>
                         <accessibility>
                           <relation type="labelled-by" target="RBT_TRANS_LINEAR"/>
@@ -170,10 +192,11 @@
                     <property name="row_spacing">6</property>
                     <property name="column_spacing">12</property>
                     <child>
-                      <object class="GtkSpinButton" id="MTR_TRGR_END_VALUE:0%">
+                      <object class="GtkSpinButton" id="MTR_TRGR_END_VALUE">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="adjustment">adjustmentPercent</property>
+                        <property name="activates_default">True</property>
+                        <property name="adjustment">adjustmentPercent5</property>
                       </object>
                       <packing>
                         <property name="left_attach">1</property>
@@ -181,10 +204,11 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkSpinButton" id="MTR_TRGR_START_VALUE:0%">
+                      <object class="GtkSpinButton" id="MTR_TRGR_START_VALUE">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="adjustment">adjustmentPercent</property>
+                        <property name="activates_default">True</property>
+                        <property name="adjustment">adjustmentPercent4</property>
                       </object>
                       <packing>
                         <property name="left_attach">1</property>
@@ -192,10 +216,11 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkSpinButton" id="MTR_TRGR_BORDER:0%">
+                      <object class="GtkSpinButton" id="MTR_TRGR_BORDER">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="adjustment">adjustmentPercent</property>
+                        <property name="activates_default">True</property>
+                        <property name="adjustment">adjustmentPercent3</property>
                       </object>
                       <packing>
                         <property name="left_attach">1</property>
@@ -203,9 +228,10 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkSpinButton" id="MTR_TRGR_ANGLE:0degree">
+                      <object class="GtkSpinButton" id="MTR_TRGR_ANGLE">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
+                        <property name="activates_default">True</property>
                         <property name="adjustment">adjustmentDegrees</property>
                       </object>
                       <packing>
@@ -214,10 +240,11 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkSpinButton" id="MTR_TRGR_CENTER_Y:0%">
+                      <object class="GtkSpinButton" id="MTR_TRGR_CENTER_Y">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="adjustment">adjustmentPercent</property>
+                        <property name="activates_default">True</property>
+                        <property name="adjustment">adjustmentPercent2</property>
                       </object>
                       <packing>
                         <property name="left_attach">1</property>
@@ -225,10 +252,11 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkSpinButton" id="MTR_TRGR_CENTER_X:0%">
+                      <object class="GtkSpinButton" id="MTR_TRGR_CENTER_X">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="adjustment">adjustmentPercent</property>
+                        <property name="activates_default">True</property>
+                        <property name="adjustment">adjustmentPercent1</property>
                       </object>
                       <packing>
                         <property name="left_attach">1</property>
@@ -255,10 +283,10 @@
                           <object class="GtkLabel" id="FT_TRGR_TYPE">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="xalign">1</property>
                             <property name="label" translatable="yes" context="transparencytabpage|FT_TRGR_TYPE">Ty_pe:</property>
                             <property name="use_underline">True</property>
                             <property name="mnemonic_widget">LB_TRGR_GRADIENT_TYPES</property>
+                            <property name="xalign">1</property>
                           </object>
                         </child>
                       </object>
@@ -276,10 +304,10 @@
                           <object class="GtkLabel" id="FT_TRGR_CENTER_X">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="xalign">1</property>
                             <property name="label" translatable="yes" context="transparencytabpage|FT_TRGR_CENTER_X">Center _X:</property>
                             <property name="use_underline">True</property>
-                            <property name="mnemonic_widget">MTR_TRGR_CENTER_X:0%</property>
+                            <property name="mnemonic_widget">MTR_TRGR_CENTER_X</property>
+                            <property name="xalign">1</property>
                           </object>
                         </child>
                       </object>
@@ -297,10 +325,10 @@
                           <object class="GtkLabel" id="FT_TRGR_CENTER_Y">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="xalign">1</property>
                             <property name="label" translatable="yes" context="transparencytabpage|FT_TRGR_CENTER_Y">Center _Y:</property>
                             <property name="use_underline">True</property>
-                            <property name="mnemonic_widget">MTR_TRGR_CENTER_Y:0%</property>
+                            <property name="mnemonic_widget">MTR_TRGR_CENTER_Y</property>
+                            <property name="xalign">1</property>
                           </object>
                         </child>
                       </object>
@@ -318,10 +346,10 @@
                           <object class="GtkLabel" id="FT_TRGR_ANGLE">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="xalign">1</property>
                             <property name="label" translatable="yes" context="transparencytabpage|FT_TRGR_ANGLE">_Angle:</property>
                             <property name="use_underline">True</property>
-                            <property name="mnemonic_widget">MTR_TRGR_ANGLE:0degree</property>
+                            <property name="mnemonic_widget">MTR_TRGR_ANGLE</property>
+                            <property name="xalign">1</property>
                           </object>
                         </child>
                       </object>
@@ -339,10 +367,10 @@
                           <object class="GtkLabel" id="FT_TRGR_BORDER">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="xalign">1</property>
                             <property name="label" translatable="yes" context="transparencytabpage|FT_TRGR_BORDER">_Border:</property>
                             <property name="use_underline">True</property>
-                            <property name="mnemonic_widget">MTR_TRGR_BORDER:0%</property>
+                            <property name="mnemonic_widget">MTR_TRGR_BORDER</property>
+                            <property name="xalign">1</property>
                           </object>
                         </child>
                       </object>
@@ -360,10 +388,10 @@
                           <object class="GtkLabel" id="FT_TRGR_START_VALUE">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="xalign">1</property>
                             <property name="label" translatable="yes" context="transparencytabpage|FT_TRGR_START_VALUE">_Start value:</property>
                             <property name="use_underline">True</property>
-                            <property name="mnemonic_widget">MTR_TRGR_START_VALUE:0%</property>
+                            <property name="mnemonic_widget">MTR_TRGR_START_VALUE</property>
+                            <property name="xalign">1</property>
                           </object>
                         </child>
                       </object>
@@ -381,10 +409,10 @@
                           <object class="GtkLabel" id="FT_TRGR_END_VALUE">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="xalign">1</property>
                             <property name="label" translatable="yes" context="transparencytabpage|FT_TRGR_END_VALUE">_End value:</property>
                             <property name="use_underline">True</property>
-                            <property name="mnemonic_widget">MTR_TRGR_END_VALUE:0%</property>
+                            <property name="mnemonic_widget">MTR_TRGR_END_VALUE</property>
+                            <property name="xalign">1</property>
                           </object>
                         </child>
                       </object>
@@ -418,14 +446,31 @@
                 <property name="spacing">6</property>
                 <property name="homogeneous">True</property>
                 <child>
-                  <object class="svxlo-SvxXRectPreview" id="CTL_BITMAP_PREVIEW">
+                  <object class="GtkScrolledWindow" id="bitmap_border">
                     <property name="visible">True</property>
-                    <property name="can_focus">False</property>
+                    <property name="can_focus">True</property>
                     <property name="hexpand">True</property>
                     <property name="vexpand">True</property>
-                    <child internal-child="accessible">
-                      <object class="AtkObject" id="CTL_BITMAP_PREVIEW-atkobject">
-                        <property name="AtkObject::accessible-name" translatable="yes" context="transparencytabpage|CTL_BITMAP_PREVIEW-atkobject">Example</property>
+                    <property name="hscrollbar_policy">never</property>
+                    <property name="vscrollbar_policy">never</property>
+                    <property name="shadow_type">in</property>
+                    <child>
+                      <object class="GtkViewport">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkDrawingArea" id="CTL_BITMAP_PREVIEW">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="hexpand">True</property>
+                            <property name="vexpand">True</property>
+                            <child internal-child="accessible">
+                              <object class="AtkObject" id="CTL_BITMAP_PREVIEW-atkobject">
+                                <property name="AtkObject::accessible-name" translatable="yes" context="transparencytabpage|CTL_BITMAP_PREVIEW-atkobject">Example</property>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
                       </object>
                     </child>
                   </object>
@@ -436,14 +481,31 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="svxlo-SvxXRectPreview" id="CTL_TRANS_PREVIEW">
+                  <object class="GtkScrolledWindow" id="trans_border">
                     <property name="visible">True</property>
-                    <property name="can_focus">False</property>
+                    <property name="can_focus">True</property>
                     <property name="hexpand">True</property>
                     <property name="vexpand">True</property>
-                    <child internal-child="accessible">
-                      <object class="AtkObject" id="CTL_TRANS_PREVIEW-atkobject">
-                        <property name="AtkObject::accessible-name" translatable="yes" context="transparencytabpage|CTL_TRANS_PREVIEW-atkobject">Example</property>
+                    <property name="hscrollbar_policy">never</property>
+                    <property name="vscrollbar_policy">never</property>
+                    <property name="shadow_type">in</property>
+                    <child>
+                      <object class="GtkViewport">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkDrawingArea" id="CTL_TRANS_PREVIEW">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="hexpand">True</property>
+                            <property name="vexpand">True</property>
+                            <child internal-child="accessible">
+                              <object class="AtkObject" id="CTL_TRANS_PREVIEW-atkobject">
+                                <property name="AtkObject::accessible-name" translatable="yes" context="transparencytabpage|CTL_TRANS_PREVIEW-atkobject">Example</property>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
                       </object>
                     </child>
                   </object>
@@ -483,8 +545,8 @@
       <object class="GtkLabel" id="FL_PROP">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="xalign">0</property>
         <property name="label" translatable="yes" context="transparencytabpage|FL_PROP">Area Transparency Mode</property>
+        <property name="xalign">0</property>
         <attributes>
           <attribute name="weight" value="bold"/>
         </attributes>
@@ -495,13 +557,13 @@
     <property name="mode">both</property>
     <property name="ignore_hidden">True</property>
     <widgets>
-      <widget name="MTR_TRANSPARENT:0%"/>
-      <widget name="MTR_TRGR_END_VALUE:0%"/>
-      <widget name="MTR_TRGR_START_VALUE:0%"/>
-      <widget name="MTR_TRGR_BORDER:0%"/>
-      <widget name="MTR_TRGR_ANGLE:0degree"/>
-      <widget name="MTR_TRGR_CENTER_Y:0%"/>
-      <widget name="MTR_TRGR_CENTER_X:0%"/>
+      <widget name="MTR_TRANSPARENT"/>
+      <widget name="MTR_TRGR_END_VALUE"/>
+      <widget name="MTR_TRGR_START_VALUE"/>
+      <widget name="MTR_TRGR_BORDER"/>
+      <widget name="MTR_TRGR_ANGLE"/>
+      <widget name="MTR_TRGR_CENTER_Y"/>
+      <widget name="MTR_TRGR_CENTER_X"/>
       <widget name="LB_TRGR_GRADIENT_TYPES"/>
     </widgets>
   </object>
diff --git a/include/svx/dlgctrl.hxx b/include/svx/dlgctrl.hxx
index c7a1e1087765..e45f31db5193 100644
--- a/include/svx/dlgctrl.hxx
+++ b/include/svx/dlgctrl.hxx
@@ -382,6 +382,41 @@ public:
     }
 };
 
+class SAL_WARN_UNUSED SAL_DLLPUBLIC_RTTI PreviewBase : public weld::CustomWidgetController
+{
+private:
+    std::unique_ptr<SdrModel> mpModel;
+    VclPtr<VirtualDevice> mpBufferDevice;
+
+protected:
+    void InitSettings();
+
+    // prepare buffered paint
+    void LocalPrePaint(vcl::RenderContext const & rRenderContext);
+
+    // end and output buffered paint
+    void LocalPostPaint(vcl::RenderContext& rRenderContext);
+
+public:
+    PreviewBase();
+    virtual void SetDrawingArea(weld::DrawingArea*) override;
+    virtual ~PreviewBase() override;
+
+    // change support
+    virtual void StyleUpdated() override;
+
+    // dada read access
+    SdrModel& getModel() const
+    {
+        return *mpModel;
+    }
+    OutputDevice& getBufferDevice() const
+    {
+        return *mpBufferDevice;
+    }
+};
+
+
 /*************************************************************************
 |*
 |* SvxLinePreview
@@ -437,6 +472,22 @@ public:
     virtual void Resize() override;
 };
 
+class SAL_WARN_UNUSED SVX_DLLPUBLIC XRectPreview : public PreviewBase
+{
+private:
+    SdrObject* mpRectangleObject;
+
+public:
+    XRectPreview();
+    virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override;
+    virtual ~XRectPreview() override;
+
+    void SetAttributes(const SfxItemSet& rItemSet);
+
+    virtual void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) override;
+    virtual void Resize() override;
+};
+
 /*************************************************************************
 |*
 |* SvxXShadowPreview
diff --git a/include/vcl/customweld.hxx b/include/vcl/customweld.hxx
index 2d6089871ef3..622b20c256c5 100644
--- a/include/vcl/customweld.hxx
+++ b/include/vcl/customweld.hxx
@@ -104,6 +104,7 @@ public:
         m_xDrawingArea->set_size_request(nWidth, nHeight);
     }
     void show() { m_xDrawingArea->show(); }
+    void hide() { m_xDrawingArea->hide(); }
     void set_margin_top(int nMargin) { m_xDrawingArea->set_margin_top(nMargin); }
     void set_margin_bottom(int nMargin) { m_xDrawingArea->set_margin_bottom(nMargin); }
     void set_sensitive(bool bSensitive) { m_xDrawingArea->set_sensitive(bSensitive); }
diff --git a/svx/source/dialog/dlgctrl.cxx b/svx/source/dialog/dlgctrl.cxx
index eee6d668d1e0..ef1461d640f1 100644
--- a/svx/source/dialog/dlgctrl.cxx
+++ b/svx/source/dialog/dlgctrl.cxx
@@ -2176,4 +2176,153 @@ void SvxXShadowPreview::Paint(vcl::RenderContext& rRenderContext, const tools::R
     LocalPostPaint(rRenderContext);
 }
 
+void PreviewBase::InitSettings()
+{
+    const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
+
+    svtools::ColorConfig aColorConfig;
+    Color aTextColor(aColorConfig.GetColorValue(svtools::FONTCOLOR).nColor);
+    getBufferDevice().SetTextColor(aTextColor);
+
+    getBufferDevice().SetBackground(rStyleSettings.GetWindowColor());
+
+    getBufferDevice().SetDrawMode(rStyleSettings.GetHighContrastMode() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR);
+
+    Invalidate();
+}
+
+PreviewBase::PreviewBase()
+    : mpModel(new SdrModel())
+{
+    // init model
+    mpModel->GetItemPool().FreezeIdRanges();
+}
+
+void PreviewBase::SetDrawingArea(weld::DrawingArea* pDrawingArea)
+{
+    CustomWidgetController::SetDrawingArea(pDrawingArea);
+    mpBufferDevice = VclPtr<VirtualDevice>::Create(pDrawingArea->get_ref_device());
+    mpBufferDevice->SetMapMode(MapMode(MapUnit::Map100thMM));
+}
+
+PreviewBase::~PreviewBase()
+{
+    mpModel.reset();
+    mpBufferDevice.disposeAndClear();
+}
+
+void PreviewBase::LocalPrePaint(vcl::RenderContext const & rRenderContext)
+{
+    // init BufferDevice
+    if (mpBufferDevice->GetOutputSizePixel() != GetOutputSizePixel())
+    {
+        mpBufferDevice->SetDrawMode(rRenderContext.GetDrawMode());
+        mpBufferDevice->SetSettings(rRenderContext.GetSettings());
+        mpBufferDevice->SetAntialiasing(rRenderContext.GetAntialiasing());
+        mpBufferDevice->SetOutputSizePixel(GetOutputSizePixel());
+        mpBufferDevice->SetMapMode(rRenderContext.GetMapMode());
+    }
+
+    const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
+
+    if (rStyleSettings.GetPreviewUsesCheckeredBackground())
+    {
+        const Point aNull(0, 0);
+        static const sal_uInt32 nLen(8);
+        static const Color aW(COL_WHITE);
+        static const Color aG(0xef, 0xef, 0xef);
+        const bool bWasEnabled(mpBufferDevice->IsMapModeEnabled());
+
+        mpBufferDevice->EnableMapMode(false);
+        mpBufferDevice->DrawCheckered(aNull, mpBufferDevice->GetOutputSizePixel(), nLen, aW, aG);
+        mpBufferDevice->EnableMapMode(bWasEnabled);
+    }
+    else
+    {
+        mpBufferDevice->Erase();
+    }
+}
+
+void PreviewBase::LocalPostPaint(vcl::RenderContext& rRenderContext)
+{
+    // copy to front (in pixel mode)
+    const bool bWasEnabledSrc(mpBufferDevice->IsMapModeEnabled());
+    const bool bWasEnabledDst(rRenderContext.IsMapModeEnabled());
+    const Point aEmptyPoint;
+
+    mpBufferDevice->EnableMapMode(false);
+    rRenderContext.EnableMapMode(false);
+
+    rRenderContext.DrawOutDev(aEmptyPoint, GetOutputSizePixel(),
+                              aEmptyPoint, GetOutputSizePixel(),
+                              *mpBufferDevice);
+
+    mpBufferDevice->EnableMapMode(bWasEnabledSrc);
+    rRenderContext.EnableMapMode(bWasEnabledDst);
+}
+
+void PreviewBase::StyleUpdated()
+{
+    InitSettings();
+}
+
+XRectPreview::XRectPreview()
+    : mpRectangleObject(nullptr)
+{
+}
+
+void XRectPreview::SetDrawingArea(weld::DrawingArea* pDrawingArea)
+{
+    PreviewBase::SetDrawingArea(pDrawingArea);
+    InitSettings();
+
+    // create RectangleObject
+    const tools::Rectangle aObjectSize(Point(), GetOutputSizePixel());
+    mpRectangleObject = new SdrRectObj(
+        getModel(),
+        aObjectSize);
+}
+
+void XRectPreview::Resize()
+{
+    const tools::Rectangle aObjectSize(Point(), GetOutputSizePixel());
+    SdrObject *pOrigObject = mpRectangleObject;
+    if (pOrigObject)
+    {
+        mpRectangleObject = new SdrRectObj(
+            getModel(),
+            aObjectSize);
+        SetAttributes(pOrigObject->GetMergedItemSet());
+        SdrObject::Free(pOrigObject);
+    }
+    PreviewBase::Resize();
+}
+
+XRectPreview::~XRectPreview()
+{
+    SdrObject::Free(mpRectangleObject);
+}
+
+void XRectPreview::SetAttributes(const SfxItemSet& rItemSet)
+{
+    mpRectangleObject->SetMergedItemSet(rItemSet, true);
+    mpRectangleObject->SetMergedItem(XLineStyleItem(drawing::LineStyle_NONE));
+}
+
+void XRectPreview::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle&)
+{
+    LocalPrePaint(rRenderContext);
+
+    sdr::contact::SdrObjectVector aObjectVector;
+
+    aObjectVector.push_back(mpRectangleObject);
+
+    sdr::contact::ObjectContactOfObjListPainter aPainter(getBufferDevice(), aObjectVector, nullptr);
+    sdr::contact::DisplayInfo aDisplayInfo;
+
+    aPainter.ProcessDisplay(aDisplayInfo);
+
+    LocalPostPaint(rRenderContext);
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list