boxgadget: add API to set expand/align flags for gadget child
This commit is contained in:
		| @ -622,9 +622,10 @@ gtk_box_gadget_insert_widget (GtkBoxGadget           *gadget, | |||||||
|                                 GTK_ALIGN_FILL); |                                 GTK_ALIGN_FILL); | ||||||
| } | } | ||||||
|  |  | ||||||
| void | static GtkBoxGadgetChild * | ||||||
| gtk_box_gadget_remove_object (GtkBoxGadget *gadget, | gtk_box_gadget_find_object (GtkBoxGadget *gadget, | ||||||
|                               GObject      *object) |                             GObject      *object, | ||||||
|  |                             int          *position) | ||||||
| { | { | ||||||
|   GtkBoxGadgetPrivate *priv = gtk_box_gadget_get_instance_private (gadget); |   GtkBoxGadgetPrivate *priv = gtk_box_gadget_get_instance_private (gadget); | ||||||
|   guint i; |   guint i; | ||||||
| @ -635,11 +636,29 @@ gtk_box_gadget_remove_object (GtkBoxGadget *gadget, | |||||||
|  |  | ||||||
|       if (child->object == object) |       if (child->object == object) | ||||||
|         { |         { | ||||||
|           gtk_css_node_set_parent (get_css_node (object), NULL); |           if (position) | ||||||
|           g_array_remove_index (priv->children, i); |             *position = i; | ||||||
|           break; |           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 | void | ||||||
| @ -663,6 +682,14 @@ only_vertical (GObject        *object, | |||||||
|   return orientation == GTK_ORIENTATION_VERTICAL; |   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 | void | ||||||
| gtk_box_gadget_insert_gadget (GtkBoxGadget *gadget, | gtk_box_gadget_insert_gadget (GtkBoxGadget *gadget, | ||||||
|                               int           pos, |                               int           pos, | ||||||
| @ -671,11 +698,13 @@ gtk_box_gadget_insert_gadget (GtkBoxGadget *gadget, | |||||||
|                               gboolean      vexpand, |                               gboolean      vexpand, | ||||||
|                               GtkAlign      align) |                               GtkAlign      align) | ||||||
| { | { | ||||||
|  |   ComputeExpandFunc func; | ||||||
|  |  | ||||||
|  |   func = expand_func_from_flags (hexpand, vexpand); | ||||||
|   gtk_box_gadget_insert_object (gadget, |   gtk_box_gadget_insert_object (gadget, | ||||||
|                                 pos, |                                 pos, | ||||||
|                                 G_OBJECT (cssgadget), |                                 G_OBJECT (cssgadget), | ||||||
|                                 hexpand ? (vexpand ? (ComputeExpandFunc) gtk_true : only_horizontal) |                                 func, | ||||||
|                                         : (vexpand ? only_vertical : (ComputeExpandFunc) gtk_false), |  | ||||||
|                                 align); |                                 align); | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -705,3 +734,44 @@ gtk_box_gadget_reverse_children (GtkBoxGadget *gadget) | |||||||
|       *child2 = tmp; |       *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)); | ||||||
|  | } | ||||||
|  | |||||||
| @ -76,6 +76,13 @@ void                    gtk_box_gadget_remove_gadget            (GtkBoxGadget | |||||||
|                                                                  GtkCssGadget           *cssgadget); |                                                                  GtkCssGadget           *cssgadget); | ||||||
| void                    gtk_box_gadget_reverse_children         (GtkBoxGadget           *gadget); | 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 | G_END_DECLS | ||||||
|  |  | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Cosimo Cecchi
					Cosimo Cecchi