<Swing Dev> RFR: 8231286: HTML font size too large with high-DPI scaling and W3C_LENGTH_UNITS [v7]

Alexey Ivanov aivanov at openjdk.java.net
Thu Feb 4 21:01:44 UTC 2021


On Thu, 4 Feb 2021 11:59:29 GMT, Alexey Ivanov <aivanov at openjdk.org> wrote:

>>> 
>>> 
>>> I have written automatic test for [JDK-8260687](https://bugs.openjdk.java.net/browse/JDK-8260687): Inherited font size is smaller than expected when using StyleSheet to add styles. You can find it in my JDK-8260687 branch:
>>> https://github.com/aivanov-jdk/jdk/commits/JDK-8260687
>>> There's also a commit which modifies the test from [JDK-8257664](https://bugs.openjdk.java.net/browse/JDK-8257664) to run in two modes with and without W3C_LENGTH_UNITS.
>>> 
>>> We have several options:
>>> 
>>>     1. As this PR contains the fix for JDK-8260687, you can cherry-pick the test into your branch.
>>> 
>>>     2. I can create a new JBS issue to add the test for JDK-8260687 separately.
>>> 
>>>     3. You can revert the fix in your PR, and I'll add it to the test and then raise a new PR to resolve JDK-8260687.
>>> 
>>> 
>>> I have no strong preference for any of the options.
>> 
>> My preference will be 
>> 1) if @mperktold can pick the test from https://github.com/aivanov-jdk/jdk/commit/6d0b40db4400dac03567b5cab4ad45b103ea94d0 and add into this PR
>> else 2)
>> @mperktold can you also issue this comment "/issue add JDK-8260687" once @aivanov-jdk approves this PR.
>
>> My preference will be
>> 
>>     1. if @mperktold can pick the test from [aivanov-jdk at 6d0b40d](https://github.com/aivanov-jdk/jdk/commit/6d0b40db4400dac03567b5cab4ad45b103ea94d0) and add into this PR
>>        else 2)
>>        @mperktold can you also issue this comment "/issue add JDK-8260687" once @aivanov-jdk approves this PR.
> 
> Good!
> 
> The only thing is that the test file has three commits now:
> aivanov-jdk at 6d0b40d, aivanov-jdk at b50d650, aivanov-jdk at f9e99777
> The final version of the test file [BodyInheritedFontSize.java](https://github.com/aivanov-jdk/jdk/blob/f9e997776fe478d99f0bbb6739ded10ec79b4caa/test/jdk/javax/swing/text/html/StyleSheet/8260687/BodyInheritedFontSize.java).
> 
> Then this PR would include the fixes for two issues, thus the command
> `/issue add JDK-8260687` 
> would add another resolved bug to the commit.
> 
> Optionally, issuing the following commands:
> `/contributor add psadhukhan`
> `/contributor add  aivanov`
> will add Prasanta and myself as contributors.

> 
> 
> > > It seems Toolkit.getDefaultToolkit().getScreenResolution() can return 93/94/95 instead of 96 in mac/linux in internal mach5 testing systems causing failure in this test Test.java. Probably we need to make the testcase hardcoded to 96
> > 
> > 
> > I guess so.
> > Where does this `Test.java` come from?
> > > I also suggest fixing JDK-8260687 to not use font inherit for W3C_LENGTH_UNIT case
> > > ```
> > > --- a/src/java.desktop/share/classes/javax/swing/text/html/StyleSheet.java
> > > +++ b/src/java.desktop/share/classes/javax/swing/text/html/StyleSheet.java
> > > @@ -2823,7 +2823,7 @@ public class StyleSheet extends StyleContext {
> > >          }
> > > 
> > >          Object doGetAttribute(Object key) {
> > > -            if (key == CSS.Attribute.FONT_SIZE && !isDefined(key)) {
> > > +            if (key == CSS.Attribute.FONT_SIZE && !isDefined(key) && !isW3CLengthUnits()) {
> > >                  // CSS.FontSize represents a specified value and we need
> > >                  // to inherit a computed value so don't resolve percentage
> > >                  // value from parent.
> > > ```
> > 
> > 
> > Does such a fix not bring back the problem with relative units for the case where W3C_LENGTH_UNIT is enabled?
> 
> I guess no as this code is recently introduced by JDK-8257664 and I have verified with this testcase and other jtreg regression tests. But if you have a better fix, then please suggest.

Indeed, it does. Why will it not? The modified [TestWrongCSSFontSize.java](https://github.com/openjdk/jdk/blob/16fdd939a4351519c8bc0ca36154443bd0986854/test/jdk/javax/swing/text/html/StyleSheet/TestWrongCSSFontSize.java) (regression test for [JDK-8257664](https://bugs.openjdk.java.net/browse/JDK-8257664)) fails when W3C_LENGTH_UNIT is enabled with the proposed fix: the font size gets bigger than it should as 150% scale gets applied twice to this fragment:
<h2>Foo</h2>

The test uses `body { font-size: 14 }` rule in its `<style>`. But it fails the same way if this is replaced with the correct units:
        editor.setText(TEXT.replace("$FONT_SIZE",
                                    w3cUnits ? "14px" : "14pt"));

Since this is the case, I suggest reverting the [proposed fix](https://github.com/openjdk/jdk/pull/2256/commits/ce2500ced9cf4007599972590e4924bdc87cc829) for [JDK-8260687](https://bugs.openjdk.java.net/browse/JDK-8260687). The modified test passes successfully in both modes when the proposed fix is reverted.

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

PR: https://git.openjdk.java.net/jdk/pull/2256


More information about the swing-dev mailing list