package org.limewire.ui.swing.util; import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Insets; import java.awt.Paint; import java.awt.RenderingHints; import java.awt.image.ConvolveOp; import java.awt.image.Kernel; public class PainterUtils { public static final Color TRANSPARENT = new Color(0,0,0,0); public static final Insets BLANK_INSETS = new Insets(0,0,0,0); /** * Draws a string to a graphics with anti-aliasing */ public static void drawSmoothString(Graphics g, String s, int x, int y) { Graphics2D g2 = (Graphics2D) g; // Get original anti-aliasing value for reset Object origAntiAliasHint = g2.getRenderingHint(RenderingHints.KEY_ANTIALIASING); // Turn on anti-aliasing g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // Draw the string g2.drawString(s, x, y); // Reset anti-aliasing property g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, origAntiAliasHint); } public static Color lighten(Color orig, int intensity) { return lighten(orig, Color.WHITE, intensity); } /** * Produces a new lightened colour value by a given intensity from a base colour. */ public static Color lighten(Color orig, Color threshold, int intensity) { if (TRANSPARENT.equals(orig)) { if (intensity >= 0) { return TRANSPARENT; } else { return lighten(threshold, threshold, intensity); } } int red = orig.getRed() + intensity; int green = orig.getGreen() + intensity; int blue = orig.getBlue() + intensity; if (intensity>0) { red = Math.min(red, 255); green = Math.min(green, 255); blue = Math.min(blue, 255); } else { red = Math.max(red, 0); green = Math.max(green, 0); blue = Math.max(blue, 0); } if (intensity>0 && red>=threshold.getRed() && green>=threshold.getGreen() && blue>=threshold.getBlue()) { return TRANSPARENT; } return new Color(red, green, blue); } /** * Creates a new softening filter based on a softening factor. */ public static ConvolveOp createSoftenFilter(float factor) { float[] transform = {0 , factor , 0 , factor, 1-factor*4, factor, 0 , factor , 0 }; Kernel kernel = new Kernel(3, 3, transform); return new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null); } public static Color appendAlpha(Color c, double opacity) { return new Color(c.getRed(), c.getGreen(), c.getBlue(), (int) Math.round(opacity*255)); } /** * Simplifies a paint to a colour. If the paint is already a colour * then simply cast. If it is a gradient then return the second point. * If unknown then return transparent. * <p> * Note: In future may consider returning null, however right now * transparent allows us to leverage null colours possibly * from empty props. */ public static Color getColour(Paint paint) { if (paint instanceof Color) { return (Color) paint; } if (paint instanceof GradientPaint) { return ((GradientPaint) paint).getColor2(); } return null; } }