From 435068515a2b5981a564b9b9f5652789b07ed2ed Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Fri, 18 Dec 2020 13:25:04 +0100 Subject: [PATCH] always reset our graphics rendering hints (this is usually not necessary because each component gets its own instance of Graphics when painting, but resetting may avoid side effects if our paint methods are invoked directly) --- .../java/com/formdev/flatlaf/ui/FlatArrowButton.java | 9 +++++---- .../java/com/formdev/flatlaf/ui/FlatScrollBarUI.java | 4 ++-- .../main/java/com/formdev/flatlaf/ui/FlatSpinnerUI.java | 4 +++- .../java/com/formdev/flatlaf/ui/FlatSplitPaneUI.java | 5 +++-- .../com/formdev/flatlaf/ui/FlatToolBarSeparatorUI.java | 4 +++- .../java/com/formdev/flatlaf/extras/FlatInspector.java | 4 ++-- .../com/formdev/flatlaf/swingx/ui/FlatDatePickerUI.java | 4 +++- .../com/formdev/flatlaf/swingx/ui/FlatTaskPaneUI.java | 8 ++++++-- .../formdev/flatlaf/testing/FlatPaintingStringTest.java | 4 +++- .../com/formdev/flatlaf/testing/FlatPaintingTest.java | 4 +++- 10 files changed, 33 insertions(+), 17 deletions(-) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatArrowButton.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatArrowButton.java index 4b0e44f2..e5319a6d 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatArrowButton.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatArrowButton.java @@ -166,8 +166,7 @@ public class FlatArrowButton @Override public void paint( Graphics g ) { - Graphics2D g2 = (Graphics2D)g; - FlatUIUtils.setRenderingHints( g2 ); + Object[] oldRenderingHints = FlatUIUtils.setRenderingHints( g ); // paint hover or pressed background if( isEnabled() ) { @@ -179,7 +178,7 @@ public class FlatArrowButton if( background != null ) { g.setColor( deriveBackground( background ) ); - paintBackground( g2 ); + paintBackground( (Graphics2D) g ); } } @@ -191,7 +190,9 @@ public class FlatArrowButton ? hoverForeground : foreground)) : disabledForeground ) ); - paintArrow( g2 ); + paintArrow( (Graphics2D) g ); + + FlatUIUtils.resetRenderingHints( g, oldRenderingHints ); } protected void paintBackground( Graphics2D g ) { diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollBarUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollBarUI.java index 27760686..dfe86e99 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollBarUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollBarUI.java @@ -19,7 +19,6 @@ package com.formdev.flatlaf.ui; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; -import java.awt.Graphics2D; import java.awt.Insets; import java.awt.Rectangle; import java.awt.event.MouseAdapter; @@ -221,8 +220,9 @@ public class FlatScrollBarUI @Override public void paint( Graphics g, JComponent c ) { - FlatUIUtils.setRenderingHints( (Graphics2D) g ); + Object[] oldRenderingHints = FlatUIUtils.setRenderingHints( g ); super.paint( g, c ); + FlatUIUtils.resetRenderingHints( g, oldRenderingHints ); } @Override diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSpinnerUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSpinnerUI.java index 6fd6a0dd..0e548bc5 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSpinnerUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSpinnerUI.java @@ -264,7 +264,7 @@ public class FlatSpinnerUI FlatUIUtils.paintParentBackground( g, c ); Graphics2D g2 = (Graphics2D) g; - FlatUIUtils.setRenderingHints( g2 ); + Object[] oldRenderingHints = FlatUIUtils.setRenderingHints( g2 ); int width = c.getWidth(); int height = c.getHeight(); @@ -303,6 +303,8 @@ public class FlatSpinnerUI } paint( g, c ); + + FlatUIUtils.resetRenderingHints( g, oldRenderingHints ); } //---- class Handler ------------------------------------------------------ diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSplitPaneUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSplitPaneUI.java index c8e71c59..8103cda0 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSplitPaneUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSplitPaneUI.java @@ -20,7 +20,6 @@ import java.awt.Color; import java.awt.Container; import java.awt.Cursor; import java.awt.Graphics; -import java.awt.Graphics2D; import java.awt.Insets; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; @@ -148,10 +147,12 @@ public class FlatSplitPaneUI if( "plain".equals( style ) ) return; - FlatUIUtils.setRenderingHints( (Graphics2D) g ); + Object[] oldRenderingHints = FlatUIUtils.setRenderingHints( g ); g.setColor( gripColor ); paintGrip( g, 0, 0, getWidth(), getHeight() ); + + FlatUIUtils.resetRenderingHints( g, oldRenderingHints ); } protected void paintGrip( Graphics g, int x, int y, int width, int height ) { diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarSeparatorUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarSeparatorUI.java index 8d0fa657..d30eb30c 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarSeparatorUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarSeparatorUI.java @@ -106,13 +106,15 @@ public class FlatToolBarSeparatorUI float lineWidth = scale( 1f ); float offset = scale( 2f ); - FlatUIUtils.setRenderingHints( (Graphics2D) g ); + Object[] oldRenderingHints = FlatUIUtils.setRenderingHints( g ); g.setColor( separatorColor ); if( isVertical( c ) ) ((Graphics2D)g).fill( new Rectangle2D.Float( Math.round( (width - lineWidth) / 2f ), offset, lineWidth, height - (offset * 2) ) ); else ((Graphics2D)g).fill( new Rectangle2D.Float( offset, Math.round( (height - lineWidth) / 2f ), width - (offset * 2), lineWidth ) ); + + FlatUIUtils.resetRenderingHints( g, oldRenderingHints ); } private boolean isVertical( JComponent c ) { diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatInspector.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatInspector.java index 6e9f4225..35f03d46 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatInspector.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatInspector.java @@ -24,7 +24,6 @@ import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Font; import java.awt.Graphics; -import java.awt.Graphics2D; import java.awt.Insets; import java.awt.KeyboardFocusManager; import java.awt.LayoutManager; @@ -348,8 +347,9 @@ public class FlatInspector @Override protected void paintBorder( Graphics g ) { - FlatUIUtils.setRenderingHints( (Graphics2D) g ); + Object[] oldRenderingHints = FlatUIUtils.setRenderingHints( g ); super.paintBorder( g ); + FlatUIUtils.resetRenderingHints( g, oldRenderingHints ); } }; c.setBackground( new Color( 255, 0, 0, 32 ) ); diff --git a/flatlaf-swingx/src/main/java/com/formdev/flatlaf/swingx/ui/FlatDatePickerUI.java b/flatlaf-swingx/src/main/java/com/formdev/flatlaf/swingx/ui/FlatDatePickerUI.java index 27ada24a..105f78f6 100644 --- a/flatlaf-swingx/src/main/java/com/formdev/flatlaf/swingx/ui/FlatDatePickerUI.java +++ b/flatlaf-swingx/src/main/java/com/formdev/flatlaf/swingx/ui/FlatDatePickerUI.java @@ -218,7 +218,7 @@ public class FlatDatePickerUI FlatUIUtils.paintParentBackground( g, c ); Graphics2D g2 = (Graphics2D) g; - FlatUIUtils.setRenderingHints( g2 ); + Object[] oldRenderingHints = FlatUIUtils.setRenderingHints( g2 ); int width = c.getWidth(); int height = c.getHeight(); @@ -252,6 +252,8 @@ public class FlatDatePickerUI g2.fill( new Rectangle2D.Float( lx, focusWidth, lw, height - 1 - (focusWidth * 2) ) ); paint( g, c ); + + FlatUIUtils.resetRenderingHints( g2, oldRenderingHints ); } //---- class DefaultEditor ------------------------------------------------ diff --git a/flatlaf-swingx/src/main/java/com/formdev/flatlaf/swingx/ui/FlatTaskPaneUI.java b/flatlaf-swingx/src/main/java/com/formdev/flatlaf/swingx/ui/FlatTaskPaneUI.java index 5897438e..e71ac7ca 100644 --- a/flatlaf-swingx/src/main/java/com/formdev/flatlaf/swingx/ui/FlatTaskPaneUI.java +++ b/flatlaf-swingx/src/main/java/com/formdev/flatlaf/swingx/ui/FlatTaskPaneUI.java @@ -146,7 +146,7 @@ public class FlatTaskPaneUI if( color == null ) return; - FlatUIUtils.setRenderingHints( (Graphics2D) g ); + Object[] oldRenderingHints = FlatUIUtils.setRenderingHints( g ); g.setColor( color ); @@ -155,6 +155,8 @@ public class FlatTaskPaneUI path.append( new Rectangle2D.Float( x, y, width, height ), false ); path.append( new Rectangle2D.Float( x + lineWidth, y, width - (lineWidth * 2), height - lineWidth ), false ); ((Graphics2D)g).fill( path ); + + FlatUIUtils.resetRenderingHints( g, oldRenderingHints ); } @Override @@ -179,9 +181,11 @@ public class FlatTaskPaneUI { @Override public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) { - FlatUIUtils.setRenderingHints( (Graphics2D) g ); + Object[] oldRenderingHints = FlatUIUtils.setRenderingHints( g ); super.paintBorder( c, g, x, y, width, height ); + + FlatUIUtils.resetRenderingHints( g, oldRenderingHints ); } @Override diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingStringTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingStringTest.java index 155a65c3..d7fa7c3e 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingStringTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingStringTest.java @@ -180,7 +180,7 @@ public class FlatPaintingStringTest @Override protected void paintComponent( Graphics g ) { Graphics2D g2 = (Graphics2D) g; - FlatUIUtils.setRenderingHints( g2 ); + Object[] oldRenderingHints = FlatUIUtils.setRenderingHints( g2 ); // simulate component y position at a fraction if( scaleFactor > 1 && SystemInfo.isJava_9_orLater ) @@ -241,6 +241,8 @@ public class FlatPaintingStringTest double textY = t.getTranslateY() + (y * t.getScaleY()); setToolTipText( textY + " + " + yCorrection + " = " + (textY + yCorrection) ); } + + FlatUIUtils.resetRenderingHints( g2, oldRenderingHints ); } private int scale( int value ) { diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingTest.java index 9c2b934f..ae9642b2 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingTest.java @@ -471,7 +471,7 @@ public class FlatPaintingTest @Override protected void paintComponent( Graphics g ) { Graphics2D g2 = (Graphics2D) g; - FlatUIUtils.setRenderingHints( g2 ); + Object[] oldRenderingHints = FlatUIUtils.setRenderingHints( g2 ); g2.scale( scale, scale ); g2.translate( 1, 1 ); @@ -503,6 +503,8 @@ public class FlatPaintingTest g2d.setColor( Color.magenta ); g2d.drawRect( x2 - gap, y2 - gap, width2 + (gap * 2) - 1, height2 + (gap * 2) - 1 ); } ); + + FlatUIUtils.resetRenderingHints( g2, oldRenderingHints ); } } }