home *** CD-ROM | disk | FTP | other *** search
- import java.awt.image.ColorModel;
- import java.awt.image.IndexColorModel;
- import java.awt.image.RGBImageFilter;
-
- class ButtonFilter extends RGBImageFilter {
- boolean pressed;
- int defpercent;
- int border;
- int width;
- int height;
- ColorModel[] models = new ColorModel[7];
- ColorModel origbuttonmodel;
- private int[] savedranges;
-
- public ButtonFilter(boolean var1, int var2, int var3, int var4, int var5) {
- this.pressed = var1;
- this.defpercent = var2;
- this.border = var3;
- this.width = var4;
- this.height = var5;
- }
-
- public void setHints(int var1) {
- super.setHints(var1 & -5);
- }
-
- public void setColorModel(ColorModel var1) {
- if (var1 instanceof IndexColorModel) {
- IndexColorModel var2 = (IndexColorModel)var1;
- this.models[0] = this.filterIndexColorModel(var2, false, false, 0);
- this.models[1] = this.filterIndexColorModel(var2, true, !this.pressed, this.defpercent);
- this.models[2] = null;
- if (this.pressed) {
- this.models[3] = this.filterIndexColorModel(var2, true, false, this.defpercent / 2);
- } else {
- this.models[3] = this.models[0];
- }
-
- this.models[4] = null;
- this.models[5] = this.filterIndexColorModel(var2, true, this.pressed, this.defpercent);
- this.models[6] = this.models[0];
- this.origbuttonmodel = var1;
- super.consumer.setColorModel(this.models[3]);
- } else {
- super.setColorModel(var1);
- }
- }
-
- public IndexColorModel filterIndexColorModel(IndexColorModel var1, boolean var2, boolean var3, int var4) {
- byte[] var5 = new byte[256];
- byte[] var6 = new byte[256];
- byte[] var7 = new byte[256];
- byte[] var8 = new byte[256];
- int var9 = var1.getMapSize();
- var1.getReds(var5);
- var1.getGreens(var6);
- var1.getBlues(var7);
- if (var2) {
- var1.getAlphas(var8);
-
- for(int var10 = 0; var10 < var9; ++var10) {
- int var11 = this.filterRGB(var1.getRGB(var10), var3, var4);
- var8[var10] = (byte)(var11 >> 24);
- var5[var10] = (byte)(var11 >> 16);
- var6[var10] = (byte)(var11 >> 8);
- var7[var10] = (byte)var11;
- }
- }
-
- return new IndexColorModel(((ColorModel)var1).getPixelSize(), var9, var5, var6, var7, var8);
- }
-
- public void buttonRanges(int var1, int[] var2) {
- var2[0] = var2[1] = 0;
- if (var1 < this.border) {
- var2[2] = var2[3] = var2[4] = var2[5] = this.width - var1;
- var2[8] = var2[9] = var1;
- } else if (var1 > this.height - this.border) {
- var2[2] = var2[3] = var2[4] = var2[5] = this.height - var1;
- var2[8] = var2[9] = var1;
- } else {
- var2[2] = var2[3] = this.border;
- var2[4] = var2[5] = this.width - this.border;
- var2[8] = this.border;
- var2[9] = this.height - this.border;
- }
-
- var2[6] = var2[7] = this.width;
- }
-
- protected int[] getRanges(int var1) {
- int[] var2 = this.savedranges;
- if (var2 == null) {
- var2 = this.savedranges = new int[10];
- var2[8] = var2[9] = -1;
- }
-
- if (var1 < var2[8] || var1 > var2[9]) {
- this.buttonRanges(var1, var2);
- }
-
- return var2;
- }
-
- public void setPixels(int var1, int var2, int var3, int var4, ColorModel var5, byte[] var6, int var7, int var8) {
- if (var5 != this.origbuttonmodel) {
- super.setPixels(var1, var2, var3, var4, var5, var6, var7, var8);
- } else {
- int[] var9 = this.getRanges(var2);
- int var10 = var1 + var3;
- int var11 = var2 + var4;
-
- for(int var12 = var2; var12 < var11; ++var12) {
- if (var12 < var9[8] || var12 > var9[9]) {
- this.buttonRanges(var12, var9);
- }
-
- for(int var13 = 0; var13 < 7; ++var13) {
- if (var10 > var9[var13] && var1 < var9[var13 + 1]) {
- int var14 = Math.max(var1, var9[var13]);
- int var15 = Math.min(var10, var9[var13 + 1]);
- if (this.models[var13] == null) {
- super.setPixels(var14, var12, var15 - var14, 1, var5, var6, var7 + (var14 - var1), var8);
- } else if (var14 < var15) {
- super.consumer.setPixels(var14, var12, var15 - var14, 1, this.models[var13], var6, var7 + (var14 - var1), var8);
- }
- }
- }
-
- var7 += var8;
- }
-
- }
- }
-
- public int filterRGB(int var1, int var2, int var3) {
- boolean var4;
- int var5;
- if ((var1 >= this.border || var2 >= this.height - var1) && (var2 >= this.border || var1 >= this.width - var2)) {
- if (var1 < this.width - this.border && var2 < this.height - this.border) {
- if (!this.pressed) {
- return var3 & 16777215;
- }
-
- var4 = false;
- var5 = this.defpercent / 2;
- } else {
- var4 = this.pressed;
- var5 = this.defpercent;
- }
- } else {
- var4 = !this.pressed;
- var5 = this.defpercent;
- }
-
- return this.filterRGB(var3, var4, var5);
- }
-
- public int filterRGB(int var1, boolean var2, int var3) {
- int var4 = var1 >> 16 & 255;
- int var5 = var1 >> 8 & 255;
- int var6 = var1 & 255;
- if (var2) {
- var4 = 255 - (255 - var4) * (100 - var3) / 100;
- var5 = 255 - (255 - var5) * (100 - var3) / 100;
- var6 = 255 - (255 - var6) * (100 - var3) / 100;
- } else {
- var4 = var4 * (100 - var3) / 100;
- var5 = var5 * (100 - var3) / 100;
- var6 = var6 * (100 - var3) / 100;
- }
-
- return var1 & -16777216 | var4 << 16 | var5 << 8 | var6;
- }
- }
-