summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2019-01-10 07:38:59 +0100
committerTomaž Vajngerl <quikee@gmail.com>2019-03-04 12:29:02 +0100
commitffc0493902542277211d2653bf7bc81186df83fc (patch)
treeca2dcfb6278f3a722d01210a906c91ff7dda4b1e /vcl
parent3fc464ae8571f1eb4df3556149914848fd9c8e9d (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.mk1
-rw-r--r--vcl/headless/svpgdi.cxx8
-rw-r--r--vcl/inc/FileDefinitionWidgetDraw.hxx53
-rw-r--r--vcl/source/gdi/FileDefinitionWidgetDraw.cxx137
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: */