diff --git a/src/org/violetlib/jnr/aqua/impl/AquaNativePainter.java b/src/org/violetlib/jnr/aqua/impl/AquaNativePainter.java index db81049..7fc0b70 100644 --- a/src/org/violetlib/jnr/aqua/impl/AquaNativePainter.java +++ b/src/org/violetlib/jnr/aqua/impl/AquaNativePainter.java @@ -492,6 +492,8 @@ public void configureAppearance(@NotNull VAppearance appearance) } // NSSlider appears to figure out the orientation from the bounds. + // Note: w/h are modified here so that configureLayout picks up the adjusted dimensions. + // getPainter() saves and restores w/h to prevent these changes from leaking. if (sw == SliderWidget.SLIDER_HORIZONTAL || sw == SliderWidget.SLIDER_HORIZONTAL_RIGHT_TO_LEFT) { if (h >= w) { diff --git a/src/org/violetlib/jnr/aqua/impl/AquaUIPainterBase.java b/src/org/violetlib/jnr/aqua/impl/AquaUIPainterBase.java index 1ffef65..dca2856 100644 --- a/src/org/violetlib/jnr/aqua/impl/AquaUIPainterBase.java +++ b/src/org/violetlib/jnr/aqua/impl/AquaUIPainterBase.java @@ -146,10 +146,19 @@ public int getSliderRenderingVersion() public @NotNull Painter getPainter(@NotNull Configuration g) throws UnsupportedOperationException { - LayoutInfo layoutInfo = uiLayout.getLayoutInfo((LayoutConfiguration) g); - Renderer r = getRenderer(g); - Painter p = getPainter(layoutInfo, g, r); - return customizePainter(p, g, layoutInfo); + // Save and restore w/h because getRenderer may adjust them (see getSliderRenderer) + // and those adjustments must not leak beyond this call. + int savedW = w; + int savedH = h; + try { + LayoutInfo layoutInfo = uiLayout.getLayoutInfo((LayoutConfiguration) g); + Renderer r = getRenderer(g); + Painter p = getPainter(layoutInfo, g, r); + return customizePainter(p, g, layoutInfo); + } finally { + w = savedW; + h = savedH; + } } protected @NotNull Painter customizePainter(@NotNull Painter p, @NotNull Configuration g, @NotNull LayoutInfo layoutInfo)