<Swing Dev> [9] Review request for 8132119 Provide public API for text related methods in SwingUtilities2

Alexander Scherbatiy alexandr.scherbatiy at oracle.com
Mon Sep 7 09:27:11 UTC 2015


On 9/2/2015 8:09 PM, Phil Race wrote:
> I don't remember or know how Swing resolves this but the measurement ones
> are not reliable since they do not take a Graphics context, so you cannot
> measure the string properly. You need a FontRenderContext to measure.

    The provided methods use 
SwingUtilities2.getFontRenderContext(JComponent) method which returns 
the FontRenderContext associated with the component.

>
> So as it stands these APIs do not appear suitable to be made public as 
> they
> are not reliable.
>
> Whilst I could look at the code, if I instead just look at the API, I 
> am scratching my
> head over :-
>
> public static void drawString(JComponent c, Graphics g, String text,   
> int x, int y)
>
> Here you provide the Graphics *and* the Component.
> And it says the JComponent may be null.
> So I am supposing that there is optional information that may be 
> pulled from the
> JComponent regarding rendering mode ?

    The optional information provided by the component is:
      - java.awt.font.NumericShaper
      - java.awt.font.FontRenderContext
      - antialiasing hints

>
> drawStringUnderlineCharAt(..) probably needs to explain if the index 
> is code point
> or UTF16 char index and what happens if there is not 1:1 code 
> point:glyph mapping.
     I will update this.
>
> Are we sure that (any of) these really ought/need to be public  - 
> particularly given the
> resolution of https://bugs.openjdk.java.net/browse/JDK-6302464

    These methods are used by JDK L&Fs to draw text.  The initial 
request was to provide public methods that can be used by a custom L&F 
to draw strings consistently with other L&Fs.

    They are also designed to properly render text for printing. To do 
that they use call to internal ProxyPrintGraphics class to obtain the 
print graphics context.

    Even if printing staff will be public, these methods are just 
utility methods (in the same way as other text methods in the 
javax.swing.text.Utilities class) that help easily to draw and print 
text in the same way as JDK L&Fs do that.

   Thanks,
   Alexandr.

>
> -phil.
>
> On 09/02/2015 08:28 AM, Alexander Scherbatiy wrote:
>>
>> Hello,
>>
>> Could you review the fix:
>>   bug: https://bugs.openjdk.java.net/browse/JDK-8132119
>>   webrev: http://cr.openjdk.java.net/~alexsch/8132119/webrev.00
>>
>>   The suggested drawString, drawStringUnderlineCharAt, 
>> clipStringIfNecessary, and stringWidth methods are
>>   added to the javax.swing.text.Utilities class.
>>
>> Thanks,
>> Alexandr.
>>
>




More information about the swing-dev mailing list