summaryrefslogtreecommitdiffstats
path: root/src/plugins/styles
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@qt.io>2020-09-22 19:39:42 +0200
committerTor Arne Vestbø <tor.arne.vestbo@qt.io>2020-10-06 11:20:51 +0200
commit5930a0ebc0b177b3359d461548a200531fe4774e (patch)
treea5b6e85c7860480c0fec81feb4d2580ae6f9f652 /src/plugins/styles
parent57d6f842eadcfe59337e223237ef024de3b0e433 (diff)
macOS: Update slider metrics by explicitly asking it to layout
Pick-to: 5.15 Pick-to: 5.12 Change-Id: I283771624b513f4e8844c6130898ddf2531df0f1 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Diffstat (limited to 'src/plugins/styles')
-rw-r--r--src/plugins/styles/mac/qmacstyle_mac.mm37
1 files changed, 4 insertions, 33 deletions
diff --git a/src/plugins/styles/mac/qmacstyle_mac.mm b/src/plugins/styles/mac/qmacstyle_mac.mm
index 4f51f63665..904f94fc95 100644
--- a/src/plugins/styles/mac/qmacstyle_mac.mm
+++ b/src/plugins/styles/mac/qmacstyle_mac.mm
@@ -489,38 +489,11 @@ static bool setupSlider(NSSlider *slider, const QStyleOptionSlider *sl)
slider.numberOfTickMarks = 0;
}
- return true;
-}
+ // Ensure the values set above are reflected when asking
+ // the cell for its metrics and to draw itself.
+ [slider layoutSubtreeIfNeeded];
-static void fixStaleGeometry(NSSlider *slider)
-{
- // If it's later fixed in AppKit, this function is not needed.
- // On macOS Mojave we suddenly have NSSliderCell with a cached
- // (and stale) geometry, thus its -drawKnob, -drawBarInside:flipped:,
- // -drawTickMarks fail to render the slider properly. Setting the number
- // of tickmarks triggers an update in geometry.
-
- Q_ASSERT(slider);
-
- if (QOperatingSystemVersion::current() < QOperatingSystemVersion::MacOSMojave)
- return;
-
- NSSliderCell *cell = slider.cell;
- const NSRect barRect = [cell barRectFlipped:slider.isFlipped];
- const NSSize sliderSize = slider.frame.size;
- CGFloat difference = 0.;
- if (slider.vertical)
- difference = std::abs(sliderSize.height - barRect.size.height);
- else
- difference = std::abs(sliderSize.width - barRect.size.width);
-
- if (difference > 6.) {
- // Stale ...
- const auto nOfTicks = slider.numberOfTickMarks;
- // Non-zero, different from nOfTicks to force update
- slider.numberOfTickMarks = nOfTicks + 10;
- slider.numberOfTickMarks = nOfTicks;
- }
+ return true;
}
static bool isInMacUnifiedToolbarArea(QWindow *window, int windowY)
@@ -5377,8 +5350,6 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex
} else
#endif
{
- if (!hasDoubleTicks)
- fixStaleGeometry(slider);
NSSliderCell *cell = slider.cell;
const int numberOfTickMarks = slider.numberOfTickMarks;