/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Tiny Look and Feel * * * * (C) Copyright 2003 - 2007 Hans Bickel * * * * For licensing information and credits, please refer to the * * comment in file de.muntjak.tinylookandfeel.TinyLookAndFeel * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package de.muntjak.tinylookandfeel.controlpanel; import java.awt.*; import java.io.*; import javax.swing.*; import javax.swing.plaf.ColorUIResource; import de.muntjak.tinylookandfeel.Theme; /** * ColorReference * * @version 1.0 * @author Hans Bickel */ public class ColorReference { // Possible ref values public static final int ABS_COLOR = 1; public static final int MAIN_COLOR = 2; public static final int BACK_COLOR = 3; public static final int DIS_COLOR = 4; public static final int FRAME_COLOR = 5; public static final int SUB1_COLOR = 6; public static final int SUB2_COLOR = 7; public static final int SUB3_COLOR = 8; public static final int SUB4_COLOR = 9; public static final int SUB5_COLOR = 10; public static final int SUB6_COLOR = 11; public static final int SUB7_COLOR = 12; public static final int SUB8_COLOR = 13; protected ColorUIResource c; protected int sat, bri; protected int ref; protected boolean locked; protected ColorIcon icon; protected static ColorIcon absolueIcon; public ColorReference() {} public ColorReference(Color c) { this.c = new ColorUIResource(c); sat = 0; bri = 0; ref = ABS_COLOR; } public ColorReference(Color c, int sat, int bri, int ref) { this.c = new ColorUIResource(c); this.sat = sat; this.bri = bri; this.ref = ref; } public ColorReference(Color c, int sat, int bri, int ref, boolean locked) { this.c = new ColorUIResource(c); this.sat = sat; this.bri = bri; this.ref = ref; this.locked = locked; } /** * Copy-constructor for derived ColorReferences, * called only from Theme.loadTheme(). * @param other */ public ColorReference(ColorReference other) { this.c = other.c; this.sat = other.sat; this.bri = other.bri; this.ref = other.ref; } /** * Copy-constructor for absolute ColorReferences, * called only from Theme.loadTheme(). * @param other */ public ColorReference(ColorReference other, int ref) { this.c = other.c; this.sat = 0; this.bri = 0; this.ref = ref; } public void reset() { sat = 0; bri = 0; } public ColorUIResource getColor() { return c; } public int getSaturation() { return sat; } public int getBrightness() { return bri; } public int getReference() { return ref; } public ColorUIResource getReferenceColor() { switch(ref) { case MAIN_COLOR: return Theme.mainColor[Theme.style].getColor(); case BACK_COLOR: return Theme.backColor[Theme.style].getColor(); case DIS_COLOR: return Theme.disColor[Theme.style].getColor(); case FRAME_COLOR: return Theme.frameColor[Theme.style].getColor(); case SUB1_COLOR: return Theme.sub1Color[Theme.style].getColor(); case SUB2_COLOR: return Theme.sub2Color[Theme.style].getColor(); case SUB3_COLOR: return Theme.sub3Color[Theme.style].getColor(); case SUB4_COLOR: return Theme.sub4Color[Theme.style].getColor(); case SUB5_COLOR: return Theme.sub5Color[Theme.style].getColor(); case SUB6_COLOR: return Theme.sub6Color[Theme.style].getColor(); case SUB7_COLOR: return Theme.sub7Color[Theme.style].getColor(); case SUB8_COLOR: return Theme.sub8Color[Theme.style].getColor(); default: return c; } } public static ColorUIResource getReferenceColor(int ref) { switch(ref) { case MAIN_COLOR: return Theme.mainColor[Theme.style].getColor(); case BACK_COLOR: return Theme.backColor[Theme.style].getColor(); case DIS_COLOR: return Theme.disColor[Theme.style].getColor(); case FRAME_COLOR: return Theme.frameColor[Theme.style].getColor(); case SUB1_COLOR: return Theme.sub1Color[Theme.style].getColor(); case SUB2_COLOR: return Theme.sub2Color[Theme.style].getColor(); case SUB3_COLOR: return Theme.sub3Color[Theme.style].getColor(); case SUB4_COLOR: return Theme.sub4Color[Theme.style].getColor(); case SUB5_COLOR: return Theme.sub5Color[Theme.style].getColor(); case SUB6_COLOR: return Theme.sub6Color[Theme.style].getColor(); case SUB7_COLOR: return Theme.sub7Color[Theme.style].getColor(); case SUB8_COLOR: return Theme.sub8Color[Theme.style].getColor(); default: return null; } } public String getReferenceString() { switch(ref) { case MAIN_COLOR: return "Main Color"; case BACK_COLOR: return "Back Color"; case DIS_COLOR: return "Disabled Color"; case FRAME_COLOR: return "Frame Color"; case SUB1_COLOR: return "Sub1 Color"; case SUB2_COLOR: return "Sub2 Color"; case SUB3_COLOR: return "Sub3 Color"; case SUB4_COLOR: return "Sub4 Color"; case SUB5_COLOR: return "Sub5 Color"; case SUB6_COLOR: return "Sub6 Color"; case SUB7_COLOR: return "Sub7 Color"; case SUB8_COLOR: return "Sub8 Color"; default: return ""; } } public void setColor(Color newColor) { if(!isAbsoluteColor()) return; c = new ColorUIResource(newColor); } public void setSaturation(int newSat) { sat = newSat; } public void setBrightness(int newBri) { bri = newBri; } public void setReference(int newRef) { ref = newRef; } public void setColor(int sat, int bri) { if(isAbsoluteColor()) return; this.sat = sat; this.bri = bri; switch(ref) { case MAIN_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.mainColor[Theme.style].getColor(), sat, bri)); break; case BACK_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.backColor[Theme.style].getColor(), sat, bri)); break; case DIS_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.disColor[Theme.style].getColor(), sat, bri)); break; case FRAME_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.frameColor[Theme.style].getColor(), sat, bri)); break; case SUB1_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.sub1Color[Theme.style].getColor(), sat, bri)); break; case SUB2_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.sub2Color[Theme.style].getColor(), sat, bri)); break; case SUB3_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.sub3Color[Theme.style].getColor(), sat, bri)); break; case SUB4_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.sub4Color[Theme.style].getColor(), sat, bri)); break; case SUB5_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.sub5Color[Theme.style].getColor(), sat, bri)); break; case SUB6_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.sub6Color[Theme.style].getColor(), sat, bri)); break; case SUB7_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.sub7Color[Theme.style].getColor(), sat, bri)); break; case SUB8_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.sub8Color[Theme.style].getColor(), sat, bri)); break; } } public ColorUIResource update() { if(isAbsoluteColor()) return c; switch(ref) { case MAIN_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.mainColor[Theme.style].getColor(), sat, bri)); break; case BACK_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.backColor[Theme.style].getColor(), sat, bri)); break; case DIS_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.disColor[Theme.style].getColor(), sat, bri)); break; case FRAME_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.frameColor[Theme.style].getColor(), sat, bri)); break; case SUB1_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.sub1Color[Theme.style].getColor(), sat, bri)); break; case SUB2_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.sub2Color[Theme.style].getColor(), sat, bri)); break; case SUB3_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.sub3Color[Theme.style].getColor(), sat, bri)); break; case SUB4_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.sub4Color[Theme.style].getColor(), sat, bri)); break; case SUB5_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.sub5Color[Theme.style].getColor(), sat, bri)); break; case SUB6_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.sub6Color[Theme.style].getColor(), sat, bri)); break; case SUB7_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.sub7Color[Theme.style].getColor(), sat, bri)); break; case SUB8_COLOR: c = new ColorUIResource( SBChooser.getAdjustedColor( Theme.sub8Color[Theme.style].getColor(), sat, bri)); break; } return c; } public boolean isAbsoluteColor() { return (ref == ABS_COLOR); } public void setLocked(boolean newLocked) { locked = newLocked; } public boolean isLocked() { return locked; } public String toString() { return c.toString(); } public Icon getIcon() { if(icon == null) { icon = new ColorIcon(false); } return icon; } public static Icon getAbsoluteIcon() { if(absolueIcon == null) { absolueIcon = new ColorReference(Color.BLACK).new ColorIcon(true); } return absolueIcon; } public void save(DataOutputStream out) throws IOException { out.writeInt(c.getRGB()); out.writeInt(sat); out.writeInt(bri); out.writeInt(ref); out.writeBoolean(locked); } public void load(DataInputStream in) throws IOException { try { if(Theme.fileID >= Theme.FILE_ID_3A) { c = new ColorUIResource(in.readInt()); } else { c = new ColorUIResource(in.readInt(), in.readInt(), in.readInt()); } sat = in.readInt(); bri = in.readInt(); ref = in.readInt(); locked = in.readBoolean(); } catch(Exception ex) { throw new IOException("ColorReference.load() : " + ex.getMessage()); } } class ColorIcon implements Icon { private boolean paintGradients; ColorIcon(boolean paintGradients) { this.paintGradients = paintGradients; } public int getIconHeight() { return 16; } public int getIconWidth() { return 16; } public void paintIcon(Component comp, Graphics g, int x, int y) { Color tempCol = g.getColor(); g.setColor(Color.GRAY); g.drawRect(x, y, getIconWidth(), getIconHeight()); if(paintGradients) { float hue = 0.0f; for(int i = 0; i < 15; i++) { g.setColor(Color.getHSBColor(hue, 0.5f, 1.0f)); g.drawLine(x + 1 + i, y + 1, x + 1 + i, y + getIconHeight() - 1); hue += 1.0 / 16.0; } } else { g.setColor(c); g.fillRect(x + 1, y + 1, getIconWidth() - 1, getIconHeight() - 1); } // draw arrow if(comp instanceof AbstractButton) { if(((AbstractButton)comp).isSelected()) { g.setColor(Color.WHITE); drawArrow(g, x + 1, y + 1); g.setColor(Color.BLACK); drawArrow(g, x, y); } } g.setColor(tempCol); } private void drawArrow(Graphics g, int x, int y) { g.drawLine(x + 3, y + 5, x + 3, y + 7); g.drawLine(x + 4, y + 6, x + 4, y + 8); g.drawLine(x + 5, y + 7, x + 5, y + 9); g.drawLine(x + 6, y + 6, x + 6, y + 8); g.drawLine(x + 7, y + 5, x + 7, y + 7); g.drawLine(x + 8, y + 4, x + 8, y + 6); g.drawLine(x + 9, y + 3, x + 9, y + 5); } } }