diff options
author | Christophe Cornu | 2005-03-29 20:59:24 +0000 |
---|---|---|
committer | Christophe Cornu | 2005-03-29 20:59:24 +0000 |
commit | 62a50fd56f88963a53641139c08b109ccb5dd6cf (patch) | |
tree | 9d6e22afbfd83ef934933c8f57f60832b61cb2fb | |
parent | b83310a1cf7fbf6ca6fc623153775b7c628d1753 (diff) | |
download | eclipse.platform.swt-62a50fd56f88963a53641139c08b109ccb5dd6cf.tar.gz eclipse.platform.swt-62a50fd56f88963a53641139c08b109ccb5dd6cf.tar.xz eclipse.platform.swt-62a50fd56f88963a53641139c08b109ccb5dd6cf.zip |
89217
7 files changed, 54 insertions, 15 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c index ada7ecaa80..b4610c2276 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c @@ -10101,6 +10101,23 @@ JNIEXPORT jint JNICALL OS_NATIVE(_1gtk_1widget_1get_1parent) } #endif +#ifndef NO__1gtk_1widget_1get_1size_1request +JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1widget_1get_1size_1request) + (JNIEnv *env, jclass that, jint arg0, jintArray arg1, jintArray arg2) +{ + jint *lparg1=NULL; + jint *lparg2=NULL; + OS_NATIVE_ENTER(env, that, _1gtk_1widget_1get_1size_1request_FUNC); + if (arg1) if ((lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL)) == NULL) goto fail; + if (arg2) if ((lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL)) == NULL) goto fail; + gtk_widget_get_size_request((GtkWidget *)arg0, (gint *)lparg1, (gint *)lparg2); +fail: + if (arg2 && lparg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0); + if (arg1 && lparg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0); + OS_NATIVE_EXIT(env, that, _1gtk_1widget_1get_1size_1request_FUNC); +} +#endif + #ifndef NO__1gtk_1widget_1get_1style JNIEXPORT jint JNICALL OS_NATIVE(_1gtk_1widget_1get_1style) (JNIEnv *env, jclass that, jint arg0) diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c index f2ad661bc1..f7d9436987 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c @@ -18,8 +18,8 @@ #ifdef NATIVE_STATS -int OS_nativeFunctionCount = 980; -int OS_nativeFunctionCallCount[980]; +int OS_nativeFunctionCount = 981; +int OS_nativeFunctionCallCount[981]; char * OS_nativeFunctionNames[] = { "Call", "GDK_1WINDOWING_1X11", @@ -804,6 +804,7 @@ char * OS_nativeFunctionNames[] = { "_1gtk_1widget_1get_1modifier_1style", "_1gtk_1widget_1get_1pango_1context", "_1gtk_1widget_1get_1parent", + "_1gtk_1widget_1get_1size_1request", "_1gtk_1widget_1get_1style", "_1gtk_1widget_1get_1toplevel", "_1gtk_1widget_1grab_1focus", diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h index e08484194a..9f5553c274 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h @@ -808,6 +808,7 @@ typedef enum { _1gtk_1widget_1get_1modifier_1style_FUNC, _1gtk_1widget_1get_1pango_1context_FUNC, _1gtk_1widget_1get_1parent_FUNC, + _1gtk_1widget_1get_1size_1request_FUNC, _1gtk_1widget_1get_1style_FUNC, _1gtk_1widget_1get_1toplevel_FUNC, _1gtk_1widget_1grab_1focus_FUNC, diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java index fe82c85b52..e3b46fcb1d 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java @@ -6947,6 +6947,15 @@ public static final int /*long*/ gtk_widget_get_style(int /*long*/ widget) { lock.unlock(); } } +public static final native void _gtk_widget_get_size_request(int /*long*/ widget, int [] width, int [] height); +public static final void gtk_widget_get_size_request(int /*long*/ widget, int [] width, int [] height) { + lock.lock(); + try { + _gtk_widget_get_size_request(widget, width, height); + } finally { + lock.unlock(); + } +} public static final native int /*long*/ _gtk_widget_get_toplevel (int /*long*/ widget); public static final int /*long*/ gtk_widget_get_toplevel (int /*long*/ widget) { lock.lock(); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Button.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Button.java index 99145ac815..cb80bb030d 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Button.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Button.java @@ -144,13 +144,16 @@ public Point computeSize (int wHint, int hHint, boolean changed) { * of the button. */ forceResize (); - int width = OS.GTK_WIDGET_WIDTH (handle); + int [] reqWidth = null, reqHeight = null; if ((style & (SWT.CHECK | SWT.RADIO)) != 0) { + reqWidth = new int [1]; + reqHeight = new int [1]; + OS.gtk_widget_get_size_request (boxHandle, reqWidth, reqHeight); OS.gtk_widget_set_size_request (boxHandle, -1, -1); } Point size = computeNativeSize (handle, wHint, hHint, changed); if ((style & (SWT.CHECK | SWT.RADIO)) != 0) { - OS.gtk_widget_set_size_request (boxHandle, width, -1); + OS.gtk_widget_set_size_request (boxHandle, reqWidth [0], reqHeight [0]); } if (wHint != SWT.DEFAULT || hHint != SWT.DEFAULT) { if ((OS.GTK_WIDGET_FLAGS (handle) & OS.GTK_CAN_DEFAULT) != 0) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java index 9c5d7c5a50..ac59acb817 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java @@ -368,11 +368,20 @@ public Point computeSize (int wHint, int hHint, boolean changed) { Point computeNativeSize (int /*long*/ h, int wHint, int hHint, boolean changed) { int width = wHint, height = hHint; - if (wHint == SWT.DEFAULT || hHint == SWT.DEFAULT) { + if (wHint == SWT.DEFAULT && hHint == SWT.DEFAULT) { GtkRequisition requisition = new GtkRequisition (); OS.gtk_widget_size_request (h, requisition); - width = wHint == SWT.DEFAULT ? OS.GTK_WIDGET_REQUISITION_WIDTH (h) : wHint; - height = hHint == SWT.DEFAULT ? OS.GTK_WIDGET_REQUISITION_HEIGHT (h) : hHint; + width = OS.GTK_WIDGET_REQUISITION_WIDTH (h); + height = OS.GTK_WIDGET_REQUISITION_HEIGHT (h); + } else if (wHint == SWT.DEFAULT || hHint == SWT.DEFAULT) { + int [] reqWidth = new int [1], reqHeight = new int [1]; + OS.gtk_widget_get_size_request (h, reqWidth, reqHeight); + OS.gtk_widget_set_size_request (h, wHint, hHint); + GtkRequisition requisition = new GtkRequisition (); + OS.gtk_widget_size_request (h, requisition); + OS.gtk_widget_set_size_request (h, reqWidth [0], reqHeight [0]); + width = wHint == SWT.DEFAULT ? requisition.width : wHint; + height = hHint == SWT.DEFAULT ? requisition.height : hHint; } return new Point (width, height); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Label.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Label.java index 5dddb71d0a..c50ed1f7e4 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Label.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Label.java @@ -106,24 +106,23 @@ public Point computeSize (int wHint, int hHint, boolean changed) { } boolean fixWrap = labelHandle != 0 && (style & SWT.WRAP) != 0; if (fixWrap || frameHandle != 0) forceResize (); - int labelWidth = 0, labelHeight = 0; + int [] labelWidth = new int [1], labelHeight = new int [1]; if (fixWrap) { - labelWidth = OS.GTK_WIDGET_WIDTH (labelHandle); - labelHeight = OS.GTK_WIDGET_HEIGHT (labelHandle); - OS.gtk_widget_set_size_request (labelHandle, -1, -1); + OS.gtk_widget_get_size_request (labelHandle, labelWidth, labelHeight); + OS.gtk_widget_set_size_request (labelHandle, wHint, hHint); } Point size; if (frameHandle != 0) { - int width = OS.GTK_WIDGET_WIDTH (handle); - int height = OS.GTK_WIDGET_HEIGHT (handle); + int [] reqWidth = new int [1], reqHeight = new int [1]; + OS.gtk_widget_get_size_request (handle, reqWidth, reqHeight); OS.gtk_widget_set_size_request (handle, wHint, hHint); size = computeNativeSize (frameHandle, -1, -1, changed); - OS.gtk_widget_set_size_request (handle, width, height); + OS.gtk_widget_set_size_request (handle, reqWidth [0], reqHeight [0]); } else { size = computeNativeSize (handle, wHint, hHint, changed); } if (fixWrap) { - OS.gtk_widget_set_size_request (labelHandle, labelWidth, labelHeight); + OS.gtk_widget_set_size_request (labelHandle, labelWidth [0], labelHeight [0]); } return size; } |