-package org.simantics.scenegraph.swing;\r
-\r
-import java.awt.AWTEvent;\r
-import java.awt.Component;\r
-import java.awt.Point;\r
-import java.awt.event.MouseEvent;\r
-import java.awt.event.MouseWheelEvent;\r
-import java.awt.geom.AffineTransform;\r
-\r
-import org.simantics.g2d.canvas.Hints;\r
-import org.simantics.g2d.chassis.AWTChassis;\r
-import org.simantics.scenegraph.INode;\r
-import org.simantics.scenegraph.g2d.G2DSceneGraph;\r
-import org.simantics.scenegraph.g2d.events.SGMouseEvent;\r
-import org.simantics.scenegraph.g2d.events.SGMouseWheelEvent;\r
-import org.simantics.scenegraph.swing.ComponentNode.ComponentContainer;\r
-\r
-public class JComponentUtils {\r
-\r
- private static int getAbsoluteX(Component c, int init) {\r
- if(c instanceof ComponentContainer) return init;\r
- else return getAbsoluteX(c.getParent(), init+c.getX());\r
- }\r
- \r
- private static int getAbsoluteY(Component c, int init) {\r
- if(c instanceof ComponentContainer) return init;\r
- else return getAbsoluteY(c.getParent(), init+c.getY());\r
- }\r
-\r
- private static Point transform(int eventX, int eventY, JComponentSG comp, INode node) {\r
- \r
- if(node == null) return null;\r
- \r
- G2DSceneGraph sg = (G2DSceneGraph)node.getRootNode();\r
- AWTChassis chassis = (AWTChassis)(sg.getRootPane().getParent());\r
- \r
- int trX = getAbsoluteX(comp.getComponent(), 0);\r
- int trY = getAbsoluteY(comp.getComponent(), 0);\r
- \r
- AffineTransform ct = chassis.getCanvasContext().getDefaultHintContext().getHint(Hints.KEY_CANVAS_TRANSFORM);\r
- if(ct == null) return null;\r
-\r
- eventX += trX;\r
- eventX -= ct.getTranslateX();\r
- eventX /= ct.getScaleX();\r
- eventX -= trX;\r
- eventY += trY;\r
- eventY -= ct.getTranslateY();\r
- eventY /= ct.getScaleY();\r
- eventY -= trY;\r
- \r
- return new Point(eventX, eventY);\r
- \r
- }\r
- \r
- public static boolean contains(int eventX, int eventY, JComponentSG comp, INode node) {\r
- \r
- Point transformed = transform(eventX, eventY, comp, node);\r
-\r
- if(transformed == null) return comp.containsTransformed(new Point(eventX, eventY));\r
- \r
- boolean result = comp.containsTransformed(transformed); \r
- \r
-// System.err.println(result + " - contains(" + comp.getClass().getCanonicalName() + ") ? (" + origX + "," + origY + ")=>(" + eventX + "," + eventY + ")");\r
- \r
- return result; \r
- \r
- }\r
- \r
- public static AWTEvent relocate(AWTEvent e, JComponentSG comp, INode node) {\r
-\r
- if(node == null) return e;\r
-\r
- if(!(e instanceof MouseEvent)) return e; // Only for mouse events\r
- MouseEvent me = (MouseEvent)e;\r
-\r
- Point transformed = transform(me.getX(), me.getY(), comp, node);\r
- if(transformed == null) return e;\r
-\r
- if(me.getID() == MouseWheelEvent.MOUSE_WHEEL) {\r
- return new SGMouseWheelEvent(me.getComponent(), me.getID(), me.getWhen(), me.getModifiers(), transformed.x, transformed.y, me.getClickCount(), me.isPopupTrigger(), ((MouseWheelEvent)me).getScrollType(), ((MouseWheelEvent)me).getScrollAmount(), ((MouseWheelEvent)me).getWheelRotation(), me);\r
- } else {\r
- return new SGMouseEvent(me.getComponent(), me.getID(), me.getWhen(), me.getModifiers(), transformed.x, transformed.y, me.getClickCount(), me.isPopupTrigger(), me.getButton(), me);\r
- }\r
- \r
- } \r
- \r
-}\r
+package org.simantics.scenegraph.swing;
+
+import java.awt.AWTEvent;
+import java.awt.Component;
+import java.awt.Point;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseWheelEvent;
+import java.awt.geom.AffineTransform;
+
+import org.simantics.g2d.canvas.Hints;
+import org.simantics.g2d.chassis.AWTChassis;
+import org.simantics.scenegraph.INode;
+import org.simantics.scenegraph.g2d.G2DSceneGraph;
+import org.simantics.scenegraph.g2d.events.SGMouseEvent;
+import org.simantics.scenegraph.g2d.events.SGMouseWheelEvent;
+import org.simantics.scenegraph.swing.ComponentNode.ComponentContainer;
+
+public class JComponentUtils {
+
+ private static int getAbsoluteX(Component c, int init) {
+ if(c instanceof ComponentContainer) return init;
+ else return getAbsoluteX(c.getParent(), init+c.getX());
+ }
+
+ private static int getAbsoluteY(Component c, int init) {
+ if(c instanceof ComponentContainer) return init;
+ else return getAbsoluteY(c.getParent(), init+c.getY());
+ }
+
+ private static Point transform(int eventX, int eventY, JComponentSG comp, INode node) {
+
+ if(node == null) return null;
+
+ G2DSceneGraph sg = (G2DSceneGraph)node.getRootNode();
+ AWTChassis chassis = (AWTChassis)(sg.getRootPane().getParent());
+
+ int trX = getAbsoluteX(comp.getComponent(), 0);
+ int trY = getAbsoluteY(comp.getComponent(), 0);
+
+ AffineTransform ct = chassis.getCanvasContext().getDefaultHintContext().getHint(Hints.KEY_CANVAS_TRANSFORM);
+ if(ct == null) return null;
+
+ eventX += trX;
+ eventX -= ct.getTranslateX();
+ eventX /= ct.getScaleX();
+ eventX -= trX;
+ eventY += trY;
+ eventY -= ct.getTranslateY();
+ eventY /= ct.getScaleY();
+ eventY -= trY;
+
+ return new Point(eventX, eventY);
+
+ }
+
+ public static boolean contains(int eventX, int eventY, JComponentSG comp, INode node) {
+
+ Point transformed = transform(eventX, eventY, comp, node);
+
+ if(transformed == null) return comp.containsTransformed(new Point(eventX, eventY));
+
+ boolean result = comp.containsTransformed(transformed);
+
+// System.err.println(result + " - contains(" + comp.getClass().getCanonicalName() + ") ? (" + origX + "," + origY + ")=>(" + eventX + "," + eventY + ")");
+
+ return result;
+
+ }
+
+ public static AWTEvent relocate(AWTEvent e, JComponentSG comp, INode node) {
+
+ if(node == null) return e;
+
+ if(!(e instanceof MouseEvent)) return e; // Only for mouse events
+ MouseEvent me = (MouseEvent)e;
+
+ Point transformed = transform(me.getX(), me.getY(), comp, node);
+ if(transformed == null) return e;
+
+ if(me.getID() == MouseWheelEvent.MOUSE_WHEEL) {
+ return new SGMouseWheelEvent(me.getComponent(), me.getID(), me.getWhen(), me.getModifiers(), transformed.x, transformed.y, me.getClickCount(), me.isPopupTrigger(), ((MouseWheelEvent)me).getScrollType(), ((MouseWheelEvent)me).getScrollAmount(), ((MouseWheelEvent)me).getWheelRotation(), me);
+ } else {
+ return new SGMouseEvent(me.getComponent(), me.getID(), me.getWhen(), me.getModifiers(), transformed.x, transformed.y, me.getClickCount(), me.isPopupTrigger(), me.getButton(), me);
+ }
+
+ }
+
+}