1 7 package com.sun.java.swing.plaf.nimbus; 8 9 import javax.swing.UIManager ; 10 import java.awt.Color ; 11 import java.beans.PropertyChangeSupport ; 12 import java.beans.PropertyChangeListener ; 13 14 23 class DerivedColor extends Color { 24 private final PropertyChangeSupport changeSupport = 25 new PropertyChangeSupport (this); 26 private final String uiDefaultParentName; 27 private final float hOffset, sOffset, bOffset; 28 private final int aOffset; 29 private int argbValue; 30 31 DerivedColor(String uiDefaultParentName, float hOffset, float sOffset, float bOffset, int aOffset) { 32 super(0); 33 this.uiDefaultParentName = uiDefaultParentName; 34 this.hOffset = hOffset; 35 this.sOffset = sOffset; 36 this.bOffset = bOffset; 37 this.aOffset = aOffset; 38 } 39 40 public String getUiDefaultParentName() { 41 return uiDefaultParentName; 42 } 43 44 public float getHueOffset() { 45 return hOffset; 46 } 47 48 public float getSaturationOffset() { 49 return sOffset; 50 } 51 52 public float getBrightnessOffset() { 53 return bOffset; 54 } 55 56 public int getAlphaOffset() { 57 return aOffset; 58 } 59 60 63 public void rederiveColor() { 64 int old = argbValue; 65 Color src = UIManager.getColor(uiDefaultParentName); 66 if (src != null) { 67 float[] tmp = Color.RGBtoHSB(src.getRed(), src.getGreen(), src.getBlue(), null); 68 tmp[0] = clamp(tmp[0] + hOffset); 70 tmp[1] = clamp(tmp[1] + sOffset); 71 tmp[2] = clamp(tmp[2] + bOffset); 72 int alpha = clamp(src.getAlpha() + aOffset); 73 argbValue = (Color.HSBtoRGB(tmp[0], tmp[1], tmp[2]) & 0xFFFFFF) | (alpha << 24); 74 } else { 75 float[] tmp = new float[3]; 76 tmp[0] = clamp(hOffset); 77 tmp[1] = clamp(sOffset); 78 tmp[2] = clamp(bOffset); 79 int alpha = clamp(aOffset); 80 argbValue = (Color.HSBtoRGB(tmp[0], tmp[1], tmp[2]) & 0xFFFFFF) | (alpha << 24); 81 } 82 changeSupport.firePropertyChange("rgb", old, argbValue); 83 } 84 85 96 @Override public int getRGB() { 97 return argbValue; 98 } 99 100 @Override 101 public boolean equals(Object o) { 102 if (this == o) return true; 103 if (!(o instanceof DerivedColor)) return false; 104 DerivedColor that = (DerivedColor) o; 105 if (aOffset != that.aOffset) return false; 106 if (Float.compare(that.bOffset, bOffset) != 0) return false; 107 if (Float.compare(that.hOffset, hOffset) != 0) return false; 108 if (Float.compare(that.sOffset, sOffset) != 0) return false; 109 if (!uiDefaultParentName.equals(that.uiDefaultParentName)) return false; 110 return true; 111 } 112 113 @Override 114 public int hashCode() { 115 int result = uiDefaultParentName.hashCode(); 116 result = 31 * result + hOffset != +0.0f ? 117 Float.floatToIntBits(hOffset) : 0; 118 result = 31 * result + sOffset != +0.0f ? 119 Float.floatToIntBits(sOffset) : 0; 120 result = 31 * result + bOffset != +0.0f ? 121 Float.floatToIntBits(bOffset) : 0; 122 result = 31 * result + aOffset; 123 return result; 124 } 125 126 136 public void addPropertyChangeListener(PropertyChangeListener listener) { 137 changeSupport.addPropertyChangeListener(listener); 138 } 139 140 151 public void removePropertyChangeListener(PropertyChangeListener listener) { 152 changeSupport.removePropertyChangeListener(listener); 153 } 154 155 private float clamp(float value) { 156 if (value < 0) { 157 value = 0; 158 } else if (value > 1) { 159 value = 1; 160 } 161 return value; 162 } 163 164 private int clamp(int value) { 165 if (value < 0) { 166 value = 0; 167 } else if (value > 255) { 168 value = 255; 169 } 170 return value; 171 } 172 173 181 @Override 182 public String toString() { 183 Color src = UIManager.getColor(uiDefaultParentName); 184 String s = "DerivedColor(color=" + getRed() + "," + getGreen() + "," + getBlue() + 185 " parent=" + uiDefaultParentName + 186 " offsets=" + getHueOffset() + "," + getSaturationOffset() + "," 187 + getBrightnessOffset() + "," + getAlphaOffset(); 188 return src == null ? s : s + " pColor=" + src.getRed() + "," + src.getGreen() + "," + src.getBlue(); 189 } 190 191 static class UIResource extends DerivedColor implements javax.swing.plaf.UIResource { 192 UIResource(String uiDefaultParentName, float hOffset, float sOffset, 193 float bOffset, int aOffset) { 194 super(uiDefaultParentName, hOffset, sOffset, bOffset, aOffset); 195 } 196 } 197 } 198 | Popular Tags |