1 /* Point.java -- Holds information for one point on a glyph outline
2    Copyright (C) 2006 Free Software Foundation, Inc.
3 
4 This file is part of GNU Classpath.
5 
6 GNU Classpath is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10 
11 GNU Classpath is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 General Public License for more details.
15 
16 You should have received a copy of the GNU General Public License
17 along with GNU Classpath; see the file COPYING.  If not, write to the
18 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 02110-1301 USA.
20 
21 Linking this library statically or dynamically with other modules is
22 making a combined work based on this library.  Thus, the terms and
23 conditions of the GNU General Public License cover the whole
24 combination.
25 
26 As a special exception, the copyright holders of this library give you
27 permission to link this library with independent modules to produce an
28 executable, regardless of the license terms of these independent
29 modules, and to copy and distribute the resulting executable under
30 terms of your choice, provided that you also meet, for each linked
31 independent module, the terms and conditions of the license of that
32 module.  An independent module is a module which is not derived from
33 or based on this library.  If you modify this library, you may extend
34 this exception to your version of the library, but you are not
35 obligated to do so.  If you do not wish to do so, delete this
36 exception statement from your version. */
37 
38 
39 package gnu.java.awt.font.opentype.truetype;
40 
41 import gnu.java.lang.CPStringBuilder;
42 
43 /**
44  * Encapsulates information regarding one point on a glyph outline.
45  */
46 public class Point
47 {
48   public static final short FLAG_TOUCHED_X = 1;
49   public static final short FLAG_TOUCHED_Y = 2;
50   public static final short FLAG_ON_CURVE = 4;
51   public static final short FLAG_CONTOUR_END = 8;
52   public static final short FLAG_WEAK_INTERPOLATION = 16;
53   public static final short FLAG_INFLECTION = 32;
54   public static final short FLAG_DONE_X = 64;
55   public static final short FLAG_DONE_Y = 128;
56 
57   /**
58    * Right direction.
59    */
60   public static final int DIR_RIGHT = 1;
61 
62   /**
63    * Left direction.
64    */
65   public static final int DIR_LEFT = -1;
66 
67   /**
68    * Up direction.
69    */
70   public static final int DIR_UP = 2;
71 
72   /**
73    * Down direction.
74    */
75   public static final int DIR_DOWN = -2;
76 
77   /**
78    * The original x coordinate in font units.
79    */
80   int origX;
81 
82   /**
83    * The original y coordinate in font units.
84    */
85   int origY;
86 
87   /**
88    * The x coordinate scaled to the target.
89    */
90   int scaledX;
91 
92   /**
93    * The y coordinate scaled to the target.
94    */
95   int scaledY;
96 
97   /**
98    * The final hinted and scaled x coordinate.
99    */
100   int x;
101 
102   /**
103    * The final hinted and scaled y coordinate.
104    */
105   int y;
106 
107   int u;
108   int v;
109 
110   /**
111    * The glyph flags.
112    */
113   short flags;
114 
115   /**
116    * The previous point in the contour.
117    */
118   private Point prev;
119 
120   /**
121    * The next point in the contour.
122    */
123   private Point next;
124 
125   /**
126    * The in-direction of the point, according to the DIR_* constants of this
127    * class.
128    */
129   int inDir;
130 
131   /**
132    * The out-direction of the point, according to the DIR_* constants of this
133    * class.
134    */
135   int outDir;
136 
getNext()137   public Point getNext()
138   {
139     return next;
140   }
141 
setNext(Point next)142   public void setNext(Point next)
143   {
144     this.next = next;
145   }
146 
getPrev()147   public Point getPrev()
148   {
149     return prev;
150   }
151 
setPrev(Point prev)152   public void setPrev(Point prev)
153   {
154     this.prev = prev;
155   }
156 
getOrigX()157   public int getOrigX()
158   {
159     return origX;
160   }
161 
setOrigX(int origX)162   public void setOrigX(int origX)
163   {
164     this.origX = origX;
165   }
166 
getOrigY()167   public int getOrigY()
168   {
169     return origY;
170   }
171 
setOrigY(int origY)172   public void setOrigY(int origY)
173   {
174     this.origY = origY;
175   }
176 
getInDir()177   public int getInDir()
178   {
179     return inDir;
180   }
181 
setInDir(int inDir)182   public void setInDir(int inDir)
183   {
184     this.inDir = inDir;
185   }
186 
getOutDir()187   public int getOutDir()
188   {
189     return outDir;
190   }
191 
setOutDir(int outDir)192   public void setOutDir(int outDir)
193   {
194     this.outDir = outDir;
195   }
196 
getFlags()197   public short getFlags()
198   {
199     return flags;
200   }
201 
setFlags(short flags)202   public void setFlags(short flags)
203   {
204     this.flags = flags;
205   }
206 
addFlags(short flags)207   public void addFlags(short flags)
208   {
209     this.flags |= flags;
210   }
211 
isControlPoint()212   public boolean isControlPoint()
213   {
214     return (flags & FLAG_ON_CURVE) == 0;
215   }
216 
getU()217   public int getU()
218   {
219     return u;
220   }
221 
setU(int u)222   public void setU(int u)
223   {
224     this.u = u;
225   }
226 
getV()227   public int getV()
228   {
229     return v;
230   }
231 
setV(int v)232   public void setV(int v)
233   {
234     this.v = v;
235   }
236 
toString()237   public String toString()
238   {
239     CPStringBuilder s = new CPStringBuilder();
240     s.append("[Point] origX: ");
241     s.append(origX);
242     s.append(", origY: ");
243     s.append(origY);
244     // TODO: Add more info when needed.
245     return s.toString();
246   }
247 
getX()248   public int getX()
249   {
250     return x;
251   }
252 
setX(int x)253   public void setX(int x)
254   {
255     this.x = x;
256   }
257 
getY()258   public int getY()
259   {
260     return y;
261   }
262 
setY(int y)263   public void setY(int y)
264   {
265     this.y = y;
266   }
267 
getScaledX()268   public int getScaledX()
269   {
270     return scaledX;
271   }
272 
setScaledX(int scaledX)273   public void setScaledX(int scaledX)
274   {
275     this.scaledX = scaledX;
276   }
277 
getScaledY()278   public int getScaledY()
279   {
280     return scaledY;
281   }
282 
setScaledY(int scaledY)283   public void setScaledY(int scaledY)
284   {
285     this.scaledY = scaledY;
286   }
287 }
288