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

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: 's avatarTomaž Vajngerl <quikee@gmail.com>
üst 32437e53
...@@ -22,7 +22,7 @@ class FileDefinitionWidgetDraw : public vcl::WidgetDrawInterface ...@@ -22,7 +22,7 @@ class FileDefinitionWidgetDraw : public vcl::WidgetDrawInterface
{ {
private: private:
SalGraphics& m_rGraphics; SalGraphics& m_rGraphics;
WidgetDefinition m_aWidgetDefinition; std::shared_ptr<WidgetDefinition> m_pWidgetDefinition;
bool resolveDefinition(ControlType eType, ControlPart ePart, ControlState eState, bool resolveDefinition(ControlType eType, ControlPart ePart, ControlState eState,
const ImplControlValue& rValue, long nX, long nY, long nWidth, const ImplControlValue& rValue, long nX, long nY, long nWidth,
......
...@@ -44,14 +44,28 @@ OUString lcl_getThemeDefinitionPath() ...@@ -44,14 +44,28 @@ OUString lcl_getThemeDefinitionPath()
return sPath; 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 } // end anonymous namespace
FileDefinitionWidgetDraw::FileDefinitionWidgetDraw(SalGraphics& rGraphics) FileDefinitionWidgetDraw::FileDefinitionWidgetDraw(SalGraphics& rGraphics)
: m_rGraphics(rGraphics) : m_rGraphics(rGraphics)
{ {
OUString sDefinitionBasePath = lcl_getThemeDefinitionPath(); OUString sDefinitionBasePath = lcl_getThemeDefinitionPath();
WidgetDefinitionReader aReader(sDefinitionBasePath + "definition.xml", sDefinitionBasePath);
aReader.read(m_aWidgetDefinition); m_pWidgetDefinition
= setWidgetDefinition(sDefinitionBasePath + "definition.xml", sDefinitionBasePath);
ImplSVData* pSVData = ImplGetSVData(); ImplSVData* pSVData = ImplGetSVData();
pSVData->maNWFData.mbNoFocusRects = true; pSVData->maNWFData.mbNoFocusRects = true;
...@@ -385,7 +399,7 @@ bool FileDefinitionWidgetDraw::resolveDefinition(ControlType eType, ControlPart ...@@ -385,7 +399,7 @@ bool FileDefinitionWidgetDraw::resolveDefinition(ControlType eType, ControlPart
long nWidth, long nHeight) long nWidth, long nHeight)
{ {
bool bOK = false; bool bOK = false;
auto const& pPart = m_aWidgetDefinition.getDefinition(eType, ePart); auto const& pPart = m_pWidgetDefinition->getDefinition(eType, ePart);
if (pPart) if (pPart)
{ {
auto const& aStates = pPart->getStates(eType, eState, rValue); auto const& aStates = pPart->getStates(eType, eState, rValue);
...@@ -588,13 +602,13 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion( ...@@ -588,13 +602,13 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion(
case ControlType::Spinbox: case ControlType::Spinbox:
{ {
auto const& pButtonUpPart auto const& pButtonUpPart
= m_aWidgetDefinition.getDefinition(eType, ControlPart::ButtonUp); = m_pWidgetDefinition->getDefinition(eType, ControlPart::ButtonUp);
if (!pButtonUpPart) if (!pButtonUpPart)
return false; return false;
Size aButtonSizeUp(pButtonUpPart->mnWidth, pButtonUpPart->mnHeight); Size aButtonSizeUp(pButtonUpPart->mnWidth, pButtonUpPart->mnHeight);
auto const& pButtonDownPart auto const& pButtonDownPart
= m_aWidgetDefinition.getDefinition(eType, ControlPart::ButtonDown); = m_pWidgetDefinition->getDefinition(eType, ControlPart::ButtonDown);
if (!pButtonDownPart) if (!pButtonDownPart)
return false; return false;
Size aButtonSizeDown(pButtonDownPart->mnWidth, pButtonDownPart->mnHeight); Size aButtonSizeDown(pButtonDownPart->mnWidth, pButtonDownPart->mnHeight);
...@@ -679,7 +693,7 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion( ...@@ -679,7 +693,7 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion(
break; break;
case ControlType::Checkbox: case ControlType::Checkbox:
{ {
auto const& pPart = m_aWidgetDefinition.getDefinition(eType, ControlPart::Entire); auto const& pPart = m_pWidgetDefinition->getDefinition(eType, ControlPart::Entire);
if (!pPart) if (!pPart)
return false; return false;
...@@ -689,7 +703,7 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion( ...@@ -689,7 +703,7 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion(
} }
case ControlType::Radiobutton: case ControlType::Radiobutton:
{ {
auto const& pPart = m_aWidgetDefinition.getDefinition(eType, ControlPart::Entire); auto const& pPart = m_pWidgetDefinition->getDefinition(eType, ControlPart::Entire);
if (!pPart) if (!pPart)
return false; return false;
...@@ -699,7 +713,7 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion( ...@@ -699,7 +713,7 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion(
} }
case ControlType::TabItem: case ControlType::TabItem:
{ {
auto const& pPart = m_aWidgetDefinition.getDefinition(eType, ControlPart::Entire); auto const& pPart = m_pWidgetDefinition->getDefinition(eType, ControlPart::Entire);
if (!pPart) if (!pPart)
return false; return false;
...@@ -743,7 +757,7 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion( ...@@ -743,7 +757,7 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion(
case ControlType::Combobox: case ControlType::Combobox:
case ControlType::Listbox: 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); Size aComboButtonSize(pPart->mnWidth, pPart->mnHeight);
if (ePart == ControlPart::ButtonDown) if (ePart == ControlPart::ButtonDown)
...@@ -786,7 +800,7 @@ bool FileDefinitionWidgetDraw::updateSettings(AllSettings& rSettings) ...@@ -786,7 +800,7 @@ bool FileDefinitionWidgetDraw::updateSettings(AllSettings& rSettings)
{ {
StyleSettings aStyleSet = rSettings.GetStyleSettings(); StyleSettings aStyleSet = rSettings.GetStyleSettings();
auto pDefinitionStyle = m_aWidgetDefinition.mpStyle; auto pDefinitionStyle = m_pWidgetDefinition->mpStyle;
aStyleSet.SetFaceColor(pDefinitionStyle->maFaceColor); aStyleSet.SetFaceColor(pDefinitionStyle->maFaceColor);
aStyleSet.SetCheckedColor(pDefinitionStyle->maCheckedColor); aStyleSet.SetCheckedColor(pDefinitionStyle->maCheckedColor);
......
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