X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.scenegraph%2Fsrc%2Forg%2Fsimantics%2Fscenegraph%2Futils%2FBufferedImage.java;h=7904c3f4ab9cf8905aecb374ebf788c14a645ac0;hb=4d3f88eb0edb95b8bc7dedb136f0048ff3918506;hp=5401fa757411f5248694647d6a536032c2121c7d;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/utils/BufferedImage.java b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/utils/BufferedImage.java index 5401fa757..7904c3f4a 100644 --- a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/utils/BufferedImage.java +++ b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/utils/BufferedImage.java @@ -17,6 +17,11 @@ import java.awt.Point; import java.awt.RenderingHints; import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; +import java.util.Objects; + +import org.simantics.scenegraph.g2d.G2DRenderingHints; +import org.simantics.scenegraph.g2d.color.ColorFilter; +import org.simantics.scenegraph.g2d.color.Graphics2DWithColorFilter; import com.kitfox.svg.SVGDiagram; import com.kitfox.svg.SVGException; @@ -31,6 +36,7 @@ public class BufferedImage { java.awt.image.BufferedImage buffer = null; AffineTransform previousTransform = null; + ColorFilter previousColorFilter = null; /** * @param original @@ -70,7 +76,7 @@ public class BufferedImage { } } - public void paintToBuffer(AffineTransform transform, float margin) throws SVGException { + public void paintToBuffer(AffineTransform transform, ColorFilter colorFilter, float margin) throws SVGException { int w = (int)((imageBounds.getWidth()+margin*2) * transform.getScaleX()); int h = (int)((imageBounds.getHeight()+margin*2) * transform.getScaleY()); @@ -90,18 +96,24 @@ public class BufferedImage { b2g.translate(margin, margin); b2g.scale(transform.getScaleX(), transform.getScaleY()); b2g.translate(-imageBounds.getMinX(), -imageBounds.getMinY()); - source.render(b2g); + if (colorFilter != null) { + source.render(new Graphics2DWithColorFilter(b2g, colorFilter)); + } else { + source.render(b2g); + } } public void paint(Graphics2D g) { float margin = 5; - if(previousTransform == null || previousTransform.getScaleX() != g.getTransform().getScaleX() || previousTransform.getScaleY() != g.getTransform().getScaleY()) { + ColorFilter colorFilter = (ColorFilter) g.getRenderingHint(G2DRenderingHints.KEY_COLOR_FILTER); + if(previousTransform == null || previousTransform.getScaleX() != g.getTransform().getScaleX() || previousTransform.getScaleY() != g.getTransform().getScaleY() || !Objects.equals(colorFilter, previousColorFilter)) { // setupSourceRender(g); try { + previousColorFilter = colorFilter; previousTransform = (AffineTransform)g.getTransform().clone(); - paintToBuffer(previousTransform, margin); + paintToBuffer(previousTransform, previousColorFilter, margin); } catch (SVGException e) { // TODO Auto-generated catch block e.printStackTrace();