This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
Patch: TextArea size fixes
- From: Thomas Fitzsimmons <fitzsim at redhat dot com>
- To: java-patches at gcc dot gnu dot org
- Date: Sat, 20 Dec 2003 15:10:08 -0500
- Subject: 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;