<Swing Dev> [9] Review request for 8165594 Bad rendering of Swing UI controls with Windows Classic L&F on HiDPI display
Alexandr Scherbatiy
alexandr.scherbatiy at oracle.com
Tue Sep 20 16:35:45 UTC 2016
Thank you for the suggested code.
Could you review the updated fix:
http://cr.openjdk.java.net/~alexsch/8165594/webrev.04
- the provided method is used to draw triangles in BasicArrowButton class
- shift to one pixel right is added for the triangles drawing
- AA rendering hint is set to draw a radio button
Screenshots [1] and [2] shows difference between icons drawing before
and after the fix for scales 2x and 4x.
[1]
http://cr.openjdk.java.net/~alexsch/8165594/screenshots/icons-windows-classic-2x_03.png
[2]
http://cr.openjdk.java.net/~alexsch/8165594/screenshots/icons-windows-classic-4x_03.png
Thanks,
Alexandr.
On 9/20/2016 5:34 PM, Semyon Sadetsky wrote:
> I would rewrite the method that draws triangle to simplify it:
>
> private void paintScaledTriangle(Graphics g, double x, double y,
> double size,
> int direction, boolean isEnabled) {
> size = Math.max(size , 2);
> Path2D.Double path = new Path2D.Double();
> path.moveTo(-size, size/2);
> path.lineTo(size, size/2);
> path.lineTo(0, -size/2);
> path.closePath();
> AffineTransform affineTransform = new AffineTransform();
> affineTransform.rotate(Math.PI * (direction - 1) / 4 );
> path.transform(affineTransform);
>
> Graphics2D g2d = (Graphics2D) g;
> g2d.translate(x + size / 2. - 1, y + size / 2);
> Color oldColor = g.getColor();
> if (!isEnabled) {
> g2d.translate(1, 0);
> g2d.setColor(highlight);
> g2d.fill(path);
> g2d.translate(-1, 0);
> }
> g2d.setColor(isEnabled ? darkShadow : shadow);
> g2d.fill(path);
> g2d.translate( - x - size / 2. + 1, - y - size / 2);
> g2d.setColor(oldColor);
> }
>
> I'm suggesting to make the paintTriangle() method accept floating
> point coordinates to get more precise location and size for the scaled
> version.
>
> Optionally, 2D AA hints can be added to get better appearance for
> scales 1.25, 1.5, 1.75.
>
> --Semyon
>
>
> On 9/20/2016 2:58 PM, Alexandr Scherbatiy wrote:
>>
>> Hello,
>>
>> Could you review the updated fix:
>> http://cr.openjdk.java.net/~alexsch/8165594/webrev.02
>>
>> The code formatting issues are updated.
>>
>> On 9/14/2016 8:02 PM, Semyon Sadetsky wrote:
>>> Hi Alexander,
>>>
>>> When I press the arrow button (for example in the "111" combo)
>>> several times I can see artifacts. They are well seen in scale x4.
>> I have filled an issue on it: JDK-8166368 JComboBox drawing has
>> artifacts with Windows Classic L&F on HiDPI display
>> https://bugs.openjdk.java.net/browse/JDK-8166368
>>
>> Thanks,
>> Alexandr.
>>
>>>
>>> --Semyon
>>>
>>>
>>> On 9/14/2016 5:39 PM, Alexandr Scherbatiy wrote:
>>>>
>>>> Hello,
>>>>
>>>> Could you review the updated fix:
>>>> http://cr.openjdk.java.net/~alexsch/8165594/webrev.01
>>>>
>>>> - HiDPI icons are only drawn for scaled graphics.
>>>>
>>>> The screenshots [1], [2], and [3] show difference between icons
>>>> drawing before and after the fix for scales 1x, 2x, and 4x.
>>>>
>>>> [1]
>>>> http://cr.openjdk.java.net/~alexsch/8165594/screenshots/icons-windows-classic-1x_01.png
>>>> [2]
>>>> http://cr.openjdk.java.net/~alexsch/8165594/screenshots/icons-windows-classic-2x_01.png
>>>> [3]
>>>> http://cr.openjdk.java.net/~alexsch/8165594/screenshots/icons-windows-classic-4x_01.png
>>>>
>>>> Thanks,
>>>> Alexandr.
>>>>
>>>> On 9/8/2016 10:59 AM, Andrej Golovnin wrote:
>>>>> Hi Alexandr,
>>>>>
>>>>>> [1]
>>>>>> http://cr.openjdk.java.net/~alexsch/8165594/screenshots/icons-windows-classic-1x.png
>>>>>>
>>>>> The icons do not look right to me. Take look at the top-left part of
>>>>> the radio button. There is a white pixel between the shadow lines.
>>>>> And
>>>>> in the selected state there should be a black circle. But instead it
>>>>> is a square. The check sign of the checkbox is too thin. And the
>>>>> arrows of the combobox and the vertical scroll bar should have a
>>>>> single pixel at the top/bottom side. But now they have two pixels.
>>>>>
>>>>> It would be also nice to see a screen shot of the native Windows
>>>>> components for comparison.
>>>>>
>>>>> Personally when I would make changes like that, then my code would
>>>>> look like this:
>>>>>
>>>>> if (isNotHiDPI() || itMakesMoreSenseToUseTheOldCode()) {
>>>>> // use the old good code.
>>>>> } else {
>>>>> // use the new code
>>>>> }
>>>>>
>>>>> Best regards,
>>>>> Andrej Golovnin
>>>>>
>>>>>> [2]
>>>>>> http://cr.openjdk.java.net/~alexsch/8165594/screenshots/icons-windows-classic-2x.png
>>>>>>
>>>>>> [3]
>>>>>> http://cr.openjdk.java.net/~alexsch/8165594/screenshots/icons-windows-classic-4x.png
>>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Alexandr.
>>>>>>
>>>>>>
>>>>
>>>
>>
>
More information about the swing-dev
mailing list