<Swing Dev> [9] Review request for 8163124 Add floating point API support to javax.swing.text.Caret
Philip Race
philip.race at oracle.com
Tue Aug 9 20:32:46 UTC 2016
But characters are of varying width. Being on the "20th" char on line N
may mean being on the "25th" on line N+1.
So I am claiming this is nothing new and we really do not need do
anything here.
-phil.
On 8/9/16, 1:06 PM, Alexandr Scherbatiy wrote:
> On 8/9/2016 12:44 AM, Phil Race wrote:
>> I was not familiar with this "magic caret" but from reading it seems
>> like it has just one use/purpose.
>> In the event that someone has multi-line text that you can navigate
>> around with up/down arrow keys
>> and that text has lines of varying length, you want a "preferred"
>> horizontal position for the caret
>> to be remembered so the caret is placed at that position whenever the
>> line of text has a length
>> greater than the caret position. Is there anything more to it than
>> that ?
>>
>> Obviously the caret needs to be placed correctly in the context of
>> the text, so the precise position,
>> even in an all-integer world, is not going to line up on every single
>> line, unless you have monospaced text.
>> ie the "pixel" position is going to get converted into a position on
>> the leading or trailing edge of some glyph
>>
>> So I wonder, does adding float matter .. is the extra precision
>> valuable here ?
> It may depend on the rounding of a point position.
> Suppose there are two lines with the same text. The caret is on the
> first line can have x position N.25. Pressing down the arrow key can
> round it to the N and the caret can be set to a previous char on the
> second line.
>
> Thanks,
> Alexandr.
>
>>
>> -phil.
>>
>> On 08/04/2016 05:44 AM, Alexandr Scherbatiy wrote:
>>>
>>> Hello,
>>>
>>> Could you review the fix:
>>> bug: https://bugs.openjdk.java.net/browse/JDK-8163124
>>> webrev: http://cr.openjdk.java.net/~alexsch/8163124/webrev.00
>>>
>>> The text position can have floating point value on HiDPI display.
>>> The Caret interface should be updated to allow use floating point
>>> positions.
>>>
>>> The fix adds the following public API with floating point positions:
>>> javax.swing.text.Caret.getMagicCaretPosition2D()
>>> javax.swing.text.Caret.setMagicCaretPosition2D(Point2D p)
>>> javax.swing.text.JTextComponent.modelToView2D(int pos)
>>> javax.swing.text.JTextComponent.viewToModel2D(Point2D pt)
>>> javax.swing.text.ParagraphView.getClosestPositionTo(int pos,
>>> Position.Bias b, Shape a, int direction, Position.Bias[], int
>>> rowIndex, float x)
>>>
>>>
>>> The fix replaces
>>> Caret.getMagicCaretPosition()/setMagicCaretPosition(Point p) to
>>> Caret.getMagicCaretPosition2D()/setMagicCaretPosition2D(Point2D p)
>>> in all places
>>> except DefaultCaret because DefaultCaret extends Rectangle so its
>>> coordinates always have int values.
>>> I have filled a separated enhancement for this JDK-8163174 Add
>>> DefaultCaret2D which supports floating point API
>>>
>>> To make a custom caret use floating point API it is also necessary
>>> that PlainView.modelToView() returns a rectangle with floating point
>>> values. It can be done after the fix
>>> JDK-8156217 Selected text is shifted on HiDPI display
>>> which implements Utilities.getTabbedTextWidth(Segment s,
>>> FontMetrics metrics, float x, TabExpander e, int startOffset) method.
>>> I have filled a separated issue on it:
>>> JDK-8163175 PlainView.modelToView() method should return
>>> Rectangle2D
>>>
>>> Thanks,
>>> Alexandr.
>>
>
More information about the swing-dev
mailing list