diff options
author | Felipe Heidrich <fheidric> | 2003-06-04 22:48:04 +0000 |
---|---|---|
committer | Felipe Heidrich <fheidric> | 2003-06-04 22:48:04 +0000 |
commit | 89a6b59e55d16b8e16bfbfbd1a50027069629eaf (patch) | |
tree | e2fa230500d47a97c67e2a402825a06d68f1cdbb | |
parent | 3ff9e1a8a63056d81f6399315fc5d2d716001b24 (diff) | |
download | eclipse.platform.swt-89a6b59e55d16b8e16bfbfbd1a50027069629eaf.tar.gz eclipse.platform.swt-89a6b59e55d16b8e16bfbfbd1a50027069629eaf.tar.xz eclipse.platform.swt-89a6b59e55d16b8e16bfbfbd1a50027069629eaf.zip |
38213
3 files changed, 74 insertions, 19 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/swt.c b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/swt.c index 39e002c95c..0c63b6e6fe 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/swt.c +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/swt.c @@ -2746,6 +2746,16 @@ JNIEXPORT jchar JNICALL Java_org_eclipse_swt_internal_gtk_OS_gtk_1entry_1get_1in } #endif +#ifndef NO_gtk_1entry_1get_1layout +JNIEXPORT jint JNICALL Java_org_eclipse_swt_internal_gtk_OS_gtk_1entry_1get_1layout + (JNIEnv *env, jclass that, jint arg0) +{ + DEBUG_CALL("gtk_1entry_1get_1layout\n") + + return (jint) gtk_entry_get_layout((GtkEntry *)arg0); +} +#endif + #ifndef NO_gtk_1entry_1get_1max_1length JNIEXPORT jint JNICALL Java_org_eclipse_swt_internal_gtk_OS_gtk_1entry_1get_1max_1length (JNIEnv *env, jclass that, jint arg0) @@ -5517,14 +5527,14 @@ JNIEXPORT void JNICALL Java_org_eclipse_swt_internal_gtk_OS_gtk_1widget_1add_1ev } #endif -#ifndef NO_gtk_1widget_1create_1pango_1layout -JNIEXPORT jint JNICALL Java_org_eclipse_swt_internal_gtk_OS_gtk_1widget_1create_1pango_1layout +#ifndef NO_gtk_1widget_1create_1pango_1layout__I_3B +JNIEXPORT jint JNICALL Java_org_eclipse_swt_internal_gtk_OS_gtk_1widget_1create_1pango_1layout__I_3B (JNIEnv *env, jclass that, jint arg0, jbyteArray arg1) { jbyte *lparg1=NULL; jint rc; - DEBUG_CALL("gtk_1widget_1create_1pango_1layout\n") + DEBUG_CALL("gtk_1widget_1create_1pango_1layout__I_3B\n") if (arg1) lparg1 = (*env)->GetByteArrayElements(env, arg1, NULL); rc = (jint)gtk_widget_create_pango_layout((GtkWidget *)arg0, (const gchar *)lparg1); @@ -5533,6 +5543,16 @@ JNIEXPORT jint JNICALL Java_org_eclipse_swt_internal_gtk_OS_gtk_1widget_1create_ } #endif +#ifndef NO_gtk_1widget_1create_1pango_1layout__II +JNIEXPORT jint JNICALL Java_org_eclipse_swt_internal_gtk_OS_gtk_1widget_1create_1pango_1layout__II + (JNIEnv *env, jclass that, jint arg0, jint arg1) +{ + DEBUG_CALL("gtk_1widget_1create_1pango_1layout__II\n") + + return (jint)gtk_widget_create_pango_layout((GtkWidget *)arg0, (const gchar *)arg1); +} +#endif + #ifndef NO_gtk_1widget_1destroy JNIEXPORT void JNICALL Java_org_eclipse_swt_internal_gtk_OS_gtk_1widget_1destroy (JNIEnv *env, jclass that, jint arg0) @@ -6791,6 +6811,16 @@ JNIEXPORT void JNICALL Java_org_eclipse_swt_internal_gtk_OS_pango_1layout_1set_1 } #endif +#ifndef NO_pango_1layout_1set_1width +JNIEXPORT void JNICALL Java_org_eclipse_swt_internal_gtk_OS_pango_1layout_1set_1width + (JNIEnv *env, jclass that, jint arg0, jint arg1) +{ + DEBUG_CALL("pango_1layout_1set_1width\n") + + pango_layout_set_width ((PangoLayout *)arg0, arg1); +} +#endif + #ifndef NO_pango_1layout_1set_1text JNIEXPORT void JNICALL Java_org_eclipse_swt_internal_gtk_OS_pango_1layout_1set_1text (JNIEnv *env, jclass that, jint arg0, jbyteArray arg1, jint arg2) 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 349bfd5b43..ae2feee891 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 @@ -256,10 +256,13 @@ public class OS { public static final byte[] switch_page = signal("switch_page"); public static final byte[] toggled = signal("toggled"); public static final byte[] unmap_event = signal("unmap_event"); + public static final byte[] unrealize = signal("unrealize"); public static final byte[] value_changed = signal("value_changed"); /** Properties */ public static final byte[] button_relief = signal("button_relief"); + public static final byte[] focus_line_width = signal("focus_line_width"); + public static final byte[] interior_focus = signal("interior_focus"); public static final byte[] mode = signal("mode"); static byte [] signal (String name) { @@ -512,6 +515,7 @@ public static final synchronized native void gtk_editable_select_region(int edit public static final synchronized native void gtk_editable_set_editable(int entry, boolean editable); public static final synchronized native void gtk_editable_set_position(int editable, int position); public static final synchronized native char gtk_entry_get_invisible_char(int entry); +public static final synchronized native int gtk_entry_get_layout (int entry); public static final synchronized native int gtk_entry_get_max_length(int entry); public static final synchronized native int gtk_entry_get_text(int entry); public static final synchronized native boolean gtk_entry_get_visibility(int entry); @@ -758,6 +762,7 @@ public static final synchronized native int gtk_vseparator_new(); public static final synchronized native void gtk_widget_add_accelerator(int widget, byte[] accel_signal, int accel_group, int accel_key, int accel_mods, int accel_flags); public static final synchronized native void gtk_widget_add_events(int widget, int events); public static final synchronized native int gtk_widget_create_pango_layout(int widget, byte[] text); +public static final synchronized native int gtk_widget_create_pango_layout(int widget, int text); public static final synchronized native void gtk_widget_destroy(int widget); public static final synchronized native int gtk_widget_get_default_style(); public static final synchronized native int gtk_widget_get_modifier_style(int widget); @@ -868,6 +873,7 @@ public static final synchronized native void pango_layout_get_size(int layout, i public static final synchronized native int pango_layout_new(int context); public static final synchronized native void pango_layout_set_font_description(int context, int descr); public static final synchronized native void pango_layout_set_text(int layout, byte[] text, int length); +public static final synchronized native void pango_layout_set_width(int layout, int width); public static final synchronized native void pango_tab_array_free(int tab_array); public static final synchronized native int pango_tab_array_new(int initial_size, boolean positions_in_pixels); public static final synchronized native void pango_tab_array_set_tab(int tab_array, int tab_index, int alignment, int location); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java index 6ba834cf00..6b25560a11 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java @@ -36,6 +36,7 @@ import org.eclipse.swt.events.*; public class Text extends Scrollable { int bufferHandle, tabs = 8; + static final int INNER_BORDER = 2; static final int ITER_SIZEOF = 56; public final static int LIMIT; @@ -269,25 +270,43 @@ public void clearSelection () { public Point computeSize (int wHint, int hHint, boolean changed) { checkWidget (); + int xborder = 0, yborder = 0; + int[] w = new int [1], h = new int [1]; if ((style & SWT.SINGLE) != 0) { - return super.computeSize (wHint, hHint, changed); - } - boolean fixWrap = (style & SWT.WRAP) != 0 && wHint == SWT.DEFAULT; - if (fixWrap) OS.gtk_text_view_set_wrap_mode (handle, OS.GTK_WRAP_NONE); - int width = OS.GTK_WIDGET_WIDTH (handle); - int height = OS.GTK_WIDGET_HEIGHT (handle); - OS.gtk_widget_set_size_request (handle, wHint, hHint); - if ((style & SWT.WRAP) != 0) { - while (OS.gtk_events_pending () != 0) { - OS.gtk_main_iteration (); + int layout = OS.gtk_entry_get_layout (handle); + OS.pango_layout_get_size (layout, w, h); + if ((style & SWT.BORDER) != 0) { + GtkStyle style = new GtkStyle (); + OS.memmove (style, OS.gtk_widget_get_style (handle)); + xborder += style.xthickness; + yborder += style.ythickness; } + xborder += INNER_BORDER; + yborder += INNER_BORDER; + } else { + byte [] start = new byte [ITER_SIZEOF], end = new byte [ITER_SIZEOF]; + OS.gtk_text_buffer_get_bounds (bufferHandle, start, end); + int text = OS.gtk_text_buffer_get_text (bufferHandle, start, end, true); + int layout = OS.gtk_widget_create_pango_layout (handle, text); + OS.pango_layout_set_width (layout, wHint != SWT.DEFAULT ? wHint * OS.PANGO_SCALE : -1); + OS.pango_layout_get_size (layout, w, h); + OS.g_object_unref (layout); + OS.g_free (text); + int borderWidth = OS.gtk_container_get_border_width (handle); + xborder += borderWidth; + yborder += borderWidth; + } + int [] property = new int [1]; + OS.gtk_widget_style_get (handle, OS.interior_focus, property, 0); + if (property [0] != 0) { + OS.gtk_widget_style_get (handle, OS.focus_line_width, property, 0); + xborder += property [0]; + yborder += property [0]; } - GtkRequisition requisition = new GtkRequisition (); - OS.gtk_widget_size_request (handle, requisition); - OS.gtk_widget_set_size_request (handle, width, height); - width = wHint == SWT.DEFAULT ? requisition.width : wHint; - height = hHint == SWT.DEFAULT ? requisition.height : hHint; - if (fixWrap) OS.gtk_text_view_set_wrap_mode (handle, OS.GTK_WRAP_WORD); + int width = OS.PANGO_PIXELS (w [0]) + 2 * xborder; + int height = OS.PANGO_PIXELS (h [0]) + 2 * yborder; + width = wHint == SWT.DEFAULT ? width : wHint; + height = hHint == SWT.DEFAULT ? height : hHint; Rectangle trim = computeTrim (0, 0, width, height); return new Point (trim.width, trim.height); } |