+2003-11-11 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.
+
2003-11-11 Michael Koch <konqueror@gmx.de>
* java/awt/Font.java,
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)
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);
- }
}
#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)
{
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);
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 ();
}
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;
+}
+
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 ();
+
+ 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 ();
+
+ (*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_label_new (NULL);
+ label = gtk_bin_get_child (GTK_BIN(ptr));
+
+ gtk_label_set_label (GTK_LABEL (label), str);
gdk_threads_leave ();
- NSA_SET_PTR (env, obj, label);
+ (*env)->ReleaseStringUTFChars (env, text, str);
+}
+
+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 ();
}