<Swing Dev> [13] RFR JDK-8213781:web page background renders blue in JEditorPane

Prasanta Sadhukhan prasanta.sadhukhan at oracle.com
Thu Feb 21 14:49:46 UTC 2019


Also, as per https://www.w3.org/TR/CSS2/syndata.html#value-def-color, we 
have

The three-digit RGB notation (#rgb) is converted into six-digit form 
(#rrggbb) by replicating digits, not by adding zeros. For example, #fb0 
expands to #ffbb00. This ensures that white (#ffffff) can be specified 
with the short notation (#fff) and removes any dependencies on the color 
depth of the display.

Regards
Prasanta
On 21-Feb-19 7:45 PM, Prasanta Sadhukhan wrote:
> Hi Shashi,
>
> As you can see, Color.decode() called from hexToColor() accepts an 
> opaque 24 bit integer which is what returns the actual color that will 
> be rendered. Normally, it's 2D api's (ie Color.java) job to use 
> ColorSpace/ColorModel to give back the correct color and hexToColor's 
> job is to give a 6 digit string. The basic premise of the issue is CSS 
> parser gets a 3-digit string #fff instead of 6digit string #ffffff. 
> Please do not get confused by r,g,b variable name, it can as well be 
> a, b, c variables.
>
> Regarding doing the logic at hexToColor(), it's because the comment of 
> that fn itself says "If the color specification is bad, an attempt 
> will be made to fix it up" so I made the attempt to fix it in that 
> function as expected by that comment.
>
> Hope this clarifies.
>
> Regards
> Prasanta
> On 21-Feb-19 3:46 PM, Shashidhara Veerabhadraiah wrote:
>> Hi Prashanta, I have a question on the proposed solution. Shouldn’t 
>> one check for the color depth of the system like true color(24 bit) 
>> or high color system(12 bit or non-true color system) before applying 
>> this logic? Assuming 24 bit color system isn't the right thing to do 
>> I think but again that may be mostly default these days. I also think 
>> we should receive the expanded form at the hexToColor() rather than 
>> expanding at this function. We should simply apply the received color 
>> at this lower function level I think.
>>
>> Thanks and regards,
>> Shashi
>>
>> -----Original Message-----
>> From: Prasanta Sadhukhan
>> Sent: Thursday, February 21, 2019 2:04 PM
>> To: swing-dev at openjdk.java.net
>> Subject: <Swing Dev> [13] RFR JDK-8213781:web page background renders 
>> blue in JEditorPane
>>
>> Hi All,
>>
>> Please review a fix for an issue where it is seen that some webpage 
>> shows wrong background color when displayed in JEditorPane.
>>
>> It seems that some webpage can have #rgb [as in #fff] as CSS 
>> attributes which when parsed and passed to hexToColor() it is decoded 
>> as 0x000fff resulting in primarily blue background instead of white 
>> as desired.
>> Now, hexToColor() is only able to handle 24 bit hex string as in 
>> #FFFFFF but not 12bit hexstring. So, fix is to make it recognize #fff 
>> and use
>> Color.decode() to decode it correctly to 0xffffff.
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8213781
>> webrev: http://cr.openjdk.java.net/~psadhukhan/8213781/webrev.0/
>>
>> Regards
>> Prasanta
>



More information about the swing-dev mailing list