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.

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

Commit messages:
 - 8354191: GTK LaF should use pre-multiplied alpha same as cairo

Changes: https://git.openjdk.org/jdk/pull/24551/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=24551&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8354191
  Stats: 22 lines in 1 file changed: 12 ins; 7 del; 3 mod
  Patch: https://git.openjdk.org/jdk/pull/24551.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/24551/head:pull/24551

PR: https://git.openjdk.org/jdk/pull/24551

Reply via email to