mirror of
https://github.com/brl/mutter.git
synced 2025-06-14 01:09:30 +00:00
2007-12-14 Emmanuele Bassi <ebassi@openedhand.com>
* clutter/clutter-behaviour.c: (clutter_knot_get_type): Use the I_() macro. * clutter/clutter-model.[ch]: Make ClutterModel and ClutterModelIter abstract classes; also, provide more virtual functions inside the ClutterModel vtable, to allow subclasses and language bindings to override the entire ClutterModel using other/native data types to store the rows. * clutter/clutter-model-default.[ch]: ClutterModelDefault is a default implementation of ClutterModel and ClutterModelIter using GSequence. * clutter/Makefile.am: * clutter/clutter.h: Build glue for ClutterModelDefault. * tests/test-model.c: Update for constructor changes. * tests/test-shader.c: Fix a typo.
This commit is contained in:
@ -10,16 +10,19 @@ enum
|
||||
};
|
||||
|
||||
static void
|
||||
print_iter (ClutterModelIter *iter, const gchar *text)
|
||||
print_iter (ClutterModelIter *iter,
|
||||
const gchar *text)
|
||||
{
|
||||
ClutterModel *model;
|
||||
gint i;
|
||||
gchar *string;
|
||||
|
||||
model = clutter_model_iter_get_model (iter);
|
||||
|
||||
clutter_model_iter_get (iter, COLUMN_FOO, &i, COLUMN_BAR, &string, -1);
|
||||
|
||||
g_print ("%s: (%s: %d), (%s: %s)\n",
|
||||
g_print ("[row:%02d]: %s: (%s: %d), (%s: %s)\n",
|
||||
clutter_model_iter_get_row (iter),
|
||||
text,
|
||||
clutter_model_get_column_name (model, COLUMN_FOO), i,
|
||||
clutter_model_get_column_name (model, COLUMN_BAR), string);
|
||||
@ -28,20 +31,28 @@ print_iter (ClutterModelIter *iter, const gchar *text)
|
||||
}
|
||||
|
||||
static gboolean
|
||||
foreach_func (ClutterModel *model, ClutterModelIter *iter, gpointer null)
|
||||
foreach_func (ClutterModel *model,
|
||||
ClutterModelIter *iter,
|
||||
gpointer dummy)
|
||||
{
|
||||
gint i;
|
||||
gchar *string;
|
||||
|
||||
clutter_model_iter_get (iter, COLUMN_FOO, &i, COLUMN_BAR, &string, -1);
|
||||
g_print ("Foreach: %d: %s\n", i, string);
|
||||
|
||||
g_print ("[row:%02d]: Foreach: %d, %s\n",
|
||||
clutter_model_iter_get_row (iter),
|
||||
i, string);
|
||||
|
||||
g_free (string);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
filter_func (ClutterModel *model, ClutterModelIter *iter, gpointer null)
|
||||
filter_func (ClutterModel *model,
|
||||
ClutterModelIter *iter,
|
||||
gpointer dummy)
|
||||
{
|
||||
gint i = 0;
|
||||
|
||||
@ -54,13 +65,14 @@ static gint
|
||||
sort_func (ClutterModel *model,
|
||||
const GValue *a,
|
||||
const GValue *b,
|
||||
gpointer null)
|
||||
gpointer dummy)
|
||||
{
|
||||
return -1 * strcmp (g_value_get_string (a), g_value_get_string (b));
|
||||
}
|
||||
|
||||
static void
|
||||
on_row_changed (ClutterModel *model, ClutterModelIter *iter)
|
||||
on_row_changed (ClutterModel *model,
|
||||
ClutterModelIter *iter)
|
||||
{
|
||||
print_iter (iter, "Changed");
|
||||
}
|
||||
@ -70,21 +82,22 @@ filter_model (ClutterModel *model)
|
||||
{
|
||||
ClutterModelIter *iter;
|
||||
|
||||
g_print ("* Filter function: even rows\n");
|
||||
clutter_model_set_filter (model, filter_func, NULL, NULL);
|
||||
|
||||
iter = clutter_model_get_first_iter (model);
|
||||
|
||||
while (!clutter_model_iter_is_last (iter))
|
||||
{
|
||||
print_iter (iter, "Filtered Forward Iteration");
|
||||
iter = clutter_model_iter_next (iter);
|
||||
}
|
||||
{
|
||||
print_iter (iter, "Filtered Forward Iteration");
|
||||
|
||||
iter = clutter_model_iter_next (iter);
|
||||
}
|
||||
g_object_unref (iter);
|
||||
|
||||
g_print ("* Sorting function: reverse alpha\n");
|
||||
clutter_model_set_sort (model, COLUMN_BAR, sort_func, NULL, NULL);
|
||||
|
||||
g_signal_connect (model, "row-changed",
|
||||
G_CALLBACK (on_row_changed), NULL);
|
||||
g_signal_connect (model, "row-changed", G_CALLBACK (on_row_changed), NULL);
|
||||
|
||||
iter = clutter_model_get_iter_at_row (model, 0);
|
||||
clutter_model_iter_set (iter, COLUMN_BAR, "Changed string of 0th row, "
|
||||
@ -94,11 +107,11 @@ filter_model (ClutterModel *model)
|
||||
|
||||
clutter_model_foreach (model, foreach_func, NULL);
|
||||
|
||||
g_print ("* Unset filter\n");
|
||||
clutter_model_set_filter (model, NULL, NULL, NULL);
|
||||
|
||||
while (clutter_model_get_n_rows (model))
|
||||
{
|
||||
clutter_model_remove (model, 0);
|
||||
}
|
||||
|
||||
clutter_main_quit ();
|
||||
}
|
||||
@ -111,18 +124,18 @@ iterate (ClutterModel *model)
|
||||
iter = clutter_model_get_first_iter (model);
|
||||
|
||||
while (!clutter_model_iter_is_last (iter))
|
||||
{
|
||||
print_iter (iter, "Forward Iteration");
|
||||
iter = clutter_model_iter_next (iter);
|
||||
}
|
||||
{
|
||||
print_iter (iter, "Forward Iteration");
|
||||
iter = clutter_model_iter_next (iter);
|
||||
}
|
||||
g_object_unref (iter);
|
||||
|
||||
iter = clutter_model_get_last_iter (model);
|
||||
do
|
||||
{
|
||||
print_iter (iter, "Reverse Iteration");
|
||||
iter = clutter_model_iter_prev (iter);
|
||||
}
|
||||
{
|
||||
print_iter (iter, "Reverse Iteration");
|
||||
iter = clutter_model_iter_prev (iter);
|
||||
}
|
||||
while (!clutter_model_iter_is_first (iter));
|
||||
|
||||
print_iter (iter, "Reverse Iteration");
|
||||
@ -155,20 +168,26 @@ populate_model (ClutterModel *model)
|
||||
}
|
||||
|
||||
static void
|
||||
on_row_added (ClutterModel *model, ClutterModelIter *iter, gpointer null)
|
||||
on_row_added (ClutterModel *model,
|
||||
ClutterModelIter *iter,
|
||||
gpointer dummy)
|
||||
{
|
||||
gint i;
|
||||
gchar *string;
|
||||
|
||||
clutter_model_iter_get (iter, COLUMN_FOO, &i, COLUMN_BAR, &string, -1);
|
||||
|
||||
g_print ("Added: %d, %s\n", i, string);
|
||||
g_print ("[row:%02d]: Added: %d, %s\n",
|
||||
clutter_model_iter_get_row (iter),
|
||||
i, string);
|
||||
|
||||
g_free (string);
|
||||
}
|
||||
|
||||
static void
|
||||
on_row_removed (ClutterModel *model, ClutterModelIter *iter, gpointer null)
|
||||
on_row_removed (ClutterModel *model,
|
||||
ClutterModelIter *iter,
|
||||
gpointer dummy)
|
||||
{
|
||||
print_iter (iter, "Removed");
|
||||
}
|
||||
@ -176,14 +195,14 @@ on_row_removed (ClutterModel *model, ClutterModelIter *iter, gpointer null)
|
||||
static void
|
||||
on_sort_changed (ClutterModel *model)
|
||||
{
|
||||
g_print ("\nSort Changed\n\n");
|
||||
g_print ("\n*** Sort Changed ***\n\n");
|
||||
clutter_model_foreach (model, foreach_func, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
on_filter_changed (ClutterModel *model)
|
||||
{
|
||||
g_print ("\nFilter Changed\n\n");
|
||||
g_print ("\n*** Filter Changed ***\n\n");
|
||||
}
|
||||
|
||||
int
|
||||
@ -193,11 +212,11 @@ main (int argc, char *argv[])
|
||||
|
||||
clutter_init (&argc, &argv);
|
||||
|
||||
model = clutter_model_new (N_COLUMNS,
|
||||
G_TYPE_INT, "Foo",
|
||||
G_TYPE_STRING, "Bar");
|
||||
model = clutter_model_default_new (N_COLUMNS,
|
||||
G_TYPE_INT, "Foo",
|
||||
G_TYPE_STRING, "Bar");
|
||||
|
||||
g_timeout_add (1000, (GSourceFunc)populate_model, model);
|
||||
g_timeout_add (1000, (GSourceFunc) populate_model, model);
|
||||
|
||||
g_signal_connect (model, "row-added",
|
||||
G_CALLBACK (on_row_added), NULL);
|
||||
|
@ -210,7 +210,7 @@ main (gint argc,
|
||||
shader = clutter_shader_new ();
|
||||
|
||||
error = NULL;
|
||||
clutter_shader_set_fragment_source (shader, shaders[shader_no].source, NULL);
|
||||
clutter_shader_set_fragment_source (shader, shaders[shader_no].source, -1);
|
||||
clutter_shader_bind (shader, &error);
|
||||
if (error)
|
||||
{
|
||||
|
Reference in New Issue
Block a user