From fb15cdc546d99ca7c4a1d946d73ced839a5996cf Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Thu, 11 Aug 2022 18:09:47 +0200 Subject: [PATCH] Icons: - reduced temporary memory usage by specifying optimal initial capacity to `new Path2D.Float()` - replaced `path.append( new Line2D.Float(...) )` with `path.moveTo(...); path.lineTo(...);`, which does the same, but does not use temporary objects --- .../java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java | 2 +- .../formdev/flatlaf/icons/FlatCheckBoxMenuItemIcon.java | 2 +- .../java/com/formdev/flatlaf/icons/FlatClearIcon.java | 9 +++++---- .../com/formdev/flatlaf/icons/FlatHelpButtonIcon.java | 2 +- .../flatlaf/icons/FlatInternalFrameCloseIcon.java | 9 +++++---- .../flatlaf/icons/FlatOptionPaneQuestionIcon.java | 2 +- .../formdev/flatlaf/icons/FlatTabbedPaneCloseIcon.java | 9 +++++---- .../com/formdev/flatlaf/icons/FlatWindowCloseIcon.java | 9 +++++---- .../main/java/com/formdev/flatlaf/ui/FlatSliderUI.java | 2 +- .../main/java/com/formdev/flatlaf/ui/FlatUIUtils.java | 4 ++-- 10 files changed, 27 insertions(+), 23 deletions(-) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java index 730a7887..28afd50a 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java @@ -242,7 +242,7 @@ public class FlatCheckBoxIcon } protected void paintCheckmark( Component c, Graphics2D g ) { - Path2D.Float path = new Path2D.Float(); + Path2D.Float path = new Path2D.Float( Path2D.WIND_NON_ZERO, 3 ); path.moveTo( 4.5f, 7.5f ); path.lineTo( 6.6f, 10f ); path.lineTo( 11.25f, 3.5f ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxMenuItemIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxMenuItemIcon.java index 7079572f..30c85d79 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxMenuItemIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxMenuItemIcon.java @@ -76,7 +76,7 @@ public class FlatCheckBoxMenuItemIcon } protected void paintCheckmark( Graphics2D g2 ) { - Path2D.Float path = new Path2D.Float(); + Path2D.Float path = new Path2D.Float( Path2D.WIND_NON_ZERO, 3 ); path.moveTo( 4.5f, 7.5f ); path.lineTo( 6.6f, 10f ); path.lineTo( 11.25f, 3.5f ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatClearIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatClearIcon.java index 29044e64..58393f8f 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatClearIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatClearIcon.java @@ -20,7 +20,6 @@ import java.awt.Color; import java.awt.Component; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; -import java.awt.geom.Line2D; import java.awt.geom.Path2D; import java.util.Map; import javax.swing.AbstractButton; @@ -103,9 +102,11 @@ public class FlatClearIcon // paint cross g.setColor( clearIconColor ); - Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD ); - path.append( new Line2D.Float( 5,5, 11,11 ), false ); - path.append( new Line2D.Float( 5,11, 11,5 ), false ); + Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD, 4 ); + path.moveTo( 5, 5 ); + path.lineTo( 11, 11 ); + path.moveTo( 5, 11 ); + path.lineTo( 11, 5 ); g.draw( path ); } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatHelpButtonIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatHelpButtonIcon.java index 2a274064..2ef479e6 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatHelpButtonIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatHelpButtonIcon.java @@ -150,7 +150,7 @@ public class FlatHelpButtonIcon g2.fill( new Ellipse2D.Float( xy, xy, wh, wh ) ); // paint question mark - Path2D q = new Path2D.Float(); + Path2D q = new Path2D.Float( Path2D.WIND_NON_ZERO, 10 ); q.moveTo( 8,8.5 ); q.curveTo( 8.25,7, 9.66585007,6, 11,6 ); q.curveTo( 12.5,6, 14,7, 14,8.5 ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatInternalFrameCloseIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatInternalFrameCloseIcon.java index db6526fd..c4f002f8 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatInternalFrameCloseIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatInternalFrameCloseIcon.java @@ -20,7 +20,6 @@ import java.awt.BasicStroke; import java.awt.Color; import java.awt.Component; import java.awt.Graphics2D; -import java.awt.geom.Line2D; import java.awt.geom.Path2D; import javax.swing.UIManager; import com.formdev.flatlaf.ui.FlatButtonUI; @@ -58,9 +57,11 @@ public class FlatInternalFrameCloseIcon float my = height / 2; float r = 3.25f; - Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD ); - path.append( new Line2D.Float( mx - r, my - r, mx + r, my + r ), false ); - path.append( new Line2D.Float( mx - r, my + r, mx + r, my - r ), false ); + Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD, 4 ); + path.moveTo( mx - r, my - r ); + path.lineTo( mx + r, my + r ); + path.moveTo( mx - r, my + r ); + path.lineTo( mx + r, my - r ); g.setStroke( new BasicStroke( 1f ) ); g.draw( path ); } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatOptionPaneQuestionIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatOptionPaneQuestionIcon.java index 73104606..85495e28 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatOptionPaneQuestionIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatOptionPaneQuestionIcon.java @@ -53,7 +53,7 @@ public class FlatOptionPaneQuestionIcon @Override protected Shape createInside() { - Path2D q = new Path2D.Float(); + Path2D q = new Path2D.Float( Path2D.WIND_NON_ZERO, 10 ); q.moveTo( 11.5,11.75 ); q.curveTo( 11.75,9.5, 13.75,8, 16,8 ); q.curveTo( 18.25,8, 20.5,9.5, 20.5,11.75 ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTabbedPaneCloseIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTabbedPaneCloseIcon.java index 6f6220d6..ef2df55a 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTabbedPaneCloseIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTabbedPaneCloseIcon.java @@ -21,7 +21,6 @@ import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics2D; -import java.awt.geom.Line2D; import java.awt.geom.Path2D; import java.util.Map; import javax.swing.UIManager; @@ -100,9 +99,11 @@ public class FlatTabbedPaneCloseIcon float r = ((bg != null) ? closeCrossFilledSize : closeCrossPlainSize) / 2; // paint cross - Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD ); - path.append( new Line2D.Float( mx - r, my - r, mx + r, my + r ), false ); - path.append( new Line2D.Float( mx - r, my + r, mx + r, my - r ), false ); + Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD, 4 ); + path.moveTo( mx - r, my - r ); + path.lineTo( mx + r, my + r ); + path.moveTo( mx - r, my + r ); + path.lineTo( mx + r, my - r ); g.setStroke( new BasicStroke( closeCrossLineWidth ) ); g.draw( path ); } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowCloseIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowCloseIcon.java index d20ef27d..ef6e3b1b 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowCloseIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowCloseIcon.java @@ -20,7 +20,6 @@ import java.awt.BasicStroke; import java.awt.Color; import java.awt.Component; import java.awt.Graphics2D; -import java.awt.geom.Line2D; import java.awt.geom.Path2D; import javax.swing.UIManager; import com.formdev.flatlaf.ui.FlatButtonUI; @@ -57,9 +56,11 @@ public class FlatWindowCloseIcon int iy2 = iy + iwh - 1; float thickness = SystemInfo.isWindows_11_orLater ? (float) scaleFactor : (int) scaleFactor; - Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD ); - path.append( new Line2D.Float( ix, iy, ix2, iy2 ), false ); - path.append( new Line2D.Float( ix, iy2, ix2, iy ), false ); + Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD, 4 ); + path.moveTo( ix, iy ); + path.lineTo( ix2, iy2 ); + path.moveTo( ix, iy2 ); + path.lineTo( ix2, iy ); g.setStroke( new BasicStroke( thickness ) ); g.draw( path ); } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSliderUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSliderUI.java index e7bb62b7..790b5693 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSliderUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSliderUI.java @@ -531,7 +531,7 @@ debug*/ public static Shape createDirectionalThumbShape( float x, float y, float w, float h, float arc ) { float wh = w / 2; - Path2D path = new Path2D.Float(); + Path2D path = new Path2D.Float( Path2D.WIND_NON_ZERO, 9 ); path.moveTo( x + wh, y + h ); path.lineTo( x, y + (h - wh) ); path.lineTo( x, y + arc ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java index 95d30494..0a27a144 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java @@ -744,7 +744,7 @@ public class FlatUIUtils double ciBottomLeft = arcBottomLeft * ci; double ciBottomRight = arcBottomRight * ci; - Path2D rect = new Path2D.Float(); + Path2D rect = new Path2D.Float( Path2D.WIND_NON_ZERO, 16 ); rect.moveTo( x2 - arcTopRight, y ); rect.curveTo( x2 - ciTopRight, y, x2, y + ciTopRight, @@ -911,7 +911,7 @@ debug*/ * Creates an open or closed path for the given points. */ public static Path2D createPath( boolean close, double... points ) { - Path2D path = new Path2D.Float(); + Path2D path = new Path2D.Float( Path2D.WIND_NON_ZERO, points.length / 2 + (close ? 1 : 0) ); path.moveTo( points[0], points[1] ); for( int i = 2; i < points.length; ) { if( points[i] == QUAD_TO ) {