]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.maps/src/org/simantics/maps/eclipse/MapPainter.java
Refactoring MapNode rendering & zooming to even zoom levels (0-20)
[simantics/district.git] / org.simantics.district.maps / src / org / simantics / maps / eclipse / MapPainter.java
index ee0c71a6cb54b8767a0aa7acba8ab26decd108c6..c519b9a5f1a3d53cadb779ded4ce78e07929b249 100644 (file)
@@ -11,6 +11,7 @@
  *******************************************************************************/
 package org.simantics.maps.eclipse;
 
+import java.awt.Color;
 import java.awt.geom.AffineTransform;
 
 import org.simantics.g2d.canvas.Hints;
@@ -20,6 +21,7 @@ import org.simantics.g2d.canvas.impl.SGNodeReflection.SGCleanup;
 import org.simantics.g2d.canvas.impl.SGNodeReflection.SGInit;
 import org.simantics.maps.sg.MapNode;
 import org.simantics.maps.sg.MapScaleNode;
+import org.simantics.maps.sg.commands.MapCommands;
 import org.simantics.scenegraph.g2d.G2DParentNode;
 import org.simantics.scenegraph.g2d.events.EventHandlerReflection.EventHandler;
 import org.simantics.scenegraph.g2d.events.command.CommandEvent;
@@ -45,6 +47,8 @@ public class MapPainter extends AbstractCanvasParticipant {
      */
     public static final Key KEY_MAP_ENABLED  = new KeyOf(Boolean.class);
 
+    public static final Key KEY_MAP_BACKGROUND_COLOR  = new KeyOf(Object.class);
+
     public static final double ZOOM_IN_LIMIT = 10000000.0;
 
     public static final double ZOOM_OUT_LIMIT = 10.0;
@@ -72,11 +76,13 @@ public class MapPainter extends AbstractCanvasParticipant {
     public void addedToContext(ICanvasContext ctx) {
         super.addedToContext(ctx);
         getHintStack().addKeyHintListener(getThread(), KEY_MAP_ENABLED, mapListener);
+        getHintStack().addKeyHintListener(getThread(), KEY_MAP_BACKGROUND_COLOR, mapListener);
     }
 
     @Override
     public void removedFromContext(ICanvasContext ctx) {
         getHintStack().removeKeyHintListener(getThread(), KEY_MAP_ENABLED, mapListener);
+        getHintStack().removeKeyHintListener(getThread(), KEY_MAP_BACKGROUND_COLOR, mapListener);
         super.removedFromContext(ctx);
     }
 
@@ -87,6 +93,12 @@ public class MapPainter extends AbstractCanvasParticipant {
             updateNode();
             setDirty();
             return true;
+        } else if (e.command.equals( MapCommands.MAP_BACKGROUND_COLOR_CHANGE )) {
+            ICanvasContext context = (ICanvasContext) e.getContext();
+            Color s = context.getHintStack().getHint(MapCommands.KEY_MAP_BACKGROUND_COLOR);
+            setBackgroundColor(s);
+            setDirty();
+            return true;
         } else if (e.command.equals( Commands.MAP_DISABLE )) {
             setEnabled(false);
             updateNode();
@@ -97,6 +109,11 @@ public class MapPainter extends AbstractCanvasParticipant {
             updateNode();
             setDirty();
             return true;
+        } else if (e.command.equals( Commands.ENABLE_PAINTING )) {
+            enablePainting();
+            updateNode();
+            setDirty();
+            return true;
         }
         return false;
     }
@@ -121,6 +138,8 @@ public class MapPainter extends AbstractCanvasParticipant {
 
     protected void updateNode() {
         node.setEnabled(isPaintingEnabled());
+        node.setEnabled(isMapEnabled());
+        node.setBackgroundColor(getBackgroundColor());
     }
 
     boolean isPaintingEnabled() {
@@ -138,4 +157,15 @@ public class MapPainter extends AbstractCanvasParticipant {
         setHint(KEY_MAP_ENABLED, enabled);
     }
 
+    private void enablePainting() {
+        setHint(Hints.KEY_DISABLE_PAINTING, false);
+    }
+    
+    private void setBackgroundColor(Color backgroundColor) {
+        setHint(KEY_MAP_BACKGROUND_COLOR, backgroundColor);
+    }
+    
+    private Color getBackgroundColor() {
+        return getHint(KEY_MAP_BACKGROUND_COLOR);
+    }
 }