-typedef void (*GritsLevelFunc)(GritsObject *obj, gpointer user_data, gint level, gboolean sorted);
+typedef gboolean (*GritsLevelFunc)(GritsObject *obj, gpointer user_data, gint level, gboolean sorted);
GritsLevelFunc user_func = ((gpointer*)pointers)[0];
gpointer user_data = ((gpointer*)pointers)[1];
for (GList *cur = level->unsorted.next; cur; cur = cur->next)
GritsLevelFunc user_func = ((gpointer*)pointers)[0];
gpointer user_data = ((gpointer*)pointers)[1];
for (GList *cur = level->unsorted.next; cur; cur = cur->next)
- user_func(cur->data, user_data, (gint)key, FALSE);
+ if (user_func(cur->data, user_data, (gint)key, FALSE))
+ return TRUE;
- user_func(cur->data, user_data, (gint)key, TRUE);
+ if (user_func(cur->data, user_data, (gint)key, TRUE))
+ return TRUE;
-static void _add_object_world(GritsObject *object, GPtrArray *array, gint level, gboolean sorted)
+static gboolean _add_object_world(GritsObject *object, GPtrArray *array, gint level, gboolean sorted)
{
if (level < GRITS_LEVEL_HUD)
g_ptr_array_add(array, object);
{
if (level < GRITS_LEVEL_HUD)
g_ptr_array_add(array, object);
-static void _add_object_ortho(GritsObject *object, GPtrArray *array, gint level, gboolean sorted)
+static gboolean _add_object_ortho(GritsObject *object, GPtrArray *array, gint level, gboolean sorted)
{
if (level >= GRITS_LEVEL_HUD)
g_ptr_array_add(array, object);
{
if (level >= GRITS_LEVEL_HUD)
g_ptr_array_add(array, object);
/* Notify objects of pointer movements */
for (guint i = 0; i < objects->len; i++) {
GritsObject *object = objects->pdata[i];
/* Notify objects of pointer movements */
for (guint i = 0; i < objects->len; i++) {
GritsObject *object = objects->pdata[i];
glMatrixMode(GL_PROJECTION); glLoadIdentity();
gluPickMatrix(gl_x, gl_y, delta, delta, viewport);
glMultMatrixd(projection);
glMatrixMode(GL_PROJECTION); glLoadIdentity();
gluPickMatrix(gl_x, gl_y, delta, delta, viewport);
glMultMatrixd(projection);
/* Run ortho picking */
glMatrixMode(GL_PROJECTION); glLoadIdentity();
gluPickMatrix(gl_x, gl_y, delta, delta, viewport);
glMatrixMode(GL_MODELVIEW); glLoadIdentity();
glOrtho(0, viewport[2], viewport[3], 0, 1000, -1000);
/* Run ortho picking */
glMatrixMode(GL_PROJECTION); glLoadIdentity();
gluPickMatrix(gl_x, gl_y, delta, delta, viewport);
glMatrixMode(GL_MODELVIEW); glLoadIdentity();
glOrtho(0, viewport[2], viewport[3], 0, 1000, -1000);
g_debug("GritsOpenGL: on_motion_notify - hits=%d/%d,%d/%d ev=%.0lf,%.0lf",
world_hits, world->len, ortho_hits, ortho->len, gl_x, gl_y);
g_debug("GritsOpenGL: on_motion_notify - hits=%d/%d,%d/%d ev=%.0lf,%.0lf",
world_hits, world->len, ortho_hits, ortho->len, gl_x, gl_y);