summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelipe Heidrich <fheidric>2003-06-04 22:48:04 +0000
committerFelipe Heidrich <fheidric>2003-06-04 22:48:04 +0000
commit89a6b59e55d16b8e16bfbfbd1a50027069629eaf (patch)
treee2fa230500d47a97c67e2a402825a06d68f1cdbb
parent3ff9e1a8a63056d81f6399315fc5d2d716001b24 (diff)
downloadeclipse.platform.swt-89a6b59e55d16b8e16bfbfbd1a50027069629eaf.tar.gz
eclipse.platform.swt-89a6b59e55d16b8e16bfbfbd1a50027069629eaf.tar.xz
eclipse.platform.swt-89a6b59e55d16b8e16bfbfbd1a50027069629eaf.zip
38213
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/swt.c36
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java6
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java51
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);
}