]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/TextNode.java
Merge commit 'd186091'
[simantics/platform.git] / bundles / org.simantics.scenegraph / src / org / simantics / scenegraph / g2d / nodes / TextNode.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.scenegraph.g2d.nodes;
13
14 import java.awt.Color;\r
15 import java.awt.Font;\r
16 import java.awt.FontMetrics;\r
17 import java.awt.Graphics2D;\r
18 import java.awt.geom.AffineTransform;\r
19 import java.awt.geom.Point2D;\r
20 import java.awt.geom.Rectangle2D;\r
21 import java.io.IOException;\r
22 \r
23 import org.simantics.scenegraph.ExportableWidget.OutputWidget;\r
24 import org.simantics.scenegraph.g2d.G2DNode;\r
25 import org.simantics.scenegraph.g2d.G2DPDFRenderingHints;\r
26 \r
27 import com.lowagie.text.DocumentException;\r
28 import com.lowagie.text.Element;\r
29 import com.lowagie.text.Rectangle;\r
30 import com.lowagie.text.pdf.FontMapper;\r
31 import com.lowagie.text.pdf.PdfFormField;\r
32 import com.lowagie.text.pdf.PdfWriter;\r
33 import com.lowagie.text.pdf.TextField;\r
34 \r
35 @OutputWidget("text")
36 public class TextNode extends G2DNode {
37
38     private static final long serialVersionUID = 8508750881358776559L;
39
40     protected Rectangle2D bounds = null;
41     protected String      text   = null;
42     protected Font        font   = null;
43     protected Color       color  = Color.BLACK;
44
45     @SyncField("bounds")
46     public void setBounds(Rectangle2D bounds) {
47         this.bounds = bounds;
48     }
49
50     @SyncField("font")
51     public void setFont(Font font) {
52         this.font = font;
53     }
54     
55     @SyncField("text")
56     public void setText(String text) {
57         this.text = text;
58     }
59     
60     public String getText() {\r
61         return this.text;\r
62     }\r
63 \r
64     @SyncField("color")
65     public void setColor(Color color) {
66         this.color = color;
67     }
68
69     @Override
70     public void render(Graphics2D g) {\r
71         if (text == null || bounds == null || font == null || color == null)\r
72             return;\r
73         \r
74 //        PdfWriter writer = (PdfWriter) g.getRenderingHint(G2DPDFRenderingHints.KEY_PDF_WRITER);\r
75 //        if ( writer == null ) {\r
76                 // Write to Graphics2D
77                 g.setFont(font);
78                 g.setColor(color);
79         
80                 FontMetrics fm =        g.getFontMetrics(font);
81                 Rectangle2D rect =      fm.getStringBounds(text, g);
82                 float x = (float) ((bounds.getWidth()  - rect.getWidth())/2 + bounds.getMinX());
83                 float y = (float) ((bounds.getHeight() - rect.getHeight())/2 + bounds.getMinY());\r
84                 \r
85                 AffineTransform at = g.getTransform();\r
86                 g.transform(getTransform());
87                 g.drawString(text, x, (float)(y+rect.getHeight()));\r
88                 g.setTransform(at);\r
89 //        } else {\r
90                 /*\r
91                         try {\r
92                         // Write to PDF\r
93                     FontMapper mapper = (FontMapper) g.getRenderingHint(G2DPDFRenderingHints.KEY_PDF_FONTMAPPER);\r
94                     //text.setBorderStyle(PdfBorderDictionary.STYLE_BEVELED);\r
95                     AffineTransform at = g.getTransform();\r
96                         FontMetrics fm =        g.getFontMetrics(font);\r
97                         Rectangle2D rect =      fm.getStringBounds(text, g);\r
98                         float x = (float) ((bounds.getWidth()  - rect.getWidth())/2 + bounds.getMinX());\r
99                         float y = (float) ((bounds.getHeight() - rect.getHeight())/2 + bounds.getMinY());\r
100                         \r
101                     Point2D pt1 = at.transform(new Point2D.Float(x, y+(float)rect.getHeight()), null);\r
102                     Point2D pt2 = at.transform(new Point2D.Float(x+(float)rect.getWidth(), y), null);\r
103                         Rectangle rectangle = new Rectangle(\r
104                                         (float) pt1.getX(), \r
105                                         (float) pt1.getY(), \r
106                                         (float) pt2.getX(), \r
107                                         (float) pt2.getY()); \r
108                     TextField text = new TextField(writer, rectangle, "approvedBy");\r
109                     text.setText(this.text);\r
110                     text.setFont(mapper.awtToPdf(font));\r
111                     text.setFontSize(0);\r
112                     text.setAlignment(Element.ALIGN_LEFT);\r
113                     text.setRotation(90);\r
114                     text.setOptions(TextField.READ_ONLY);\r
115                     PdfFormField field = text.getTextField();\r
116                     writer.addAnnotation(field);\r
117                         } catch (IOException e) {\r
118                                 e.printStackTrace();\r
119                         } catch (DocumentException e) {\r
120                                 e.printStackTrace();\r
121                         }\r
122                 */\r
123 //        }
124     }
125
126 //    @Override
127 //    public Rectangle2D getBoundsInLocal() {
128 //        return bounds;
129 //    }\r
130     \r
131     @Override\r
132     public Rectangle2D getBoundsInLocal() {\r
133         return bounds;\r
134     }\r
135     \r
136     @Override\r
137     public Rectangle2D getBounds() {\r
138         return null;\r
139     }\r
140     
141 }