home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VCafe / WDESAMPL.BIN / ButtonFilter.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-11-19  |  3.2 KB  |  176 lines

  1. import java.awt.image.ColorModel;
  2. import java.awt.image.IndexColorModel;
  3. import java.awt.image.RGBImageFilter;
  4.  
  5. class ButtonFilter extends RGBImageFilter {
  6.    boolean pressed;
  7.    int defpercent;
  8.    int border;
  9.    int width;
  10.    int height;
  11.    ColorModel[] models = new ColorModel[7];
  12.    ColorModel origbuttonmodel;
  13.    private int[] savedranges;
  14.  
  15.    public ButtonFilter(boolean var1, int var2, int var3, int var4, int var5) {
  16.       this.pressed = var1;
  17.       this.defpercent = var2;
  18.       this.border = var3;
  19.       this.width = var4;
  20.       this.height = var5;
  21.    }
  22.  
  23.    public void setHints(int var1) {
  24.       super.setHints(var1 & -5);
  25.    }
  26.  
  27.    public void setColorModel(ColorModel var1) {
  28.       if (var1 instanceof IndexColorModel) {
  29.          IndexColorModel var2 = (IndexColorModel)var1;
  30.          this.models[0] = this.filterIndexColorModel(var2, false, false, 0);
  31.          this.models[1] = this.filterIndexColorModel(var2, true, !this.pressed, this.defpercent);
  32.          this.models[2] = null;
  33.          if (this.pressed) {
  34.             this.models[3] = this.filterIndexColorModel(var2, true, false, this.defpercent / 2);
  35.          } else {
  36.             this.models[3] = this.models[0];
  37.          }
  38.  
  39.          this.models[4] = null;
  40.          this.models[5] = this.filterIndexColorModel(var2, true, this.pressed, this.defpercent);
  41.          this.models[6] = this.models[0];
  42.          this.origbuttonmodel = var1;
  43.          super.consumer.setColorModel(this.models[3]);
  44.       } else {
  45.          super.setColorModel(var1);
  46.       }
  47.    }
  48.  
  49.    public IndexColorModel filterIndexColorModel(IndexColorModel var1, boolean var2, boolean var3, int var4) {
  50.       byte[] var5 = new byte[256];
  51.       byte[] var6 = new byte[256];
  52.       byte[] var7 = new byte[256];
  53.       byte[] var8 = new byte[256];
  54.       int var9 = var1.getMapSize();
  55.       var1.getReds(var5);
  56.       var1.getGreens(var6);
  57.       var1.getBlues(var7);
  58.       if (var2) {
  59.          var1.getAlphas(var8);
  60.  
  61.          for(int var10 = 0; var10 < var9; ++var10) {
  62.             int var11 = this.filterRGB(var1.getRGB(var10), var3, var4);
  63.             var8[var10] = (byte)(var11 >> 24);
  64.             var5[var10] = (byte)(var11 >> 16);
  65.             var6[var10] = (byte)(var11 >> 8);
  66.             var7[var10] = (byte)var11;
  67.          }
  68.       }
  69.  
  70.       return new IndexColorModel(((ColorModel)var1).getPixelSize(), var9, var5, var6, var7, var8);
  71.    }
  72.  
  73.    public void buttonRanges(int var1, int[] var2) {
  74.       var2[0] = var2[1] = 0;
  75.       if (var1 < this.border) {
  76.          var2[2] = var2[3] = var2[4] = var2[5] = this.width - var1;
  77.          var2[8] = var2[9] = var1;
  78.       } else if (var1 > this.height - this.border) {
  79.          var2[2] = var2[3] = var2[4] = var2[5] = this.height - var1;
  80.          var2[8] = var2[9] = var1;
  81.       } else {
  82.          var2[2] = var2[3] = this.border;
  83.          var2[4] = var2[5] = this.width - this.border;
  84.          var2[8] = this.border;
  85.          var2[9] = this.height - this.border;
  86.       }
  87.  
  88.       var2[6] = var2[7] = this.width;
  89.    }
  90.  
  91.    protected int[] getRanges(int var1) {
  92.       int[] var2 = this.savedranges;
  93.       if (var2 == null) {
  94.          var2 = this.savedranges = new int[10];
  95.          var2[8] = var2[9] = -1;
  96.       }
  97.  
  98.       if (var1 < var2[8] || var1 > var2[9]) {
  99.          this.buttonRanges(var1, var2);
  100.       }
  101.  
  102.       return var2;
  103.    }
  104.  
  105.    public void setPixels(int var1, int var2, int var3, int var4, ColorModel var5, byte[] var6, int var7, int var8) {
  106.       if (var5 != this.origbuttonmodel) {
  107.          super.setPixels(var1, var2, var3, var4, var5, var6, var7, var8);
  108.       } else {
  109.          int[] var9 = this.getRanges(var2);
  110.          int var10 = var1 + var3;
  111.          int var11 = var2 + var4;
  112.  
  113.          for(int var12 = var2; var12 < var11; ++var12) {
  114.             if (var12 < var9[8] || var12 > var9[9]) {
  115.                this.buttonRanges(var12, var9);
  116.             }
  117.  
  118.             for(int var13 = 0; var13 < 7; ++var13) {
  119.                if (var10 > var9[var13] && var1 < var9[var13 + 1]) {
  120.                   int var14 = Math.max(var1, var9[var13]);
  121.                   int var15 = Math.min(var10, var9[var13 + 1]);
  122.                   if (this.models[var13] == null) {
  123.                      super.setPixels(var14, var12, var15 - var14, 1, var5, var6, var7 + (var14 - var1), var8);
  124.                   } else if (var14 < var15) {
  125.                      super.consumer.setPixels(var14, var12, var15 - var14, 1, this.models[var13], var6, var7 + (var14 - var1), var8);
  126.                   }
  127.                }
  128.             }
  129.  
  130.             var7 += var8;
  131.          }
  132.  
  133.       }
  134.    }
  135.  
  136.    public int filterRGB(int var1, int var2, int var3) {
  137.       boolean var4;
  138.       int var5;
  139.       if ((var1 >= this.border || var2 >= this.height - var1) && (var2 >= this.border || var1 >= this.width - var2)) {
  140.          if (var1 < this.width - this.border && var2 < this.height - this.border) {
  141.             if (!this.pressed) {
  142.                return var3 & 16777215;
  143.             }
  144.  
  145.             var4 = false;
  146.             var5 = this.defpercent / 2;
  147.          } else {
  148.             var4 = this.pressed;
  149.             var5 = this.defpercent;
  150.          }
  151.       } else {
  152.          var4 = !this.pressed;
  153.          var5 = this.defpercent;
  154.       }
  155.  
  156.       return this.filterRGB(var3, var4, var5);
  157.    }
  158.  
  159.    public int filterRGB(int var1, boolean var2, int var3) {
  160.       int var4 = var1 >> 16 & 255;
  161.       int var5 = var1 >> 8 & 255;
  162.       int var6 = var1 & 255;
  163.       if (var2) {
  164.          var4 = 255 - (255 - var4) * (100 - var3) / 100;
  165.          var5 = 255 - (255 - var5) * (100 - var3) / 100;
  166.          var6 = 255 - (255 - var6) * (100 - var3) / 100;
  167.       } else {
  168.          var4 = var4 * (100 - var3) / 100;
  169.          var5 = var5 * (100 - var3) / 100;
  170.          var6 = var6 * (100 - var3) / 100;
  171.       }
  172.  
  173.       return var1 & -16777216 | var4 << 16 | var5 << 8 | var6;
  174.    }
  175. }
  176.