]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.g2d/src/org/simantics/g2d/participant/OrientationRestorer.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.g2d / src / org / simantics / g2d / participant / OrientationRestorer.java
index 9a7240a796927df77d093b99883ca40a11ec0a25..02cd89d9caa9105525122063cd50bbfe777b7003 100644 (file)
-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.g2d.participant;\r
-\r
-import java.awt.geom.Point2D;\r
-import java.awt.geom.Rectangle2D;\r
-import java.util.Timer;\r
-import java.util.TimerTask;\r
-\r
-import org.simantics.g2d.canvas.Hints;\r
-import org.simantics.g2d.canvas.ICanvasContext;\r
-import org.simantics.g2d.canvas.impl.AbstractCanvasParticipant;\r
-import org.simantics.g2d.canvas.impl.DependencyReflection.Dependency;\r
-import org.simantics.g2d.canvas.impl.HintReflection.HintListener;\r
-import org.simantics.utils.datastructures.disposable.DisposeState;\r
-import org.simantics.utils.datastructures.hints.IHintObservable;\r
-import org.simantics.utils.datastructures.hints.IHintContext.Key;\r
-import org.simantics.utils.threads.IThreadWorkQueue;\r
-\r
-/**\r
- * Restores orientation of the canvas back to normal (north is up)\r
- * \r
- * \r
- * @author Toni Kalajainen\r
- */\r
-public class OrientationRestorer extends AbstractCanvasParticipant {\r
-\r
-    @Dependency\r
-    TransformUtil           util;\r
-    @Dependency\r
-    CanvasGrab              grab;\r
-    @Dependency\r
-    CanvasBoundsParticipant bounds;\r
-\r
-    long                    lastTrigger;\r
-    Point2D                 centerPoint        = new Point2D.Double();\r
-\r
-    transient Timer         timer              = new Timer("Rotate restore");\r
-    transient boolean       checkRotatePending = false;\r
-\r
-    TimerTask               task               = new TimerTask() {\r
-        @Override\r
-        public void run() {\r
-            ICanvasContext ctx = getContext();\r
-            if (ctx.getDisposeState() != DisposeState.Alive)\r
-                return;\r
-            IThreadWorkQueue thread = ctx.getThreadAccess();\r
-            if (thread == null)\r
-                return;\r
-            thread.asyncExec(new Runnable() {\r
-                @Override\r
-                public void run() {\r
-                    if (checkRotatePending)\r
-                        return;\r
-                    checkRotatePending = true;\r
-                    timerEvent();\r
-                }\r
-            });\r
-        }\r
-    };\r
-\r
-    @Override\r
-    public void removedFromContext(ICanvasContext ctx) {\r
-        timer.cancel();\r
-        super.removedFromContext(ctx);\r
-    }\r
-\r
-    @Override\r
-    public void addedToContext(ICanvasContext ctx) {\r
-        super.addedToContext(ctx);\r
-        long delay = 1000 / 25;\r
-        lastTrigger = System.currentTimeMillis();\r
-        timer.scheduleAtFixedRate(task, delay, delay);\r
-    }\r
-\r
-    @HintListener(Class = Hints.class, Field = "KEY_CANVAS_BOUNDS")\r
-    public void selectionChanged(IHintObservable sender, Key key, Object oldValue, Object newValue) {\r
-        Rectangle2D cb = (Rectangle2D) newValue;\r
-        this.centerPoint.setLocation(cb.getCenterX(), cb.getCenterY());\r
-    }\r
-\r
-    void timerEvent() {\r
-        ICanvasContext ctx = getContext();\r
-        if (ctx == null)\r
-            return;\r
-        if (ctx.getDisposeState() != DisposeState.Alive)\r
-            return;\r
-        long cur = System.currentTimeMillis();\r
-        long delta = cur - lastTrigger;\r
-        lastTrigger = cur;\r
-        checkRotatePending = false;\r
-\r
-        Point2D centerPoint = new Point2D.Double();\r
-        int grabCount = grab.grabInfo.size();\r
-        if (grabCount == 0) {\r
-            centerPoint = this.centerPoint;\r
-        } else if (grabCount == 1) {\r
-            centerPoint = grab.grabInfo.values().iterator().next().anchorPos;\r
-        } else {\r
-            angVel = 0.0;\r
-            return;\r
-        }\r
-\r
-        // turn the canvas a bit\r
-        double theta = util.getRotate();\r
-        if (theta == 0.0)\r
-            return;\r
-//        if (Math.abs(theta) < 0.0001) {\r
-//            angVel = 0.0;\r
-//            return;\r
-//        }\r
-        if (Math.abs(theta) < 0.001) {\r
-            util.restoreOrientation(centerPoint);\r
-            angVel = 0.0;\r
-            return;\r
-        }\r
-\r
-        double momentum = theta * 100;\r
-        double dt = ((double) delta) / 1000;\r
-        if (dt > 0.150)\r
-            dt = 0.150;\r
-        angVel += momentum * dt;\r
-        util.rotate(centerPoint, -angVel * dt);\r
-        angVel *= 0.5;\r
-    }\r
-\r
-    double angVel = 0.0;\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.g2d.participant;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import org.simantics.g2d.canvas.Hints;
+import org.simantics.g2d.canvas.ICanvasContext;
+import org.simantics.g2d.canvas.impl.AbstractCanvasParticipant;
+import org.simantics.g2d.canvas.impl.DependencyReflection.Dependency;
+import org.simantics.g2d.canvas.impl.HintReflection.HintListener;
+import org.simantics.utils.datastructures.disposable.DisposeState;
+import org.simantics.utils.datastructures.hints.IHintObservable;
+import org.simantics.utils.datastructures.hints.IHintContext.Key;
+import org.simantics.utils.threads.IThreadWorkQueue;
+
+/**
+ * Restores orientation of the canvas back to normal (north is up)
+ * 
+ * 
+ * @author Toni Kalajainen
+ */
+public class OrientationRestorer extends AbstractCanvasParticipant {
+
+    @Dependency
+    TransformUtil           util;
+    @Dependency
+    CanvasGrab              grab;
+    @Dependency
+    CanvasBoundsParticipant bounds;
+
+    long                    lastTrigger;
+    Point2D                 centerPoint        = new Point2D.Double();
+
+    transient Timer         timer              = new Timer("Rotate restore");
+    transient boolean       checkRotatePending = false;
+
+    TimerTask               task               = new TimerTask() {
+        @Override
+        public void run() {
+            ICanvasContext ctx = getContext();
+            if (ctx.getDisposeState() != DisposeState.Alive)
+                return;
+            IThreadWorkQueue thread = ctx.getThreadAccess();
+            if (thread == null)
+                return;
+            thread.asyncExec(new Runnable() {
+                @Override
+                public void run() {
+                    if (checkRotatePending)
+                        return;
+                    checkRotatePending = true;
+                    timerEvent();
+                }
+            });
+        }
+    };
+
+    @Override
+    public void removedFromContext(ICanvasContext ctx) {
+        timer.cancel();
+        super.removedFromContext(ctx);
+    }
+
+    @Override
+    public void addedToContext(ICanvasContext ctx) {
+        super.addedToContext(ctx);
+        long delay = 1000 / 25;
+        lastTrigger = System.currentTimeMillis();
+        timer.scheduleAtFixedRate(task, delay, delay);
+    }
+
+    @HintListener(Class = Hints.class, Field = "KEY_CANVAS_BOUNDS")
+    public void selectionChanged(IHintObservable sender, Key key, Object oldValue, Object newValue) {
+        Rectangle2D cb = (Rectangle2D) newValue;
+        this.centerPoint.setLocation(cb.getCenterX(), cb.getCenterY());
+    }
+
+    void timerEvent() {
+        ICanvasContext ctx = getContext();
+        if (ctx == null)
+            return;
+        if (ctx.getDisposeState() != DisposeState.Alive)
+            return;
+        long cur = System.currentTimeMillis();
+        long delta = cur - lastTrigger;
+        lastTrigger = cur;
+        checkRotatePending = false;
+
+        Point2D centerPoint = new Point2D.Double();
+        int grabCount = grab.grabInfo.size();
+        if (grabCount == 0) {
+            centerPoint = this.centerPoint;
+        } else if (grabCount == 1) {
+            centerPoint = grab.grabInfo.values().iterator().next().anchorPos;
+        } else {
+            angVel = 0.0;
+            return;
+        }
+
+        // turn the canvas a bit
+        double theta = util.getRotate();
+        if (theta == 0.0)
+            return;
+//        if (Math.abs(theta) < 0.0001) {
+//            angVel = 0.0;
+//            return;
+//        }
+        if (Math.abs(theta) < 0.001) {
+            util.restoreOrientation(centerPoint);
+            angVel = 0.0;
+            return;
+        }
+
+        double momentum = theta * 100;
+        double dt = ((double) delta) / 1000;
+        if (dt > 0.150)
+            dt = 0.150;
+        angVel += momentum * dt;
+        util.rotate(centerPoint, -angVel * dt);
+        angVel *= 0.5;
+    }
+
+    double angVel = 0.0;
+
+}