Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelipe Heidrich2004-03-01 22:19:48 +0000
committerFelipe Heidrich2004-03-01 22:19:48 +0000
commit2322f1ae6c545f31dd7bf9dbea8e44d64f10fe3c (patch)
tree48f282c1113c6c3cee114d8d58da8c41f3ffdc84
parentdad35efa7165c8144f58c26b850ea92ef6a3f9b5 (diff)
downloadeclipse.platform.swt-2322f1ae6c545f31dd7bf9dbea8e44d64f10fe3c.tar.gz
eclipse.platform.swt-2322f1ae6c545f31dd7bf9dbea8e44d64f10fe3c.tar.xz
eclipse.platform.swt-2322f1ae6c545f31dd7bf9dbea8e44d64f10fe3c.zip
39892 backport
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/swt.c56
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java4
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java30
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java38
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java33
5 files changed, 133 insertions, 28 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 71dc32835a..92deaf7b1e 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
@@ -412,6 +412,16 @@ JNIEXPORT jint JNICALL Java_org_eclipse_swt_internal_gtk_OS_g_1list_1append
}
#endif
+#ifndef NO_g_1list_1data
+JNIEXPORT jint JNICALL Java_org_eclipse_swt_internal_gtk_OS_g_1list_1data
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("g_1list_1data\n")
+
+ return (jint)((GList *)arg0)->data;
+}
+#endif
+
#ifndef NO_g_1list_1free
JNIEXPORT void JNICALL Java_org_eclipse_swt_internal_gtk_OS_g_1list_1free
(JNIEnv *env, jclass that, jint arg0)
@@ -4722,6 +4732,16 @@ JNIEXPORT jboolean JNICALL Java_org_eclipse_swt_internal_gtk_OS_gtk_1tree_1model
}
#endif
+#ifndef NO_gtk_1tree_1model_1get_1iter_1first
+JNIEXPORT jboolean JNICALL Java_org_eclipse_swt_internal_gtk_OS_gtk_1tree_1model_1get_1iter_1first
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("gtk_1tree_1model_1get_1iter_1first\n")
+
+ return (jboolean)gtk_tree_model_get_iter_first((GtkTreeModel *)arg0, (GtkTreeIter *)arg1);
+}
+#endif
+
#ifndef NO_gtk_1tree_1model_1get_1n_1columns
JNIEXPORT jint JNICALL Java_org_eclipse_swt_internal_gtk_OS_gtk_1tree_1model_1get_1n_1columns
(JNIEnv *env, jclass that, jint arg0)
@@ -5102,6 +5122,42 @@ JNIEXPORT void JNICALL Java_org_eclipse_swt_internal_gtk_OS_gtk_1tree_1view_1col
}
#endif
+#ifndef NO_gtk_1tree_1view_1column_1cell_1get_1size
+JNIEXPORT void JNICALL Java_org_eclipse_swt_internal_gtk_OS_gtk_1tree_1view_1column_1cell_1get_1size
+ (JNIEnv *env, jclass that, jint arg0, jobject arg1, jintArray arg2, jintArray arg3, jintArray arg4, jintArray arg5)
+{
+ GdkRectangle _arg1, *lparg1=NULL;
+ jint *lparg2=NULL;
+ jint *lparg3=NULL;
+ jint *lparg4=NULL;
+ jint *lparg5=NULL;
+
+ DEBUG_CALL("gtk_1tree_1view_1column_1cell_1get_1size\n")
+
+ if (arg1) lparg1 = getGdkRectangleFields(env, arg1, &_arg1);
+ if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
+ if (arg3) lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL);
+ if (arg4) lparg4 = (*env)->GetIntArrayElements(env, arg4, NULL);
+ if (arg5) lparg5 = (*env)->GetIntArrayElements(env, arg5, NULL);
+ gtk_tree_view_column_cell_get_size((GtkTreeViewColumn *)arg0, (GdkRectangle *)lparg1, (gint *)lparg2, (gint *)lparg3, (gint *)lparg4, (gint *)lparg5);
+ if (arg5) (*env)->ReleaseIntArrayElements(env, arg5, lparg5, 0);
+ if (arg4) (*env)->ReleaseIntArrayElements(env, arg4, lparg4, 0);
+ if (arg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
+ if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+ if (arg1) setGdkRectangleFields(env, arg1, lparg1);
+}
+#endif
+
+#ifndef NO_gtk_1tree_1view_1column_1cell_1set_1cell_1data
+JNIEXPORT void JNICALL Java_org_eclipse_swt_internal_gtk_OS_gtk_1tree_1view_1column_1cell_1set_1cell_1data
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jboolean arg3, jboolean arg4)
+{
+ DEBUG_CALL("gtk_1tree_1view_1column_1cell_1set_1cell_1data\n")
+
+ gtk_tree_view_column_cell_set_cell_data((GtkTreeViewColumn *)arg0, (GtkTreeModel *)arg1, (GtkTreeIter *)arg2, arg3, arg4);
+}
+#endif
+
#ifndef NO_gtk_1tree_1view_1column_1get_1cell_1renderers
JNIEXPORT jint JNICALL Java_org_eclipse_swt_internal_gtk_OS_gtk_1tree_1view_1column_1get_1cell_1renderers
(JNIEnv *env, jclass that, jint arg0)
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 f9cbef2cf6..ddce86053e 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
@@ -320,6 +320,7 @@ public static final synchronized native int g_filename_to_utf8(int opsysstring,
public static final synchronized native int g_filename_from_utf8(int opsysstring, int len, int[] bytes_read, int[] bytes_written, int[] error);
public static final synchronized native void g_free(int mem);
public static final synchronized native int g_list_append(int list, int data);
+public static final synchronized native int g_list_data(int list);
public static final synchronized native void g_list_free(int list);
public static final synchronized native void g_list_free_1(int list);
public static final synchronized native int g_list_length(int list);
@@ -694,6 +695,7 @@ public static final synchronized native int gtk_tooltips_new();
public static final synchronized native void gtk_tooltips_set_tip(int tooltips, int widget, byte[] tip_text, byte[] tip_private);
public static final synchronized native void gtk_tree_model_get(int tree_model, int iter, int column, int[] ptr, int terminator);
public static final synchronized native boolean gtk_tree_model_get_iter(int tree_model, int iter, int path);
+public static final synchronized native boolean gtk_tree_model_get_iter_first(int tree_model, int iter);
public static final synchronized native int gtk_tree_model_get_n_columns(int tree_model);
public static final synchronized native int gtk_tree_model_get_path(int tree_model, int iter);
public static final synchronized native boolean gtk_tree_model_iter_children(int model, int iter, int parent);
@@ -729,6 +731,8 @@ public static final synchronized native void gtk_tree_store_set(int store, int i
public static final synchronized native boolean gtk_tree_view_collapse_row(int view, int path);
public static final synchronized native void gtk_tree_view_column_add_attribute(int treeColumn, int cellRenderer, String attribute, int column);
public static final synchronized native void gtk_tree_view_column_clear(int tree_column);
+public static final synchronized native void gtk_tree_view_column_cell_get_size(int tree_column, GdkRectangle cell_area, int[] x_offset, int[] y_offset, int[] width, int[] height);
+public static final synchronized native void gtk_tree_view_column_cell_set_cell_data(int tree_column, int tree_model, int iter, boolean is_expander, boolean is_expanded);
public static final synchronized native int gtk_tree_view_column_get_cell_renderers(int tree_column);
public static final synchronized native boolean gtk_tree_view_column_get_resizable(int column);
public static final synchronized native int gtk_tree_view_column_get_spacing(int tree_column);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java
index 32982db267..325a5e7a78 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java
@@ -448,13 +448,29 @@ public int getItemCount () {
*/
public int getItemHeight () {
checkWidget();
- int column = OS.gtk_tree_view_get_column (handle, 0);
- int list = OS.gtk_tree_view_column_get_cell_renderers (column);
- int renderer = OS.g_list_nth_data (list, 0);
- OS.g_list_free (list);
- int [] w = new int [1], h = new int [1];
- OS.gtk_cell_renderer_get_size (renderer, handle, null, null, null, w, h);
- return h [0];
+ int itemCount = OS.gtk_tree_model_iter_n_children (modelHandle, 0);
+ if (itemCount == 0) {
+ int column = OS.gtk_tree_view_get_column (handle, 0);
+ int [] w = new int [1], h = new int [1];
+ OS.gtk_tree_view_column_cell_get_size (column, null, null, null, w, h);
+ return h [0];
+ } else {
+ int iter = OS.g_malloc (OS.GtkTreeIter_sizeof ());
+ OS.gtk_tree_model_get_iter_first (modelHandle, iter);
+ int column = OS.gtk_tree_view_get_column (handle, 0);
+ int renderers = OS.gtk_tree_view_column_get_cell_renderers (column);
+ int list = renderers;
+ while (list != 0) {
+ int renderer = OS.g_list_data (list);
+ OS.gtk_tree_view_column_cell_set_cell_data (column, modelHandle, iter, false, false);
+ list = OS.g_list_next (list);
+ }
+ if (renderers != 0) OS.g_list_free (renderers);
+ int [] w = new int [1], h = new int [1];
+ OS.gtk_tree_view_column_cell_get_size (column, null, null, null, w, h);
+ OS.g_free (iter);
+ return h [0];
+ }
}
/**
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java
index 43f1ead7b5..644ab5ccc5 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java
@@ -754,17 +754,33 @@ public int getItemCount () {
*/
public int getItemHeight () {
checkWidget();
- // FIXME
- // I (bgs) am not sure what to do with this.
- // In GTK2, rows may have different heights, so asking
- // this question will only make sense given the item.
- if (itemCount == 0) return 15;
- GdkRectangle rect = new GdkRectangle ();
- int path = OS.gtk_tree_path_new_first ();
- OS.gtk_widget_realize (handle);
- OS.gtk_tree_view_get_cell_area (handle, path, 0, rect);
- OS.gtk_tree_path_free (path);
- return rect.height;
+ if (itemCount == 0) {
+ int column = OS.gtk_tree_view_get_column (handle, 0);
+ int [] w = new int [1], h = new int [1];
+ OS.gtk_tree_view_column_cell_get_size (column, null, null, null, w, h);
+ return h [0];
+ } else {
+ int height = 0;
+ int iter = OS.g_malloc (OS.GtkTreeIter_sizeof ());
+ OS.gtk_tree_model_get_iter_first (modelHandle, iter);
+ int columnColumn = Math.max (1, columnCount);
+ for (int i=0; i<columnCount; i++) {
+ int column = OS.gtk_tree_view_get_column (handle, i);
+ int renderers = OS.gtk_tree_view_column_get_cell_renderers (column);
+ int list = renderers;
+ while (list != 0) {
+ int renderer = OS.g_list_data (list);
+ OS.gtk_tree_view_column_cell_set_cell_data (column, modelHandle, iter, false, false);
+ list = OS.g_list_next (list);
+ }
+ if (renderers != 0) OS.g_list_free (renderers);
+ int [] w = new int [1], h = new int [1];
+ OS.gtk_tree_view_column_cell_get_size (column, null, null, null, w, h);
+ height = Math.max (height, h [0]);
+ }
+ OS.g_free (iter);
+ return height;
+ }
}
/**
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java
index e18dab3447..dce71b0601 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java
@@ -409,16 +409,29 @@ public int getItemCount () {
*/
public int getItemHeight () {
checkWidget ();
- // FIXME
- // I (bgs) am not sure what to do with this.
- // In GTK2, rows may have different heights, so asking
- // this question will only make sense given the item.
- if (OS.gtk_tree_model_iter_n_children (modelHandle, 0) == 0) return 18;
- GdkRectangle rect = new GdkRectangle ();
- int path = OS.gtk_tree_path_new_first ();
- OS.gtk_tree_view_get_cell_area (handle, path, 0, rect);
- OS.gtk_tree_path_free (path);
- return rect.height;
+ int itemCount = OS.gtk_tree_model_iter_n_children (modelHandle, 0);
+ if (itemCount == 0) {
+ int column = OS.gtk_tree_view_get_column (handle, 0);
+ int [] w = new int [1], h = new int [1];
+ OS.gtk_tree_view_column_cell_get_size (column, null, null, null, w, h);
+ return h [0];
+ } else {
+ int iter = OS.g_malloc (OS.GtkTreeIter_sizeof ());
+ OS.gtk_tree_model_get_iter_first (modelHandle, iter);
+ int column = OS.gtk_tree_view_get_column (handle, 0);
+ int renderers = OS.gtk_tree_view_column_get_cell_renderers (column);
+ int list = renderers;
+ while (list != 0) {
+ int renderer = OS.g_list_data (list);
+ OS.gtk_tree_view_column_cell_set_cell_data (column, modelHandle, iter, false, false);
+ list = OS.g_list_next (list);
+ }
+ if (renderers != 0) OS.g_list_free (renderers);
+ int [] w = new int [1], h = new int [1];
+ OS.gtk_tree_view_column_cell_get_size (column, null, null, null, w, h);
+ OS.g_free (iter);
+ return h [0];
+ }
}
/**

Back to the top