This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Patch: TextArea size fixes


Hello,

This patch fixes GtkTextAreaPeer's size calculation, which should depend
on average character width/height and the number of rows and columns to
be displayed.  This patch has a small dependency on Graydon's Graphics2D
patch.

I've also written a test for TextArea sizing that I'm going to commit to
the mauve wonka module.

OK to commit?

Tom

2003-12-20  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c (create):
	Add rows, cols, charWidth and charHeight parameters.  Set
	text view's size request according to new parameters.
	(gtkTextGetSize): Calculate and return scrolled window's
	requested size.
	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java (create): Set
	TextArea's font if not already set.  Call native create.

Index: gnu/java/awt/peer/gtk/GtkTextAreaPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,v
retrieving revision 1.6
diff -u -r1.6 GtkTextAreaPeer.java
--- gnu/java/awt/peer/gtk/GtkTextAreaPeer.java	8 Oct 2003 23:38:44 -0000	1.6
+++ gnu/java/awt/peer/gtk/GtkTextAreaPeer.java	20 Dec 2003 19:44:07 -0000
@@ -39,20 +39,48 @@
 package gnu.java.awt.peer.gtk;
 
 import java.awt.Dimension;
+import java.awt.Component;
 import java.awt.Font;
+import java.awt.FontMetrics;
 import java.awt.TextArea;
 import java.awt.peer.TextAreaPeer;
 
 public class GtkTextAreaPeer extends GtkTextComponentPeer
   implements TextAreaPeer
 {
-  native void create (int scrollbarVisibility);
+  native void create (int rows, int cols,
+		      int charWidth, int charHeight,
+		      int scrollbarVisibility);
 
   native void gtkSetFont(String name, int style, int size);
 
   void create ()
   {
-    create (((TextArea)awtComponent).getScrollbarVisibility ());
+    Font f = ((Component) awtComponent).getFont ();
+
+    if (f == null)
+      {
+	f = new Font ("Fixed", Font.PLAIN, 12);
+	// By default, Sun sets a TextArea's font when its peer is
+	// created.
+	((Component) awtComponent).setFont (f);
+      }
+
+    // If f != null then the peer's font is set by
+    // GtkComponent.create.
+
+    FontMetrics fm;
+    if (GtkToolkit.useGraphics2D ())
+      fm = new GdkClasspathFontPeerMetrics (f);
+    else
+      fm = new GdkFontMetrics (f);
+
+    int rows = ((TextArea) awtComponent).getRows ();
+    int cols = ((TextArea) awtComponent).getColumns ();
+
+    create (rows, cols, fm.getMaxAdvance (),
+	    fm.getMaxDescent () + fm.getMaxAscent (),
+	    ((TextArea) awtComponent).getScrollbarVisibility ());
   }
 
   native void gtkTextGetSize (int dims[]);
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c,v
retrieving revision 1.10
diff -u -r1.10 gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c	13 Dec 2003 01:15:47 -0000	1.10
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c	20 Dec 2003 19:44:07 -0000
@@ -42,7 +42,8 @@
 #define TEXT_FROM_SW(obj) (GTK_TEXT_VIEW(GTK_SCROLLED_WINDOW (obj)->container.child))
 JNIEXPORT void JNICALL 
 Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create
-  (JNIEnv *env, jobject obj, jint scroll)
+  (JNIEnv *env, jobject obj, jint rows, jint cols,
+   jint charWidth, jint charHeight, jint scroll)
 {
   GtkWidget *text, *sw;
 
@@ -52,6 +53,8 @@
   gdk_threads_enter ();
   
   text = gtk_text_view_new ();
+  gtk_widget_set_size_request (text, cols * charWidth,
+			       rows * charHeight);
   gtk_widget_show (text);
 
   sw = gtk_scrolled_window_new (NULL, NULL);
@@ -83,7 +86,6 @@
 {
   void *ptr;
   jint *dims;
-  GtkWidget *text;
   GtkRequisition requisition;
 
   ptr = NSA_GET_PTR (env, obj);
@@ -93,9 +95,9 @@
 
   gdk_threads_enter ();
 
-  text = GTK_WIDGET (TEXT_FROM_SW (ptr));
+  /* Calculate the scrolled window's size request. */
+  gtk_widget_size_request (GTK_WIDGET(ptr), &requisition);
 
-  gtk_widget_size_request(GTK_WIDGET (text), &requisition);
   dims[0] = requisition.width;
   dims[1] = requisition.height;
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]