summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-02-18 14:16:23 +0000
committerCaolán McNamara <caolanm@redhat.com>2016-02-19 20:17:00 +0000
commit63212b4614c134233f520cee95611ec5e7b3d8a0 (patch)
treebb21f84abc2ed6f1dfe558a89e6911472de02b44
parent9f0e9c7c52fe2685838cfd9f71a44105a3688d1d (diff)
Resolves: tdf#97953 spinbuttons are not suitable for reuse as up/down arrows
(cherry picked from commit 4f034adcb79684bc4138e2f9708defd8a3532f74) Change-Id: Ibcd7bd4099210a26513caac6e3b16a88a4c8abad refactor ImplDrawSpinButton there is (supposed to be anyway) no logic change here, just unwind the overly complex flow Change-Id: I9c96f41b0480a60c486b476f383d856b464cd62d (cherry picked from commit 55b33456c14aa5311fb0e3d71f1cad4fbd73cbef) Reviewed-on: https://gerrit.libreoffice.org/22486 Reviewed-by: David Ostrovsky <david@ostrovsky.org> Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--include/vcl/spin.h8
-rw-r--r--vcl/source/control/spinfld.cxx114
-rw-r--r--vcl/source/window/toolbox.cxx4
3 files changed, 71 insertions, 55 deletions
diff --git a/include/vcl/spin.h b/include/vcl/spin.h
index e4ce463db722..0f2f3eb20cb5 100644
--- a/include/vcl/spin.h
+++ b/include/vcl/spin.h
@@ -24,11 +24,19 @@
class Rectangle;
+// Draw Spinners as found in a SpinButton. Some themes like gtk3 will draw +- elements here,
+// so these are only suitable in the context of SpinButtons
void ImplDrawSpinButton(vcl::RenderContext& rRenderContext, vcl::Window* pWindow,
const Rectangle& rUpperRect, const Rectangle& rLowerRect,
bool bUpperIn, bool bLowerIn, bool bUpperEnabled = true, bool bLowerEnabled = true,
bool bHorz = false, bool bMirrorHorz = false);
+// Draw Up/Down buttons suitable for use in any context
+void ImplDrawUpDownButtons(vcl::RenderContext& rRenderContext,
+ const Rectangle& rUpperRect, const Rectangle& rLowerRect,
+ bool bUpperIn, bool bLowerIn, bool bUpperEnabled = true, bool bLowerEnabled = true,
+ bool bHorz = false, bool bMirrorHorz = false);
+
#endif // INCLUDED_VCL_SPIN_H
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/control/spinfld.cxx b/vcl/source/control/spinfld.cxx
index 750900f7522a..d4bb3a6b258e 100644
--- a/vcl/source/control/spinfld.cxx
+++ b/vcl/source/control/spinfld.cxx
@@ -158,49 +158,7 @@ void ImplDrawSpinButton(vcl::RenderContext& rRenderContext, vcl::Window* pWindow
bool bUpperIn, bool bLowerIn, bool bUpperEnabled, bool bLowerEnabled,
bool bHorz, bool bMirrorHorz)
{
- DecorationView aDecoView(&rRenderContext);
-
- DrawButtonFlags nStyle = DrawButtonFlags::NoLeftLightBorder;
- DrawSymbolFlags nSymStyle = DrawSymbolFlags::NONE;
-
- SymbolType eType1, eType2;
-
- const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings();
- if ( rStyleSettings.GetOptions() & StyleSettingsOptions::SpinArrow )
- {
- // arrows are only use in OS/2 look
- if ( bHorz )
- {
- eType1 = bMirrorHorz ? SymbolType::ARROW_RIGHT : SymbolType::ARROW_LEFT;
- eType2 = bMirrorHorz ? SymbolType::ARROW_LEFT : SymbolType::ARROW_RIGHT;
- }
- else
- {
- eType1 = SymbolType::ARROW_UP;
- eType2 = SymbolType::ARROW_DOWN;
- }
- }
- else
- {
- if ( bHorz )
- {
- eType1 = bMirrorHorz ? SymbolType::SPIN_RIGHT : SymbolType::SPIN_LEFT;
- eType2 = bMirrorHorz ? SymbolType::SPIN_LEFT : SymbolType::SPIN_RIGHT;
- }
- else
- {
- eType1 = SymbolType::SPIN_UP;
- eType2 = SymbolType::SPIN_DOWN;
- }
- }
-
- // draw upper/left Button
- DrawButtonFlags nTempStyle = nStyle;
- if (bUpperIn)
- nTempStyle |= DrawButtonFlags::Pressed;
-
bool bNativeOK = false;
- Rectangle aUpRect;
if (pWindow)
{
@@ -236,15 +194,66 @@ void ImplDrawSpinButton(vcl::RenderContext& rRenderContext, vcl::Window* pWindow
bNativeOK = ImplDrawNativeSpinbuttons(rRenderContext, aValue);
}
- if (!bNativeOK)
- aUpRect = aDecoView.DrawButton(rUpperRect, nTempStyle);
+ if (bNativeOK)
+ return;
+
+ ImplDrawUpDownButtons(rRenderContext,
+ rUpperRect, rLowerRect,
+ bUpperIn, bLowerIn, bUpperEnabled, bLowerEnabled,
+ bHorz, bMirrorHorz);
+}
+
+void ImplDrawUpDownButtons(vcl::RenderContext& rRenderContext,
+ const Rectangle& rUpperRect, const Rectangle& rLowerRect,
+ bool bUpperIn, bool bLowerIn, bool bUpperEnabled, bool bLowerEnabled,
+ bool bHorz, bool bMirrorHorz)
+{
+ DecorationView aDecoView(&rRenderContext);
+
+ SymbolType eType1, eType2;
+
+ const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings();
+ if ( rStyleSettings.GetOptions() & StyleSettingsOptions::SpinArrow )
+ {
+ // arrows are only use in OS/2 look
+ if ( bHorz )
+ {
+ eType1 = bMirrorHorz ? SymbolType::ARROW_RIGHT : SymbolType::ARROW_LEFT;
+ eType2 = bMirrorHorz ? SymbolType::ARROW_LEFT : SymbolType::ARROW_RIGHT;
+ }
+ else
+ {
+ eType1 = SymbolType::ARROW_UP;
+ eType2 = SymbolType::ARROW_DOWN;
+ }
+ }
+ else
+ {
+ if ( bHorz )
+ {
+ eType1 = bMirrorHorz ? SymbolType::SPIN_RIGHT : SymbolType::SPIN_LEFT;
+ eType2 = bMirrorHorz ? SymbolType::SPIN_LEFT : SymbolType::SPIN_RIGHT;
+ }
+ else
+ {
+ eType1 = SymbolType::SPIN_UP;
+ eType2 = SymbolType::SPIN_DOWN;
+ }
+ }
+
+ DrawButtonFlags nStyle = DrawButtonFlags::NoLeftLightBorder;
+ // draw upper/left Button
+ if (bUpperIn)
+ nStyle |= DrawButtonFlags::Pressed;
+
+ Rectangle aUpRect = aDecoView.DrawButton(rUpperRect, nStyle);
+ nStyle = DrawButtonFlags::NoLeftLightBorder;
// draw lower/right Button
if (bLowerIn)
nStyle |= DrawButtonFlags::Pressed;
- Rectangle aLowRect;
- if(!bNativeOK)
- aLowRect = aDecoView.DrawButton(rLowerRect, nStyle);
+
+ Rectangle aLowRect = aDecoView.DrawButton(rLowerRect, nStyle);
// make use of additional default edge
aUpRect.Left()--;
@@ -285,16 +294,15 @@ void ImplDrawSpinButton(vcl::RenderContext& rRenderContext, vcl::Window* pWindow
aLowRect.Top()++;
}
- DrawSymbolFlags nTempSymStyle = nSymStyle;
+ DrawSymbolFlags nSymStyle = DrawSymbolFlags::NONE;
if (!bUpperEnabled)
- nTempSymStyle |= DrawSymbolFlags::Disable;
- if (!bNativeOK)
- aDecoView.DrawSymbol(aUpRect, eType1, rStyleSettings.GetButtonTextColor(), nTempSymStyle);
+ nSymStyle |= DrawSymbolFlags::Disable;
+ aDecoView.DrawSymbol(aUpRect, eType1, rStyleSettings.GetButtonTextColor(), nSymStyle);
+ nSymStyle = DrawSymbolFlags::NONE;
if (!bLowerEnabled)
nSymStyle |= DrawSymbolFlags::Disable;
- if (!bNativeOK)
- aDecoView.DrawSymbol(aLowRect, eType2, rStyleSettings.GetButtonTextColor(), nSymStyle);
+ aDecoView.DrawSymbol(aLowRect, eType2, rStyleSettings.GetButtonTextColor(), nSymStyle);
}
void SpinField::ImplInitSpinFieldData()
diff --git a/vcl/source/window/toolbox.cxx b/vcl/source/window/toolbox.cxx
index 62140e435128..140a47317e81 100644
--- a/vcl/source/window/toolbox.cxx
+++ b/vcl/source/window/toolbox.cxx
@@ -2905,8 +2905,8 @@ void ToolBox::ImplDrawSpin(vcl::RenderContext& rRenderContext, bool bUpperIn, bo
bTmpLower = false;
}
- ImplDrawSpinButton(rRenderContext, this, maUpperRect, maLowerRect,
- bUpperIn, bLowerIn, bTmpUpper, bTmpLower, !mbHorz);
+ ImplDrawUpDownButtons(rRenderContext, maUpperRect, maLowerRect,
+ bUpperIn, bLowerIn, bTmpUpper, bTmpLower, !mbHorz);
}
void ToolBox::ImplDrawSeparator(vcl::RenderContext& rRenderContext, sal_uInt16 nPos, const Rectangle& rRect)