From e9393e392e95ec8fcab77662790482aa0adf0f78 Mon Sep 17 00:00:00 2001 From: Tomaž Vajngerl Date: Sat, 9 Mar 2019 14:50:57 +0100 Subject: only read and parse widget definition once from the file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I71c095e5e5dd21650663e6fb717bcb22958a597f Reviewed-on: https://gerrit.libreoffice.org/68976 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl --- vcl/inc/FileDefinitionWidgetDraw.hxx | 2 +- vcl/source/gdi/FileDefinitionWidgetDraw.cxx | 34 ++++++++++++++++++++--------- 2 files changed, 25 insertions(+), 11 deletions(-) (limited to 'vcl') diff --git a/vcl/inc/FileDefinitionWidgetDraw.hxx b/vcl/inc/FileDefinitionWidgetDraw.hxx index dc3ee7f8967c..24b9e0ab8a26 100644 --- a/vcl/inc/FileDefinitionWidgetDraw.hxx +++ b/vcl/inc/FileDefinitionWidgetDraw.hxx @@ -22,7 +22,7 @@ class FileDefinitionWidgetDraw : public vcl::WidgetDrawInterface { private: SalGraphics& m_rGraphics; - WidgetDefinition m_aWidgetDefinition; + std::shared_ptr m_pWidgetDefinition; bool resolveDefinition(ControlType eType, ControlPart ePart, ControlState eState, const ImplControlValue& rValue, long nX, long nY, long nWidth, diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx index bc2636491829..17b7c2c833db 100644 --- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx +++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx @@ -44,14 +44,28 @@ OUString lcl_getThemeDefinitionPath() return sPath; } +std::shared_ptr setWidgetDefinition(OUString const& rDefinitionFile, + OUString const& rDefinitionResourcesPath) +{ + static std::shared_ptr spDefinition; + if (!spDefinition) + { + spDefinition = std::make_shared(); + WidgetDefinitionReader aReader(rDefinitionFile, rDefinitionResourcesPath); + aReader.read(*spDefinition); + } + return spDefinition; +} + } // end anonymous namespace FileDefinitionWidgetDraw::FileDefinitionWidgetDraw(SalGraphics& rGraphics) : m_rGraphics(rGraphics) { OUString sDefinitionBasePath = lcl_getThemeDefinitionPath(); - WidgetDefinitionReader aReader(sDefinitionBasePath + "definition.xml", sDefinitionBasePath); - aReader.read(m_aWidgetDefinition); + + m_pWidgetDefinition + = setWidgetDefinition(sDefinitionBasePath + "definition.xml", sDefinitionBasePath); ImplSVData* pSVData = ImplGetSVData(); pSVData->maNWFData.mbNoFocusRects = true; @@ -385,7 +399,7 @@ bool FileDefinitionWidgetDraw::resolveDefinition(ControlType eType, ControlPart long nWidth, long nHeight) { bool bOK = false; - auto const& pPart = m_aWidgetDefinition.getDefinition(eType, ePart); + auto const& pPart = m_pWidgetDefinition->getDefinition(eType, ePart); if (pPart) { auto const& aStates = pPart->getStates(eType, eState, rValue); @@ -588,13 +602,13 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion( case ControlType::Spinbox: { auto const& pButtonUpPart - = m_aWidgetDefinition.getDefinition(eType, ControlPart::ButtonUp); + = m_pWidgetDefinition->getDefinition(eType, ControlPart::ButtonUp); if (!pButtonUpPart) return false; Size aButtonSizeUp(pButtonUpPart->mnWidth, pButtonUpPart->mnHeight); auto const& pButtonDownPart - = m_aWidgetDefinition.getDefinition(eType, ControlPart::ButtonDown); + = m_pWidgetDefinition->getDefinition(eType, ControlPart::ButtonDown); if (!pButtonDownPart) return false; Size aButtonSizeDown(pButtonDownPart->mnWidth, pButtonDownPart->mnHeight); @@ -679,7 +693,7 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion( break; case ControlType::Checkbox: { - auto const& pPart = m_aWidgetDefinition.getDefinition(eType, ControlPart::Entire); + auto const& pPart = m_pWidgetDefinition->getDefinition(eType, ControlPart::Entire); if (!pPart) return false; @@ -689,7 +703,7 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion( } case ControlType::Radiobutton: { - auto const& pPart = m_aWidgetDefinition.getDefinition(eType, ControlPart::Entire); + auto const& pPart = m_pWidgetDefinition->getDefinition(eType, ControlPart::Entire); if (!pPart) return false; @@ -699,7 +713,7 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion( } case ControlType::TabItem: { - auto const& pPart = m_aWidgetDefinition.getDefinition(eType, ControlPart::Entire); + auto const& pPart = m_pWidgetDefinition->getDefinition(eType, ControlPart::Entire); if (!pPart) return false; @@ -743,7 +757,7 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion( case ControlType::Combobox: case ControlType::Listbox: { - auto const& pPart = m_aWidgetDefinition.getDefinition(eType, ControlPart::ButtonDown); + auto const& pPart = m_pWidgetDefinition->getDefinition(eType, ControlPart::ButtonDown); Size aComboButtonSize(pPart->mnWidth, pPart->mnHeight); if (ePart == ControlPart::ButtonDown) @@ -786,7 +800,7 @@ bool FileDefinitionWidgetDraw::updateSettings(AllSettings& rSettings) { StyleSettings aStyleSet = rSettings.GetStyleSettings(); - auto pDefinitionStyle = m_aWidgetDefinition.mpStyle; + auto pDefinitionStyle = m_pWidgetDefinition->mpStyle; aStyleSet.SetFaceColor(pDefinitionStyle->maFaceColor); aStyleSet.SetCheckedColor(pDefinitionStyle->maCheckedColor); -- cgit