diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2019-01-10 07:38:59 +0100 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2019-03-04 12:29:02 +0100 |
commit | ffc0493902542277211d2653bf7bc81186df83fc (patch) | |
tree | ca2dcfb6278f3a722d01210a906c91ff7dda4b1e /vcl | |
parent | 3fc464ae8571f1eb4df3556149914848fd9c8e9d (diff) |
WidgetDrawInterface impl. to draw widgets from file definitions
This adds FileDefinitionWidgetDraw which extends the
WidgetDrawInterface and is responsible to draw the widgets from
the definition gathered from an external file. The file must be
(currently) in the user folder named definition.xml.
It instantiates the WidgetDefinitionReader to get the definitions
and sets the style colors when updateSettings is called. Later
more definitions will be implemented.
Change-Id: Id02111e8aed4648e5a306b0f5dbc9a02c9b2fcb0
Reviewed-on: https://gerrit.libreoffice.org/68645
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/Library_vcl.mk | 1 | ||||
-rw-r--r-- | vcl/headless/svpgdi.cxx | 8 | ||||
-rw-r--r-- | vcl/inc/FileDefinitionWidgetDraw.hxx | 53 | ||||
-rw-r--r-- | vcl/source/gdi/FileDefinitionWidgetDraw.cxx | 137 |
4 files changed, 198 insertions, 1 deletions
diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk index ba49a711ee1e..c22cc2cdf2eb 100644 --- a/vcl/Library_vcl.mk +++ b/vcl/Library_vcl.mk @@ -260,6 +260,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\ vcl/source/gdi/svmconverter \ vcl/source/gdi/dibtools \ vcl/source/gdi/embeddedfontshelper \ + vcl/source/gdi/FileDefinitionWidgetDraw \ vcl/source/gdi/WidgetDefinitionReader \ vcl/source/gdi/extoutdevdata \ vcl/source/gdi/gdimtf \ diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx index fafa73fa3c56..a2b7e7933c22 100644 --- a/vcl/headless/svpgdi.cxx +++ b/vcl/headless/svpgdi.cxx @@ -27,6 +27,8 @@ #include <headless/CustomWidgetDraw.hxx> #include <saldatabasic.hxx> +#include <FileDefinitionWidgetDraw.hxx> + #include <sal/log.hxx> #include <tools/helpers.hxx> #include <o3tl/safeint.hxx> @@ -599,7 +601,11 @@ SvpSalGraphics::SvpSalGraphics() , m_ePaintMode(PaintMode::Over) , m_aTextRenderImpl(*this) { - if (comphelper::LibreOfficeKit::isActive()) + bool bFileDefinitionsWidgetDraw = !!getenv("VCL_DRAW_WIDGETS_FROM_FILE"); + + if (bFileDefinitionsWidgetDraw) + m_pWidgetDraw.reset(new vcl::FileDefinitionWidgetDraw(*this)); + else if (comphelper::LibreOfficeKit::isActive()) m_pWidgetDraw.reset(new vcl::CustomWidgetDraw(*this)); } diff --git a/vcl/inc/FileDefinitionWidgetDraw.hxx b/vcl/inc/FileDefinitionWidgetDraw.hxx new file mode 100644 index 000000000000..97181c17bbcb --- /dev/null +++ b/vcl/inc/FileDefinitionWidgetDraw.hxx @@ -0,0 +1,53 @@ +/* -*- 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_VCL_INC_FILEDEFINITIONWIDGETDRAW_HXX +#define INCLUDED_VCL_INC_FILEDEFINITIONWIDGETDRAW_HXX + +#include <vcl/dllapi.h> +#include "widgetdraw/WidgetDefinitionReader.hxx" +#include "salgdi.hxx" +#include "WidgetDrawInterface.hxx" + +namespace vcl +{ +class FileDefinitionWidgetDraw : public vcl::WidgetDrawInterface +{ +private: + SalGraphics& m_rGraphics; + WidgetDefinitionReader m_WidgetDefinitionReader; + +public: + FileDefinitionWidgetDraw(SalGraphics& rGraphics); + + bool isNativeControlSupported(ControlType eType, ControlPart ePart) override; + + bool hitTestNativeControl(ControlType eType, ControlPart ePart, + const tools::Rectangle& rBoundingControlRegion, const Point& aPos, + bool& rIsInside) override; + + bool drawNativeControl(ControlType eType, ControlPart ePart, + const tools::Rectangle& rBoundingControlRegion, ControlState eState, + const ImplControlValue& aValue, const OUString& aCaptions) override; + + bool getNativeControlRegion(ControlType eType, ControlPart ePart, + const tools::Rectangle& rBoundingControlRegion, ControlState eState, + const ImplControlValue& aValue, const OUString& aCaption, + tools::Rectangle& rNativeBoundingRegion, + tools::Rectangle& rNativeContentRegion) override; + + bool updateSettings(AllSettings& rSettings) override; +}; + +} // end vcl namespace + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx new file mode 100644 index 000000000000..9c6dbdaa206a --- /dev/null +++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx @@ -0,0 +1,137 @@ +/* -*- 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 <FileDefinitionWidgetDraw.hxx> + +#include <sal/config.h> +#include <svdata.hxx> +#include <rtl/bootstrap.hxx> +#include <config_folders.h> + +namespace vcl +{ +namespace +{ +OUString lcl_getClassificationUserPath() +{ + OUString sPath("${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER + "/" SAL_CONFIGFILE("bootstrap") ":UserInstallation}/user/"); + rtl::Bootstrap::expandMacros(sPath); + return sPath; +} + +} // end anonymous namespace + +FileDefinitionWidgetDraw::FileDefinitionWidgetDraw(SalGraphics& rGraphics) + : m_rGraphics(rGraphics) + , m_WidgetDefinitionReader(lcl_getClassificationUserPath() + "definition.xml") +{ + m_WidgetDefinitionReader.read(); + + ImplSVData* pSVData = ImplGetSVData(); + pSVData->maNWFData.mbNoFocusRects = true; + pSVData->maNWFData.mbNoFocusRectsForFlatButtons = true; +} + +bool FileDefinitionWidgetDraw::isNativeControlSupported(ControlType /*eType*/, + ControlPart /*ePart*/) +{ + return false; +} + +bool FileDefinitionWidgetDraw::hitTestNativeControl( + ControlType /*eType*/, ControlPart /*ePart*/, + const tools::Rectangle& /*rBoundingControlRegion*/, const Point& /*aPos*/, bool& /*rIsInside*/) +{ + return false; +} + +bool FileDefinitionWidgetDraw::drawNativeControl(ControlType /*eType*/, ControlPart /*ePart*/, + const tools::Rectangle& /*rControlRegion*/, + ControlState /*eState*/, + const ImplControlValue& /*rValue*/, + const OUString& /*aCaptions*/) +{ + (void)m_rGraphics; // avoid unused warning + return false; +} + +bool FileDefinitionWidgetDraw::getNativeControlRegion( + ControlType /*eType*/, ControlPart /*ePart*/, + const tools::Rectangle& /*rBoundingControlRegion*/, ControlState /*eState*/, + const ImplControlValue& /*aValue*/, const OUString& /*aCaption*/, + tools::Rectangle& /*rNativeBoundingRegion*/, tools::Rectangle& /*rNativeContentRegion*/) +{ + return false; +} + +bool FileDefinitionWidgetDraw::updateSettings(AllSettings& rSettings) +{ + StyleSettings aStyleSet = rSettings.GetStyleSettings(); + + aStyleSet.SetFaceColor(m_WidgetDefinitionReader.maFaceColor); + aStyleSet.SetCheckedColor(m_WidgetDefinitionReader.maCheckedColor); + aStyleSet.SetLightColor(m_WidgetDefinitionReader.maLightColor); + aStyleSet.SetLightBorderColor(m_WidgetDefinitionReader.maLightBorderColor); + aStyleSet.SetShadowColor(m_WidgetDefinitionReader.maShadowColor); + aStyleSet.SetDarkShadowColor(m_WidgetDefinitionReader.maDarkShadowColor); + aStyleSet.SetButtonTextColor(m_WidgetDefinitionReader.maButtonTextColor); + aStyleSet.SetButtonRolloverTextColor(m_WidgetDefinitionReader.maButtonRolloverTextColor); + aStyleSet.SetRadioCheckTextColor(m_WidgetDefinitionReader.maRadioCheckTextColor); + aStyleSet.SetGroupTextColor(m_WidgetDefinitionReader.maGroupTextColor); + aStyleSet.SetLabelTextColor(m_WidgetDefinitionReader.maLabelTextColor); + aStyleSet.SetWindowColor(m_WidgetDefinitionReader.maWindowColor); + aStyleSet.SetWindowTextColor(m_WidgetDefinitionReader.maWindowTextColor); + aStyleSet.SetDialogColor(m_WidgetDefinitionReader.maDialogColor); + aStyleSet.SetDialogTextColor(m_WidgetDefinitionReader.maDialogTextColor); + aStyleSet.SetWorkspaceColor(m_WidgetDefinitionReader.maWorkspaceColor); + aStyleSet.SetMonoColor(m_WidgetDefinitionReader.maMonoColor); + aStyleSet.SetFieldColor(m_WidgetDefinitionReader.maFieldColor); + aStyleSet.SetFieldTextColor(m_WidgetDefinitionReader.maFieldTextColor); + aStyleSet.SetFieldRolloverTextColor(m_WidgetDefinitionReader.maFieldRolloverTextColor); + aStyleSet.SetActiveColor(m_WidgetDefinitionReader.maActiveColor); + aStyleSet.SetActiveTextColor(m_WidgetDefinitionReader.maActiveTextColor); + aStyleSet.SetActiveBorderColor(m_WidgetDefinitionReader.maActiveBorderColor); + aStyleSet.SetDeactiveColor(m_WidgetDefinitionReader.maDeactiveColor); + aStyleSet.SetDeactiveTextColor(m_WidgetDefinitionReader.maDeactiveTextColor); + aStyleSet.SetDeactiveBorderColor(m_WidgetDefinitionReader.maDeactiveBorderColor); + aStyleSet.SetMenuColor(m_WidgetDefinitionReader.maMenuColor); + aStyleSet.SetMenuBarColor(m_WidgetDefinitionReader.maMenuBarColor); + aStyleSet.SetMenuBarRolloverColor(m_WidgetDefinitionReader.maMenuBarRolloverColor); + aStyleSet.SetMenuBorderColor(m_WidgetDefinitionReader.maMenuBorderColor); + aStyleSet.SetMenuTextColor(m_WidgetDefinitionReader.maMenuTextColor); + aStyleSet.SetMenuBarTextColor(m_WidgetDefinitionReader.maMenuBarTextColor); + aStyleSet.SetMenuBarRolloverTextColor(m_WidgetDefinitionReader.maMenuBarRolloverTextColor); + aStyleSet.SetMenuBarHighlightTextColor(m_WidgetDefinitionReader.maMenuBarHighlightTextColor); + aStyleSet.SetMenuHighlightColor(m_WidgetDefinitionReader.maMenuHighlightColor); + aStyleSet.SetMenuHighlightTextColor(m_WidgetDefinitionReader.maMenuHighlightTextColor); + aStyleSet.SetHighlightColor(m_WidgetDefinitionReader.maHighlightColor); + aStyleSet.SetHighlightTextColor(m_WidgetDefinitionReader.maHighlightTextColor); + aStyleSet.SetActiveTabColor(m_WidgetDefinitionReader.maActiveTabColor); + aStyleSet.SetInactiveTabColor(m_WidgetDefinitionReader.maInactiveTabColor); + aStyleSet.SetTabTextColor(m_WidgetDefinitionReader.maTabTextColor); + aStyleSet.SetTabRolloverTextColor(m_WidgetDefinitionReader.maTabRolloverTextColor); + aStyleSet.SetTabHighlightTextColor(m_WidgetDefinitionReader.maTabHighlightTextColor); + aStyleSet.SetDisableColor(m_WidgetDefinitionReader.maDisableColor); + aStyleSet.SetHelpColor(m_WidgetDefinitionReader.maHelpColor); + aStyleSet.SetHelpTextColor(m_WidgetDefinitionReader.maHelpTextColor); + aStyleSet.SetLinkColor(m_WidgetDefinitionReader.maLinkColor); + aStyleSet.SetVisitedLinkColor(m_WidgetDefinitionReader.maVisitedLinkColor); + aStyleSet.SetToolTextColor(m_WidgetDefinitionReader.maToolTextColor); + aStyleSet.SetFontColor(m_WidgetDefinitionReader.maFontColor); + + rSettings.SetStyleSettings(aStyleSet); + + return true; +} + +} // end vcl namespace + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |