aboutsummaryrefslogtreecommitdiffstats
path: root/src/imports
diff options
context:
space:
mode:
authorRichard Moe Gustavsen <richard.gustavsen@qt.io>2020-10-27 15:34:37 +0100
committerRichard Moe Gustavsen <richard.gustavsen@qt.io>2020-10-28 11:59:09 +0100
commit3a545797ee94562f776bb62cd086d45dd7420149 (patch)
tree24c7cf626e895940aae72c7622558dd62e4f4e1e /src/imports
parent1c6e58d409f1f5bd2a88037da7f20d53943a357f (diff)
macOS: Update slider metrics by explicitly asking it to layout
Cherry-picked from qtbase:873579d1579 Change-Id: Icb9ba3cabe9d5bd6670a6e4659701d06ff048d13 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/imports')
-rw-r--r--src/imports/nativestyle/qstyle/mac/qquickmacstyle_mac.mm37
1 files changed, 4 insertions, 33 deletions
diff --git a/src/imports/nativestyle/qstyle/mac/qquickmacstyle_mac.mm b/src/imports/nativestyle/qstyle/mac/qquickmacstyle_mac.mm
index 3617b635..8b39949e 100644
--- a/src/imports/nativestyle/qstyle/mac/qquickmacstyle_mac.mm
+++ b/src/imports/nativestyle/qstyle/mac/qquickmacstyle_mac.mm
@@ -473,38 +473,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)
@@ -4942,8 +4915,6 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex
} else
#endif
{
- if (!hasDoubleTicks)
- fixStaleGeometry(slider);
NSSliderCell *cell = slider.cell;
const int numberOfTickMarks = slider.numberOfTickMarks;