<Swing Dev> [9] Review request for 8163124 Add floating point API support to javax.swing.text.Caret
Phil Race
philip.race at oracle.com
Mon Aug 8 21:44:26 UTC 2016
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 ?
-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