[gtk+] Add an accessor for grid children
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Add an accessor for grid children
- Date: Mon, 29 Aug 2011 01:22:05 +0000 (UTC)
commit f64647077f1d7ebf63a497c2f87862ef37aeb570
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Aug 28 21:20:53 2011 -0400
Add an accessor for grid children
This addresses concerns in bug 634136.
docs/reference/gtk/gtk3-sections.txt | 1 +
gtk/gtk.symbols | 1 +
gtk/gtkgrid.c | 36 ++++++++++++++++++++++++++++++++++
gtk/gtkgrid.h | 3 ++
tests/testgrid.c | 35 +++++++++++++++++++++-----------
5 files changed, 64 insertions(+), 12 deletions(-)
---
diff --git a/docs/reference/gtk/gtk3-sections.txt b/docs/reference/gtk/gtk3-sections.txt
index 2cc0722..aca18e9 100644
--- a/docs/reference/gtk/gtk3-sections.txt
+++ b/docs/reference/gtk/gtk3-sections.txt
@@ -6988,6 +6988,7 @@ GtkGrid
gtk_grid_new
gtk_grid_attach
gtk_grid_attach_next_to
+gtk_grid_get_child_at
gtk_grid_insert_row
gtk_grid_insert_column
gtk_grid_insert_next_to
diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols
index 9a42c01..8fe844a 100644
--- a/gtk/gtk.symbols
+++ b/gtk/gtk.symbols
@@ -1114,6 +1114,7 @@ gtk_grab_get_current
gtk_grab_remove
gtk_grid_attach
gtk_grid_attach_next_to
+gtk_grid_get_child_at
gtk_grid_get_column_homogeneous
gtk_grid_get_column_spacing
gtk_grid_get_row_homogeneous
diff --git a/gtk/gtkgrid.c b/gtk/gtkgrid.c
index 20ec688..cfb21f4 100644
--- a/gtk/gtkgrid.c
+++ b/gtk/gtkgrid.c
@@ -1480,6 +1480,42 @@ gtk_grid_attach_next_to (GtkGrid *grid,
}
/**
+ * gtk_grid_get_child_at:
+ * @grid: a #GtkGrid
+ * @left: the left edge of the cell
+ * @top: the top edge of the cell
+ *
+ * Gets the child of @grid whose area covers the grid
+ * cell whose upper left corner is at @left, @top.
+ *
+ * Returns: the child at the given position, or %NULL
+ *
+ * Since: 3.2
+ */
+GtkWidget *
+gtk_grid_get_child_at (GtkGrid *grid,
+ gint left,
+ gint top)
+{
+ GtkGridPrivate *priv = grid->priv;
+ GtkGridChild *child;
+ GList *list;
+
+ for (list = priv->children; list; list = list->next)
+ {
+ child = list->data;
+
+ if (CHILD_LEFT (child) <= left &&
+ CHILD_LEFT (child) + CHILD_WIDTH (child) > left &&
+ CHILD_TOP (child) <= top &&
+ CHILD_TOP (child) + CHILD_HEIGHT (child) > top)
+ return child->widget;
+ }
+
+ return NULL;
+}
+
+/**
* gtk_grid_insert_row:
* @grid: a #GtkGrid
* @position: the position to insert the row at
diff --git a/gtk/gtkgrid.h b/gtk/gtkgrid.h
index 99f9e4e..491ba22 100644
--- a/gtk/gtkgrid.h
+++ b/gtk/gtkgrid.h
@@ -79,6 +79,9 @@ void gtk_grid_attach_next_to (GtkGrid *grid,
GtkPositionType side,
gint width,
gint height);
+GtkWidget *gtk_grid_get_child_at (GtkGrid *grid,
+ gint left,
+ gint top);
void gtk_grid_insert_row (GtkGrid *grid,
gint position);
void gtk_grid_insert_column (GtkGrid *grid,
diff --git a/tests/testgrid.c b/tests/testgrid.c
index cb79b35..c756158 100644
--- a/tests/testgrid.c
+++ b/tests/testgrid.c
@@ -40,7 +40,7 @@ simple_grid (void)
{
GtkWidget *window;
GtkWidget *grid;
- GtkWidget *child;
+ GtkWidget *test1, *test2, *test3, *test4, *test5, *test6;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Orientation");
@@ -50,17 +50,28 @@ simple_grid (void)
gtk_grid_set_column_spacing (GTK_GRID (grid), 5);
gtk_grid_set_row_spacing (GTK_GRID (grid), 5);
- gtk_container_add (GTK_CONTAINER (grid), test_widget ("1", "red"));
- gtk_container_add (GTK_CONTAINER (grid), test_widget ("2", "green"));
- gtk_container_add (GTK_CONTAINER (grid), test_widget ("3", "blue"));
- child = test_widget ("4", "green");
- gtk_grid_attach (GTK_GRID (grid), child, 0, 1, 1, 1);
- gtk_widget_set_vexpand (child, TRUE);
- gtk_grid_attach_next_to (GTK_GRID (grid), test_widget ("5", "blue"), child, GTK_POS_RIGHT, 2, 1);
- child = test_widget ("6", "yellow");
- gtk_grid_attach (GTK_GRID (grid), child, -1, 0, 1, 2);
- gtk_widget_set_hexpand (child, TRUE);
-
+ test1 = test_widget ("1", "red");
+ gtk_container_add (GTK_CONTAINER (grid), test1);
+ test2 = test_widget ("2", "green");
+ gtk_container_add (GTK_CONTAINER (grid), test2);
+ test3 = test_widget ("3", "blue");
+ gtk_container_add (GTK_CONTAINER (grid), test3);
+ test4 = test_widget ("4", "green");
+ gtk_grid_attach (GTK_GRID (grid), test4, 0, 1, 1, 1);
+ gtk_widget_set_vexpand (test4, TRUE);
+ test5 = test_widget ("5", "blue");
+ gtk_grid_attach_next_to (GTK_GRID (grid), test5, test4, GTK_POS_RIGHT, 2, 1);
+ test6 = test_widget ("6", "yellow");
+ gtk_grid_attach (GTK_GRID (grid), test6, -1, 0, 1, 2);
+ gtk_widget_set_hexpand (test6, TRUE);
+
+ g_assert (gtk_grid_get_child_at (GTK_GRID (grid), 0, -1) == NULL);
+ g_assert (gtk_grid_get_child_at (GTK_GRID (grid), 0, 0) == test1);
+ g_assert (gtk_grid_get_child_at (GTK_GRID (grid), 1, 0) == test2);
+ g_assert (gtk_grid_get_child_at (GTK_GRID (grid), 0, 1) == test4);
+ g_assert (gtk_grid_get_child_at (GTK_GRID (grid), -1, 0) == test6);
+ g_assert (gtk_grid_get_child_at (GTK_GRID (grid), -1, 1) == test6);
+ g_assert (gtk_grid_get_child_at (GTK_GRID (grid), -1, 2) == NULL);
gtk_widget_show_all (window);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]