[Libreoffice-commits] core.git: vcl/inc vcl/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Sun Mar 10 07:40:41 UTC 2019


 vcl/inc/FileDefinitionWidgetDraw.hxx        |    2 -
 vcl/source/gdi/FileDefinitionWidgetDraw.cxx |   34 +++++++++++++++++++---------
 2 files changed, 25 insertions(+), 11 deletions(-)

New commits:
commit e9393e392e95ec8fcab77662790482aa0adf0f78
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Sat Mar 9 14:50:57 2019 +0100
Commit:     Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Sun Mar 10 08:40:20 2019 +0100

    only read and parse widget definition once from the file
    
    Change-Id: I71c095e5e5dd21650663e6fb717bcb22958a597f
    Reviewed-on: https://gerrit.libreoffice.org/68976
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>

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<WidgetDefinition> 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<WidgetDefinition> setWidgetDefinition(OUString const& rDefinitionFile,
+                                                      OUString const& rDefinitionResourcesPath)
+{
+    static std::shared_ptr<WidgetDefinition> spDefinition;
+    if (!spDefinition)
+    {
+        spDefinition = std::make_shared<WidgetDefinition>();
+        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);


More information about the Libreoffice-commits mailing list