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

Alexander Scherbatiy alexandr.scherbatiy at oracle.com
Mon Nov 23 15:52:28 UTC 2015



  Hello,

  Could you review the updated fix?

  Thanks,
  Alexandr.

On 9/14/2015 5:39 PM, Alexander Scherbatiy wrote:
>
>   Hello,
>
>   Could you review the updated fix:
>     http://cr.openjdk.java.net/~alexsch/8132119/webrev.01/
>
>   I tried to use Utilities.drawStringUnderlineCharAt(...) with chars 
> that have
>   - 1 character:2 glyphs mapping (U+00E1) and ligature (U+FB01)
>     The whole glyph  is underlined.
>   - 2 characters: 1 glyph mapping (supplementary char U+10400)
>
>   The char value specified the the underlined index should point to 
> the high-surrogate range of a supplementary character.
>   I updated the javadoc for the 
> Utilities.drawStringUnderlineCharAt(...) method to:
> -----------------------------
>     /**
>      * Draws the given string at the specified location underlining
>      * the specified character.
>      * <p>
>      * The underlined index refers to char values (Unicode code units).
>      * If the char value specified at the given underlined index is in
>      * the high-surrogate range and the char value at the following 
> index is in
>      * the low-surrogate range then the supplementary character 
> corresponding
>      * to this surrogate pair is underlined.
>      * <p>
>      * Nothing is drawn for null string. No character is underlined 
> for the
>      * index {@code < 0}, {@code >=} than the string width or if the 
> char value
>      * specified at the given index is in the low-surrogate range.
> -----------------------------
>
> Thanks,
> Alexandr.
>
> On 9/7/2015 12:27 PM, Alexander Scherbatiy wrote:
>> 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