<Swing Dev> [9] Review request for 8165594 Bad rendering of Swing UI controls with Windows Classic L&F on HiDPI display

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Fri Sep 23 13:03:37 UTC 2016


On 22.09.16 20:21, Sergey Bylokhov wrote:
> Looks fine.
> Can you please check the "thumb" in the scroll bar in text area as
> well(it is invisible in the current screenshots)

I also suggest as a separate task check how this code will be printed, 
when the dpi will be much bigger.

>
> On 20.09.16 19:35, Alexandr Scherbatiy wrote:
>>
>>   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.
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
>


-- 
Best regards, Sergey.



More information about the swing-dev mailing list