[OpenJDK 2D-Dev] [9] Review Request: 8041439: Clipping doesn't work on JPanel after setXORMode method call.

mikhail cherkasov mikhail.cherkasov at oracle.com
Thu May 29 16:29:38 UTC 2014


Sure Andrew:

The problem is that to render complex clipping we need to use 
PixelToShapeConverter with SpanShapeRenderer.
But in case of XOR composition, SurfaceData uses colorViaShape or 
colorViaPgram converter:
http://tvp129231.uk.oracle.com:8080/source/xref/jdk9-dev/jdk/src/share/classes/sun/java2d/SurfaceData.java#568
colorViaShape and colorViaPgram has type PixelToShapeLoopConverter that 
implements
marker interface LoopBasedPipe:
http://tvp129231.uk.oracle.com:8080/source/xref/jdk9-dev/jdk/src/share/classes/sun/java2d/SurfaceData.java#407
and SurfaceData passes  LoopPipe to constructor of 
PixelToShapeLoopConverter
http://tvp129231.uk.oracle.com:8080/source/xref/jdk9-dev/jdk/src/share/classes/sun/java2d/SurfaceData.java#457
http://tvp129231.uk.oracle.com:8080/source/xref/jdk9-dev/jdk/src/share/classes/sun/java2d/SurfaceData.java#colorPrimitives
as result we don't get to SpanShapeRenderer.

Now we have the following call chain: PixelToShapeConverter -> LoopPipe 
-> SunGraphics2D.loops.fillPathLoop .FillPath
http://tvp129231.uk.oracle.com:8080/source/xref/jdk9-dev/jdk/src/share/classes/sun/java2d/pipe/LoopPipe.java#308
But native method FillPath doesn't support complex clipping.

That's why I replaced converter(PixelToShapeLoopConverter(LoopPipe)) 
with paintViaShape(PixelToShapeConverter(SpanShapeRenderer)).

Thanks,
Mikhail.


On 5/29/2014 4:12 PM, Andrew Brygin wrote:
> Hello Mikhail,
>
>  could you please provide a bit more detailed explanation for your fix?
>
> Thanks,
> Andrew
>
> On 5/29/2014 3:35 PM, mikhail cherkasov wrote:
>> Hello,
>>
>> Please review the fix for jdk 9:
>> http://cr.openjdk.java.net/~mcherkas/8041439/9/webrev.00/
>> the bug:
>> https://bugs.openjdk.java.net/browse/JDK-8041439
>>
>> SurfaceData uses wrong pipe in case of complex clipping shape as 
>> result clipping doesn't work
>> if we use xor color composition and double buffering.
>>
>> Thanks,
>> Mikhail.
>




More information about the 2d-dev mailing list