X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.g2d%2Fsrc%2Forg%2Fsimantics%2Fg2d%2Fparticipant%2FOrientationRestorer.java;h=f2a420b1221910c1f54e1dba891ad8417bfcc449;hp=02cd89d9caa9105525122063cd50bbfe777b7003;hb=5998374f7e179cfaf451c220216adc18c823047f;hpb=6fd9bc1ec7e95848d0cc15d12825a65a4b57ada5 diff --git a/bundles/org.simantics.g2d/src/org/simantics/g2d/participant/OrientationRestorer.java b/bundles/org.simantics.g2d/src/org/simantics/g2d/participant/OrientationRestorer.java index 02cd89d9c..f2a420b12 100644 --- a/bundles/org.simantics.g2d/src/org/simantics/g2d/participant/OrientationRestorer.java +++ b/bundles/org.simantics.g2d/src/org/simantics/g2d/participant/OrientationRestorer.java @@ -13,8 +13,9 @@ package org.simantics.g2d.participant; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; -import java.util.Timer; -import java.util.TimerTask; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; import org.simantics.g2d.canvas.Hints; import org.simantics.g2d.canvas.ICanvasContext; @@ -22,8 +23,8 @@ 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.datastructures.hints.IHintObservable; import org.simantics.utils.threads.IThreadWorkQueue; /** @@ -44,10 +45,10 @@ public class OrientationRestorer extends AbstractCanvasParticipant { long lastTrigger; Point2D centerPoint = new Point2D.Double(); - transient Timer timer = new Timer("Rotate restore"); + transient ScheduledExecutorService timer = Executors.newSingleThreadScheduledExecutor(); transient boolean checkRotatePending = false; - TimerTask task = new TimerTask() { + Runnable task = new Runnable() { @Override public void run() { ICanvasContext ctx = getContext(); @@ -70,16 +71,24 @@ public class OrientationRestorer extends AbstractCanvasParticipant { @Override public void removedFromContext(ICanvasContext ctx) { - timer.cancel(); + timer.shutdown(); + try { + if (!timer.awaitTermination(1, TimeUnit.SECONDS)) { + timer.shutdownNow(); + } + } catch (InterruptedException e) { + // Ignore + } super.removedFromContext(ctx); } @Override public void addedToContext(ICanvasContext ctx) { super.addedToContext(ctx); - long delay = 1000 / 25; +// long delay = 1000 / 25; this sounds quite frequent + long delay = 1000 / 10; lastTrigger = System.currentTimeMillis(); - timer.scheduleAtFixedRate(task, delay, delay); + timer.scheduleAtFixedRate(task, delay, delay, TimeUnit.MILLISECONDS); } @HintListener(Class = Hints.class, Field = "KEY_CANVAS_BOUNDS")