]> gerrit.simantics Code Review - simantics/sysdyn.git/commitdiff
Correct bounds for HoverTextNodes even in the initialization phase when flows are...
authorlempinen <lempinen@ac1ea38d-2e2b-0410-8846-a27921b304fc>
Tue, 1 Nov 2011 11:09:54 +0000 (11:09 +0000)
committerlempinen <lempinen@ac1ea38d-2e2b-0410-8846-a27921b304fc>
Tue, 1 Nov 2011 11:09:54 +0000 (11:09 +0000)
git-svn-id: https://www.simantics.org/svn/simantics/sysdyn/trunk@23142 ac1ea38d-2e2b-0410-8846-a27921b304fc

org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/HoverTextElementHandler.java
org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/HoverTextElementNoBounds.java
org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/RouteFlowConnectionFactory.java

index 713a1022669157d2f004b3e50ef33c720649a8df..9063b203ace6367bcaba8faa2069a7fb8a67d831 100644 (file)
  *******************************************************************************/\r
 package org.simantics.sysdyn.ui.elements2;\r
 \r
+import java.awt.Font;\r
+import java.awt.font.FontRenderContext;\r
+import java.awt.font.TextLayout;\r
+import java.awt.geom.AffineTransform;\r
 import java.awt.geom.Rectangle2D;\r
 \r
+import org.simantics.g2d.element.ElementHints;\r
 import org.simantics.g2d.element.IElement;\r
 import org.simantics.g2d.element.handler.InternalSize;\r
 import org.simantics.g2d.utils.Alignment;\r
@@ -20,7 +25,7 @@ import org.simantics.g2d.utils.Alignment;
 public class HoverTextElementHandler extends HoverTextElementNoBounds implements InternalSize {\r
 \r
     private static final long serialVersionUID = 8800738238681432901L;\r
-    \r
+\r
     public static final HoverTextElementHandler INSTANCE         = new HoverTextElementHandler();\r
 \r
     public HoverTextElementHandler() {\r
@@ -47,8 +52,22 @@ public class HoverTextElementHandler extends HoverTextElementNoBounds implements
             size = new Rectangle2D.Double();\r
         if (node != null)\r
             size.setRect(node.getBoundsInLocal());\r
-        else\r
-            size.setFrame(0, 0, 0, 0);\r
+        else {\r
+            String text = e.getHint(ElementHints.KEY_TEXT);\r
+            Font font = e.getHint(ElementHints.KEY_FONT);\r
+            if(text == null || font == null)\r
+                size.setFrame(0, 0, 0, 0);\r
+            else {\r
+                FontRenderContext FRC = new FontRenderContext(new AffineTransform(), true, true);\r
+                TextLayout tl = new TextLayout(text, font, FRC);\r
+                Rectangle2D bounds = tl.getLogicalHighlightShape(0, text.length()).getBounds2D();   \r
+                size.setFrame(\r
+                        bounds.getX() * SCALE - paddingX,\r
+                        bounds.getY() * SCALE -paddingY, \r
+                        bounds.getWidth()* SCALE + paddingX + paddingX, \r
+                        bounds.getHeight()* SCALE + paddingY + paddingY);\r
+            }\r
+        }\r
         return size;\r
     }\r
 }\r
index 61a7a398541fc211f6f5f08055f9f6921e3d7e1b..7e2f35456f035f9d75a2b1a206e09b0107c0e7e3 100644 (file)
@@ -154,6 +154,8 @@ public class HoverTextElementNoBounds extends TextElementNoBounds {
                        }\r
                };\r
        }\r
+       \r
+       public static double SCALE = 0.235;\r
 \r
        @Override\r
        public void init(final IElement e, G2DParentNode parent) {\r
@@ -167,7 +169,7 @@ public class HoverTextElementNoBounds extends TextElementNoBounds {
                String text = ElementUtils.getText(e);\r
                AffineTransform at = ElementUtils.getTransform(e);\r
         Alignment hAlign = ElementUtils.getHintOrDefault(e, ElementHints.KEY_HORIZONTAL_ALIGN, horizontalAlignment);\r
-               node.init(text, font, color, originX, originY, 0.235);\r
+               node.init(text, font, color, originX, originY, SCALE);\r
                node.setBackgroundColor(fillColor);\r
                node.setBorderColor(borderColor);\r
         node.setHorizontalAlignment((byte) hAlign.ordinal());\r
index f90974927f14014b87ea1eb6f374d4c34819ce29..9a2691f2f57740a04df6b44cf32e694ad6422408 100644 (file)
@@ -84,13 +84,8 @@ import org.simantics.sysdyn.ui.elements2.ValveFactory.ValveSceneGraph;
  * An element class for Sysdyn Flow elements.\r
  * Copied from RouteGraphConnectionClassFactory and adapted to Flow needs\r
  * \r
- * @author Tuukka Lehtonen\r
+ * @author Teemu Lempinen\r
  * \r
- * \r
- * \r
-ts. oma ehdotukseni on tämä:\r
-- etsi miten pystyt syöttämään jokaiselle sysdynin "terminaalille" oman ILineEndStyle:n joka sisältää viitteen mokkulan mittoihin\r
-- lisää direction-parametri getLineEndLength:iin niin että voit palauttaa siellä mokkulan mittojen mukaisen etäisyyden\r
  */\r
 public class RouteFlowConnectionFactory extends SyncElementFactory {\r
 \r
@@ -226,8 +221,8 @@ public class RouteFlowConnectionFactory extends SyncElementFactory {
             // Get element bounds to decide allowed terminal direction(s)\r
             IElement te = graph.syncRequest(DiagramRequests.getElement(canvas, diagram, terminalElement, null));\r
             \r
-            \r
             ElementUtils.getElementBounds(te, bounds);\r
+            \r
             {\r
                 Shape shp = org.simantics.g2d.utils.GeometryUtils.transformShape(bounds, terminalElementTr);\r
                 bounds.setFrame(shp.getBounds2D());\r
@@ -428,32 +423,6 @@ public class RouteFlowConnectionFactory extends SyncElementFactory {
         }\r
     }\r
 \r
-//    private int directionSetToToDirectionMask(DirectionSet directions) {\r
-//        if (directions == DirectionSet.ANY)\r
-//            return 0xf;\r
-//        int mask = 0;\r
-//        for (Double d : directions) {\r
-//            mask |= compassAngleToToDirectionMask(d);\r
-//        }\r
-//        return mask;\r
-//    }\r
-//\r
-//    private int compassAngleToToDirectionMask(double compassAngle) {\r
-//        Double d = DirectionSet.NESW.getClosestDirection(compassAngle);\r
-//        int id = (int) Math.round(d);\r
-//        // bits:\r
-//        // 0 right (1,0)\r
-//        // 1 down  (0,1)\r
-//        // 2 left  (-1,0)\r
-//        // 3 up    (0,-1)\r
-//        switch (id) {\r
-//            case 0: return (1 << 3);\r
-//            case 90: return (1 << 2);\r
-//            case 180: return (1 << 1);\r
-//            case 270: return (1 << 0);\r
-//        }\r
-//        return 0xf;\r
-//    }\r
 \r
     protected void scheduleSynchronize(Session session, Resource connection, RouteGraphChangeEvent event) {\r
         session.asyncRequest(RouteGraphConnection.synchronizer(connection, event));\r