On Wed, 9 Apr 2025 14:42:05 GMT, Maxim Kartashev <mkartas...@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?

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

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

Reply via email to