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: */
