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

Tomaž Vajngerl (via logerrit) logerrit at kemper.freedesktop.org
Tue May 14 12:10:11 UTC 2019


 vcl/inc/FileDefinitionWidgetDraw.hxx        |    4 +
 vcl/source/gdi/FileDefinitionWidgetDraw.cxx |   71 ++++++++++++++++++++--------
 vcl/source/gdi/salgdilayout.cxx             |    6 ++
 3 files changed, 62 insertions(+), 19 deletions(-)

New commits:
commit 5053584e71d98ae6bfba405145c45815ba7ad898
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Tue May 14 16:53:57 2019 +0900
Commit:     Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Tue May 14 14:09:17 2019 +0200

    Look for "online" theme when running LOOL and "ios" only on IOS
    
    Change-Id: I5ac2c764dd11381d6354a7727700ba1fa4b76a53
    Reviewed-on: https://gerrit.libreoffice.org/72269
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>

diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
index 9fb71db7e51e..e5dc455fd9cc 100644
--- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
+++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
@@ -90,8 +90,12 @@ FileDefinitionWidgetDraw::FileDefinitionWidgetDraw(SalGraphics& rGraphics)
     : m_rGraphics(rGraphics)
     , m_bIsActive(false)
 {
+    if (comphelper::LibreOfficeKit::isActive())
+        m_pWidgetDefinition = getWidgetDefinitionForTheme("online");
+#ifdef IOS
     if (!m_pWidgetDefinition)
         m_pWidgetDefinition = getWidgetDefinitionForTheme("ios");
+#endif
 
     if (m_pWidgetDefinition)
     {
commit c6bf2562df8ed060b0cf3da39c5641f080c01086
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Tue May 14 16:51:59 2019 +0900
Commit:     Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Tue May 14 14:09:08 2019 +0200

    Gaceful fallback if the widget theme files can't be found
    
    Change-Id: Ied3831c83ed385f5f28b82eb1ee67a2a4448cd05
    Reviewed-on: https://gerrit.libreoffice.org/72268
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>

diff --git a/vcl/inc/FileDefinitionWidgetDraw.hxx b/vcl/inc/FileDefinitionWidgetDraw.hxx
index 24b9e0ab8a26..a5b95c8fad6a 100644
--- a/vcl/inc/FileDefinitionWidgetDraw.hxx
+++ b/vcl/inc/FileDefinitionWidgetDraw.hxx
@@ -22,6 +22,8 @@ class FileDefinitionWidgetDraw : public vcl::WidgetDrawInterface
 {
 private:
     SalGraphics& m_rGraphics;
+    bool m_bIsActive;
+
     std::shared_ptr<WidgetDefinition> m_pWidgetDefinition;
 
     bool resolveDefinition(ControlType eType, ControlPart ePart, ControlState eState,
@@ -31,6 +33,8 @@ private:
 public:
     FileDefinitionWidgetDraw(SalGraphics& rGraphics);
 
+    bool isActive() { return m_bIsActive; }
+
     bool isNativeControlSupported(ControlType eType, ControlPart ePart) override;
 
     bool hitTestNativeControl(ControlType eType, ControlPart ePart,
diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
index 3373285b8a92..9fb71db7e51e 100644
--- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
+++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
@@ -14,6 +14,7 @@
 #include <svdata.hxx>
 #include <rtl/bootstrap.hxx>
 #include <config_folders.h>
+#include <osl/file.hxx>
 
 #include <basegfx/range/b2drectangle.hxx>
 #include <basegfx/polygon/b2dpolygontools.hxx>
@@ -45,15 +46,40 @@ OUString lcl_getThemeDefinitionPath()
     return sPath;
 }
 
-std::shared_ptr<WidgetDefinition> setWidgetDefinition(OUString const& rDefinitionFile,
+bool lcl_directoryExists(OUString const& sDirectory)
+{
+    osl::DirectoryItem aDirectoryItem;
+    osl::FileBase::RC eRes = osl::DirectoryItem::get(sDirectory, aDirectoryItem);
+    return eRes == osl::FileBase::E_None;
+}
+
+bool lcl_fileExists(OUString const& sFilename)
+{
+    osl::File aFile(sFilename);
+    osl::FileBase::RC eRC = aFile.open(osl_File_OpenFlag_Read);
+    return osl::FileBase::E_None == eRC;
+}
+
+std::shared_ptr<WidgetDefinition> getWidgetDefinition(OUString const& rDefinitionFile,
                                                       OUString const& rDefinitionResourcesPath)
 {
+    auto pWidgetDefinition = std::make_shared<WidgetDefinition>();
+    WidgetDefinitionReader aReader(rDefinitionFile, rDefinitionResourcesPath);
+    if (aReader.read(*pWidgetDefinition))
+        return pWidgetDefinition;
+    return std::shared_ptr<WidgetDefinition>();
+}
+
+std::shared_ptr<WidgetDefinition> getWidgetDefinitionForTheme(OUString const& rThemenName)
+{
     static std::shared_ptr<WidgetDefinition> spDefinition;
     if (!spDefinition)
     {
-        spDefinition = std::make_shared<WidgetDefinition>();
-        WidgetDefinitionReader aReader(rDefinitionFile, rDefinitionResourcesPath);
-        aReader.read(*spDefinition);
+        OUString sSharedDefinitionBasePath = lcl_getThemeDefinitionPath();
+        OUString sThemeFolder = sSharedDefinitionBasePath + rThemenName + "/";
+        OUString sThemeDefinitionFile = sThemeFolder + "definition.xml";
+        if (lcl_directoryExists(sThemeFolder) && lcl_fileExists(sThemeDefinitionFile))
+            spDefinition = getWidgetDefinition(sThemeDefinitionFile, sThemeFolder);
     }
     return spDefinition;
 }
@@ -62,22 +88,25 @@ std::shared_ptr<WidgetDefinition> setWidgetDefinition(OUString const& rDefinitio
 
 FileDefinitionWidgetDraw::FileDefinitionWidgetDraw(SalGraphics& rGraphics)
     : m_rGraphics(rGraphics)
+    , m_bIsActive(false)
 {
-    OUString sDefinitionBasePath = lcl_getThemeDefinitionPath();
-    OUString sThemeName = "ios";
-    OUString sThemeFolder = sDefinitionBasePath + sThemeName + "/";
-
-    m_pWidgetDefinition = setWidgetDefinition(sThemeFolder + "definition.xml", sThemeFolder);
-
-    ImplSVData* pSVData = ImplGetSVData();
-    pSVData->maNWFData.mbNoFocusRects = true;
-    pSVData->maNWFData.mbNoFocusRectsForFlatButtons = true;
-    pSVData->maNWFData.mbNoActiveTabTextRaise = true;
-    pSVData->maNWFData.mbCenteredTabs = true;
-    pSVData->maNWFData.mbProgressNeedsErase = true;
-    pSVData->maNWFData.mnStatusBarLowerRightOffset = 10;
-    pSVData->maNWFData.mbCanDrawWidgetAnySize = true;
-    pSVData->maNWFData.mnListBoxEntryMargin = 20;
+    if (!m_pWidgetDefinition)
+        m_pWidgetDefinition = getWidgetDefinitionForTheme("ios");
+
+    if (m_pWidgetDefinition)
+    {
+        ImplSVData* pSVData = ImplGetSVData();
+        pSVData->maNWFData.mbNoFocusRects = true;
+        pSVData->maNWFData.mbNoFocusRectsForFlatButtons = true;
+        pSVData->maNWFData.mbNoActiveTabTextRaise = true;
+        pSVData->maNWFData.mbCenteredTabs = true;
+        pSVData->maNWFData.mbProgressNeedsErase = true;
+        pSVData->maNWFData.mnStatusBarLowerRightOffset = 10;
+        pSVData->maNWFData.mbCanDrawWidgetAnySize = true;
+        pSVData->maNWFData.mnListBoxEntryMargin = 20;
+
+        m_bIsActive = true;
+    }
 }
 
 bool FileDefinitionWidgetDraw::isNativeControlSupported(ControlType eType, ControlPart ePart)
diff --git a/vcl/source/gdi/salgdilayout.cxx b/vcl/source/gdi/salgdilayout.cxx
index 22199c52a712..0ab8bb6ccd75 100644
--- a/vcl/source/gdi/salgdilayout.cxx
+++ b/vcl/source/gdi/salgdilayout.cxx
@@ -70,6 +70,12 @@ bool SalGraphics::initWidgetDrawBackends(bool bForce)
     if (bFileDefinitionsWidgetDraw || bForce)
     {
         m_pWidgetDraw.reset(new vcl::FileDefinitionWidgetDraw(*this));
+        auto pFileDefinitionWidgetDraw = static_cast<vcl::FileDefinitionWidgetDraw*>(m_pWidgetDraw.get());
+        if (!pFileDefinitionWidgetDraw->isActive())
+        {
+            m_pWidgetDraw.reset();
+            return false;
+        }
         return true;
     }
     return false;


More information about the Libreoffice-commits mailing list