Kaydet (Commit) c6bf2562 authored tarafından Tomaž Vajngerl's avatar Tomaž Vajngerl Kaydeden (comit) Tomaž Vajngerl

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: 's avatarTomaž Vajngerl <quikee@gmail.com>
üst aa275f7a
......@@ -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,
......
......@@ -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)
......
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment