X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scenegraph%2Fsrc%2Forg%2Fsimantics%2Fscenegraph%2Futils%2FMipMapBufferedImage.java;h=b249275540a39979be3370080cc6c7d22e36794b;hb=4d3f88eb0edb95b8bc7dedb136f0048ff3918506;hp=7e5f09949ad0e44af5151e3889814d36daadf650;hpb=099781f64b56dc39c873bd63bb0b86e9643b7579;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/utils/MipMapBufferedImage.java b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/utils/MipMapBufferedImage.java index 7e5f09949..b24927554 100644 --- a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/utils/MipMapBufferedImage.java +++ b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/utils/MipMapBufferedImage.java @@ -22,7 +22,11 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +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 org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -166,12 +170,18 @@ public class MipMapBufferedImage extends BufferedImage { @Override public void paint(Graphics2D g) { + ColorFilter colorFilter = (ColorFilter) g.getRenderingHint(G2DRenderingHints.KEY_COLOR_FILTER); + // Quality rendering requested, do not render from cache //QualityHints.HIGH_QUALITY_HINTS.setQuality(g); if (g.getRenderingHint(RenderingHints.KEY_RENDERING) == RenderingHints.VALUE_RENDER_QUALITY) { try { - source.render(g); + if (colorFilter != null) { + source.render(new Graphics2DWithColorFilter(g, colorFilter)); + } else { + source.render(g); + } } catch (Exception e) { // NOTE: Catching Exception instead of SVGException due to an // NPE when encountering invalid color SVG definitions (e.g. @@ -192,7 +202,11 @@ public class MipMapBufferedImage extends BufferedImage { Graphics2D g2d = (Graphics2D) g.create(); setupSourceRender(g2d); try { - source.render(g2d); + if (colorFilter != null) { + source.render(new Graphics2DWithColorFilter(g, colorFilter)); + } else { + source.render(g); + } } catch (Exception e) { // NOTE: Catching Exception instead of SVGException due to an // NPE when encountering invalid color SVG definitions (e.g. @@ -271,6 +285,7 @@ public class MipMapBufferedImage extends BufferedImage { java.awt.image.BufferedImage image; //int widMargin, heiMargin; int wid, hei; + private ColorFilter previousColorFilter = null; BufferedRaster(double resolution) { super(resolution); @@ -282,8 +297,12 @@ public class MipMapBufferedImage extends BufferedImage { // heiMargin = (int) (hei * resolution * (MARGIN_PERCENT/100)) +1; } - synchronized java.awt.image.BufferedImage getOrCreate() + synchronized java.awt.image.BufferedImage getOrCreate(ColorFilter colorFilter) { + if (!Objects.equals(colorFilter, previousColorFilter)) { + previousColorFilter = colorFilter; + image = null; + } if (image!=null) return image; image = new java.awt.image.BufferedImage( (wid+0*2+1), @@ -303,7 +322,11 @@ public class MipMapBufferedImage extends BufferedImage { target.scale(resolution, resolution); target.translate(-imageBounds.getMinX(), -imageBounds.getMinY()); try { - source.render(target); + if (colorFilter != null) { + source.render(new Graphics2DWithColorFilter(target, colorFilter)); + } else { + source.render(target); + } } catch (Exception e) { // TODO Auto-generated catch block // NOTE: Catching Exception instead of SVGException due to an @@ -320,11 +343,12 @@ public class MipMapBufferedImage extends BufferedImage { } public void paint(Graphics2D g) { - java.awt.image.BufferedImage image = getOrCreate(); + ColorFilter colorFilter = (ColorFilter) g.getRenderingHint(G2DRenderingHints.KEY_COLOR_FILTER); + java.awt.image.BufferedImage image = getOrCreate(colorFilter); if (image==null) { try { - source.render(g); + source.render(new Graphics2DWithColorFilter(g, colorFilter)); } catch (Exception e) { // TODO Auto-generated catch block // NOTE: Catching Exception instead of SVGException due to an