On Fri, 3 Sep 2021 21:19:09 GMT, Kevin Rushforth <k...@openjdk.org> wrote:
>> Jose Pereda has updated the pull request incrementally with one additional >> commit since the last revision: >> >> Use color to int32 converter instead of hash > > modules/javafx.web/src/main/java/com/sun/webkit/WebPage.java line 97: > >> 95: >> 96: private int fontSmoothingType; >> 97: private Color backgroundColor = Color.WHITE; > > This might be a problem, since there are code paths that bypass > `setBackgroundColor(Color)`. I might recommend storing the converted 32-bit > color, and then checking that for transparency. Either that or you will need > to derive a `Color` from a 32-bit int in the cases that set a 32-bit int > color directly. The former is probably easier. In my first commit there was already a method to get the color out of the 32-bit int (which was still referred as hash value at that time): private static Color getColorFromHash(int hash) { String hexString = Integer.toHexString(hash); int length = hexString.length(); return Color.valueOf("#" + "0".repeat(8 - length) + hexString); } If we keep it in `WebPage` (renaming it accordingly to `getColorFromInt32` for instance), we could do: public void setBackgroundColor(Color backgroundColor) { setBackgroundColor(getColorInt32Value(backgroundColor)); } public void setBackgroundColor(int backgroundColor) { this.backgroundColor = getColorFromInt32(backgroundColor); lockPage(); ... } ``` which looks a little bit ugly. The other option, as you mention, is finding out if the 32-bit int has alpha 0 or 1, which can be done storing only the int value, not the color, so this looks cleaner, we don't really need to hold a reference to the Color after all: private int backgroundColor = -1; // Color.WHITE public void setBackgroundColor(Color backgroundColor) { setBackgroundColor(getColorInt32Value(backgroundColor)); } public void setBackgroundColor(int backgroundColor) { this.backgroundColor = backgroundColor; lockPage(); ... } private boolean isBackgroundTransparent() { return (backgroundColor & 0x000000FF) == 0; } private boolean isBackgroundOpaque() { return (backgroundColor & 0x000000FF) == 255; } ------------- PR: https://git.openjdk.java.net/jfx/pull/563