src/solaris/classes/sun/java2d/xr/XRSurfaceData.java
Print this page
*** 107,132 ****
@Override
public SurfaceDataProxy makeProxyFor(SurfaceData srcData) {
return XRSurfaceDataProxy.createProxy(srcData, graphicsConfig);
}
public void validatePipe(SunGraphics2D sg2d) {
TextPipe textpipe;
boolean validated = false;
/*
* The textpipe for now can't handle TexturePaint when extra-alpha is
* specified nore XOR mode
*/
! if (sg2d.compositeState < SunGraphics2D.COMP_XOR &&
! (sg2d.paintState < SunGraphics2D.PAINT_TEXTURE ||
! sg2d.composite == null ||
! !(sg2d.composite instanceof AlphaComposite) ||
! ((AlphaComposite) sg2d.composite).getAlpha() == 1.0f))
{
- textpipe = xrtextpipe;
- } else {
super.validatePipe(sg2d);
textpipe = sg2d.textpipe;
validated = true;
}
--- 107,127 ----
@Override
public SurfaceDataProxy makeProxyFor(SurfaceData srcData) {
return XRSurfaceDataProxy.createProxy(srcData, graphicsConfig);
}
+ @Override
public void validatePipe(SunGraphics2D sg2d) {
TextPipe textpipe;
boolean validated = false;
/*
* The textpipe for now can't handle TexturePaint when extra-alpha is
* specified nore XOR mode
*/
! if ((textpipe = getTextPipe(sg2d)) == null)
{
super.validatePipe(sg2d);
textpipe = sg2d.textpipe;
validated = true;
}
*** 182,198 ****
// always override the image pipe with the specialized XRender pipe
sg2d.imagepipe = xrDrawImage;
}
protected MaskFill getMaskFill(SunGraphics2D sg2d) {
! if (sg2d.paintState > SunGraphics2D.PAINT_ALPHACOLOR &&
! !XRPaints.isValid(sg2d))
! {
! return null;
}
! return super.getMaskFill(sg2d);
}
public RenderLoops getRenderLoops(SunGraphics2D sg2d) {
if (sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR &&
sg2d.compositeState <= SunGraphics2D.COMP_ALPHA)
--- 177,218 ----
// always override the image pipe with the specialized XRender pipe
sg2d.imagepipe = xrDrawImage;
}
+ protected TextPipe getTextPipe(SunGraphics2D sg2d) {
+ boolean supportedPaint = sg2d.compositeState <= SunGraphics2D.COMP_ALPHA
+ && (sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR || sg2d.composite == null);
+
+ boolean supportedCompOp = false;
+ if (sg2d.composite instanceof AlphaComposite) {
+ int compRule = ((AlphaComposite) sg2d.composite).getRule();
+ supportedCompOp = XRUtils.isMaskEvaluated(XRUtils.j2dAlphaCompToXR(compRule))
+ || (compRule == AlphaComposite.SRC
+ && sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR);
+ }
+
+ return (supportedPaint && supportedCompOp) ? xrtextpipe : null;
+ }
+
protected MaskFill getMaskFill(SunGraphics2D sg2d) {
! AlphaComposite aComp = null;
! if(sg2d.composite != null
! && sg2d.composite instanceof AlphaComposite) {
! aComp = (AlphaComposite) sg2d.composite;
}
!
! boolean supportedPaint = sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR
! || XRPaints.isValid(sg2d);
!
! boolean supportedCompOp = false;
! if(aComp != null) {
! int rule = aComp.getRule();
! supportedCompOp = XRUtils.isMaskEvaluated(XRUtils.j2dAlphaCompToXR(rule));
! }
!
! return (supportedPaint && supportedCompOp) ? super.getMaskFill(sg2d) : null;
}
public RenderLoops getRenderLoops(SunGraphics2D sg2d) {
if (sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR &&
sg2d.compositeState <= SunGraphics2D.COMP_ALPHA)