X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.g2d%2Fsrc%2Forg%2Fsimantics%2Fg2d%2Felement%2Fhandler%2Fimpl%2FResizeableImagePaint.java;h=ec0b9910274b28a9a58da065f67467c359ce4d28;hb=27f08248fa2471dab6bce315387b9617fcfeb1ea;hp=50ad4867fba6a6e3c70399528dcadeb2213fbd56;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.g2d/src/org/simantics/g2d/element/handler/impl/ResizeableImagePaint.java b/bundles/org.simantics.g2d/src/org/simantics/g2d/element/handler/impl/ResizeableImagePaint.java index 50ad4867f..ec0b99102 100644 --- a/bundles/org.simantics.g2d/src/org/simantics/g2d/element/handler/impl/ResizeableImagePaint.java +++ b/bundles/org.simantics.g2d/src/org/simantics/g2d/element/handler/impl/ResizeableImagePaint.java @@ -1,110 +1,110 @@ -/******************************************************************************* - * 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.element.handler.impl; - -import java.awt.geom.AffineTransform; -import java.awt.geom.Rectangle2D; - -import org.simantics.g2d.element.ElementHints; -import org.simantics.g2d.element.IElement; -import org.simantics.g2d.element.SceneGraphNodeKey; -import org.simantics.g2d.element.handler.Clickable; -import org.simantics.g2d.element.handler.Clickable.PressStatus; -import org.simantics.g2d.element.handler.SceneGraph; -import org.simantics.g2d.element.handler.Togglable; -import org.simantics.g2d.image.Image; -import org.simantics.scenegraph.Node; -import org.simantics.scenegraph.g2d.G2DNode; -import org.simantics.scenegraph.g2d.G2DParentNode; -import org.simantics.utils.datastructures.hints.IHintContext.Key; -import org.simantics.utils.datastructures.hints.IHintListener; -import org.simantics.utils.datastructures.hints.IHintObservable; - -/** - * - * @author Marko Luukkainen - * - */ -public abstract class ResizeableImagePaint implements SceneGraph { - - private static final long serialVersionUID = 5955540004168283683L; - public static final Key KEY_SG_NODE = new SceneGraphNodeKey(Node.class, "RESIZABLE_IMAGE_SG_NODE"); - - - public ResizeableImagePaint() { - - } - - @Override - public void init(final IElement e, final G2DParentNode parent) { - System.out.println("ResizeableImagePaint.init"); - Togglable togglable = e.getElementClass().getAtMostOneItemOfClass(Togglable.class); - boolean toggled = false; - if (togglable != null) - toggled = togglable.isChecked(e); - - Clickable.PressStatus status = null; - Clickable clickable = e.getElementClass().getAtMostOneItemOfClass(Clickable.class); - status = PressStatus.NORMAL;//clickable.getPressStatus(e, ctx); - - Image image = getImage(status, toggled); - - - Node node = e.getHint(KEY_SG_NODE); - if (node != null) - node.remove(); - - node = image.init(parent); - e.setHint(KEY_SG_NODE, node); - e.addHintListener(new IHintListener() { - - @Override - public void hintRemoved(IHintObservable sender, Key key, Object oldValue) { - // TODO Auto-generated method stub - - } - - @Override - public void hintChanged(IHintObservable sender, Key key, Object oldValue, - Object newValue) { - if (key == ElementHints.KEY_TRANSFORM) { - G2DNode node = e.getHint(KEY_SG_NODE); - Rectangle2D size = e.getHint(ElementHints.KEY_BOUNDS); - AffineTransform at = (AffineTransform)newValue; - AffineTransform at2 = node.getTransform(); - node.setTransform(new AffineTransform(at2.getScaleX(),at2.getShearX(),at2.getShearY(),at2.getScaleY(),at.getTranslateX()+size.getWidth()*0.5,at.getTranslateY()+size.getHeight()*0.5)); - } - if (key == ElementHints.KEY_BOUNDS) { - G2DNode node = e.getHint(KEY_SG_NODE); - Rectangle2D size = (Rectangle2D)newValue; - Rectangle2D bounds = node.getBoundsInLocal(); - AffineTransform at = e.getHint(ElementHints.KEY_TRANSFORM); - - node.setTransform(new AffineTransform(size.getWidth()/bounds.getWidth(),0,0,size.getHeight()/bounds.getHeight(),at.getTranslateX()+size.getWidth()*0.5,at.getTranslateY()+size.getHeight()*0.5)); - } - - - } - }); - - } - - public void cleanup(final IElement e) { - Node node = e.getHint(KEY_SG_NODE); - if (node != null) - node.remove(); - - } - - public abstract Image getImage(Clickable.PressStatus status, boolean toggled); - -} +/******************************************************************************* + * 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.element.handler.impl; + +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; + +import org.simantics.g2d.element.ElementHints; +import org.simantics.g2d.element.IElement; +import org.simantics.g2d.element.SceneGraphNodeKey; +import org.simantics.g2d.element.handler.Clickable; +import org.simantics.g2d.element.handler.Clickable.PressStatus; +import org.simantics.g2d.element.handler.SceneGraph; +import org.simantics.g2d.element.handler.Togglable; +import org.simantics.g2d.image.Image; +import org.simantics.scenegraph.Node; +import org.simantics.scenegraph.g2d.G2DNode; +import org.simantics.scenegraph.g2d.G2DParentNode; +import org.simantics.utils.datastructures.hints.IHintContext.Key; +import org.simantics.utils.datastructures.hints.IHintListener; +import org.simantics.utils.datastructures.hints.IHintObservable; + +/** + * + * @author Marko Luukkainen + * + */ +public abstract class ResizeableImagePaint implements SceneGraph { + + private static final long serialVersionUID = 5955540004168283683L; + public static final Key KEY_SG_NODE = new SceneGraphNodeKey(Node.class, "RESIZABLE_IMAGE_SG_NODE"); + + + public ResizeableImagePaint() { + + } + + @Override + public void init(final IElement e, final G2DParentNode parent) { + System.out.println("ResizeableImagePaint.init"); + Togglable togglable = e.getElementClass().getAtMostOneItemOfClass(Togglable.class); + boolean toggled = false; + if (togglable != null) + toggled = togglable.isChecked(e); + + Clickable.PressStatus status = null; + Clickable clickable = e.getElementClass().getAtMostOneItemOfClass(Clickable.class); + status = PressStatus.NORMAL;//clickable.getPressStatus(e, ctx); + + Image image = getImage(status, toggled); + + + Node node = e.getHint(KEY_SG_NODE); + if (node != null) + node.remove(); + + node = image.init(parent); + e.setHint(KEY_SG_NODE, node); + e.addHintListener(new IHintListener() { + + @Override + public void hintRemoved(IHintObservable sender, Key key, Object oldValue) { + // TODO Auto-generated method stub + + } + + @Override + public void hintChanged(IHintObservable sender, Key key, Object oldValue, + Object newValue) { + if (key == ElementHints.KEY_TRANSFORM) { + G2DNode node = e.getHint(KEY_SG_NODE); + Rectangle2D size = e.getHint(ElementHints.KEY_BOUNDS); + AffineTransform at = (AffineTransform)newValue; + AffineTransform at2 = node.getTransform(); + node.setTransform(new AffineTransform(at2.getScaleX(),at2.getShearX(),at2.getShearY(),at2.getScaleY(),at.getTranslateX()+size.getWidth()*0.5,at.getTranslateY()+size.getHeight()*0.5)); + } + if (key == ElementHints.KEY_BOUNDS) { + G2DNode node = e.getHint(KEY_SG_NODE); + Rectangle2D size = (Rectangle2D)newValue; + Rectangle2D bounds = node.getBoundsInLocal(); + AffineTransform at = e.getHint(ElementHints.KEY_TRANSFORM); + + node.setTransform(new AffineTransform(size.getWidth()/bounds.getWidth(),0,0,size.getHeight()/bounds.getHeight(),at.getTranslateX()+size.getWidth()*0.5,at.getTranslateY()+size.getHeight()*0.5)); + } + + + } + }); + + } + + public void cleanup(final IElement e) { + Node node = e.getHint(KEY_SG_NODE); + if (node != null) + node.remove(); + + } + + public abstract Image getImage(Clickable.PressStatus status, boolean toggled); + +}