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 <[email protected]> AuthorDate: Tue May 14 16:53:57 2019 +0900 Commit: Tomaž Vajngerl <[email protected]> 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 <[email protected]> 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 <[email protected]> AuthorDate: Tue May 14 16:51:59 2019 +0900 Commit: Tomaž Vajngerl <[email protected]> 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 <[email protected]> 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; _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
