Put ChildFlags stuff where used and simplify

This commit is contained in:
Alexander Larsson 2012-08-16 14:54:18 +02:00
parent 25f31106e8
commit 54f10e97a0

View file

@ -62,7 +62,6 @@ static void g_cclosure_user_marshal_VOID__ENUM_INT (GClosure * closure, GValue *
}
typedef struct _EggListBoxChildInfo EggListBoxChildInfo;
typedef struct _EggListBoxChildFlags EggListBoxChildFlags;
typedef struct _Block1Data Block1Data;
struct _EggListBoxPrivate
@ -109,12 +108,6 @@ struct _EggListBoxChildInfo
gint height;
};
struct _EggListBoxChildFlags
{
EggListBoxChildInfo *child;
GtkStateFlags state;
};
struct _Block1Data
{
int _ref_count_;
@ -188,9 +181,6 @@ static EggListBoxChildInfo * egg_list_box_get_first_visible (E
static EggListBoxChildInfo * egg_list_box_get_last_visible (EggListBox *self);
static gboolean egg_list_box_real_draw (GtkWidget *base,
cairo_t *cr);
static EggListBoxChildFlags *egg_list_box_child_flags_find_or_add (EggListBoxChildFlags *array,
int *array_length,
EggListBoxChildInfo *to_find);
static void egg_list_box_real_realize (GtkWidget *base);
static void egg_list_box_real_add (GtkContainer *base,
GtkWidget *widget);
@ -850,14 +840,37 @@ egg_list_box_real_focus (GtkWidget* base, GtkDirectionType direction)
return TRUE;
}
typedef struct {
EggListBoxChildInfo *child;
GtkStateFlags state;
} ChildFlags;
static ChildFlags*
child_flags_find_or_add (ChildFlags *array,
int *array_length,
EggListBoxChildInfo *to_find)
{
gint i;
for (i = 0; i < *array_length; i++)
{
if (array[i].child == to_find)
return &array[i];
}
*array_length = *array_length + 1;
array[*array_length - 1].child = to_find;
array[*array_length - 1].state = 0;
return &array[*array_length - 1];
}
static gboolean
egg_list_box_real_draw (GtkWidget* base, cairo_t* cr)
{
EggListBox * self = EGG_LIST_BOX (base);
GtkAllocation allocation = {0};
GtkStyleContext* context;
EggListBoxChildFlags flags[3];
EggListBoxChildFlags *found;
ChildFlags flags[3], *found;
gint flags_length;
int i;
@ -868,25 +881,25 @@ egg_list_box_real_draw (GtkWidget* base, cairo_t* cr)
if (self->priv->selected_child != NULL)
{
found = egg_list_box_child_flags_find_or_add (flags, &flags_length, self->priv->selected_child);
found = child_flags_find_or_add (flags, &flags_length, self->priv->selected_child);
found->state |= GTK_STATE_FLAG_SELECTED;
}
if (self->priv->prelight_child != NULL)
{
found = egg_list_box_child_flags_find_or_add (flags, &flags_length, self->priv->prelight_child);
found = child_flags_find_or_add (flags, &flags_length, self->priv->prelight_child);
found->state |= GTK_STATE_FLAG_PRELIGHT;
}
if (self->priv->active_child != NULL && self->priv->active_child_active)
{
found = egg_list_box_child_flags_find_or_add (flags, &flags_length, self->priv->active_child);
found = child_flags_find_or_add (flags, &flags_length, self->priv->active_child);
found->state |= GTK_STATE_FLAG_ACTIVE;
}
for (i = 0; i < flags_length; i++)
{
EggListBoxChildFlags *flag = &flags[i];
ChildFlags *flag = &flags[i];
gtk_style_context_save (context);
gtk_style_context_set_state (context, flag->state);
gtk_render_background (context, cr, 0, flag->child->y, allocation.width, flag->child->height);
@ -1778,25 +1791,6 @@ egg_list_box_child_info_free (EggListBoxChildInfo *info)
g_free (info);
}
static EggListBoxChildFlags*
egg_list_box_child_flags_find_or_add (EggListBoxChildFlags *array,
int *array_length,
EggListBoxChildInfo *to_find)
{
gint i;
for (i = 0; i < *array_length; i++)
{
if (array[i].child == to_find)
return &array[i];
}
*array_length = *array_length + 1;
array[*array_length - 1].child = to_find;
array[*array_length - 1].state = 0;
return &array[*array_length - 1];
}
static void
egg_list_box_class_init (EggListBoxClass *klass)
{