On Fri, 11 Apr 2025 03:42:07 GMT, Sergey Bylokhov <s...@openjdk.org> wrote:

>> The pixels that cairo produces for GTK LaF to draw on a Swing component have 
>> their alpha components pre-multiplied as per [the 
>> documentation](https://www.cairographics.org/manual/cairo-Image-Surfaces.html?spm=a2ty_o01.29997173.0.0.540ac921z2EebT#cairo-format-t):
>>> Pre-multiplied alpha is used. (That is, 50% transparent red is 0x80800000, 
>>> not 0x80ff0000.)
>> 
>> The BufferedImage created from those pixels, however, has its constructor's 
>> argument for `isRasterPremultiplied` set to `false` in 
>> `GTKEngine.finishPainting()`. This commit corrects that.
>> 
>> In addition, since at least some "native" graphics color models also use 
>> pre-multiplied alpha (ex.: `GLXGraphicsConfig.getColorModel()`), 
>> `COLOR_MODELS` were modified to take advantage of that and avoid unnecessary 
>> re-calculations of image's pixels.
>
> src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKEngine.java 
> line 618:
> 
>> 616:             int index = transparency - 1;
>> 617:             if (COLOR_MODELS[index] == null) {
>> 618:                 COLOR_MODELS[index] = 
>> GraphicsEnvironment.getLocalGraphicsEnvironment()
> 
> How will it work if the configuration changes at runtime?

There will be an additional pixel conversion effort from the outdated 
configuration's format to the new actual format when this image is used. In 
other words, status quo.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/24551#discussion_r2038850294

Reply via email to