diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2019-02-08 22:22:12 +0100 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2019-03-05 14:49:35 +0100 |
commit | d7dcaec4e201ca9e93991fe8dd8a83a11894c6ca (patch) | |
tree | 5c8615aabb54449b1249c7cbac448b14b68f29fc /vcl/source | |
parent | 25709fb43dc49cbc4a2b2cd81f949e91e2e01e7d (diff) |
Draw basic spinbox from the theme definition
Change-Id: I9b8379846a82f51365da7e7e2fd63cc21eb575a2
Reviewed-on: https://gerrit.libreoffice.org/68714
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Tested-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'vcl/source')
-rw-r--r-- | vcl/source/gdi/FileDefinitionWidgetDraw.cxx | 113 | ||||
-rw-r--r-- | vcl/source/gdi/WidgetDefinitionReader.cxx | 5 |
2 files changed, 116 insertions, 2 deletions
diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx index 78ef9a815de8..1e7c8928f0f1 100644 --- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx +++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx @@ -65,7 +65,11 @@ bool FileDefinitionWidgetDraw::isNativeControlSupported(ControlType eType, Contr case ControlType::MultilineEditbox: return true; case ControlType::Listbox: + return false; case ControlType::Spinbox: + if (ePart == ControlPart::AllButtons) + return false; + return true; case ControlType::SpinButtons: case ControlType::TabItem: case ControlType::TabPane: @@ -301,7 +305,71 @@ bool FileDefinitionWidgetDraw::drawNativeControl(ControlType eType, ControlPart } break; case ControlType::Listbox: + break; case ControlType::Spinbox: + { + if (rValue.getType() == ControlType::SpinButtons) + { + const SpinbuttonValue* pSpinVal = static_cast<const SpinbuttonValue*>(&rValue); + + ControlPart eUpButtonPart = pSpinVal->mnUpperPart; + ControlState eUpButtonState = pSpinVal->mnUpperState; + + ControlPart eDownButtonPart = pSpinVal->mnLowerPart; + ControlState eDownButtonState = pSpinVal->mnLowerState; + + { + std::shared_ptr<WidgetDefinitionPart> pPart + = m_aWidgetDefinition.getDefinition(eType, eUpButtonPart); + if (pPart) + { + std::shared_ptr<WidgetDefinitionState> pState + = pPart->getStates(eUpButtonState, ImplControlValue()).back(); + { + munchDrawCommands( + pState->mpDrawCommands, m_rGraphics, pSpinVal->maUpperRect.Left(), + pSpinVal->maUpperRect.Top(), pSpinVal->maUpperRect.GetWidth() - 1, + pSpinVal->maUpperRect.GetHeight() - 1); + bOK = true; + } + } + } + + if (bOK) + { + std::shared_ptr<WidgetDefinitionPart> pPart + = m_aWidgetDefinition.getDefinition(eType, eDownButtonPart); + if (pPart) + { + std::shared_ptr<WidgetDefinitionState> pState + = pPart->getStates(eDownButtonState, ImplControlValue()).back(); + { + munchDrawCommands( + pState->mpDrawCommands, m_rGraphics, pSpinVal->maLowerRect.Left(), + pSpinVal->maLowerRect.Top(), pSpinVal->maLowerRect.GetWidth() - 1, + pSpinVal->maLowerRect.GetHeight() - 1); + bOK = true; + } + } + } + } + else + { + std::shared_ptr<WidgetDefinitionPart> pPart + = m_aWidgetDefinition.getDefinition(eType, ePart); + if (pPart) + { + std::shared_ptr<WidgetDefinitionState> pState + = pPart->getStates(eState, ImplControlValue()).back(); + { + munchDrawCommands(pState->mpDrawCommands, m_rGraphics, nX, nY, nWidth, + nHeight); + bOK = true; + } + } + } + } + break; case ControlType::SpinButtons: case ControlType::TabItem: case ControlType::TabPane: @@ -334,12 +402,53 @@ bool FileDefinitionWidgetDraw::drawNativeControl(ControlType eType, ControlPart } bool FileDefinitionWidgetDraw::getNativeControlRegion( - ControlType eType, ControlPart /*ePart*/, const tools::Rectangle& /*rBoundingControlRegion*/, + ControlType eType, ControlPart ePart, const tools::Rectangle& rBoundingControlRegion, ControlState /*eState*/, const ImplControlValue& /*aValue*/, const OUString& /*aCaption*/, - tools::Rectangle& /*rNativeBoundingRegion*/, tools::Rectangle& rNativeContentRegion) + tools::Rectangle& rNativeBoundingRegion, tools::Rectangle& rNativeContentRegion) { switch (eType) { + case ControlType::Spinbox: + { + Size aButtonSize(44, 26); + Point aLocation(rBoundingControlRegion.TopLeft()); + + if (ePart == ControlPart::ButtonUp) + { + rNativeContentRegion = tools::Rectangle( + Point(aLocation.X() + rBoundingControlRegion.GetWidth() - aButtonSize.Width(), + aLocation.Y()), + aButtonSize); + rNativeBoundingRegion = rNativeContentRegion; + return true; + } + else if (ePart == ControlPart::ButtonDown) + { + rNativeContentRegion + = tools::Rectangle(Point(aLocation.X() + rBoundingControlRegion.GetWidth() + - (2 * aButtonSize.Width()), + aLocation.Y()), + aButtonSize); + rNativeBoundingRegion = rNativeContentRegion; + return true; + } + else if (ePart == ControlPart::SubEdit) + { + rNativeContentRegion = tools::Rectangle( + aLocation, Size(rBoundingControlRegion.GetWidth() - (2 * aButtonSize.Width()), + aButtonSize.Height())); + rNativeBoundingRegion = rNativeContentRegion; + return true; + } + else if (ePart == ControlPart::Entire) + { + rNativeContentRegion = tools::Rectangle( + aLocation, Size(rBoundingControlRegion.GetWidth(), aButtonSize.Height())); + rNativeBoundingRegion = rNativeContentRegion; + return true; + } + } + break; case ControlType::Checkbox: rNativeContentRegion = tools::Rectangle(Point(), Size(44, 26)); return true; diff --git a/vcl/source/gdi/WidgetDefinitionReader.cxx b/vcl/source/gdi/WidgetDefinitionReader.cxx index 72bd5649d4db..51b07f0ba6fe 100644 --- a/vcl/source/gdi/WidgetDefinitionReader.cxx +++ b/vcl/source/gdi/WidgetDefinitionReader.cxx @@ -158,6 +158,11 @@ bool getControlTypeForXmlString(OString const& rString, ControlType& reType) reType = ControlType::Combobox; bReturn = true; } + else if (rString == "spinbox") + { + reType = ControlType::Spinbox; + bReturn = true; + } return bReturn; } |