<Swing Dev> RFR JDK-8232243:Wrong caret position in JTextPane on Windows with a screen resolution > 100%
Jayathirth D v
JAYATHIRTH.D.V at ORACLE.COM
Wed Apr 29 07:32:11 UTC 2020
+1.
Thanks,
Jay
> On 29-Apr-2020, at 4:39 AM, Philip Race <philip.race at oracle.com> wrote:
>
> +1 from me.
>
> -phil.
>
> On 4/26/20, 9:13 PM, Prasanta Sadhukhan wrote:
>>
>> Sure..test updated...
>>
>> http://cr.openjdk.java.net/~psadhukhan/8232243/webrev.2/ <http://cr.openjdk.java.net/%7Epsadhukhan/8232243/webrev.2/>Regards
>> Prasanta
>> On 25-Apr-20 8:01 PM, Philip Race wrote:
>>>
>>> 96 SwingUtilities.invokeAndWait(() -> createUI());
>>> 97
>>> 98 Point p = textPane.getLocationOnScreen();
>>> 99 Robot robot = new Robot();
>>>
>>> For the sake of stability would it be better to create the robot and wait
>>> for idle before getting the pane location ?
>>>
>>> -phil.
>>>
>>> On 4/24/20, 9:31 PM, Prasanta Sadhukhan wrote:
>>>>
>>>> Thanks for your review. All comments incorporated
>>>>
>>>> http://cr.openjdk.java.net/~psadhukhan/8232243/webrev.1/ <http://cr.openjdk.java.net/%7Epsadhukhan/8232243/webrev.1/>Regards
>>>> Prasaant
>>>> On 25-Apr-20 4:25 AM, Philip Race wrote:
>>>>> In the test
>>>>> 56 textPane.setFont(new java.awt.Font("Arial", Font.PLAIN, 12));
>>>>>
>>>>> you should use a font you know exists. If the idea is that this test is just
>>>>> for windows, then @requires windows ?
>>>>>
>>>>> And
>>>>> 94 System.setProperty( "sun.java2d.uiScale", "1.5" );
>>>>>
>>>>> should be set as a command line property to the test since that is what we do
>>>>> elsewhere, then you can have the test run several times at different scales.
>>>>>
>>>>> Also currently 1.5 is truncated to 1 except on Windows ...
>>>>>
>>>>> If you want to test on Linux or Mac you need 2.
>>>>> Another reason to use the command line way of doing it.
>>>>>
>>>>>
>>>>> -phil
>>>>>
>>>>>
>>>>> On 4/16/20, 3:16 AM, Prasanta Sadhukhan wrote:
>>>>>>
>>>>>> Hi All,
>>>>>>
>>>>>> Please review a fix for an issue where it is seen that, with a screen resolution higher than 100% and then clicking in a JTextPane, the caret (insertion point) is not aligned with the cursor.
>>>>>>
>>>>>> The issue seems to stem from the fact that caret position calculation in DefaultCaret class utilises API that uses integer calculation than floating point calculations.
>>>>>>
>>>>>> This issue is in continuation to the fix done for JDK-8199441 where the issue was fixed for JTextArea. [http://hg.openjdk.java.net/jdk/jdk/rev/480c2ae4d031 <http://hg.openjdk.java.net/jdk/jdk/rev/480c2ae4d031>]
>>>>>>
>>>>>> The code flow for JTextArea was
>>>>>> DefaultCaret#positionCaret=>BasicTextUI#viewToModel=>BoxView.viewToModel=>CompositeView#viewToModel=>WrappedPlainView#viewToModel=>Utilities.getTabbedOffset
>>>>>>
>>>>>> whereas for JTextPane it it is DefaultCaret#positionCaret=>BasicTextUI#viewToModel=>BoxView.viewToModel=>CompositeView#viewToModel=>GlyphPainter1#viewToModel=>Utilities.getTabbedOffset
>>>>>>
>>>>>> Now, getTabbedOffset utilises FontMetrics.charsWidth() which uses integer arithmetic to get the caret position.
>>>>>> The same getTabbedOffset uses Font.getStringBounds() which uses floating point arithmetic via Rectangle2D.Float.
>>>>>>
>>>>>> Proposed fix is to make sure proper floating point getTabbedOffset API is used so that floating point calculations is done for char width.
>>>>>>
>>>>>> Bug:https://bugs.openjdk.java.net/browse/JDK-8232243 <https://bugs.openjdk.java.net/browse/JDK-8232243>
>>>>>>
>>>>>> webrev: http://cr.openjdk.java.net/~psadhukhan/8232243/webrev.0/ <http://cr.openjdk.java.net/%7Epsadhukhan/8232243/webrev.0/>
>>>>>>
>>>>>> Regards
>>>>>> Prasanta
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/swing-dev/attachments/20200429/23118a80/attachment-0001.htm>
More information about the swing-dev
mailing list