[gtk+/wip/cosimoc/range-gadget: 38/62] boxgadget: add API to set expand/align flags for gadget child
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/cosimoc/range-gadget: 38/62] boxgadget: add API to set expand/align flags for gadget child
- Date: Mon, 29 Feb 2016 00:07:26 +0000 (UTC)
commit 8759e1a660a7c30ddad0f6308f85f1253e9391df
Author: Cosimo Cecchi <cosimoc gnome org>
Date: Wed Feb 24 10:34:15 2016 -0800
boxgadget: add API to set expand/align flags for gadget child
gtk/gtkboxgadget.c | 86 ++++++++++++++++++++++++++++++++++++++++----
gtk/gtkboxgadgetprivate.h | 7 ++++
2 files changed, 85 insertions(+), 8 deletions(-)
---
diff --git a/gtk/gtkboxgadget.c b/gtk/gtkboxgadget.c
index e47f64b..9f72d54 100644
--- a/gtk/gtkboxgadget.c
+++ b/gtk/gtkboxgadget.c
@@ -622,9 +622,10 @@ gtk_box_gadget_insert_widget (GtkBoxGadget *gadget,
GTK_ALIGN_FILL);
}
-void
-gtk_box_gadget_remove_object (GtkBoxGadget *gadget,
- GObject *object)
+static GtkBoxGadgetChild *
+gtk_box_gadget_find_object (GtkBoxGadget *gadget,
+ GObject *object,
+ int *position)
{
GtkBoxGadgetPrivate *priv = gtk_box_gadget_get_instance_private (gadget);
guint i;
@@ -635,11 +636,29 @@ gtk_box_gadget_remove_object (GtkBoxGadget *gadget,
if (child->object == object)
{
- gtk_css_node_set_parent (get_css_node (object), NULL);
- g_array_remove_index (priv->children, i);
- break;
+ if (position)
+ *position = i;
+ return child;
}
}
+
+ return NULL;
+}
+
+static void
+gtk_box_gadget_remove_object (GtkBoxGadget *gadget,
+ GObject *object)
+{
+ GtkBoxGadgetPrivate *priv = gtk_box_gadget_get_instance_private (gadget);
+ GtkBoxGadgetChild *child;
+ int position;
+
+ child = gtk_box_gadget_find_object (gadget, object, &position);
+ if (child)
+ {
+ gtk_css_node_set_parent (get_css_node (child->object), NULL);
+ g_array_remove_index (priv->children, position);
+ }
}
void
@@ -663,6 +682,14 @@ only_vertical (GObject *object,
return orientation == GTK_ORIENTATION_VERTICAL;
}
+static ComputeExpandFunc
+expand_func_from_flags (gboolean hexpand,
+ gboolean vexpand)
+{
+ return hexpand ? (vexpand ? (ComputeExpandFunc) gtk_true : only_horizontal)
+ : (vexpand ? only_vertical : (ComputeExpandFunc) gtk_false);
+}
+
void
gtk_box_gadget_insert_gadget (GtkBoxGadget *gadget,
int pos,
@@ -671,11 +698,13 @@ gtk_box_gadget_insert_gadget (GtkBoxGadget *gadget,
gboolean vexpand,
GtkAlign align)
{
+ ComputeExpandFunc func;
+
+ func = expand_func_from_flags (hexpand, vexpand);
gtk_box_gadget_insert_object (gadget,
pos,
G_OBJECT (cssgadget),
- hexpand ? (vexpand ? (ComputeExpandFunc) gtk_true : only_horizontal)
- : (vexpand ? only_vertical : (ComputeExpandFunc) gtk_false),
+ func,
align);
}
@@ -705,3 +734,44 @@ gtk_box_gadget_reverse_children (GtkBoxGadget *gadget)
*child2 = tmp;
}
}
+
+void
+gtk_box_gadget_set_gadget_expand (GtkBoxGadget *gadget,
+ GtkCssGadget *cssgadget,
+ gboolean hexpand,
+ gboolean vexpand)
+{
+ GtkBoxGadgetChild *child;
+ ComputeExpandFunc func;
+
+ child = gtk_box_gadget_find_object (gadget, G_OBJECT (cssgadget), NULL);
+
+ if (!child)
+ return;
+
+ func = expand_func_from_flags (hexpand, vexpand);
+ if (child->compute_expand == func)
+ return;
+
+ child->compute_expand = func;
+ gtk_css_gadget_queue_resize (GTK_CSS_GADGET (gadget));
+}
+
+void
+gtk_box_gadget_set_gadget_align (GtkBoxGadget *gadget,
+ GtkCssGadget *cssgadget,
+ GtkAlign align)
+{
+ GtkBoxGadgetChild *child;
+
+ child = gtk_box_gadget_find_object (gadget, G_OBJECT (cssgadget), NULL);
+
+ if (!child)
+ return;
+
+ if (child->align == align)
+ return;
+
+ child->align = align;
+ gtk_css_gadget_queue_resize (GTK_CSS_GADGET (gadget));
+}
diff --git a/gtk/gtkboxgadgetprivate.h b/gtk/gtkboxgadgetprivate.h
index 2fd2240..8979f70 100644
--- a/gtk/gtkboxgadgetprivate.h
+++ b/gtk/gtkboxgadgetprivate.h
@@ -76,6 +76,13 @@ void gtk_box_gadget_remove_gadget (GtkBoxGadget
GtkCssGadget *cssgadget);
void gtk_box_gadget_reverse_children (GtkBoxGadget *gadget);
+void gtk_box_gadget_set_gadget_expand (GtkBoxGadget *gadget,
+ GtkCssGadget *cssgadget,
+ gboolean hexpand,
+ gboolean vexpand);
+void gtk_box_gadget_set_gadget_align (GtkBoxGadget *gadget,
+ GtkCssGadget *cssgadget,
+ GtkAlign align);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]