X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scenegraph%2Fsrc%2Forg%2Fsimantics%2Fscenegraph%2Futils%2FMipMapVRamBufferedImage.java;h=69b4e337bf0e119207be52bfb2a356c2d5225650;hb=4d3f88eb0edb95b8bc7dedb136f0048ff3918506;hp=26717bc930696245df9b28ef8f6a5ce1f20e5e52;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/utils/MipMapVRamBufferedImage.java b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/utils/MipMapVRamBufferedImage.java index 26717bc93..69b4e337b 100644 --- a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/utils/MipMapVRamBufferedImage.java +++ b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/utils/MipMapVRamBufferedImage.java @@ -19,8 +19,15 @@ import java.awt.RenderingHints; import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; import java.awt.image.VolatileImage; +import java.util.Objects; import java.util.concurrent.atomic.AtomicInteger; +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; + import com.kitfox.svg.SVGDiagram; /** @@ -33,6 +40,7 @@ import com.kitfox.svg.SVGDiagram; */ public class MipMapVRamBufferedImage extends MipMapBufferedImage { + private static final Logger LOGGER = LoggerFactory.getLogger(MipMapVRamBufferedImage.class); /** * @param original * @param imageBounds @@ -95,7 +103,7 @@ public class MipMapVRamBufferedImage extends MipMapBufferedImage { * @param image * @return */ - private VolatileImage sourceRender(VolatileImage image) { + private VolatileImage sourceRender(VolatileImage image, ColorFilter colorFilter) { Graphics2D target = image.createGraphics(); target.setBackground(new Color(255,255,255,0)); target.clearRect(0, 0, image.getWidth(), image.getHeight()); @@ -109,7 +117,11 @@ public class MipMapVRamBufferedImage extends MipMapBufferedImage { 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) { e.printStackTrace(); target.dispose(); @@ -121,7 +133,7 @@ public class MipMapVRamBufferedImage extends MipMapBufferedImage { return image; } - synchronized VolatileImage restore(GraphicsConfiguration gc2) { + synchronized VolatileImage restore(GraphicsConfiguration gc2, ColorFilter colorFilter) { //System.out.println("restoring provider " + imageProvider); VolatileImage image = imageProvider.get(gc2, this.validateResult); @@ -131,7 +143,7 @@ public class MipMapVRamBufferedImage extends MipMapBufferedImage { // Couldn't get image? This is not supposed to happen but happened anyway. if (image == null) { - System.err.println("BUG: VolatileImageProvider.get returned null!"); + LOGGER.error("BUG: VolatileImageProvider.get returned null!"); return null; } @@ -140,12 +152,15 @@ public class MipMapVRamBufferedImage extends MipMapBufferedImage { // } boolean contentsLost = validateResult != VolatileImage.IMAGE_OK || image.contentsLost(); - return contentsLost ? sourceRender(image) : image; + boolean changed = !Objects.equals(colorFilter, previousColorFilter); + previousColorFilter = colorFilter; + return contentsLost || changed ? sourceRender(image, colorFilter) : image; //return contentsLost ? sourceRender(image) : sourceRender(image); } public void paint(Graphics2D g) { - VolatileImage image = restore(g.getDeviceConfiguration()); + ColorFilter colorFilter = (ColorFilter) g.getRenderingHint(G2DRenderingHints.KEY_COLOR_FILTER); + VolatileImage image = restore(g.getDeviceConfiguration(), colorFilter); if (image==null) { g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED); @@ -154,7 +169,7 @@ public class MipMapVRamBufferedImage extends MipMapBufferedImage { g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR); 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