summaryrefslogtreecommitdiff
path: root/packages/classpath/classpath-0.97.2/gtk-fix.patch
blob: 0addec87ac47bf3c054e29f2896d076661a44c95 (plain)
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
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-28 18:29:50.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-28 18:29:50.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-28 18:29:50.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 
Index: gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
===================================================================
--- gnu/java/awt/peer/gtk/GtkFileDialogPeer.java.orig	2008-12-01 07:51:00.000000000 +0100
+++ gnu/java/awt/peer/gtk/GtkFileDialogPeer.java	2008-12-01 07:52:04.000000000 +0100
@@ -67,7 +67,7 @@
 
     FileDialog fd = (FileDialog) awtComponent;
     
-    nativeSetDirectory(System.getProperty("user.dir"));
+    nativeSetDirectory(System.getProperty("user.dir", "."));
     setDirectory(fd.getDirectory());
     setFile(fd.getFile());
 
@@ -108,18 +108,26 @@
     if (fileName == null || fileName.equals (""))
       {
         currentFile = "";
-        nativeSetFile ("");
+        nativeSetFile (new File("").getAbsolutePath());
         return;
       }
 
     // GtkFileChooser requires absolute filenames. If the given filename
     // is not absolute, let's construct it based on current directory.
     currentFile = fileName;
-    if (fileName.indexOf(FS) == 0)
+    File f = new File(fileName);
+    if (f.isAbsolute())
       nativeSetFile(fileName);
     else
-      nativeSetFile(nativeGetDirectory() + FS + fileName);
-  }
+    {
+      // Try with gtk API.
+      String temp = nativeGetDirectory();
+      if (temp != null)
+        f = new File(temp, fileName);
+
+      nativeSetFile(f.getAbsolutePath());
+    }
+}
 
   public void setDirectory (String directory)
   {
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
===================================================================
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c.orig	2008-12-01 07:53:00.000000000 +0100
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c	2008-12-01 07:53:17.000000000 +0100
@@ -58,6 +58,10 @@
   gtkpeer_set_global_ref (env, obj);
 
   sw = gtk_scrolled_window_new (NULL, NULL);
+
+  /* Sanitize width and height. gtk+ does not accept anything below -1. */
+  width = (width < -1 ? 0 : width);
+  height = (height < -1 ? 0 : height);
   gtk_widget_set_size_request (sw, width, height);
   eventbox = gtk_event_box_new ();
   gtk_container_add (GTK_CONTAINER (eventbox), sw);