home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / font / LayoutPathImpl$SegmentPath.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  3.7 KB  |  252 lines

  1. package sun.font;
  2.  
  3. import java.awt.Shape;
  4. import java.awt.geom.Point2D;
  5.  
  6. public final class LayoutPathImpl$SegmentPath extends LayoutPathImpl {
  7.    private double[] data;
  8.    LayoutPathImpl.EndType etype;
  9.  
  10.    public static LayoutPathImpl$SegmentPath get(LayoutPathImpl.EndType var0, double... var1) {
  11.       return (new LayoutPathImpl.SegmentPathBuilder()).build(var0, var1);
  12.    }
  13.  
  14.    LayoutPathImpl$SegmentPath(double[] var1, LayoutPathImpl.EndType var2) {
  15.       this.data = var1;
  16.       this.etype = var2;
  17.    }
  18.  
  19.    public void pathToPoint(Point2D var1, boolean var2, Point2D var3) {
  20.       this.locateAndGetIndex(var1, var2, var3);
  21.    }
  22.  
  23.    public boolean pointToPath(Point2D var1, Point2D var2) {
  24.       double var3 = var1.getX();
  25.       double var5 = var1.getY();
  26.       double var7 = this.data[0];
  27.       double var9 = this.data[1];
  28.       double var11 = this.data[2];
  29.       double var13 = Double.MAX_VALUE;
  30.       double var15 = (double)0.0F;
  31.       double var17 = (double)0.0F;
  32.       double var19 = (double)0.0F;
  33.       int var21 = 0;
  34.  
  35.       for(int var22 = 3; var22 < this.data.length; var22 += 3) {
  36.          double var23;
  37.          double var25;
  38.          double var27;
  39.          label125: {
  40.             var23 = this.data[var22];
  41.             var25 = this.data[var22 + 1];
  42.             var27 = this.data[var22 + 2];
  43.             double var29 = var23 - var7;
  44.             double var31 = var25 - var9;
  45.             double var33 = var27 - var11;
  46.             double var35 = var3 - var7;
  47.             double var37 = var5 - var9;
  48.             double var39 = var29 * var35 + var31 * var37;
  49.             double var41;
  50.             double var43;
  51.             double var45;
  52.             int var47;
  53.             if (var33 != (double)0.0F && (!(var39 < (double)0.0F) || this.etype.isExtended() && var22 == 3)) {
  54.                double var48 = var33 * var33;
  55.                if (!(var39 <= var48) && (!this.etype.isExtended() || var22 != this.data.length - 3)) {
  56.                   if (var22 != this.data.length - 3) {
  57.                      break label125;
  58.                   }
  59.  
  60.                   var41 = var23;
  61.                   var43 = var25;
  62.                   var45 = var27;
  63.                   var47 = this.data.length;
  64.                } else {
  65.                   double var50 = var39 / var48;
  66.                   var41 = var7 + var50 * var29;
  67.                   var43 = var9 + var50 * var31;
  68.                   var45 = var11 + var50 * var33;
  69.                   var47 = var22;
  70.                }
  71.             } else {
  72.                var41 = var7;
  73.                var43 = var9;
  74.                var45 = var11;
  75.                var47 = var22;
  76.             }
  77.  
  78.             double var62 = var3 - var41;
  79.             double var63 = var5 - var43;
  80.             double var52 = var62 * var62 + var63 * var63;
  81.             if (var52 <= var13) {
  82.                var13 = var52;
  83.                var15 = var41;
  84.                var17 = var43;
  85.                var19 = var45;
  86.                var21 = var47;
  87.             }
  88.          }
  89.  
  90.          var7 = var23;
  91.          var9 = var25;
  92.          var11 = var27;
  93.       }
  94.  
  95.       var7 = this.data[var21 - 3];
  96.       var9 = this.data[var21 - 2];
  97.       if (var15 == var7 && var17 == var9) {
  98.          boolean var57 = var21 != 3 && this.data[var21 - 1] != this.data[var21 - 4];
  99.          boolean var58 = var21 != this.data.length && this.data[var21 - 1] != this.data[var21 + 2];
  100.          boolean var59 = this.etype.isExtended() && (var21 == 3 || var21 == this.data.length);
  101.          if (var57 && var58) {
  102.             Point2D.Double var60 = new Point2D.Double(var3, var5);
  103.             this.calcoffset(var21 - 3, var59, var60);
  104.             Point2D.Double var61 = new Point2D.Double(var3, var5);
  105.             this.calcoffset(var21, var59, var61);
  106.             if (Math.abs(var60.y) > Math.abs(var61.y)) {
  107.                var2.setLocation(var60);
  108.                return true;
  109.             } else {
  110.                var2.setLocation(var61);
  111.                return false;
  112.             }
  113.          } else if (var57) {
  114.             var2.setLocation(var3, var5);
  115.             this.calcoffset(var21 - 3, var59, var2);
  116.             return true;
  117.          } else {
  118.             var2.setLocation(var3, var5);
  119.             this.calcoffset(var21, var59, var2);
  120.             return false;
  121.          }
  122.       } else {
  123.          double var56 = this.data[var21];
  124.          double var24 = this.data[var21 + 1];
  125.          double var26 = Math.sqrt(var13);
  126.          if ((var3 - var15) * (var24 - var9) > (var5 - var17) * (var56 - var7)) {
  127.             var26 = -var26;
  128.          }
  129.  
  130.          var2.setLocation(var19, var26);
  131.          return false;
  132.       }
  133.    }
  134.  
  135.    private void calcoffset(int var1, boolean var2, Point2D var3) {
  136.       double var4 = this.data[var1 - 3];
  137.       double var6 = this.data[var1 - 2];
  138.       double var8 = var3.getX() - var4;
  139.       double var10 = var3.getY() - var6;
  140.       double var12 = this.data[var1] - var4;
  141.       double var14 = this.data[var1 + 1] - var6;
  142.       double var16 = this.data[var1 + 2] - this.data[var1 - 1];
  143.       double var18 = (var8 * var12 + var10 * var14) / var16;
  144.       double var20 = (var8 * -var14 + var10 * var12) / var16;
  145.       if (!var2) {
  146.          if (var18 < (double)0.0F) {
  147.             var18 = (double)0.0F;
  148.          } else if (var18 > var16) {
  149.             var18 = var16;
  150.          }
  151.       }
  152.  
  153.       var18 += this.data[var1 - 1];
  154.       var3.setLocation(var18, var20);
  155.    }
  156.  
  157.    public Shape mapShape(Shape var1) {
  158.       return (new LayoutPathImpl.SegmentPath.Mapper(this)).mapShape(var1);
  159.    }
  160.  
  161.    public double start() {
  162.       return this.data[2];
  163.    }
  164.  
  165.    public double end() {
  166.       return this.data[this.data.length - 1];
  167.    }
  168.  
  169.    public double length() {
  170.       return this.data[this.data.length - 1] - this.data[2];
  171.    }
  172.  
  173.    private double getClosedAdvance(double var1, boolean var3) {
  174.       if (this.etype.isClosed()) {
  175.          var1 -= this.data[2];
  176.          int var4 = (int)(var1 / this.length());
  177.          var1 -= (double)var4 * this.length();
  178.          if (var1 < (double)0.0F || var1 == (double)0.0F && var3) {
  179.             var1 += this.length();
  180.          }
  181.  
  182.          var1 += this.data[2];
  183.       }
  184.  
  185.       return var1;
  186.    }
  187.  
  188.    private int getSegmentIndexForAdvance(double var1, boolean var3) {
  189.       var1 = this.getClosedAdvance(var1, var3);
  190.       int var4 = 5;
  191.  
  192.       for(int var5 = this.data.length - 1; var4 < var5; var4 += 3) {
  193.          double var6 = this.data[var4];
  194.          if (var1 < var6 || var1 == var6 && var3) {
  195.             break;
  196.          }
  197.       }
  198.  
  199.       return var4 - 2;
  200.    }
  201.  
  202.    private void map(int var1, double var2, double var4, Point2D var6) {
  203.       double var7 = this.data[var1] - this.data[var1 - 3];
  204.       double var9 = this.data[var1 + 1] - this.data[var1 - 2];
  205.       double var11 = this.data[var1 + 2] - this.data[var1 - 1];
  206.       double var13 = var7 / var11;
  207.       double var15 = var9 / var11;
  208.       var2 -= this.data[var1 - 1];
  209.       var6.setLocation(this.data[var1 - 3] + var2 * var13 - var4 * var15, this.data[var1 - 2] + var2 * var15 + var4 * var13);
  210.    }
  211.  
  212.    private int locateAndGetIndex(Point2D var1, boolean var2, Point2D var3) {
  213.       double var4 = var1.getX();
  214.       double var6 = var1.getY();
  215.       int var8 = this.getSegmentIndexForAdvance(var4, var2);
  216.       this.map(var8, var4, var6, var3);
  217.       return var8;
  218.    }
  219.  
  220.    public String toString() {
  221.       StringBuilder var1 = new StringBuilder();
  222.       var1.append("{");
  223.       var1.append(this.etype.toString());
  224.       var1.append(" ");
  225.  
  226.       for(int var2 = 0; var2 < this.data.length; var2 += 3) {
  227.          if (var2 > 0) {
  228.             var1.append(",");
  229.          }
  230.  
  231.          float var3 = (float)((int)(this.data[var2] * (double)100.0F)) / 100.0F;
  232.          float var4 = (float)((int)(this.data[var2 + 1] * (double)100.0F)) / 100.0F;
  233.          float var5 = (float)((int)(this.data[var2 + 2] * (double)10.0F)) / 10.0F;
  234.          var1.append("{");
  235.          var1.append(var3);
  236.          var1.append(",");
  237.          var1.append(var4);
  238.          var1.append(",");
  239.          var1.append(var5);
  240.          var1.append("}");
  241.       }
  242.  
  243.       var1.append("}");
  244.       return var1.toString();
  245.    }
  246.  
  247.    // $FF: synthetic method
  248.    static double[] access$000(LayoutPathImpl$SegmentPath var0) {
  249.       return var0.data;
  250.    }
  251. }
  252.