// These optimizations only apply if we are using
// SrcOver. Otherwise things break...
if (g2d.getComposite() == java.awt.AlphaComposite.SrcOver) {
if (filter instanceof PadRable) {
PadRable pr = (PadRable)filter;
if (pr.getPadMode() == PadMode.ZERO_PAD) {
Rectangle2D padBounds = pr.getPadRect();
Shape clip = g2d.getClip();
g2d.clip(padBounds);
drawImage(g2d, pr.getSource());
g2d.setClip(clip);
return;
}
}
else if (filter instanceof CompositeRable) {
CompositeRable cr = (CompositeRable)filter;
// For the over mode we can just draw them in order...
if (cr.getCompositeRule() == CompositeRule.OVER) {
Vector srcs = cr.getSources();
Iterator i = srcs.iterator();
while (i.hasNext()) {
drawImage(g2d, (Filter)i.next());
}
return;
}
}
else if (filter instanceof GraphicsNodeRable) {
GraphicsNodeRable gnr = (GraphicsNodeRable)filter;
if (gnr.getUsePrimitivePaint()) {
gnr.getGraphicsNode().primitivePaint
(g2d, GraphicsNodeRenderContext.
getGraphicsNodeRenderContext(g2d));
} else {
try {
gnr.getGraphicsNode().paint
(g2d, GraphicsNodeRenderContext.
getGraphicsNodeRenderContext(g2d));
} catch (InterruptedException ie) {
// Don't do anything we just return...
}
}
// Primitive Paint did the work...
return;
}
else if (filter instanceof FilterChainRable) {
FilterChainRable fcr = (FilterChainRable)filter;
PadRable pad = (PadRable)fcr.getSource();
drawImage(g2d, pad);
return;
}
}