1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
Index: gnu/java/awt/peer/gtk/FreetypeGlyphVector.java
===================================================================
--- gnu/java/awt/peer/gtk/FreetypeGlyphVector.java.orig 2007-04-12 22:18:09.000000000 +0200
+++ gnu/java/awt/peer/gtk/FreetypeGlyphVector.java 2008-11-21 16:45:33.000000000 +0100
@@ -247,7 +247,8 @@
/**
* Returns the kerning of a glyph pair
*/
- private native Point2D getKerning(int leftGlyph, int rightGlyph, long font);
+ private native void getKerning(int leftGlyph, int rightGlyph, long font,
+ float[] p);
private native double[] getMetricsNative(int glyphCode, long font);
@@ -301,6 +302,7 @@
GlyphMetrics gm = null;
float x = 0;
float y = 0;
+ float[] p = {0.0f, 0.0f};
for(int i = 0; i < nGlyphs; i++)
{
gm = getGlyphMetrics( i );
@@ -314,9 +316,9 @@
// using the same font
if (i != nGlyphs-1 && fontSet[i] == fontSet[i+1])
{
- Point2D p = getKerning(glyphCodes[i], glyphCodes[i + 1], fontSet[i]);
- x += p.getX();
- y += p.getY();
+ getKerning(glyphCodes[i], glyphCodes[i + 1], fontSet[i], p);
+ x += p[0];
+ y += p[1];
}
}
glyphPositions[nGlyphs * 2] = x;
Index: include/gnu_java_awt_peer_gtk_FreetypeGlyphVector.h
===================================================================
--- include/gnu_java_awt_peer_gtk_FreetypeGlyphVector.h.orig 2008-06-06 04:10:00.000000000 +0200
+++ include/gnu_java_awt_peer_gtk_FreetypeGlyphVector.h 2008-11-21 16:45:33.000000000 +0100
@@ -13,7 +13,7 @@
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_dispose (JNIEnv *env, jobject, jlongArray);
JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getNativeFontPointer (JNIEnv *env, jobject, jint);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getGlyphs (JNIEnv *env, jobject, jintArray, jintArray, jlongArray);
-JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getKerning (JNIEnv *env, jobject, jint, jint, jlong);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getKerning (JNIEnv *env, jobject, jint, jint, jlong, jfloatArray);
JNIEXPORT jdoubleArray JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getMetricsNative (JNIEnv *env, jobject, jint, jlong);
JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getGlyphOutlineNative (JNIEnv *env, jobject, jint, jlong);
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c
===================================================================
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c.orig 2007-04-25 16:53:03.000000000 +0200
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c 2008-11-21 16:47:12.000000000 +0100
@@ -169,15 +169,13 @@
(*env)->ReleaseLongArrayElements (env, fonts, fontArray, 0);
}
-JNIEXPORT jobject JNICALL
+JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getKerning
-(JNIEnv *env, jobject obj __attribute__((unused)), jint rightGlyph, jint leftGlyph, jlong fnt)
+ (JNIEnv *env, jobject obj __attribute__((unused)), jint rightGlyph,
+ jint leftGlyph, jlong fnt, jfloatArray p)
{
FT_Face ft_face;
FT_Vector kern;
- jclass cls;
- jmethodID method;
- jvalue values[2];
PangoFcFont *font;
font = JLONG_TO_PTR(PangoFcFont, fnt);
@@ -187,12 +185,10 @@
pango_fc_font_unlock_face( font );
- values[0].d = (jdouble)kern.x/64.0;
- values[1].d = (jdouble)kern.y/64.0;
-
- cls = (*env)->FindClass (env, "java/awt/geom/Point2D$Double");
- method = (*env)->GetMethodID (env, cls, "<init>", "(DD)V");
- return (*env)->NewObjectA(env, cls, method, values);
+ jfloat *pelements = (*env)->GetPrimitiveArrayCritical(env, p, NULL);
+ pelements[0] = (jfloat)kern.x/64.0;
+ pelements[1] = (jfloat)kern.y/64.0;
+ (*env)->ReleasePrimitiveArrayCritical (env, p, pelements, 0);
}
JNIEXPORT jdoubleArray JNICALL
|