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;
java.awt.image.BufferedImage buffer = null;
AffineTransform previousTransform = null;
+ ColorFilter previousColorFilter = null;
/**
* @param original
}
}
- 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());
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();