[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[cp-patches] GTK button and label peer preferred size fixes
From: |
Thomas Fitzsimmons |
Subject: |
[cp-patches] GTK button and label peer preferred size fixes |
Date: |
Fri, 12 Aug 2005 18:53:30 -0400 |
Hi,
This patch fixes GtkButtonPeer and GtkLabelPeer's preferred size
methods. We were retrieving incorrect natural sizes for these widgets
causing wrong layouts. I committed this to mainline.
Tom
2005-08-12 Thomas Fitzsimmons <address@hidden>
* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
(gtkWidgetGetPreferredDimensions): New method.
* gnu/java/awt/peer/gtk/GtkLabelPeer.java,
native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
(gtkWidgetGetPreferredDimensions): New method.
* include/gnu_java_awt_peer_gtk_GtkLabelPeer.h: Regenerate.
* include/gnu_java_awt_peer_gtk_GtkButtonPeer.h: Likewise.
Index: gnu/java/awt/peer/gtk/GtkButtonPeer.java
===================================================================
RCS file:
/cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GtkButtonPeer.java,v
retrieving revision 1.37
diff -u -u -r1.37 GtkButtonPeer.java
--- gnu/java/awt/peer/gtk/GtkButtonPeer.java 2 Jul 2005 20:32:12 -0000
1.37
+++ gnu/java/awt/peer/gtk/GtkButtonPeer.java 12 Aug 2005 22:47:21 -0000
@@ -46,6 +46,9 @@
import java.awt.event.MouseEvent;
import java.awt.peer.ButtonPeer;
+// A composite widget. GtkButtons have transparent backgrounds. An
+// AWT Button is opaque. To compensate, a GtkButtonPeer is a
+// GtkButton packed in a GtkEventBox.
public class GtkButtonPeer extends GtkComponentPeer
implements ButtonPeer
{
@@ -60,6 +63,11 @@
native void gtkActivate ();
native void gtkWidgetRequestFocus ();
native void setNativeBounds (int x, int y, int width, int height);
+
+ // Because this is a composite widget, we need to retrieve the
+ // GtkButton's preferred dimensions, not the enclosing
+ // GtkEventBox's.
+ native void gtkWidgetGetPreferredDimensions (int[] dim);
public GtkButtonPeer (Button b)
{
Index: gnu/java/awt/peer/gtk/GtkLabelPeer.java
===================================================================
RCS file: /cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GtkLabelPeer.java,v
retrieving revision 1.23
diff -u -u -r1.23 GtkLabelPeer.java
--- gnu/java/awt/peer/gtk/GtkLabelPeer.java 2 Jul 2005 20:32:12 -0000
1.23
+++ gnu/java/awt/peer/gtk/GtkLabelPeer.java 12 Aug 2005 22:47:21 -0000
@@ -41,6 +41,9 @@
import java.awt.Label;
import java.awt.peer.LabelPeer;
+// A composite widget. GtkLabels have transparent backgrounds. An
+// AWT Label is opaque. To compensate, a GtkLabelPeer is a GtkLabel
+// packed in a GtkEventBox.
public class GtkLabelPeer extends GtkComponentPeer
implements LabelPeer
{
@@ -50,6 +53,10 @@
public native void setText(String text);
native void setNativeBounds (int x, int y, int width, int height);
+
+ // Because this is a composite widget, we need to retrieve the
+ // GtkLabel's preferred dimensions, not the enclosing GtkEventBox's.
+ native void gtkWidgetGetPreferredDimensions (int[] dim);
void create ()
{
Index: include/gnu_java_awt_peer_gtk_GtkButtonPeer.h
===================================================================
RCS file:
/cvsroot/classpath/classpath/include/gnu_java_awt_peer_gtk_GtkButtonPeer.h,v
retrieving revision 1.12
diff -u -u -r1.12 gnu_java_awt_peer_gtk_GtkButtonPeer.h
--- include/gnu_java_awt_peer_gtk_GtkButtonPeer.h 22 Oct 2004 10:11:11
-0000 1.12
+++ include/gnu_java_awt_peer_gtk_GtkButtonPeer.h 12 Aug 2005 22:47:23
-0000
@@ -19,6 +19,7 @@
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkActivate
(JNIEnv *env, jobject);
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetRequestFocus (JNIEnv *env,
jobject);
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_setNativeBounds (JNIEnv *env, jobject,
jint, jint, jint, jint);
+JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetGetPreferredDimensions
(JNIEnv *env, jobject, jintArray);
#ifdef __cplusplus
}
Index: include/gnu_java_awt_peer_gtk_GtkLabelPeer.h
===================================================================
RCS file:
/cvsroot/classpath/classpath/include/gnu_java_awt_peer_gtk_GtkLabelPeer.h,v
retrieving revision 1.8
diff -u -u -r1.8 gnu_java_awt_peer_gtk_GtkLabelPeer.h
--- include/gnu_java_awt_peer_gtk_GtkLabelPeer.h 22 Oct 2004 10:11:11
-0000 1.8
+++ include/gnu_java_awt_peer_gtk_GtkLabelPeer.h 12 Aug 2005 22:47:23
-0000
@@ -15,6 +15,7 @@
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkLabelPeer_nativeSetAlignment (JNIEnv *env,
jobject, jfloat);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkLabelPeer_setText (JNIEnv
*env, jobject, jstring);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkLabelPeer_setNativeBounds
(JNIEnv *env, jobject, jint, jint, jint, jint);
+JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkWidgetGetPreferredDimensions (JNIEnv
*env, jobject, jintArray);
#ifdef __cplusplus
}
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
===================================================================
RCS file:
/cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c,v
retrieving revision 1.26
diff -u -u -r1.26 gnu_java_awt_peer_gtk_GtkButtonPeer.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c 14 Jul 2005
22:07:02 -0000 1.26
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c 12 Aug 2005
22:47:23 -0000
@@ -86,6 +86,56 @@
gdk_threads_leave ();
}
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetGetPreferredDimensions
+ (JNIEnv *env, jobject obj, jintArray jdims)
+{
+ void *ptr;
+ jint *dims;
+ GtkWidget *button;
+ GtkWidget *label;
+ GtkRequisition current_req;
+ GtkRequisition current_label_req;
+ GtkRequisition natural_req;
+
+ gdk_threads_enter ();
+
+ ptr = NSA_GET_PTR (env, obj);
+
+ button = gtk_bin_get_child (GTK_BIN (ptr));
+ label = gtk_bin_get_child (GTK_BIN (button));
+
+ dims = (*env)->GetIntArrayElements (env, jdims, 0);
+ dims[0] = dims[1] = 0;
+
+ /* Save the button's current size request. */
+ gtk_widget_size_request (GTK_WIDGET (button), ¤t_req);
+
+ /* Save the label's current size request. */
+ gtk_widget_size_request (GTK_WIDGET (label), ¤t_label_req);
+
+ /* Get the widget's "natural" size request. */
+ gtk_widget_set_size_request (GTK_WIDGET (button), -1, -1);
+ gtk_widget_set_size_request (GTK_WIDGET (label), -1, -1);
+
+ gtk_widget_size_request (GTK_WIDGET (button), &natural_req);
+
+ /* Reset the button's size request. */
+ gtk_widget_set_size_request (GTK_WIDGET (button),
+ current_req.width, current_req.height);
+
+ /* Reset the label's size request. */
+ gtk_widget_set_size_request (GTK_WIDGET (label),
+ current_label_req.width,
current_label_req.height);
+
+ dims[0] = natural_req.width;
+ dims[1] = natural_req.height;
+
+ (*env)->ReleaseIntArrayElements (env, jdims, dims, 0);
+
+ gdk_threads_leave ();
+}
+
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectSignals
(JNIEnv *env, jobject obj)
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
===================================================================
RCS file:
/cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c,v
retrieving revision 1.16
diff -u -u -r1.16 gnu_java_awt_peer_gtk_GtkLabelPeer.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c 14 Jul 2005
22:07:02 -0000 1.16
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c 12 Aug 2005
22:47:23 -0000
@@ -66,6 +66,44 @@
gdk_threads_leave ();
}
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkWidgetGetPreferredDimensions
+ (JNIEnv *env, jobject obj, jintArray jdims)
+{
+ void *ptr;
+ jint *dims;
+ GtkWidget *label;
+ GtkRequisition current_req;
+ GtkRequisition natural_req;
+
+ gdk_threads_enter ();
+
+ ptr = NSA_GET_PTR (env, obj);
+
+ label = gtk_bin_get_child (GTK_BIN (ptr));
+
+ dims = (*env)->GetIntArrayElements (env, jdims, 0);
+ dims[0] = dims[1] = 0;
+
+ /* Save the widget's current size request. */
+ gtk_widget_size_request (GTK_WIDGET (label), ¤t_req);
+
+ /* Get the widget's "natural" size request. */
+ gtk_widget_set_size_request (GTK_WIDGET (label), -1, -1);
+ gtk_widget_size_request (GTK_WIDGET (label), &natural_req);
+
+ /* Reset the widget's size request. */
+ gtk_widget_set_size_request (GTK_WIDGET (label),
+ current_req.width, current_req.height);
+
+ dims[0] = natural_req.width;
+ dims[1] = natural_req.height;
+
+ (*env)->ReleaseIntArrayElements (env, jdims, dims, 0);
+
+ gdk_threads_leave ();
+}
+
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkWidgetModifyFont
(JNIEnv *env, jobject obj, jstring name, jint style, jint size)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [cp-patches] GTK button and label peer preferred size fixes,
Thomas Fitzsimmons <=