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: 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 ();
 }

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