home *** CD-ROM | disk | FTP | other *** search
- package sun.font;
-
- import java.awt.Shape;
- import java.awt.geom.Point2D;
-
- public final class LayoutPathImpl$SegmentPath extends LayoutPathImpl {
- private double[] data;
- LayoutPathImpl.EndType etype;
-
- public static LayoutPathImpl$SegmentPath get(LayoutPathImpl.EndType var0, double... var1) {
- return (new LayoutPathImpl.SegmentPathBuilder()).build(var0, var1);
- }
-
- LayoutPathImpl$SegmentPath(double[] var1, LayoutPathImpl.EndType var2) {
- this.data = var1;
- this.etype = var2;
- }
-
- public void pathToPoint(Point2D var1, boolean var2, Point2D var3) {
- this.locateAndGetIndex(var1, var2, var3);
- }
-
- public boolean pointToPath(Point2D var1, Point2D var2) {
- double var3 = var1.getX();
- double var5 = var1.getY();
- double var7 = this.data[0];
- double var9 = this.data[1];
- double var11 = this.data[2];
- double var13 = Double.MAX_VALUE;
- double var15 = (double)0.0F;
- double var17 = (double)0.0F;
- double var19 = (double)0.0F;
- int var21 = 0;
-
- for(int var22 = 3; var22 < this.data.length; var22 += 3) {
- double var23;
- double var25;
- double var27;
- label125: {
- var23 = this.data[var22];
- var25 = this.data[var22 + 1];
- var27 = this.data[var22 + 2];
- double var29 = var23 - var7;
- double var31 = var25 - var9;
- double var33 = var27 - var11;
- double var35 = var3 - var7;
- double var37 = var5 - var9;
- double var39 = var29 * var35 + var31 * var37;
- double var41;
- double var43;
- double var45;
- int var47;
- if (var33 != (double)0.0F && (!(var39 < (double)0.0F) || this.etype.isExtended() && var22 == 3)) {
- double var48 = var33 * var33;
- if (!(var39 <= var48) && (!this.etype.isExtended() || var22 != this.data.length - 3)) {
- if (var22 != this.data.length - 3) {
- break label125;
- }
-
- var41 = var23;
- var43 = var25;
- var45 = var27;
- var47 = this.data.length;
- } else {
- double var50 = var39 / var48;
- var41 = var7 + var50 * var29;
- var43 = var9 + var50 * var31;
- var45 = var11 + var50 * var33;
- var47 = var22;
- }
- } else {
- var41 = var7;
- var43 = var9;
- var45 = var11;
- var47 = var22;
- }
-
- double var62 = var3 - var41;
- double var63 = var5 - var43;
- double var52 = var62 * var62 + var63 * var63;
- if (var52 <= var13) {
- var13 = var52;
- var15 = var41;
- var17 = var43;
- var19 = var45;
- var21 = var47;
- }
- }
-
- var7 = var23;
- var9 = var25;
- var11 = var27;
- }
-
- var7 = this.data[var21 - 3];
- var9 = this.data[var21 - 2];
- if (var15 == var7 && var17 == var9) {
- boolean var57 = var21 != 3 && this.data[var21 - 1] != this.data[var21 - 4];
- boolean var58 = var21 != this.data.length && this.data[var21 - 1] != this.data[var21 + 2];
- boolean var59 = this.etype.isExtended() && (var21 == 3 || var21 == this.data.length);
- if (var57 && var58) {
- Point2D.Double var60 = new Point2D.Double(var3, var5);
- this.calcoffset(var21 - 3, var59, var60);
- Point2D.Double var61 = new Point2D.Double(var3, var5);
- this.calcoffset(var21, var59, var61);
- if (Math.abs(var60.y) > Math.abs(var61.y)) {
- var2.setLocation(var60);
- return true;
- } else {
- var2.setLocation(var61);
- return false;
- }
- } else if (var57) {
- var2.setLocation(var3, var5);
- this.calcoffset(var21 - 3, var59, var2);
- return true;
- } else {
- var2.setLocation(var3, var5);
- this.calcoffset(var21, var59, var2);
- return false;
- }
- } else {
- double var56 = this.data[var21];
- double var24 = this.data[var21 + 1];
- double var26 = Math.sqrt(var13);
- if ((var3 - var15) * (var24 - var9) > (var5 - var17) * (var56 - var7)) {
- var26 = -var26;
- }
-
- var2.setLocation(var19, var26);
- return false;
- }
- }
-
- private void calcoffset(int var1, boolean var2, Point2D var3) {
- double var4 = this.data[var1 - 3];
- double var6 = this.data[var1 - 2];
- double var8 = var3.getX() - var4;
- double var10 = var3.getY() - var6;
- double var12 = this.data[var1] - var4;
- double var14 = this.data[var1 + 1] - var6;
- double var16 = this.data[var1 + 2] - this.data[var1 - 1];
- double var18 = (var8 * var12 + var10 * var14) / var16;
- double var20 = (var8 * -var14 + var10 * var12) / var16;
- if (!var2) {
- if (var18 < (double)0.0F) {
- var18 = (double)0.0F;
- } else if (var18 > var16) {
- var18 = var16;
- }
- }
-
- var18 += this.data[var1 - 1];
- var3.setLocation(var18, var20);
- }
-
- public Shape mapShape(Shape var1) {
- return (new LayoutPathImpl.SegmentPath.Mapper(this)).mapShape(var1);
- }
-
- public double start() {
- return this.data[2];
- }
-
- public double end() {
- return this.data[this.data.length - 1];
- }
-
- public double length() {
- return this.data[this.data.length - 1] - this.data[2];
- }
-
- private double getClosedAdvance(double var1, boolean var3) {
- if (this.etype.isClosed()) {
- var1 -= this.data[2];
- int var4 = (int)(var1 / this.length());
- var1 -= (double)var4 * this.length();
- if (var1 < (double)0.0F || var1 == (double)0.0F && var3) {
- var1 += this.length();
- }
-
- var1 += this.data[2];
- }
-
- return var1;
- }
-
- private int getSegmentIndexForAdvance(double var1, boolean var3) {
- var1 = this.getClosedAdvance(var1, var3);
- int var4 = 5;
-
- for(int var5 = this.data.length - 1; var4 < var5; var4 += 3) {
- double var6 = this.data[var4];
- if (var1 < var6 || var1 == var6 && var3) {
- break;
- }
- }
-
- return var4 - 2;
- }
-
- private void map(int var1, double var2, double var4, Point2D var6) {
- double var7 = this.data[var1] - this.data[var1 - 3];
- double var9 = this.data[var1 + 1] - this.data[var1 - 2];
- double var11 = this.data[var1 + 2] - this.data[var1 - 1];
- double var13 = var7 / var11;
- double var15 = var9 / var11;
- var2 -= this.data[var1 - 1];
- var6.setLocation(this.data[var1 - 3] + var2 * var13 - var4 * var15, this.data[var1 - 2] + var2 * var15 + var4 * var13);
- }
-
- private int locateAndGetIndex(Point2D var1, boolean var2, Point2D var3) {
- double var4 = var1.getX();
- double var6 = var1.getY();
- int var8 = this.getSegmentIndexForAdvance(var4, var2);
- this.map(var8, var4, var6, var3);
- return var8;
- }
-
- public String toString() {
- StringBuilder var1 = new StringBuilder();
- var1.append("{");
- var1.append(this.etype.toString());
- var1.append(" ");
-
- for(int var2 = 0; var2 < this.data.length; var2 += 3) {
- if (var2 > 0) {
- var1.append(",");
- }
-
- float var3 = (float)((int)(this.data[var2] * (double)100.0F)) / 100.0F;
- float var4 = (float)((int)(this.data[var2 + 1] * (double)100.0F)) / 100.0F;
- float var5 = (float)((int)(this.data[var2 + 2] * (double)10.0F)) / 10.0F;
- var1.append("{");
- var1.append(var3);
- var1.append(",");
- var1.append(var4);
- var1.append(",");
- var1.append(var5);
- var1.append("}");
- }
-
- var1.append("}");
- return var1.toString();
- }
-
- // $FF: synthetic method
- static double[] access$000(LayoutPathImpl$SegmentPath var0) {
- return var0.data;
- }
- }
-