X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.scenegraph.swing%2Fsrc%2Forg%2Fsimantics%2Fscenegraph%2Fswing%2FJComponentUtils.java;h=26d86cbc82be0052c45612897e3399d67afefcf3;hb=refs%2Fchanges%2F38%2F238%2F2;hp=008c59afdc4bd320c8e7c6d5adce9f9fe4499dad;hpb=24e2b34260f219f0d1644ca7a138894980e25b14;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scenegraph.swing/src/org/simantics/scenegraph/swing/JComponentUtils.java b/bundles/org.simantics.scenegraph.swing/src/org/simantics/scenegraph/swing/JComponentUtils.java index 008c59afd..26d86cbc8 100644 --- a/bundles/org.simantics.scenegraph.swing/src/org/simantics/scenegraph/swing/JComponentUtils.java +++ b/bundles/org.simantics.scenegraph.swing/src/org/simantics/scenegraph/swing/JComponentUtils.java @@ -1,88 +1,88 @@ -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); - } - - } - -} +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); + } + + } + +}