home *** CD-ROM | disk | FTP | other *** search
- package java.awt;
-
- import java.awt.geom.AffineTransform;
- import java.awt.geom.NoninvertibleTransformException;
- import java.awt.geom.Point2D;
- import java.awt.image.ColorModel;
- import java.awt.image.DirectColorModel;
- import java.awt.image.Raster;
- import sun.awt.image.IntegerComponentRaster;
-
- class GradientPaintContext implements PaintContext {
- static ColorModel xrgbmodel = new DirectColorModel(24, 16711680, 65280, 255);
- // $FF: renamed from: x1 double
- double field_0;
- // $FF: renamed from: y1 double
- double field_1;
- // $FF: renamed from: dx double
- double field_2;
- // $FF: renamed from: dy double
- double field_3;
- boolean cyclic;
- int[] interp;
- Raster saved;
- ColorModel model;
-
- public GradientPaintContext(Point2D var1, Point2D var2, AffineTransform var3, Color var4, Color var5, boolean var6) {
- Point2D.Double var7 = new Point2D.Double((double)1.0F, (double)0.0F);
- Point2D.Double var8 = new Point2D.Double((double)0.0F, (double)1.0F);
-
- try {
- AffineTransform var9 = var3.createInverse();
- var9.deltaTransform(var7, var7);
- var9.deltaTransform(var8, var8);
- } catch (NoninvertibleTransformException var29) {
- ((Point2D)var7).setLocation((double)0.0F, (double)0.0F);
- ((Point2D)var8).setLocation((double)0.0F, (double)0.0F);
- }
-
- double var30 = var2.getX() - var1.getX();
- double var11 = var2.getY() - var1.getY();
- double var13 = var30 * var30 + var11 * var11;
- if (var13 <= Double.MIN_VALUE) {
- this.field_2 = (double)0.0F;
- this.field_3 = (double)0.0F;
- } else {
- this.field_2 = (((Point2D)var7).getX() * var30 + ((Point2D)var7).getY() * var11) / var13;
- this.field_3 = (((Point2D)var8).getX() * var30 + ((Point2D)var8).getY() * var11) / var13;
- if (var6) {
- this.field_2 %= (double)1.0F;
- this.field_3 %= (double)1.0F;
- } else if (this.field_2 < (double)0.0F) {
- var1 = var2;
- Color var16 = var4;
- var4 = var5;
- var5 = var16;
- this.field_2 = -this.field_2;
- this.field_3 = -this.field_3;
- }
- }
-
- Point2D var15 = var3.transform(var1, (Point2D)null);
- this.field_0 = var15.getX();
- this.field_1 = var15.getY();
- this.cyclic = var6;
- int var31 = var4.getRGB();
- int var17 = var5.getRGB();
- int var18 = var31 >> 24 & 255;
- int var19 = var31 >> 16 & 255;
- int var20 = var31 >> 8 & 255;
- int var21 = var31 & 255;
- int var22 = (var17 >> 24 & 255) - var18;
- int var23 = (var17 >> 16 & 255) - var19;
- int var24 = (var17 >> 8 & 255) - var20;
- int var25 = (var17 & 255) - var21;
- if ((var31 & var17) >>> 24 == 255) {
- this.model = xrgbmodel;
- } else {
- this.model = ColorModel.getRGBdefault();
- }
-
- this.interp = new int[var6 ? 513 : 257];
-
- for(int var26 = 0; var26 <= 256; ++var26) {
- float var27 = (float)var26 / 256.0F;
- int var28 = (int)((float)var18 + (float)var22 * var27) << 24 | (int)((float)var19 + (float)var23 * var27) << 16 | (int)((float)var20 + (float)var24 * var27) << 8 | (int)((float)var21 + (float)var25 * var27);
- this.interp[var26] = var28;
- if (var6) {
- this.interp[512 - var26] = var28;
- }
- }
-
- }
-
- public void dispose() {
- this.saved = null;
- }
-
- public ColorModel getColorModel() {
- return this.model;
- }
-
- public Raster getRaster(int var1, int var2, int var3, int var4) {
- double var5 = ((double)var1 - this.field_0) * this.field_2 + ((double)var2 - this.field_1) * this.field_3;
- Object var7 = this.saved;
- if (var7 == null || ((Raster)var7).getWidth() < var3 || ((Raster)var7).getHeight() < var4) {
- var7 = this.getColorModel().createCompatibleWritableRaster(var3, var4);
- this.saved = (Raster)var7;
- }
-
- IntegerComponentRaster var8 = (IntegerComponentRaster)var7;
- int var9 = var8.getDataOffset(0);
- int var10 = var8.getScanlineStride() - var3;
- int[] var11 = var8.getDataStorage();
- if (this.cyclic) {
- this.cycleFillRaster(var11, var9, var10, var3, var4, var5, this.field_2, this.field_3);
- } else {
- this.clipFillRaster(var11, var9, var10, var3, var4, var5, this.field_2, this.field_3);
- }
-
- return (Raster)var7;
- }
-
- void cycleFillRaster(int[] var1, int var2, int var3, int var4, int var5, double var6, double var8, double var10) {
- var6 %= (double)2.0F;
- int var12 = (int)(var6 * (double)1.0737418E9F) << 1;
- int var13 = (int)(-var8 * (double)Integer.MIN_VALUE);
- int var14 = (int)(-var10 * (double)Integer.MIN_VALUE);
-
- while(true) {
- --var5;
- if (var5 < 0) {
- return;
- }
-
- int var15 = var12;
-
- for(int var16 = var4; var16 > 0; --var16) {
- var1[var2++] = this.interp[var15 >>> 23];
- var15 += var13;
- }
-
- var2 += var3;
- var12 += var14;
- }
- }
-
- void clipFillRaster(int[] var1, int var2, int var3, int var4, int var5, double var6, double var8, double var10) {
- while(true) {
- --var5;
- if (var5 < 0) {
- return;
- }
-
- double var12 = var6;
- int var14 = var4;
- if (var6 <= (double)0.0F) {
- int var15 = this.interp[0];
-
- do {
- var1[var2++] = var15;
- var12 += var8;
- --var14;
- } while(var14 > 0 && var12 <= (double)0.0F);
- }
-
- while(var12 < (double)1.0F) {
- --var14;
- if (var14 < 0) {
- break;
- }
-
- var1[var2++] = this.interp[(int)(var12 * (double)256.0F)];
- var12 += var8;
- }
-
- if (var14 > 0) {
- int var16 = this.interp[256];
-
- do {
- var1[var2++] = var16;
- --var14;
- } while(var14 > 0);
- }
-
- var2 += var3;
- var6 += var10;
- }
- }
- }
-