RFR: 8090547: Allow for transparent backgrounds in WebView [v4]

Kevin Rushforth kcr at openjdk.java.net
Wed Sep 8 13:12:12 UTC 2021


On Mon, 6 Sep 2021 11:05:42 GMT, Jose Pereda <jpereda at openjdk.org> wrote:

>> I don't doubt that the area should be cleared. What I was questioning is whether this was the best place to do it? I'd be OK with it if you document it.
>
> The two options I see so far to clear the area are the one I've committed (change in `WCGraphicsPrismContext::setClip`) and the one I've mentioned above (`WCPageBackBufferImpl::copyArea`).
> After some more testing, I see that the latter doesn't work when there is full transparency, so I will discard it.
> 
> Back to my original commit, it could be moved up to `WebPage::paint2GC`, before the call to `gc.setClip(rq.getClip());`, and that would also remove the need of passing down the opacity level to `WCGraphicsContext`. I also see now that the `clearRect()` call is required for full transparency only.
> 
> This would be the change:
> 
> WCRectangle clip = rq.getClip();
>                 if (clip != null) {
>                     if (isBackgroundTransparent()) {
>                         // As backbuffer is enabled, new clips are drawn over the old rendered frames
>                         // regardless the alpha channel. While that works fine for alpha > 0, 
>                         // for alpha == 0 we need to clear the old frame or it will still be visible.
>                         
>                         gc.clearRect((int) clip.getX(), (int) clip.getY(), (int) clip.getWidth(), (int) clip.getHeight());
>                     }
>                     gc.setClip(clip);
>                 }

This seems like the best approach to me in that it moves the clear to a drawing method rather than as a side effect of setting the clip.

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

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


More information about the openjfx-dev mailing list