<Swing Dev> [11] RFR: JDK-8199441: Wrong caret position in multiline text components on Windows with a screen resolution higher than 100%
Prasanta Sadhukhan
prasanta.sadhukhan at oracle.com
Tue May 8 06:54:34 UTC 2018
Hi Sergey,
I have run javax/swing/text jtreg and jck tests and did not observe any
regressions.
Regards
Prasanta
On 4/28/2018 5:38 AM, Sergey Bylokhov wrote:
> Hi, Prasanta.
> Please confirm that you run related jck/reg tests.
>
> On 26/04/2018 23:52, 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
>> JTextArea having setLineWrap(true) set, 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.
>> The code flow as seen is
>> DefaultCaret#positionCaret=>BasicTextUI#viewToModel=>BoxView.viewToModel=>CompositeView#viewToModel=>WrappedPlainView#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 getTabbedOffset uses floating point
>> calculations by using getStringBounds() instead of charsWidth() so
>> that it calculates
>> the character width(s) of text present in JTextArea in floating point
>> to align the caret.
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8199441
>> webrev: http://cr.openjdk.java.net/~psadhukhan/8199441/webrev.00/
>>
>> Regards
>> Prasanta
>
>
More information about the swing-dev
mailing list