This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
Patch: Label fixes
- From: Thomas Fitzsimmons <fitzsim at redhat dot com>
- To: GCJ Patches <java-patches at gcc dot gnu dot org>
- Date: Wed, 29 Oct 2003 19:05:15 -0500
- Subject: Patch: Label fixes
Hello,
This patch reverts the change made here:
2003-07-24 Thomas Fitzsimmons <fitzsim@redhat.com>
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c (create):
Don't pack label in an event box.
and implements new methods that "unwrap" the label from the event box.
Wrapping the label allows its background colour to be set and allows it
to receive events.
OK to commit?
Tom
2003-10-29 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkLabelPeer.java (create()): Call new create.
(create(String, float)): New method.
(setText): Make native.
(nativeSetAlignment): New method.
(setAlignment): Call nativeSetAlignment.
(getArgs): Remove method.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
(find_fg_color_widget, find_bg_color_widget): New functions.
(gtkWidgetSetForeground): Call find_fg_color_widget.
(gtkWidgetSetBackground): Call find_bg_color_widget. Modify active and
prelight colors.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c (create): Wrap
label
widget in event box.
(setText, setAlignment): Implement new native methods.
Index: gnu/java/awt/peer/gtk/GtkLabelPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkLabelPeer.java,v
retrieving revision 1.2
diff -u -r1.2 GtkLabelPeer.java
--- gnu/java/awt/peer/gtk/GtkLabelPeer.java 13 Jul 2003 15:09:20 -0000 1.2
+++ gnu/java/awt/peer/gtk/GtkLabelPeer.java 29 Oct 2003 23:43:14 -0000
@@ -45,21 +45,25 @@
public class GtkLabelPeer extends GtkComponentPeer
implements LabelPeer
{
- native void create ();
+ void create ()
+ {
+ Label label = (Label) awtComponent;
+ create (label.getText (), getGtkAlignment (label.getAlignment ()));
+ }
+
+ native void create (String text, float alignment);
public GtkLabelPeer (Label l)
{
super (l);
}
-
- public void setText (String text)
- {
- set ("label", text);
- }
+ native public void setText (String text);
+
+ native void nativeSetAlignment (float alignment);
public void setAlignment (int alignment)
{
- set ("xalign", getGtkAlignment (alignment));
+ nativeSetAlignment (getGtkAlignment (alignment));
}
float getGtkAlignment (int alignment)
@@ -75,16 +79,5 @@
}
return 0.0f;
- }
-
- public void getArgs (Component component, GtkArgList args)
- {
- super.getArgs (component, args);
-
- Label label = (Label) component;
-
- args.add ("label", label.getText ());
- args.add ("xalign", getGtkAlignment (label.getAlignment ()));
- args.add ("yalign", 0.5f);
}
}
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,v
retrieving revision 1.8
diff -u -r1.8 gnu_java_awt_peer_gtk_GtkComponentPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c 8 Oct 2003 23:38:45 -0000 1.8
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c 29 Oct 2003 23:43:15 -0000
@@ -40,6 +40,9 @@
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
#include <gtk/gtkprivate.h>
+static GtkWidget *find_fg_color_widget (GtkWidget *widget);
+static GtkWidget *find_bg_color_widget (GtkWidget *widget);
+
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose
(JNIEnv *env, jobject obj)
{
@@ -299,7 +302,7 @@
gdk_threads_enter ();
- widget = GTK_WIDGET (ptr);
+ widget = find_bg_color_widget (GTK_WIDGET (ptr));
gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &normal_color);
gtk_widget_modify_bg (widget, GTK_STATE_ACTIVE, &active_color);
@@ -324,9 +327,11 @@
gdk_threads_enter ();
- widget = GTK_WIDGET (ptr);
+ widget = find_fg_color_widget (GTK_WIDGET (ptr));
gtk_widget_modify_fg (widget, GTK_STATE_NORMAL, &color);
+ gtk_widget_modify_fg (widget, GTK_STATE_ACTIVE, &color);
+ gtk_widget_modify_fg (widget, GTK_STATE_PRELIGHT, &color);
gdk_threads_leave ();
}
@@ -542,3 +547,39 @@
connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window);
gdk_threads_leave ();
}
+
+static GtkWidget *
+find_fg_color_widget (GtkWidget *widget)
+{
+ GtkWidget *fg_color_widget;
+
+ if (GTK_IS_EVENT_BOX (widget))
+ fg_color_widget = gtk_bin_get_child (GTK_BIN(widget));
+ else
+ fg_color_widget = widget;
+
+ return fg_color_widget;
+}
+
+static GtkWidget *
+find_bg_color_widget (GtkWidget *widget)
+{
+ GtkWidget *bg_color_widget;
+
+ if (GTK_IS_WINDOW (widget))
+ {
+ GtkWidget *vbox;
+ GList* children;
+
+ children = gtk_container_get_children(GTK_CONTAINER(widget));
+ vbox = children->data;
+
+ children = gtk_container_get_children(GTK_CONTAINER(vbox));
+ bg_color_widget = children->data;
+ }
+ else
+ bg_color_widget = widget;
+
+ return bg_color_widget;
+}
+
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c,v
retrieving revision 1.3
diff -u -r1.3 gnu_java_awt_peer_gtk_GtkLabelPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c 5 Aug 2003 18:04:09 -0000 1.3
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c 29 Oct 2003 23:43:15 -0000
@@ -41,15 +41,66 @@
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkLabelPeer_create
- (JNIEnv *env, jobject obj)
+ (JNIEnv *env, jobject obj, jstring text, jfloat xalign)
{
GtkWidget *label;
+ GtkWidget *ebox;
+ GtkContainer *ebox_container;
+ const char *str;
+
+ str = (*env)->GetStringUTFChars (env, text, 0);
gdk_threads_enter ();
- label = gtk_label_new (NULL);
+ ebox = gtk_event_box_new ();
+ ebox_container = GTK_CONTAINER (ebox);
+ label = gtk_label_new (str);
+ gtk_misc_set_alignment (GTK_MISC (label), xalign, 0.5);
+ gtk_container_add (ebox_container, label);
+ gtk_widget_show (label);
gdk_threads_leave ();
- NSA_SET_PTR (env, obj, label);
+ (*env)->ReleaseStringUTFChars (env, text, str);
+
+ NSA_SET_PTR (env, obj, ebox);
+}
+
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkLabelPeer_setText
+ (JNIEnv *env, jobject obj, jstring text)
+{
+ const char *str;
+ void *ptr;
+ GtkWidget *label;
+
+ ptr = NSA_GET_PTR (env, obj);
+
+ str = (*env)->GetStringUTFChars (env, text, 0);
+
+ gdk_threads_enter ();
+
+ label = gtk_bin_get_child (GTK_BIN(ptr));
+
+ gtk_label_set_label (GTK_LABEL (label), str);
+
+ gdk_threads_leave ();
+}
+
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkLabelPeer_setAlignment
+ (JNIEnv *env, jobject obj, jfloat xalign)
+{
+ void *ptr;
+ GtkWidget *label;
+
+ ptr = NSA_GET_PTR (env, obj);
+
+ gdk_threads_enter ();
+
+ label = gtk_bin_get_child (GTK_BIN(ptr));
+
+ gtk_misc_set_alignment (GTK_MISC (label), xalign, 0.5);
+
+ gdk_threads_leave ();
}