include/vcl/ColorDialog.hxx    |   14 ++++----------
 vcl/source/app/ColorDialog.cxx |   40 ++++++++++++++++++++++++++++------------
 2 files changed, 32 insertions(+), 22 deletions(-)

New commits:
commit 77c2dc5b69e0bfe8816e8aac3ced3b6478350294
Author:     Michael Weghorn <[email protected]>
AuthorDate: Fri Dec 5 16:21:37 2025 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Sat Dec 6 08:41:51 2025 +0100

    tdf#169505 Add abstract ColorDialogController
    
    Instead of using ColorChooserDialogController
    directly in ColorDialog, which makes use of native
    GTK and Qt color dialogs for those VCL plugins,
    introduce a new base class ColorDialogController
    and let ColorChooserDialogController subclass it
    and move the implementation from the header to
    the source file.
    
    This is another step to prepare for alternatively using
    the custom LibreOffice implementation of a color
    picker, ColorPickerDialog again in the future
    if a still to be introduced option is set.
    
    Change-Id: I15900a2bc164c86b74ffe70246b59cb43dcc0543
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195102
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/include/vcl/ColorDialog.hxx b/include/vcl/ColorDialog.hxx
index a55ecf47cec9..1fd9f138f51c 100644
--- a/include/vcl/ColorDialog.hxx
+++ b/include/vcl/ColorDialog.hxx
@@ -31,17 +31,11 @@ namespace vcl
     enum class ColorPickerMode { Select, Modify };
 }
 
-class ColorChooserDialogController : public weld::DialogController
+class ColorDialogController : public weld::DialogController
 {
-    std::unique_ptr<weld::ColorChooserDialog> m_pColorChooserDialog;
-
 public:
-    ColorChooserDialogController(std::unique_ptr<weld::ColorChooserDialog> 
pColorChooserDialog)
-        : m_pColorChooserDialog(std::move(pColorChooserDialog))
-    {
-    }
-
-    virtual weld::ColorChooserDialog* getDialog() override { return 
m_pColorChooserDialog.get(); }
+    virtual void SetColor(const Color& rColor) = 0;
+    virtual Color GetColor() const = 0;
 };
 
 class VCL_DLLPUBLIC ColorDialog final
@@ -57,7 +51,7 @@ public:
     void            ExecuteAsync(const std::function<void(sal_Int32)>& func);
 
 private:
-    std::shared_ptr<ColorChooserDialogController> 
m_pColorChooserDialogController;
+    std::shared_ptr<ColorDialogController> m_pColorDialogController;
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/app/ColorDialog.cxx b/vcl/source/app/ColorDialog.cxx
index 589af550dc88..b231fce639a5 100644
--- a/vcl/source/app/ColorDialog.cxx
+++ b/vcl/source/app/ColorDialog.cxx
@@ -24,33 +24,49 @@
 #include <vcl/abstdlg.hxx>
 #include <vcl/weld.hxx>
 
+namespace
+{
+class ColorChooserDialogController : public ColorDialogController
+{
+    std::unique_ptr<weld::ColorChooserDialog> m_pColorChooserDialog;
+
+public:
+    ColorChooserDialogController(std::unique_ptr<weld::ColorChooserDialog> 
pColorChooserDialog)
+        : m_pColorChooserDialog(std::move(pColorChooserDialog))
+    {
+    }
+
+    virtual void SetColor(const Color& rColor) override
+    {
+        m_pColorChooserDialog->set_color(rColor);
+    }
+    virtual Color GetColor() const override { return 
m_pColorChooserDialog->get_color(); }
+
+private:
+    virtual weld::ColorChooserDialog* getDialog() override { return 
m_pColorChooserDialog.get(); }
+};
+}
+
 ColorDialog::ColorDialog(weld::Window* pParent, vcl::ColorPickerMode eMode)
 {
     std::unique_ptr<weld::ColorChooserDialog> pDialog
         = GetSalInstance()->CreateColorChooserDialog(pParent, eMode);
     assert(pDialog);
     pDialog->set_modal(true);
-    m_pColorChooserDialogController
-        = std::make_shared<ColorChooserDialogController>(std::move(pDialog));
+    m_pColorDialogController = 
std::make_shared<ColorChooserDialogController>(std::move(pDialog));
 }
 
 ColorDialog::~ColorDialog() {}
 
-void ColorDialog::SetColor(const Color& rColor)
-{
-    m_pColorChooserDialogController->getDialog()->set_color(rColor);
-}
+void ColorDialog::SetColor(const Color& rColor) { 
m_pColorDialogController->SetColor(rColor); }
 
-Color ColorDialog::GetColor() const
-{
-    return m_pColorChooserDialogController->getDialog()->get_color();
-}
+Color ColorDialog::GetColor() const { return 
m_pColorDialogController->GetColor(); }
 
-short ColorDialog::Execute() { return m_pColorChooserDialogController->run(); }
+short ColorDialog::Execute() { return m_pColorDialogController->run(); }
 
 void ColorDialog::ExecuteAsync(const std::function<void(sal_Int32)>& func)
 {
-    weld::DialogController::runAsync(m_pColorChooserDialogController, func);
+    weld::DialogController::runAsync(m_pColorDialogController, func);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Reply via email to