X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.g2d%2Fsrc%2Forg%2Fsimantics%2Fg2d%2Fdiagram%2Fparticipant%2FElementPainter.java;h=d4d0609b2766a3c9b616bba03b8a9f050d06a56b;hb=4d3f88eb0edb95b8bc7dedb136f0048ff3918506;hp=9134c1729ac161c7ec4d9bcb927880da9612b8dd;hpb=1ecae6e1ad40507badb8807fb14bb67b4adf199c;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/participant/ElementPainter.java b/bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/participant/ElementPainter.java index 9134c1729..d4d0609b2 100644 --- a/bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/participant/ElementPainter.java +++ b/bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/participant/ElementPainter.java @@ -61,6 +61,7 @@ import org.simantics.g2d.element.handler.BendsHandler; import org.simantics.g2d.element.handler.Children; import org.simantics.g2d.element.handler.Children.ChildEvent; import org.simantics.g2d.element.handler.Children.ChildListener; +import org.simantics.g2d.element.handler.ElementLayers; import org.simantics.g2d.element.handler.FillColor; import org.simantics.g2d.element.handler.Outline; import org.simantics.g2d.element.handler.OutlineColorSpec; @@ -71,9 +72,9 @@ import org.simantics.g2d.element.handler.SelectionSpecification; import org.simantics.g2d.element.handler.StrokeSpec; import org.simantics.g2d.element.handler.TerminalTopology; import org.simantics.g2d.element.handler.Transform; -import org.simantics.g2d.layers.ILayer; +import org.simantics.g2d.layers.ILayers; +import org.simantics.g2d.layers.ILayers.ILayersListener; import org.simantics.g2d.layers.ILayersEditor; -import org.simantics.g2d.layers.ILayersEditor.ILayersEditorListener; import org.simantics.g2d.participant.TransformUtil; import org.simantics.g2d.scenegraph.SceneGraphConstants; import org.simantics.g2d.utils.ElementNodeBridge; @@ -83,6 +84,7 @@ import org.simantics.scenegraph.Node; import org.simantics.scenegraph.g2d.G2DParentNode; import org.simantics.scenegraph.g2d.G2DSceneGraph; import org.simantics.scenegraph.g2d.IG2DNode; +import org.simantics.scenegraph.g2d.color.ColorFilter; import org.simantics.scenegraph.g2d.nodes.ConnectionNode; import org.simantics.scenegraph.g2d.nodes.DataNode; import org.simantics.scenegraph.g2d.nodes.LinkNode; @@ -213,9 +215,9 @@ public class ElementPainter extends AbstractDiagramParticipant implements Compos oldValue.removeKeyHintListener(Hints.KEY_DIRTY, diagramHintListener); oldValue.removeKeyHintListener(Hints.KEY_DISABLE_PAINTING, diagramHintListener); - ILayersEditor layers = oldValue.getHint(DiagramHints.KEY_LAYERS_EDITOR); + ILayers layers = oldValue.getHint(DiagramHints.KEY_LAYERS); if (layers != null) { - layers.removeListener(layersListener); + layers.removeLayersListener(layersListener); } for (TransactionContext tc : oldValue.getDiagramClass().getItemsByClass(TransactionContext.class)) { @@ -237,9 +239,9 @@ public class ElementPainter extends AbstractDiagramParticipant implements Compos newValue.addKeyHintListener(Hints.KEY_DISABLE_PAINTING, diagramHintListener); newValue.addKeyHintListener(Hints.KEY_DIRTY, diagramHintListener); - ILayersEditor layers = newValue.getHint(DiagramHints.KEY_LAYERS_EDITOR); + ILayers layers = newValue.getHint(DiagramHints.KEY_LAYERS); if (layers != null) { - layers.addListener(layersListener); + layers.addLayersListener(layersListener); } for (TransactionContext tc : newValue.getDiagramClass().getItemsByClass(TransactionContext.class)) { @@ -302,41 +304,21 @@ public class ElementPainter extends AbstractDiagramParticipant implements Compos // Layer configuration change listening and reaction logic // ------------------------------------------------------------------------ - ILayersEditorListener layersListener = new ILayersEditorListener() { - private void layersChanged() { + ILayersListener layersListener = new ILayersListener() { + @Override + public void changed() { Object task = BEGIN("EP.layersChanged"); - // Update visibility/focusability for each node only, do not reinitialize the graphics. + ICanvasContext ctx = getContext(); + if(ctx != null) { + G2DSceneGraph sg = ctx.getSceneGraph(); + if(sg != null) { + ILayersEditor layers = diagram.getHint(DiagramHints.KEY_LAYERS); + sg.setGlobalProperty(G2DSceneGraph.IGNORE_FOCUS, layers.getIgnoreFocusSettings()); + } + } updateAllVisibility(); END(task); } - @Override - public void layerRemoved(ILayer layer) { - layersChanged(); - } - @Override - public void layerDeactivated(ILayer layer) { - layersChanged(); - } - @Override - public void layerAdded(ILayer layer) { - layersChanged(); - } - @Override - public void layerActivated(ILayer layer) { - layersChanged(); - } - @Override - public void ignoreFocusChanged(boolean value) { - ICanvasContext ctx = getContext(); - if(ctx == null) return; - G2DSceneGraph sg = ctx.getSceneGraph(); - if(sg == null) return; - sg.setGlobalProperty(G2DSceneGraph.IGNORE_FOCUS, value); - } - @Override - public void ignoreVisibilityChanged(boolean value) { - layersChanged(); - } }; protected void updateAllVisibility() { @@ -405,11 +387,17 @@ public class ElementPainter extends AbstractDiagramParticipant implements Compos } } else if (key == ElementHints.KEY_FOCUS_LAYERS || key == ElementHints.KEY_VISIBLE_LAYERS) { if (sender instanceof IElement) { - assert getContext().getThreadAccess().currentThreadAccess(); - IElement e = (IElement) sender; - Object task = BEGIN("layers changed: " + e); - update(e); - END(task); + getContext().getThreadAccess().asyncExec(new Runnable() { + + @Override + public void run() { + assert getContext().getThreadAccess().currentThreadAccess(); + IElement e = (IElement) sender; + Object task = BEGIN("layers changed: " + e); + update(e); + END(task); + } + }); } } } @@ -775,14 +763,6 @@ public class ElementPainter extends AbstractDiagramParticipant implements Compos if (ElementUtils.isHidden(e)) return null; -// ElementClass ec = e.getElementClass(); -// ILayers layers = diagram.getHint(DiagramHints.KEY_LAYERS); -// if (layers != null && !layers.getIgnoreVisibilitySettings()) { -// ElementLayers el = ec.getAtMostOneItemOfClass(ElementLayers.class); -// if (el != null && !el.isVisible(e, layers)) { -// return null; -// } -// } // Update the node scene graph through SceneGraph handlers. List nodeHandlers = e.getElementClass().getItemsByClass(SceneGraph.class); @@ -797,7 +777,19 @@ public class ElementPainter extends AbstractDiagramParticipant implements Compos e.setHint(elementSgNodeKey, holder); } holder.setComposite(composite); - holder.setVisible(true); + boolean visible = true; + ElementClass ec = e.getElementClass(); + ILayers layers = diagram.getHint(DiagramHints.KEY_LAYERS); + if (layers != null && !layers.getIgnoreVisibilitySettings()) { + ElementLayers el = ec.getAtMostOneItemOfClass(ElementLayers.class); + if (el != null && !el.isVisible(e, layers)) { + visible = false; + } + } + holder.setVisible(visible); + + ColorFilter colorFilter = e.getHint(ElementHints.KEY_COLOR_FILTER); + holder.setColorFilter(colorFilter); for (SceneGraph n : nodeHandlers) { n.init(e, holder);