diff --git a/CHANGELOG.md b/CHANGELOG.md index e4c92db6..6f34f97e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ FlatLaf Change Log ================== +## 3.5-SNAPSHOT + +#### Fixed bugs + +- Extras: `FlatSVGIcon` color filters now support linear gradients. (PR #817) + + ## 3.4 #### New features and improvements diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGIcon.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGIcon.java index fe6d3dfb..39843369 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGIcon.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGIcon.java @@ -985,11 +985,12 @@ public class FlatSVGIcon paint = filterColor( (Color) paint ); else if( paint instanceof LinearGradientPaint ) { LinearGradientPaint oldPaint = (LinearGradientPaint) paint; - paint = new LinearGradientPaint( oldPaint.getStartPoint(), - oldPaint.getEndPoint(), - oldPaint.getFractions(), - filterColors( oldPaint.getColors() ), - oldPaint.getCycleMethod() ); + Color[] newColors = filterColors( oldPaint.getColors() ); + if( newColors != null ) { + paint = new LinearGradientPaint( oldPaint.getStartPoint(), oldPaint.getEndPoint(), + oldPaint.getFractions(), newColors, oldPaint.getCycleMethod(), + oldPaint.getColorSpace(), oldPaint.getTransform() ); + } } super.setPaint( paint ); } @@ -1013,9 +1014,12 @@ public class FlatSVGIcon private Color[] filterColors( Color[] colors ) { Color[] newColors = new Color[colors.length]; - for( int i = 0; i < colors.length; i++ ) + boolean changed = false; + for( int i = 0; i < colors.length; i++ ) { newColors[i] = filterColor( colors[i] ); - return newColors; + changed = (changed || newColors[i] != colors[i]); + } + return changed ? newColors : null; } } } diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/extras/FlatExtrasTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/extras/FlatExtrasTest.java index 143cf6cb..637e3392 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/extras/FlatExtrasTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/extras/FlatExtrasTest.java @@ -16,6 +16,7 @@ package com.formdev.flatlaf.testing.extras; +import java.awt.*; import javax.swing.*; import com.formdev.flatlaf.extras.*; import com.formdev.flatlaf.extras.components.*; @@ -75,6 +76,12 @@ public class FlatExtrasTest disabledTabbedPane2.setIconAt( 0, icon ); disabledTabbedPane2.setDisabledIconAt( 0, disabledIcon ); + addJSVGIcon( "linearGradient.svg", 64, 128 ); + addJSVGIcon( "stripes.svg", 128, 128 ); + addJSVGIcon( "gradientText0.svg", 128, 128 ); + addJSVGIcon( "gradientText1.svg", 128, 128 ); + addJSVGIcon( "gradientText2.svg", 128, 128 ); + disabledChanged(); } @@ -82,6 +89,10 @@ public class FlatExtrasTest svgIconsPanel.add( new JLabel( new FlatSVGIcon( "com/formdev/flatlaf/demo/extras/svg/" + name ) ) ); } + private void addJSVGIcon( String name, int width, int height ) { + gradientIconsPanel.add( new JLabel( new FlatSVGIcon( "com/formdev/flatlaf/testing/extras/jsvg/" + name, width, height ) ) ); + } + private void triStateCheckBox1Changed() { triStateLabel1.setText( triStateCheckBox1.getState().toString() ); } @@ -104,6 +115,9 @@ public class FlatExtrasTest disabledLabel2.setEnabled( enabled ); disabledButton2.setEnabled( enabled ); disabledTabbedPane2.setEnabledAt( 0, enabled ); + + for( Component c : gradientIconsPanel.getComponents() ) + c.setEnabled( enabled ); } @Override @@ -141,6 +155,7 @@ public class FlatExtrasTest disabledButton2 = new JButton(); disabledTabbedPane2 = new JTabbedPane(); label6 = new JLabel(); + gradientIconsPanel = new JPanel(); //======== this ======== setLayout(new MigLayout( @@ -156,6 +171,7 @@ public class FlatExtrasTest "[]" + "[]" + "[]" + + "[]" + "[]")); //---- label1 ---- @@ -251,6 +267,12 @@ public class FlatExtrasTest label6.setText("setIcon() and setDisabledIcon()"); label6.setEnabled(false); add(label6, "cell 1 6 2 1,gapx 20"); + + //======== gradientIconsPanel ======== + { + gradientIconsPanel.setLayout(new FlowLayout()); + } + add(gradientIconsPanel, "cell 1 7 2 1"); // JFormDesigner - End of component initialization //GEN-END:initComponents } @@ -275,5 +297,6 @@ public class FlatExtrasTest private JButton disabledButton2; private JTabbedPane disabledTabbedPane2; private JLabel label6; + private JPanel gradientIconsPanel; // JFormDesigner - End of variables declaration //GEN-END:variables } diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/extras/FlatExtrasTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/extras/FlatExtrasTest.jfd index 2853a30d..c91ae6d1 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/extras/FlatExtrasTest.jfd +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/extras/FlatExtrasTest.jfd @@ -1,4 +1,4 @@ -JFDML JFormDesigner: "7.0.3.1.342" Java: "15" encoding: "UTF-8" +JFDML JFormDesigner: "8.2.0.0.331" Java: "21" encoding: "UTF-8" new FormModel { contentType: "form/swing" @@ -6,7 +6,7 @@ new FormModel { add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { "$layoutConstraints": "ltr,insets dialog,hidemode 3" "$columnConstraints": "[][][left]" - "$rowConstraints": "[][][][][][][]" + "$rowConstraints": "[][][][][][][][]" } ) { name: "this" add( new FormComponent( "javax.swing.JLabel" ) { @@ -143,9 +143,14 @@ new FormModel { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 6 2 1,gapx 20" } ) + add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) { + name: "gradientIconsPanel" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 7 2 1" + } ) }, new FormLayoutConstraints( null ) { "location": new java.awt.Point( 0, 0 ) - "size": new java.awt.Dimension( 595, 470 ) + "size": new java.awt.Dimension( 645, 470 ) } ) } } diff --git a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/extras/jsvg/LICENSE.txt b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/extras/jsvg/LICENSE.txt new file mode 100644 index 00000000..ab0b9155 --- /dev/null +++ b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/extras/jsvg/LICENSE.txt @@ -0,0 +1,3 @@ +The SVG icons in this folder are from JSVG, +which is licensed under the MIT License +See: https://github.com/weisJ/jsvg diff --git a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/extras/jsvg/gradientText0.svg b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/extras/jsvg/gradientText0.svg new file mode 100644 index 00000000..53abaff4 --- /dev/null +++ b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/extras/jsvg/gradientText0.svg @@ -0,0 +1,12 @@ + + + + + + + + + Hello lovely World! + diff --git a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/extras/jsvg/gradientText1.svg b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/extras/jsvg/gradientText1.svg new file mode 100644 index 00000000..5be7b4f0 --- /dev/null +++ b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/extras/jsvg/gradientText1.svg @@ -0,0 +1,14 @@ + + + + + + + + + Hello + lovely + World! + + diff --git a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/extras/jsvg/gradientText2.svg b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/extras/jsvg/gradientText2.svg new file mode 100644 index 00000000..eabbcb30 --- /dev/null +++ b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/extras/jsvg/gradientText2.svg @@ -0,0 +1,14 @@ + + + + + + + + + Hello + lovely + World! + + diff --git a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/extras/jsvg/linearGradient.svg b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/extras/jsvg/linearGradient.svg new file mode 100644 index 00000000..4859f7a9 --- /dev/null +++ b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/extras/jsvg/linearGradient.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + diff --git a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/extras/jsvg/stripes.svg b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/extras/jsvg/stripes.svg new file mode 100644 index 00000000..91fdad81 --- /dev/null +++ b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/extras/jsvg/stripes.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +