mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-09-29 10:37:39 +00:00
boxgadget: add API to set expand/align flags for gadget child
This commit is contained in:
parent
6827bd5e04
commit
06776d3d2f
@ -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));
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user