On Mon, 6 Sep 2021 11:05:42 GMT, Jose Pereda <jper...@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