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.