Revision 4226 trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/core/v02/FTextLayout.java
FTextLayout.java | ||
---|---|---|
1 | 1 |
package com.iver.cit.gvsig.fmap.core.v02; |
2 | 2 |
|
3 |
import com.iver.cit.gvsig.fmap.ViewPort; |
|
4 |
|
|
5 |
import java.awt.Color; |
|
6 |
import java.awt.Dimension; |
|
7 | 3 |
import java.awt.Font; |
8 | 4 |
import java.awt.FontMetrics; |
9 | 5 |
import java.awt.Graphics2D; |
6 |
import java.awt.Point; |
|
10 | 7 |
import java.awt.Shape; |
11 |
import java.awt.event.MouseAdapter; |
|
12 |
import java.awt.event.MouseEvent; |
|
13 | 8 |
import java.awt.font.FontRenderContext; |
14 | 9 |
import java.awt.font.TextHitInfo; |
15 |
import java.awt.font.TextLayout; |
|
16 | 10 |
import java.awt.geom.Point2D; |
17 | 11 |
import java.awt.geom.Rectangle2D; |
18 | 12 |
|
13 |
import com.iver.cit.gvsig.fmap.ViewPort; |
|
19 | 14 |
|
15 |
|
|
20 | 16 |
/** |
21 | 17 |
* DOCUMENT ME! |
22 | 18 |
* |
... | ... | |
56 | 52 |
Rectangle2D bounding = vp.toMapRectangle(bound); |
57 | 53 |
|
58 | 54 |
FontMetrics metrics = g.getFontMetrics(); |
59 |
double dist = vp.toMapDistance(3); |
|
55 |
|
|
60 | 56 |
int w = metrics.stringWidth(s); |
61 | 57 |
double width = vp.toMapDistance(w); |
62 | 58 |
int h = metrics.getMaxAscent(); |
63 | 59 |
double height = vp.toMapDistance(h); |
60 |
double dist = vp.toMapDistance(3); |
|
64 | 61 |
|
65 | 62 |
switch (justification) { |
66 | 63 |
case FLabel.LEFT_BOTTOM: |
... | ... | |
125 | 122 |
* @param y DOCUMENT ME! |
126 | 123 |
*/ |
127 | 124 |
private Rectangle2D justification(Point2D p, Rectangle2D r, double x, double y) { |
128 |
r.setRect(p.getX() + x, p.getY() + y, r.getWidth(), r.getHeight());
|
|
125 |
r.setRect(p.getX() + x, p.getY() - y, r.getWidth(), r.getHeight());
|
|
129 | 126 |
return r; |
130 | 127 |
} |
131 | 128 |
|
... | ... | |
141 | 138 |
float height = metrics.getMaxAscent(); |
142 | 139 |
|
143 | 140 |
switch (justification) { |
141 |
/* |
|
144 | 142 |
case FLabel.LEFT_BOTTOM: |
145 | 143 |
tl.draw(g2, 0, -3); |
146 | 144 |
|
... | ... | |
185 | 183 |
tl.draw(g2, -width, -height); |
186 | 184 |
|
187 | 185 |
break; |
188 |
}
|
|
189 |
if (isSelected){
|
|
190 |
Shape[] carets = tl.getCaretShapes(0);
|
|
186 |
*/
|
|
187 |
case FLabel.LEFT_BOTTOM:
|
|
188 |
g2.drawString(s, 0, 0 - 3);
|
|
191 | 189 |
|
192 |
// Draw the carets. carets[0] is the strong caret, and |
|
193 |
// is never null. carets[1], if it is not null, is the |
|
194 |
// weak caret. |
|
195 |
g2.setColor(Color.red); |
|
196 |
g2.draw(carets[0]); |
|
190 |
break; |
|
197 | 191 |
|
198 |
if (carets[1] != null) { |
|
199 |
g2.setColor(Color.blue); |
|
200 |
g2.draw(carets[1]); |
|
201 |
} |
|
202 |
Rectangle2D r=getBoundingBox(new Point2D.Double(0,0),justification,g2); |
|
203 |
g2.setColor(Color.blue); |
|
204 |
g2.drawRect((int)r.getX(),(int)r.getY(),(int)r.getWidth(),(int)r.getHeight()); |
|
192 |
case FLabel.LEFT_CENTER: |
|
193 |
g2.drawString(s, 0, 0 - (height / 2)); |
|
194 |
|
|
195 |
break; |
|
196 |
|
|
197 |
case FLabel.LEFT_TOP: |
|
198 |
g2.drawString(s, 0, 0 - height); |
|
199 |
|
|
200 |
break; |
|
201 |
|
|
202 |
case FLabel.CENTER_BOTTOM: |
|
203 |
g2.drawString(s, 0 - (width / 2), 0 - 3); |
|
204 |
|
|
205 |
break; |
|
206 |
|
|
207 |
case FLabel.CENTER_CENTER: |
|
208 |
g2.drawString(s, 0 - (width / 2), |
|
209 |
0 - (height / 2)); |
|
210 |
|
|
211 |
break; |
|
212 |
|
|
213 |
case FLabel.CENTER_TOP: |
|
214 |
g2.drawString(s, 0 - (width / 2), 0 - |
|
215 |
height); |
|
216 |
|
|
217 |
break; |
|
218 |
|
|
219 |
case FLabel.RIGHT_BOTTOM: |
|
220 |
g2.drawString(s, 0 - width, 0 - 3); |
|
221 |
|
|
222 |
break; |
|
223 |
|
|
224 |
case FLabel.RIGHT_CENTER: |
|
225 |
g2.drawString(s, 0 - width, 0 - |
|
226 |
(height / 2)); |
|
227 |
|
|
228 |
break; |
|
229 |
|
|
230 |
case FLabel.RIGHT_TOP: |
|
231 |
g2.drawString(s, 0 - width, 0 - height); |
|
232 |
|
|
233 |
break; |
|
234 |
|
|
205 | 235 |
} |
206 |
|
|
207 | 236 |
} |
208 | 237 |
|
209 | 238 |
public TextHitInfo getNextRightHit(int insertionIndex) { |
... | ... | |
218 | 247 |
isSelected=b; |
219 | 248 |
} |
220 | 249 |
|
221 |
public Rectangle2D getBoundingBox(Point2D p,int justification,Graphics2D g){
|
|
250 |
public Rectangle2D getBoundingBox(Point2D p1,int justification,Graphics2D g,ViewPort vp){
|
|
222 | 251 |
Rectangle2D bounding=tl.getBounds(); |
223 | 252 |
|
224 | 253 |
FontMetrics metrics = g.getFontMetrics(); |
225 |
double dist = 3;
|
|
254 |
double dist = -12;
|
|
226 | 255 |
int width = metrics.stringWidth(s); |
227 | 256 |
int height = metrics.getMaxAscent(); |
228 |
|
|
229 |
|
|
257 |
//Point2D p=vp.fromMapPoint(p1); |
|
258 |
Point p=new Point(0,0); |
|
230 | 259 |
switch (justification) { |
231 | 260 |
case FLabel.LEFT_BOTTOM: |
232 |
bounding =justification(p, bounding, 0, -height);
|
|
261 |
bounding =justification(p, bounding, 0, -dist);
|
|
233 | 262 |
break; |
234 | 263 |
|
235 | 264 |
case FLabel.LEFT_CENTER: |
... | ... | |
282 | 311 |
return isSelected; |
283 | 312 |
} |
284 | 313 |
|
314 |
public void addChar(char keyChar) { |
|
315 |
s.concat(String.valueOf(keyChar)); |
|
316 |
|
|
317 |
} |
|
318 |
|
|
319 |
public Shape[] getCaretShapes(int insertionIndex) { |
|
320 |
return tl.getCaretShapes(insertionIndex); |
|
321 |
} |
|
322 |
|
|
285 | 323 |
} |
Also available in: Unified diff