On Tue, 8 Sep 2020 09:56:06 GMT, Bhawesh Choudhary <bchoudh...@openjdk.org> 
wrote:

>> Root cause of issue is Specifying a image mask from GraphicsContextJava.cpp 
>> in WebKit was not implemented, so masking
>> doesn't take place at all while rendering SVGRect. to fix this issue add 
>> implementation of function clipToImageBuffer()
>> in GraphicsContextJava.cpp and send clip image to 
>> WCGraphicsPrismContext.java  While rendering in
>> WCGraphicsPrismContext.java if image clip mask is available, use it for 
>> rendering using MaskTextureGraphics interface
>> otherwise use usual way of rendering.
>
> Bhawesh Choudhary has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Added unit test for strokes

modules/javafx.web/src/main/java/com/sun/javafx/webkit/prism/WCGraphicsPrismContext.java
 line 447:

> 445:     public void setClip(int cx, int cy, int cw, int ch, WCImage 
> maskImage) {
> 446:         setClip(new Rectangle(cx, cy, cw, ch));
> 447:         state.setClipMaskImage(maskImage);

Should all of the other variants of setClip (the ones that don't take a 
maskImage) set the clipMaskImage to null?
Otherwise it seems that it might not be reset to null in all cases.

modules/javafx.web/src/main/java/com/sun/javafx/webkit/prism/WCGraphicsPrismContext.java
 line 520:

> 518:         state.apply(g1);
> 519:         g1.setPaint(paint);
> 520:         if(stroke != null) {

Minor: there should be a space after the `if`.

modules/javafx.web/src/main/java/com/sun/javafx/webkit/prism/WCGraphicsPrismContext.java
 line 524:

> 522:         }
> 523:         if (isFill) {
> 524:             g1.fill(shape);

This will call the slower `fill(Shape)` method in all cases rather than the 
specialized `fillRect` or `fillRoundRect`
method. Given all the other things that are done to draw a shape with a clip 
mask, I suspect that this is fine. One
thing to consider is to pass in an enum instead of a boolean. The enum could 
say whether to use the specialized calls
or the generic `fill` call. It's probably not worth the effort to make this 
change.

modules/javafx.web/src/test/java/test/javafx/scene/web/SVGTest.java line 164:

> 162:             final WebPage webPage = WebEngineShim.getPage(getEngine());
> 163:             assertNotNull(webPage);
> 164:             final BufferedImage img = WebPageShim.paint(webPage, 0, 0, 
> 200, 200);

This is added to the (preexisting) problem of calling `paint` on the wrong 
thread. In this case, it doesn't seem to
cause any additional problems, and other tests in this same class do it, so we 
can fix this in the follow-on issue that
is already filed, 
[JDK-8252596](https://bugs.openjdk.java.net/browse/JDK-8252596).

-------------

PR: https://git.openjdk.java.net/jfx/pull/213

Reply via email to