RFR: 8090547: Allow for transparent backgrounds in WebView [v9]
Jose Pereda
jpereda at openjdk.java.net
Sun Sep 12 00:34:14 UTC 2021
On Fri, 10 Sep 2021 18:15:21 GMT, Jose Pereda <jpereda at openjdk.org> wrote:
>> Currently, `WebPage` has already a public `setBackgroundColor()` method, but the class is not public. Therefore, public API is needed in `WebView` to allow developers access to it.
>>
>> In line with the `fontSmoothingType` property, this PR provides public support for setting the background color of a WebPage, by adding a `pageFill` property, and a CSR is required.
>>
>> The color for the background, that can be opaque, transparent or with any level of opacity, can be set via code or via CSS using `-fx-page-fill`.
>>
>> Unit tests and a system test are provided.
>
> Jose Pereda has updated the pull request incrementally with one additional commit since the last revision:
>
> Fix test to pass all 3 platforms
Somehow by accident I've found out that doing in `WebPage::paint2GC`:
if (clip != null) {
if (isBackgroundColorTransparent()) {
+ gc.clearRect(0, 0, 0, 0); // extra call to clear rect
gc.clearRect((int) clip.getX(), (int) clip.getY(), (int) clip.getWidth(), (int) clip.getHeight());
}
gc.setClip(clip);
fixes the issue for the Group test (same for no container case).
Ultimately, this is the same as calling twice `ES2Graphics::clearQuad`.
After some testing, I modified this method to get it working with the expected single call with just this change:
CompositeMode mode = getCompositeMode();
- // set the blend mode to CLEAR
- context.updateCompositeMode(CompositeMode.CLEAR);
Paint oldPaint = getPaint();
setPaint(Color.BLACK); // any color will do...
fillQuad(x1, y1, x2, y2);
+ // set the blend mode to CLEAR
+ context.updateCompositeMode(CompositeMode.CLEAR);
context.flushVertexBuffer();
which seems to indicate that `fillQuad` requires SRC_OVER and we can use the original black color, and only before flushing we set the CLEAR mode.
Does this make sense?
-------------
PR: https://git.openjdk.java.net/jfx/pull/563
More information about the openjfx-dev
mailing list