Skip to content

Commit

Permalink
stack: remove deprecated ClutterContainer function implementations
Browse files Browse the repository at this point in the history
  • Loading branch information
thos committed Apr 18, 2012
1 parent d6d00ea commit 9f3a2f3
Showing 1 changed file with 29 additions and 181 deletions.
210 changes: 29 additions & 181 deletions mx/mx-stack.c
Expand Up @@ -54,192 +54,37 @@ G_DEFINE_TYPE_WITH_CODE (MxStack, mx_stack, MX_TYPE_WIDGET,

struct _MxStackPrivate
{
GList *children;
ClutterActor *current_focus;

ClutterActorBox allocation;
};

/* ClutterContainerIface */

static void
mx_stack_add_actor (ClutterContainer *container,
ClutterActor *actor)
{
MxStackPrivate *priv = MX_STACK (container)->priv;

clutter_actor_add_child (CLUTTER_ACTOR (container), actor);
priv->children = g_list_append (priv->children, actor);
}

static void
mx_stack_remove_actor (ClutterContainer *container,
ClutterActor *actor)
{
GList *actor_link;

MxStackPrivate *priv = MX_STACK (container)->priv;

actor_link = g_list_find (priv->children, actor);

if (!actor_link)
{
g_warning (G_STRLOC ": Actor of type '%s' is not a child of container "
"of type '%s'",
g_type_name (G_OBJECT_TYPE (actor)),
g_type_name (G_OBJECT_TYPE (container)));
return;
}

g_object_ref (actor);

if (priv->current_focus == actor)
priv->current_focus = NULL;

priv->children = g_list_delete_link (priv->children, actor_link);
clutter_actor_remove_child (CLUTTER_ACTOR (container), actor);

g_object_unref (actor);
}

static void
mx_stack_foreach (ClutterContainer *container,
ClutterCallback callback,
gpointer callback_data)
{
MxStackPrivate *priv = MX_STACK (container)->priv;
g_list_foreach (priv->children, (GFunc)callback, callback_data);
}

static void
mx_stack_lower (ClutterContainer *container,
ClutterActor *actor,
ClutterActor *sibling)
{
gint i;
GList *c, *position, *actor_link = NULL;

MxStackPrivate *priv = MX_STACK (container)->priv;

if (priv->children && (priv->children->data == actor))
return;

position = priv->children;
for (c = priv->children, i = 0; c; c = c->next, i++)
{
if (c->data == actor)
actor_link = c;
if (c->data == sibling)
position = c;
}

if (!actor_link)
{
g_warning (G_STRLOC ": Actor of type '%s' is not a child of container "
"of type '%s'",
g_type_name (G_OBJECT_TYPE (actor)),
g_type_name (G_OBJECT_TYPE (container)));
return;
}

priv->children = g_list_delete_link (priv->children, actor_link);
priv->children = g_list_insert_before (priv->children, position, actor);

clutter_actor_queue_redraw (CLUTTER_ACTOR (container));
}

static void
mx_stack_raise (ClutterContainer *container,
ClutterActor *actor,
ClutterActor *sibling)
{
gint i;
GList *c, *actor_link = NULL;

gint position = -1;
MxStackPrivate *priv = MX_STACK (container)->priv;

for (c = priv->children, i = 0; c; c = c->next, i++)
{
if (c->data == actor)
actor_link = c;
if (c->data == sibling)
position = i;
}

if (!actor_link)
{
g_warning (G_STRLOC ": Actor of type '%s' is not a child of container "
"of type '%s'",
g_type_name (G_OBJECT_TYPE (actor)),
g_type_name (G_OBJECT_TYPE (container)));
return;
}

if (!actor_link->next)
return;

priv->children = g_list_delete_link (priv->children, actor_link);
priv->children = g_list_insert (priv->children, actor, position);

clutter_actor_queue_redraw (CLUTTER_ACTOR (container));
}

static gint
mx_stack_depth_sort_cb (gconstpointer a,
gconstpointer b)
{
gfloat depth_a = clutter_actor_get_depth ((ClutterActor *)a);
gfloat depth_b = clutter_actor_get_depth ((ClutterActor *)a);

if (depth_a < depth_b)
return -1;
else if (depth_a > depth_b)
return 1;
else
return 0;
}

static void
mx_stack_sort_depth_order (ClutterContainer *container)
{
MxStackPrivate *priv = MX_STACK (container)->priv;

priv->children = g_list_sort (priv->children, mx_stack_depth_sort_cb);

clutter_actor_queue_redraw (CLUTTER_ACTOR (container));
}

static void
clutter_container_iface_init (ClutterContainerIface *iface)
{
iface->add = mx_stack_add_actor;
iface->remove = mx_stack_remove_actor;
iface->foreach = mx_stack_foreach;
iface->lower = mx_stack_lower;
iface->raise = mx_stack_raise;
iface->sort_depth_order = mx_stack_sort_depth_order;

iface->child_meta_type = MX_TYPE_STACK_CHILD;
}

/* MxFocusableIface */

static MxFocusable *
mx_stack_move_focus (MxFocusable *focusable,
mx_stack_move_focus (MxFocusable *focusable,
MxFocusDirection direction,
MxFocusable *from)
{
GList *c;
GList *c, *children;

MxStackPrivate *priv = MX_STACK (focusable)->priv;

if (direction == MX_FOCUS_DIRECTION_OUT)
return NULL;

children = clutter_actor_get_children (CLUTTER_ACTOR (focusable));

focusable = NULL;

c = g_list_find (priv->children, from);
c = g_list_find (children, from);
while (c && !focusable)
{
ClutterActor *child;
Expand Down Expand Up @@ -269,6 +114,8 @@ mx_stack_move_focus (MxFocusable *focusable,
priv->current_focus = child;
}

g_list_free (children);

return focusable;
}

Expand All @@ -278,6 +125,9 @@ mx_stack_accept_focus (MxFocusable *focusable, MxFocusHint hint)
GList *c, *children;
MxStackPrivate *priv = MX_STACK (focusable)->priv;

children = clutter_actor_get_children (CLUTTER_ACTOR (focusable));
focusable = NULL;

switch (hint)
{
default:
Expand All @@ -296,7 +146,6 @@ mx_stack_accept_focus (MxFocusable *focusable, MxFocusHint hint)

case MX_FOCUS_HINT_FIRST:
case MX_FOCUS_HINT_LAST:
children = clutter_actor_get_children (CLUTTER_ACTOR (focusable));
if (hint == MX_FOCUS_HINT_LAST)
children = g_list_reverse (children);

Expand All @@ -319,11 +168,11 @@ mx_stack_accept_focus (MxFocusable *focusable, MxFocusHint hint)
focusable = mx_focusable_accept_focus (MX_FOCUSABLE (child),
hint);
}
g_list_free (children);
}
break;
}

g_list_free (children);
return focusable;
}

