<Swing Dev> [9] Review request for 8132119 Provide public API for text related methods in SwingUtilities2
Alexander Scherbatiy
alexandr.scherbatiy at oracle.com
Wed Jan 13 15:03:12 UTC 2016
Hello,
Could you review the updated fix:
http://cr.openjdk.java.net/~alexsch/8132119/webrev.05/
- the methods description are updated to mention a component numeric
shaper and non-print graphics context
- @since tag value is updated to 9
Thanks,
Alexandr.
On 1/12/2016 10:42 PM, Philip Race wrote:
> @since needs to be just "9" as of the updated verona versioning scheme.
>
> -phil.
>
> On 1/12/16, 4:25 AM, Semyon Sadetsky wrote:
>> Hi Alexander,
>>
>> I see that you've added the next clarifications to the methods specs:
>>
>> > draws string/returns width ... using text properties and
>> anti-aliasing hints from the provided component
>>
>> It still seems too brief and even incorrect for getStringWidth().
>>
>> For drawString():
>>
>> For non-printing case I would write:
>>
>> Sets the anti-aliasing rendering hints to the Graphics object if
>> those are specified in the component properties. Then the string is
>> drawn using the provided Graphics object with the numeric shaper
>> taken into account if it is defined for the component.
>>
>> Please consider the printing case...
>>
>> For getStringWidth():
>>
>> Did not get which anti-aliasing hints it takes into account while
>> there is no Graphics in the params list...
>> On the contrary, it does not take into account the rendering context.
>> My suggestion:
>>
>> Returns string pixel width by the provided font metrics and according
>> to the numeric shaper if it is defined for the component.
>>
>> --Semyon
>>
>> For
>> On 12/10/2015 5:06 PM, Alexander Scherbatiy wrote:
>>>
>>> Hello,
>>>
>>> Could you review the updated fix:
>>> http://cr.openjdk.java.net/~alexsch/8132119/webrev.04/
>>>
>>> On 12/10/2015 2:39 PM, Alexey Ivanov wrote:
>>>> Hi Alexandr,
>>>>
>>>> I suggest using {@code underlinedIndex} in this sentence:
>>>>
>>>> * The {@code underlinedIndex} parameter points to a char value
>>>> (Unicode code unit) in the
>>>> * given string.
>>>>
>>>> in the Javadoc for drawStringUnderlineCharAt().
>>>>
>>>>
>>>> And I suggest using "fits" instead of "can fit" in @return for
>>>> getClippedString() and rephrasing the conditions where empty string
>>>> is returned:
>>>>
>>>> * @return the clipped string that fits in the provided space, an empty
>>>> * string if the given string argument is {@code null} or
>>>> empty.
>>>
>>> The fix is updated according to the provided comments.
>>>
>>> Thanks,
>>> Alexandr.
>>>>
>>>>
>>>> Regards,
>>>> Alexey
>>>>
>>>> On 10.12.2015 5:23, Alexander Scherbatiy wrote:
>>>>> Hello,
>>>>>
>>>>> Could you review the updated fix:
>>>>> http://cr.openjdk.java.net/~alexsch/8132119/webrev.03/
>>>>>
>>>>> - methods description is updated to mention used text properties
>>>>> and anti-aliasing hints from the provided component
>>>>> - the drawStringUnderlineCharAt method description is updated
>>>>> - @since tag is added for the drawString() method
>>>>> - the description that some parameters may/must not be null is added
>>>>> - the test is updated to call the methods on EDT
>>>>> - the test is updated to check passed null arguments
>>>>>
>>>>> On 09/12/15 14:40, Alexey Ivanov wrote:
>>>>>> Hi Alexandr,
>>>>>>
>>>>>> Shouldn't drawString() also have @since tag?
>>>>>>
>>>>>>
>>>>>> Could you please also clarify whether underlinedIndex in
>>>>>> drawStringUnderlineCharAt refers to the char index in the string?
>>>>>>
>>>>>> The statement
>>>>>> * The underlined index refers to char values (Unicode code units).
>>>>>> makes it unclear: underlinedIndex is an *index* or a *char*
>>>>>> (Unicode code point).
>>>>>
>>>>> I updated it to "The underlined index points to a char value
>>>>> (Unicode code unit) in the given string."
>>>>> The 'refers' word was used for a value at the given index.
>>>>> However, I am not sure that the new variant is better.
>>>>>>
>>>>>>
>>>>>> * 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.
>>>>>>
>>>>>> I think it will be better to spell comparison operators, I mean
>>>>>> to use "greater than" rather than ">=". And "length" must be
>>>>>> used instead of "width".
>>>>>>
>>>>>> I propose the following text:
>>>>>>
>>>>>> No character is underlined if the index is negative or greater
>>>>>> than the string length or if the char value specified at the
>>>>>> given index is in the low-surrogate range.
>>>>>>
>>>>>> For the first part of condition, you can add clarification in
>>>>>> parenthesis: {@code index < 0 || index >= string.length()}.
>>>>> Updated.
>>>>>>
>>>>>>
>>>>>> For consistency, please remove the full stop in @return tag in
>>>>>> description of getClippedString.
>>>>>
>>>>> Updated.
>>>>>
>>>>> Thanks,
>>>>> Alexandr.
>>>>>
>>>>>>
>>>>>> Regards,
>>>>>> Alexey
>>>>>>
>>>>>> On 25.11.2015 18:28, Alexandr Scherbatiy wrote:
>>>>>>>
>>>>>>>
>>>>>>> Hello,
>>>>>>>
>>>>>>> Could you review the updated fix:
>>>>>>> http://cr.openjdk.java.net/~alexsch/8132119/webrev.02
>>>>>>>
>>>>>>> The javadoc references for the #drawStringUnderlineCharAt and
>>>>>>> #getClippedString methods are moved after parameters description.
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Alexandr.
>>>>>>>
>>>>>>>
>>>>>>> 14.09.2015 17:39, Alexander Scherbatiy пишет:
>>>>>>>>
>>>>>>>> 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