<Swing Dev> [9] Review request for 8163124 Add floating point API support to javax.swing.text.Caret

Alexandr Scherbatiy alexandr.scherbatiy at oracle.com
Mon Sep 19 19:43:50 UTC 2016


This is the known issue: JDK-8163175 PlainView.modelToView() method 
should return Rectangle2D
It is included into the fix JDK-8156217 Selected text is shifted on 
HiDPI display.

You can apply the fix [1] JDK-8156217 to the JDK and try the proposed 
sample.
I get the results [2] for scale 2x and [3] for scale 8x.

[1] http://cr.openjdk.java.net/~alexsch/8156217/webrev.07/all
[2] 
http://cr.openjdk.java.net/~alexsch/8156217/screenshots/model-to-view-2x.png
[3] 
http://cr.openjdk.java.net/~alexsch/8156217/screenshots/model-to-view-8x.png

Thanks,
Alexandr.

On 9/15/2016 1:49 PM, Semyon Sadetsky wrote:
> Hi Alexander,
>
> Could you run the next test (with x8 scale, for example):
>
> public class New2dApiTest {
>     public static void main(String[] args) {
>         JTextArea jTextArea2d = new JTextArea("jksxbqhbxniiiaiiaawww") {
>             @Override
>             protected void paintComponent(Graphics g) {
>                 super.paintComponent(g);
>                 Graphics2D g2d = (Graphics2D) g;
>                 g2d.setColor(new Color(255, 0, 0, 50));
>                 for (int i = 0; i < getText().length(); i++) {
>                     try {
>                         g2d.fill(modelToView2D(i));
>                     } catch (BadLocationException e) {
>                         e.printStackTrace();
>                     }
>                 }
>             }
>         };
>         JTextArea jTextArea = new JTextArea("jksxbqhbxniiiaiiaawww") {
>             @Override
>             protected void paintComponent(Graphics g) {
>                 super.paintComponent(g);
>                 Graphics2D g2d = (Graphics2D) g;
>                 g2d.setColor(new Color(0, 0, 255, 50));
>                 for (int i = 0; i < getText().length(); i++) {
>                     try {
>                         g2d.fill(modelToView(i));
>                     } catch (BadLocationException e) {
>                         e.printStackTrace();
>                     }
>                 }
>             }
>         };
>
>         JFrame jFrame = new JFrame();
>         jFrame.getContentPane().setLayout(new GridLayout(2, 1));
>         jFrame.getContentPane().add(jTextArea2d);
>         jFrame.getContentPane().add(jTextArea);
>         jFrame.pack();
>         jFrame.setVisible(true);
>
>     }
> }
>
>
> For some reason I cannot see the difference with the new and old API 
> result.
>
> --Semyon
>
>
> On 04.08.2016 15:44, 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