-
Enhancement
-
Resolution: Not an Issue
-
P4
-
8
-
x86_64
-
linux
A DESCRIPTION OF THE PROBLEM :
Using kerning information, text would be more beautiful. Font doesn't provide api.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1, New a font.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Can get kerning from font
ACTUAL -
Can't find a api for kerning
CUSTOMER SUBMITTED WORKAROUND :
<Link1>
<Link2>
freetypeScaler.c
freetypeScaler.c:
JNIEXPORT jfloat JNICALL
Java_sun_font_FreetypeFontScaler_getKerningNative(
JNIEnv *env, jobject scaler,
jlong pScaler,
jint left_glyph,
jint right_glyph) {
int fixed_xy[2];
FTScalerInfo *scalerInfo =
(FTScalerInfo*) jlong_to_ptr(pScaler);
FT_TS_Get_Kerning(scalerInfo->face, left_glyph, right_glyph,
FT_TS_KERNING_UNFITTED, fixed_xy);
return FT26Dot6ToFloat(fixed_xy[0]);
}
FreetypeFontScaler:
@Override
public synchronized float getKerning(
int leftGlyph,
int rightGlyph) {
if (nativeScaler != 0L) {
return getKerningNative(nativeScaler,
leftGlyph, rightGlyph);
}
return 0;
}
Font.java
public float getKerning(char left, char right)
{
if (isTrueType())
{
TrueTypeFont ttf = ((TrueTypeFont)font2DHandle.font2D);
return ttf.getScaler().getKerning(ttf.charToGlyph(left), ttf.charToGlyph(right));
}
return 0;
}
private boolean isTrueType()
{
if (font2DHandle == null)
{
getFont2D();
}
return (font2DHandle != null && (font2DHandle.font2D instanceof TrueTypeFont));
}
Using kerning information, text would be more beautiful. Font doesn't provide api.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1, New a font.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Can get kerning from font
ACTUAL -
Can't find a api for kerning
CUSTOMER SUBMITTED WORKAROUND :
<Link1>
<Link2>
freetypeScaler.c
freetypeScaler.c:
JNIEXPORT jfloat JNICALL
Java_sun_font_FreetypeFontScaler_getKerningNative(
JNIEnv *env, jobject scaler,
jlong pScaler,
jint left_glyph,
jint right_glyph) {
int fixed_xy[2];
FTScalerInfo *scalerInfo =
(FTScalerInfo*) jlong_to_ptr(pScaler);
FT_TS_Get_Kerning(scalerInfo->face, left_glyph, right_glyph,
FT_TS_KERNING_UNFITTED, fixed_xy);
return FT26Dot6ToFloat(fixed_xy[0]);
}
FreetypeFontScaler:
@Override
public synchronized float getKerning(
int leftGlyph,
int rightGlyph) {
if (nativeScaler != 0L) {
return getKerningNative(nativeScaler,
leftGlyph, rightGlyph);
}
return 0;
}
Font.java
public float getKerning(char left, char right)
{
if (isTrueType())
{
TrueTypeFont ttf = ((TrueTypeFont)font2DHandle.font2D);
return ttf.getScaler().getKerning(ttf.charToGlyph(left), ttf.charToGlyph(right));
}
return 0;
}
private boolean isTrueType()
{
if (font2DHandle == null)
{
getFont2D();
}
return (font2DHandle != null && (font2DHandle.font2D instanceof TrueTypeFont));
}