Added an option to specify an RGBImageFilter to a FlatSVGIcon

This commit is contained in:
DUDSS
2021-04-08 13:45:17 +02:00
parent 5eab843d97
commit 638af4bcd7
2 changed files with 47 additions and 2 deletions

View File

@@ -0,0 +1,23 @@
package com.formdev.flatlaf.extras;
import java.awt.*;
import java.awt.image.RGBImageFilter;
/**
* A simplified RGBImageFilter that presents individual rgba components as a Color object.
* Can be used to modify the color of a {@link FlatSVGIcon}-
*/
public abstract class FlatRGBFilter extends RGBImageFilter
{
@Override
public int filterRGB(int x, int y, int rgb) {
return filterRGB(new Color(rgb)).getRGB();
}
/**
* @param c Original color
* @return Modified color
*/
public abstract Color filterRGB(Color c);
}

View File

@@ -66,6 +66,8 @@ public class FlatSVGIcon
private final boolean disabled;
private final ClassLoader classLoader;
private RGBImageFilter userFilter = null;
private SVGDiagram diagram;
private boolean dark;
@@ -168,6 +170,19 @@ public class FlatSVGIcon
this.disabled = disabled;
}
/**
* Sets an RGBImageFilter to be used when painting the icon.
* For simple RGB modifications you can use the {@link FlatRGBFilter}.
* @param filter
*/
public void setFilter(RGBImageFilter filter) {
this.userFilter = filter;
}
public RGBImageFilter getFilter() {
return userFilter;
}
/**
* Creates a new icon with given width and height, which is derived from this icon.
*
@@ -303,7 +318,7 @@ public class FlatSVGIcon
: GrayFilter.createDisabledIconFilter( dark );
}
Graphics2D g2 = new GraphicsFilter( (Graphics2D) g.create(), ColorFilter.getInstance(), grayFilter );
Graphics2D g2 = new GraphicsFilter( (Graphics2D) g.create(), ColorFilter.getInstance(), grayFilter, this.userFilter );
try {
FlatUIUtils.setRenderingHints( g2 );
@@ -457,11 +472,13 @@ public class FlatSVGIcon
{
private final ColorFilter colorFilter;
private final RGBImageFilter grayFilter;
private final RGBImageFilter userFilter;
public GraphicsFilter( Graphics2D delegate, ColorFilter colorFilter, RGBImageFilter grayFilter ) {
public GraphicsFilter( Graphics2D delegate, ColorFilter colorFilter, RGBImageFilter grayFilter, RGBImageFilter userFilter) {
super( delegate );
this.colorFilter = colorFilter;
this.grayFilter = grayFilter;
this.userFilter = userFilter;
}
@Override
@@ -477,6 +494,11 @@ public class FlatSVGIcon
}
private Color filterColor( Color color ) {
if( userFilter != null ) {
int oldRGB = color.getRGB();
int newRGB = userFilter.filterRGB( 0, 0, oldRGB );
color = (newRGB != oldRGB) ? new Color( newRGB, true ) : color;
}
if( colorFilter != null )
color = colorFilter.filter( color );
if( grayFilter != null ) {