1 package fr.orsay.lri.varna.models.export;
3 import java.awt.BasicStroke;
5 import java.awt.Dimension;
7 import java.awt.FontMetrics;
8 import java.awt.Graphics2D;
10 import java.awt.Stroke;
11 import java.awt.geom.Arc2D.Double;
12 import java.awt.geom.Ellipse2D;
13 import java.awt.geom.GeneralPath;
14 import java.awt.geom.Rectangle2D;
16 public class SwingGraphics implements VueVARNAGraphics {
17 private BasicStroke _dashedStroke;
18 private BasicStroke _plainStroke;
20 private boolean _debug = false;
23 public SwingGraphics(Graphics2D g2d)
26 float[] dash = { 5.0f, 5.0f };
27 _dashedStroke = new BasicStroke(1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 3.0f, dash, 0);
28 _plainStroke = new BasicStroke(1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 3.0f);
31 public Dimension getStringDimension(String s) {
32 FontMetrics fm = _g2d.getFontMetrics();
33 Rectangle2D r = fm.getStringBounds(s, _g2d);
34 return (new Dimension((int) r.getWidth(), (int) fm.getAscent()
38 public void drawStringCentered(String res, double x,
40 Dimension d = getStringDimension(res);
41 x -= (double) d.width / 2.0;
42 y += (double) d.height / 2.0;
45 Stroke bck = _g2d.getStroke();
46 _g2d.setStroke(_plainStroke);
47 _g2d.draw(new Rectangle2D.Double(x, y - d.height, d.width, d.height));
50 _g2d.drawString(res, (float) (x), (float) (y));
53 public void draw(GeneralPath s) {
57 public void drawArc(double x, double y, double rx, double ry,
58 double angleStart, double angleEnd) {
59 _g2d.drawArc((int) (x-rx/2.), (int) (y-ry/2.), (int) rx, (int) ry, (int) angleStart, (int) angleEnd);
62 public void drawLine(double x1, double y1, double x2, double y2) {
63 _g2d.drawLine((int)x1, (int)y1, (int)x2, (int)y2);
66 public void drawCircle(double x, double y, double r) {
67 _g2d.draw(new Ellipse2D.Double(x, y, r, r));
70 public void drawRect(double x, double y, double w, double h) {
71 _g2d.drawRect((int)x, (int)y, (int)w, (int)h);
74 public void drawRoundRect(double x, double y, double w, double h,
75 double rx, double ry) {
76 _g2d.drawRoundRect((int)x, (int)y, (int)w, (int)h, (int)rx, (int)ry);
79 public void drawString(String s, double x, double y) {
80 _g2d.drawString(s, (float)x, (float)y);
83 public void fill(GeneralPath s) {
87 public void fillCircle(double x, double y, double r) {
88 _g2d.fill(new Ellipse2D.Double(x, y, r, r));
91 public void fillRect(double x, double y, double w, double h) {
92 _g2d.fill(new Rectangle2D.Double(x, y, w, h));
95 public void fillRoundRect(double x, double y, double w, double h,
96 double rx, double ry) {
97 _g2d.fillRoundRect((int)x, (int)y, (int)w, (int)h, (int)rx, (int)ry);
100 public Color getColor() {
101 return _g2d.getColor();
104 public void setColor(Color c) {
108 public void setSelectionStroke() {
109 _g2d.setStroke(_dashedStroke);
112 public void setFont(Font f) {
116 public void setPlainStroke() {
117 _g2d.setStroke(_plainStroke);
120 private BasicStroke deriveStroke(BasicStroke s, double t)
122 return new BasicStroke((float)t, s.getEndCap(), s.getLineJoin(), s.getMiterLimit(), s.getDashArray(), s.getDashPhase()) ;
125 public void setStrokeThickness(double t) {
126 boolean dashed = (_g2d.getStroke()==_dashedStroke);
127 _plainStroke = deriveStroke(_plainStroke, t);
128 //_dashedStroke = deriveStroke(_dashedStroke, t);
130 { _g2d.setStroke(_dashedStroke); }
132 { _g2d.setStroke(_plainStroke); }