]> gerrit.simantics Code Review - simantics/platform.git/commitdiff
(refs #7180) Configurable font for FlagNode 78/478/1
authorHannu Niemistö <hannu.niemisto@semantum.fi>
Wed, 3 May 2017 13:38:56 +0000 (16:38 +0300)
committerHannu Niemistö <hannu.niemisto@semantum.fi>
Wed, 3 May 2017 13:38:56 +0000 (16:38 +0300)
Change-Id: I01e041e83ed8d66ad203107c2b4ff1d670756e5f

bundles/org.simantics.diagram/src/org/simantics/diagram/adapter/FlagClassFactory.java
bundles/org.simantics.diagram/src/org/simantics/diagram/flag/FlagInfoBuilder.java
bundles/org.simantics.diagram/src/org/simantics/diagram/flag/FlagInfoImpl.java
bundles/org.simantics.diagram/src/org/simantics/diagram/flag/FlagSceneGraph.java
bundles/org.simantics.diagram/src/org/simantics/diagram/flag/IFlagType.java
bundles/org.simantics.g2d/src/org/simantics/g2d/elementclass/FlagClass.java
bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/FlagNode.java

index d0a44984d5bd63a2ad27be6e94c3afa6f95484cb..30efa54f0301b3724f2fe0f95e88e5df56c6e202 100644 (file)
@@ -11,6 +11,7 @@
  *******************************************************************************/
 package org.simantics.diagram.adapter;
 
+import java.awt.Font;
 import java.awt.Shape;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.Rectangle2D;
@@ -25,7 +26,6 @@ import java.util.regex.PatternSyntaxException;
 import org.simantics.databoard.Bindings;
 import org.simantics.databoard.binding.error.RuntimeBindingConstructionException;
 import org.simantics.databoard.util.Bean;
-import org.simantics.datatypes.literal.Font;
 import org.simantics.datatypes.literal.RGB;
 import org.simantics.db.AsyncReadGraph;
 import org.simantics.db.ReadGraph;
@@ -203,6 +203,11 @@ public class FlagClassFactory extends SyncElementFactory {
                     e.setHint(FlagClass.KEY_FLAG_TEXT, flagText);
                     flagTextIsSet = true;
                 }
+                
+                Font flagFont = info.getFont();
+                if(flagFont != null) {
+                    e.setHint(FlagClass.KEY_FLAG_FONT, flagFont);
+                }
 
                 if (info.getTextArea() != null) {
                     e.setHint(FlagClass.KEY_FLAG_TEXT_AREA, info.getTextArea());
index 6372267a4b9c94f5ce8cbf81874d5552e03645d5..080ca9df192bd0f46fe30443029645e608f227b7 100644 (file)
@@ -11,6 +11,7 @@
  *******************************************************************************/
 package org.simantics.diagram.flag;
 
+import java.awt.Font;
 import java.awt.Shape;
 import java.awt.geom.Rectangle2D;
 
@@ -33,6 +34,7 @@ public class FlagInfoBuilder {
     private Rectangle2D textArea;
     private Alignment   horizontalAlignment = Alignment.LEADING;
     private Alignment   verticalAlignment = Alignment.CENTER;
+    private Font        font;
 
     public static FlagInfoBuilder fill(Type type) {
         return new FlagInfoBuilder().type(type);
@@ -42,7 +44,7 @@ public class FlagInfoBuilder {
     }
 
     public FlagInfo create() {
-        return new FlagInfoImpl(shape, text, type, textArea, horizontalAlignment, verticalAlignment);
+        return new FlagInfoImpl(shape, text, type, textArea, horizontalAlignment, verticalAlignment, font);
     }
 
     public Shape shape() {
@@ -53,6 +55,10 @@ public class FlagInfoBuilder {
         return text;
     }
 
+    public Font font() {
+        return font;
+    }
+    
     public Type type() {
         return type;
     }
@@ -78,6 +84,11 @@ public class FlagInfoBuilder {
         this.text = text;
         return this;
     }
+    
+    public FlagInfoBuilder font(Font font) {
+        this.font = font;
+        return this;
+    }
 
     public FlagInfoBuilder type(Type type) {
         this.type = type;
index bad06dbbdaafa7d927213e202d329a0c9017722f..53db4209d2372dc859bc5886fc8e479fef2b23da 100644 (file)
@@ -11,6 +11,7 @@
  *******************************************************************************/
 package org.simantics.diagram.flag;
 
+import java.awt.Font;
 import java.awt.Shape;
 import java.awt.geom.Rectangle2D;
 
@@ -29,15 +30,17 @@ public class FlagInfoImpl implements FlagInfo {
     private final Rectangle2D textArea;
     private final Alignment   horizontalAlignment;
     private final Alignment   verticalAlignment;
+    private final Font        font;
 
     public FlagInfoImpl(Shape shape, String[] text, Type type, Rectangle2D textArea,
-            Alignment horizontalAlignment, Alignment verticalAlignment) {
+            Alignment horizontalAlignment, Alignment verticalAlignment, Font font) {
         this.shape = shape;
         this.text = text;
         this.type = type;
         this.textArea = textArea;
         this.horizontalAlignment = horizontalAlignment;
         this.verticalAlignment = verticalAlignment;
+        this.font = font;
     }
 
     @Override
@@ -70,4 +73,8 @@ public class FlagInfoImpl implements FlagInfo {
         return verticalAlignment;
     }
 
+    @Override
+    public Font getFont() {
+        return font;
+    }
 }
index cd8661350bc14318003cf1683d196be64145f631..9895dd39f018c90e277a3c543e39efbb2775f9f4 100644 (file)
@@ -1,6 +1,7 @@
 package org.simantics.diagram.flag;
 
 import java.awt.Color;
+import java.awt.Font;
 import java.awt.Shape;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.Rectangle2D;
@@ -90,6 +91,8 @@ public class FlagSceneGraph implements SceneGraph {
             Alignment horizAlign = ElementUtils.getHintOrDefault(e, FlagClass.KEY_TEXT_HORIZONTAL_ALIGN, Alignment.LEADING);
             Alignment vertAlign = ElementUtils.getHintOrDefault(e, FlagClass.KEY_TEXT_VERTICAL_ALIGN, Alignment.CENTER);
 
+            Font font  = ElementUtils.getHintOrDefault(e, FlagClass.KEY_FLAG_FONT, FlagNode.DEFAULT_FONT);
+
             ElementUtils.removePossibleNode(e, KEY_VISUAL_SG_NODE);
             e.removeHint(KEY_VISUAL_SG_NODE);
 
@@ -106,7 +109,8 @@ public class FlagSceneGraph implements SceneGraph {
                     (float) beakAngle,
                     textArea,
                     horizAlign.ordinal(),
-                    vertAlign.ordinal());
+                    vertAlign.ordinal(),
+                    font);
             AffineTransform at = ElementUtils.getTransform(e);
             if(at != null) flag.setTransform(at);
 
index 8ee0ff93dcc6712a5ebde1f5b9baa1fa5208d93d..8176d1e7931081fdc66665ff1cb1065b2d4731c0 100644 (file)
@@ -11,6 +11,7 @@
  *******************************************************************************/
 package org.simantics.diagram.flag;
 
+import java.awt.Font;
 import java.awt.Shape;
 import java.awt.geom.Rectangle2D;
 
@@ -35,6 +36,7 @@ public interface IFlagType {
         FlagClass.Type getType();
         Alignment getHorizontalAlignment();
         Alignment getVerticalAlignment();
+        Font getFont();
     }
 
     /**
index 604fa15a58e04b1714c58e4f15b0d50295e56e79..7c60894bc9a9c85ec3ffd685c6ec3b32db8fb7d6 100644 (file)
@@ -13,6 +13,7 @@ package org.simantics.g2d.elementclass;
 
 import java.awt.BasicStroke;
 import java.awt.Color;
+import java.awt.Font;
 import java.awt.Shape;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.Path2D;
@@ -101,6 +102,7 @@ public class FlagClass {
     public static final Key           KEY_SHAPE                    = new KeyOf(Shape.class, "SHAPE");
     public static final Key           KEY_TEXT_HORIZONTAL_ALIGN    = new KeyOf(Alignment.class, "TEXT_HORIZONTAL_ALIGN");
     public static final Key           KEY_TEXT_VERTICAL_ALIGN      = new KeyOf(Alignment.class, "TEXT_VERTICAL_ALIGN");
+    public static final Key           KEY_FLAG_FONT                = new KeyOf(Font.class, "FLAG_FONT");
 
     public static final Key          KEY_SG_NODE                  = new SceneGraphNodeKey(Node.class, "FLAG_SG_NODE");
 
@@ -631,6 +633,8 @@ public class FlagClass {
             Alignment horizAlign = ElementUtils.getHintOrDefault(e, KEY_TEXT_HORIZONTAL_ALIGN, Alignment.LEADING);
             Alignment vertAlign = ElementUtils.getHintOrDefault(e, KEY_TEXT_VERTICAL_ALIGN, Alignment.CENTER);
 
+            Font font  = ElementUtils.getHintOrDefault(e, KEY_FLAG_FONT, FlagNode.DEFAULT_FONT); 
+            
             FlagNode flag = ElementUtils.getOrCreateNode(e, parent, KEY_SG_NODE, ElementUtils.generateNodeId(e), FlagNode.class);
             flag.init(shape,
                     flagText,
@@ -644,7 +648,8 @@ public class FlagClass {
                     (float) beakAngle,
                     textArea,
                     horizAlign.ordinal(),
-                    vertAlign.ordinal());
+                    vertAlign.ordinal(),
+                    font);
             AffineTransform at = ElementUtils.getTransform(e);
             if(at != null) flag.setTransform(at);
 
index 4468996fb81d57e995bcc0c34162feb94e672cd8..598e130091391303febf5b14cbe039e4bda3ef2e 100644 (file)
@@ -49,7 +49,7 @@ public class FlagNode extends G2DNode {
     static transient final BasicStroke   STROKE           = new BasicStroke(0.25f, BasicStroke.CAP_BUTT,
                                                                   BasicStroke.JOIN_MITER);
 
-    final transient Font                 FONT             = Font.decode("Arial 12");
+    public final static Font             DEFAULT_FONT     = Font.decode("Arial 12");
 
     protected boolean visible;
 
@@ -66,6 +66,7 @@ public class FlagNode extends G2DNode {
     protected Rectangle2D textArea;
     protected byte hAlign;
     protected byte vAlign;
+    protected Font font = DEFAULT_FONT;
 
     private transient final Point2D      origin           = new Point2D.Double();
     private transient final Point2D      xa               = new Point2D.Double();
@@ -85,8 +86,8 @@ public class FlagNode extends G2DNode {
         return visible;
     }
 
-    @SyncField({"visible", "flagShape", "flagText", "stroke", "border", "fill", "textColor", "width", "height", "direction", "beakAngle", "textSize", "hAlign", "vAlign"})
-    public void init(Shape flagShape, String[] flagText, Stroke stroke, Color border, Color fill, Color textColor, float width, float height, double direction, float beakAngle, Rectangle2D textArea, int hAlign, int vAlign) {
+    @SyncField({"visible", "flagShape", "flagText", "stroke", "border", "fill", "textColor", "width", "height", "direction", "beakAngle", "textSize", "hAlign", "vAlign", "font"})
+    public void init(Shape flagShape, String[] flagText, Stroke stroke, Color border, Color fill, Color textColor, float width, float height, double direction, float beakAngle, Rectangle2D textArea, int hAlign, int vAlign, Font font) {
         this.visible = true;
         this.flagShape = flagShape;
         this.flagText = flagText;
@@ -101,6 +102,7 @@ public class FlagNode extends G2DNode {
         this.textArea = textArea;
         this.hAlign =  (byte) hAlign;
         this.vAlign = (byte) vAlign;
+        this.font = font;
 
         resetCaches();
     }
@@ -165,8 +167,7 @@ public class FlagNode extends G2DNode {
             }
 
             // Paint flag text
-            Font f = FONT;
-            g.setFont(f);
+            g.setFont(font);
             g.setColor(textColor);
 
             AffineTransform orig = g.getTransform();
@@ -240,7 +241,7 @@ public class FlagNode extends G2DNode {
                 System.out.println("transform: " + g.getTransform());
             }
 
-            FontMetrics fm = g.getFontMetrics(f);
+            FontMetrics fm = g.getFontMetrics(font);
             double fontHeight = fm.getHeight();
 
             if (textLayout == null || (float) scale != lastViewScale)
@@ -254,7 +255,7 @@ public class FlagNode extends G2DNode {
                 textHeight = 0;
                 for (int i = 0; i < flagText.length; ++i) {
                     String txt = flagText[i].isEmpty() ? " " : flagText[i]; 
-                    textLayout[i] = new TextLayout(txt, f, frc);
+                    textLayout[i] = new TextLayout(txt, font, frc);
                     rects[i] = textLayout[i].getBounds();
 
                     // If the bb height is not overridden with the font height