diff options
author | Timur Pocheptsov <timur.pocheptsov@qt.io> | 2022-09-15 15:44:41 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-09-16 13:27:24 +0000 |
commit | 3ec62d9949012a4a57be1a6119298c962a700a3f (patch) | |
tree | 8c73eb16548cb15e6d295f3946a4b6ab8b3e0632 | |
parent | fe7122e17bc2a66c2ba26d5b899c774711556f9f (diff) |
mac style (quick): sync slider setup with qmacstyle
By essentially porting Volker's change (4bee9cdc0ac)
from qmacstyle_mac.
Fixes: QTBUG-106604
Change-Id: I3d17b96cb919299eb8e33afb9bfed7778423c88a
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
(cherry picked from commit 34a42dad18681911985a3648f7d8b19e3d174b63)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/quicknativestyle/qstyle/mac/qquickmacstyle_mac.mm | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/quicknativestyle/qstyle/mac/qquickmacstyle_mac.mm b/src/quicknativestyle/qstyle/mac/qquickmacstyle_mac.mm index d0a1333d6b..15df436d3c 100644 --- a/src/quicknativestyle/qstyle/mac/qquickmacstyle_mac.mm +++ b/src/quicknativestyle/qstyle/mac/qquickmacstyle_mac.mm @@ -397,7 +397,11 @@ static bool setupSlider(NSSlider *slider, const QStyleOptionSlider *sl) if (sl->minimum >= sl->maximum) return false; - slider.frame = sl->rect.toCGRect(); + // NSSlider seems to cache values based on tracking and the last layout of the + // NSView, resulting in incorrect knob rects that break the interaction with + // multiple sliders. So completely reinitialize the slider. + [slider initWithFrame:sl->rect.toCGRect()]; + slider.minValue = sl->minimum; slider.maxValue = sl->maximum; slider.intValue = sl->sliderPosition; @@ -427,6 +431,14 @@ static bool setupSlider(NSSlider *slider, const QStyleOptionSlider *sl) // the cell for its metrics and to draw itself. [slider layoutSubtreeIfNeeded]; + if (sl->state & QStyle::State_Sunken) { + const CGRect knobRect = [slider.cell knobRectFlipped:slider.isFlipped]; + CGPoint pressPoint; + pressPoint.x = CGRectGetMidX(knobRect); + pressPoint.y = CGRectGetMidY(knobRect); + [slider.cell startTrackingAt:pressPoint inView:slider]; + } + return true; } |