Expand All @@ -341,20 +190,19 @@ mx_stack_get_preferred_width (ClutterActor *actor,
gfloat *min_width_p,
gfloat *nat_width_p)
{
GList *c;
MxPadding padding;
gfloat min_width, nat_width, child_min_width, child_nat_width;

MxStackPrivate *priv = MX_STACK (actor)->priv;
ClutterActorIter iter;
ClutterActor *child;

mx_widget_get_padding (MX_WIDGET (actor), &padding);
if (for_height >= 0)
for_height = MAX (0, for_height - padding.top - padding.bottom);

min_width = nat_width = 0;
for (c = priv->children; c; c = c->next)
clutter_actor_iter_init (&iter, actor);
while (clutter_actor_iter_next (&iter, &child))
{
ClutterActor *child = c->data;
if (!CLUTTER_ACTOR_IS_VISIBLE (child))
continue;
clutter_actor_get_preferred_width (child, for_height,
Expand All @@ -380,20 +228,19 @@ mx_stack_get_preferred_height (ClutterActor *actor,
gfloat *min_height_p,
gfloat *nat_height_p)
{
GList *c;
MxPadding padding;
gfloat min_height, nat_height, child_min_height, child_nat_height;

MxStackPrivate *priv = MX_STACK (actor)->priv;
ClutterActorIter iter;
ClutterActor *child;

mx_widget_get_padding (MX_WIDGET (actor), &padding);
if (for_width >= 0)
for_width = MAX (0, for_width - padding.left - padding.right);

min_height = nat_height = 0;
for (c = priv->children; c; c = c->next)
clutter_actor_iter_init (&iter, actor);
while (clutter_actor_iter_next (&iter, &child))
{
ClutterActor *child = c->data;
if (!CLUTTER_ACTOR_IS_VISIBLE (child))
continue;
clutter_actor_get_preferred_height (child, for_width,
Expand All @@ -418,8 +265,9 @@ mx_stack_allocate (ClutterActor *actor,
const ClutterActorBox *box,
ClutterAllocationFlags flags)
{
GList *c;
ClutterActorBox avail_space;
ClutterActorIter iter;
ClutterActor *child;

MxStackPrivate *priv = MX_STACK (actor)->priv;

Expand All @@ -429,12 +277,12 @@ mx_stack_allocate (ClutterActor *actor,

memcpy (&priv->allocation, box, sizeof (priv->allocation));

for (c = priv->children; c; c = c->next)
clutter_actor_iter_init (&iter, actor);
while (clutter_actor_iter_next (&iter, &child))
{
gboolean x_fill, y_fill, fit, crop;
MxAlign x_align, y_align;

ClutterActor *child = c->data;
ClutterActorBox child_box = avail_space;

if (!CLUTTER_ACTOR_IS_VISIBLE (child))
Expand Down Expand Up @@ -633,12 +481,12 @@ static void
mx_stack_paint_children (ClutterActor *actor)
{
MxStackPrivate *priv = MX_STACK (actor)->priv;
ClutterActorIter iter;
ClutterActor *child;

GList *c;

for (c = priv->children; c; c = c->next)
clutter_actor_iter_init (&iter, actor);
while (clutter_actor_iter_next (&iter, &child))
{
ClutterActor *child = c->data;
gboolean crop;

if (!CLUTTER_ACTOR_IS_VISIBLE (child))
Expand All @@ -656,11 +504,11 @@ mx_stack_paint_children (ClutterActor *actor)
priv->allocation.y1,
priv->allocation.x2,
priv->allocation.y2);
clutter_actor_paint (c->data);
clutter_actor_paint (child);
cogl_clip_pop ();
}
else
clutter_actor_paint (c->data);
clutter_actor_paint (child);
}
}

Expand Down

0 comments on commit 9f3a2f3

Please sign in to comment.