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