2007-05-10 Matthew Allum <mallum@openedhand.com>

* clutter/clutter-backend.c:
        * clutter/clutter-backend.h:
        * clutter/clutter-event.c:
        * clutter/clutter-main.c:
        * clutter/clutter-private.h:
        * clutter/glx/clutter-backend-glx.c:
        * clutter/glx/clutter-backend-glx.h:
        * clutter/glx/clutter-event-glx.c:
        Rejig backend event code as to simplify a little.
        NOTE: This breaks non glx backends.

        * tests/Makefile.am:
        * tests/test-events.c:
        Add a very simple event test.

        * tests/test-textures.c: (main):
        Add some more sizes to the test.
This commit is contained in:
Matthew Allum
2007-05-09 23:31:08 +00:00
parent e1bf19f869
commit eb42f82f23
12 changed files with 306 additions and 508 deletions

View File

@ -34,16 +34,30 @@ G_DEFINE_ABSTRACT_TYPE (ClutterBackend,
clutter_backend,
G_TYPE_OBJECT);
#define CLUTTER_BACKEND_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_BACKEND, ClutterBackendPrivate))
struct _ClutterBackendPrivate
{
/* settings */
guint double_click_time;
guint double_click_distance;
};
static void
clutter_backend_dispose (GObject *gobject)
{
ClutterBackend *backend = CLUTTER_BACKEND (gobject);
ClutterMainContext *clutter_context;
if (backend->events_queue)
clutter_context = clutter_context_get_default ();
if (clutter_context && clutter_context->events_queue)
{
g_queue_foreach (backend->events_queue, (GFunc) clutter_event_free, NULL);
g_queue_free (backend->events_queue);
backend->events_queue = NULL;
g_queue_foreach (clutter_context->events_queue, (GFunc) clutter_event_free, NULL);
g_queue_free (clutter_context->events_queue);
clutter_context->events_queue = NULL;
}
G_OBJECT_CLASS (clutter_backend_parent_class)->dispose (gobject);
@ -55,12 +69,16 @@ clutter_backend_class_init (ClutterBackendClass *klass)
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
gobject_class->dispose = clutter_backend_dispose;
g_type_class_add_private (gobject_class, sizeof (ClutterBackendPrivate));
}
static void
clutter_backend_init (ClutterBackend *backend)
{
ClutterBackendPrivate *priv;
priv = backend->priv = CLUTTER_BACKEND_GET_PRIVATE(backend);
}
ClutterActor *
@ -125,18 +143,6 @@ _clutter_backend_init_stage (ClutterBackend *backend,
return TRUE;
}
void
_clutter_backend_init_events (ClutterBackend *backend)
{
ClutterBackendClass *klass;
g_return_if_fail (CLUTTER_IS_BACKEND (backend));
klass = CLUTTER_BACKEND_GET_CLASS (backend);
if (klass->init_events)
klass->init_events (backend);
}
void
_clutter_backend_init_features (ClutterBackend *backend)
{
@ -149,14 +155,34 @@ _clutter_backend_init_features (ClutterBackend *backend)
klass->init_features (backend);
}
void
_clutter_backend_init_events (ClutterBackend *backend)
{
ClutterBackendClass *klass;
ClutterMainContext *clutter_context;
clutter_context = clutter_context_get_default ();
g_return_if_fail (CLUTTER_IS_BACKEND (backend));
g_return_if_fail (clutter_context != NULL);
clutter_context->events_queue = g_queue_new ();
klass = CLUTTER_BACKEND_GET_CLASS (backend);
if (klass->init_events)
klass->init_events (backend);
}
/**
* clutter_get_default_backend:
*
* FIXME
*
* Return value: the default backend. You should not ref or
* unref the returned object
*
* unref the returned object. Applications should not rarely need
* to use this.
*
* Since: 0.4
*/
ClutterBackend *
@ -169,188 +195,7 @@ clutter_get_default_backend (void)
return clutter_context->backend;
}
/**
* clutter_backend_get_event:
* @backend: a #ClutterBackend
*
* FIXME
*
* Return value: the #ClutterEvent removed from the queue
*
* Since: 0.4
*/
ClutterEvent *
clutter_backend_get_event (ClutterBackend *backend)
{
g_return_val_if_fail (CLUTTER_IS_BACKEND (backend), NULL);
_clutter_events_queue (backend);
return _clutter_event_queue_pop (backend);
}
/**
* clutter_backend_peek_event:
* @backend: a #ClutterBackend
*
* FIXME
*
* Return value: a copy of the first #ClutterEvent in the queue
*
* Since: 0.4
*/
ClutterEvent *
clutter_backend_peek_event (ClutterBackend *backend)
{
g_return_val_if_fail (CLUTTER_IS_BACKEND (backend), NULL);
return _clutter_event_queue_peek (backend);
}
/**
* clutter_backend_put_event:
* @backend: a #ClutterBackend
* @event: a #ClutterEvent
*
* FIXME
*
* Since: 0.4
*/
void
clutter_backend_put_event (ClutterBackend *backend,
ClutterEvent *event)
{
g_return_if_fail (CLUTTER_IS_BACKEND (backend));
g_return_if_fail (event != NULL);
_clutter_event_queue_push (backend, clutter_event_copy (event));
}
/**
* clutter_backend_get_width:
* @backend: a #ClutterBackend
*
* Gets the width of the screen used by @backend in pixels.
*
* Return value: the width of the screen
*
* Since: 0.4
*/
gint
clutter_backend_get_width (ClutterBackend *backend)
{
g_return_val_if_fail (CLUTTER_IS_BACKEND (backend), -1);
return backend->res_width;
}
/**
* clutter_backend_get_height:
* @backend: a #ClutterBackend
*
* Gets the height of the screen used by @backend in pixels.
*
* Return value: the height of the screen
*
* Since: 0.4
*/
gint
clutter_backend_get_height (ClutterBackend *backend)
{
g_return_val_if_fail (CLUTTER_IS_BACKEND (backend), -1);
return backend->res_height;
}
/**
* clutter_backend_get_width_mm:
* @backend: a #ClutterBackend
*
* Gets the width of the screen used by @backend in millimiters.
*
* Return value: the width of the screen
*
* Since: 0.4
*/
gint
clutter_backend_get_width_mm (ClutterBackend *backend)
{
g_return_val_if_fail (CLUTTER_IS_BACKEND (backend), -1);
return backend->mm_width;
}
/**
* clutter_backend_get_height_mm:
* @backend: a #ClutterBackend
*
* Gets the height of the screen used by @backend in millimiters.
*
* Return value: the height of the screen
*
* Since: 0.4
*/
gint
clutter_backend_get_height_mm (ClutterBackend *backend)
{
g_return_val_if_fail (CLUTTER_IS_BACKEND (backend), -1);
return backend->mm_height;
}
/**
* clutter_backend_get_screen_number:
* @backend: a #ClutterBackend
*
* Gets the number of screens available for @backend.
*
* Return value: the number of screens.
*
* Since: 0.4
*/
gint
clutter_backend_get_screen_number (ClutterBackend *backend)
{
g_return_val_if_fail (CLUTTER_IS_BACKEND (backend), -1);
return backend->screen_num;
}
/**
* clutter_backend_get_n_screens:
* @backend: a #ClutterBackend
*
* Gets the number of screens managed by @backend.
*
* Return value: the number of screens
*
* Since: 0.4
*/
gint
clutter_backend_get_n_screens (ClutterBackend *backend)
{
g_return_val_if_fail (CLUTTER_IS_BACKEND (backend), 0);
return backend->n_screens;
}
/**
* clutter_backend_get_resolution:
* @backend: a #ClutterBackend
*
* Gets the resolution of the screen used by @backend.
*
* Return value: the resolution of the screen
*
* Since: 0.4
*/
gdouble
clutter_backend_get_resolution (ClutterBackend *backend)
{
g_return_val_if_fail (CLUTTER_IS_BACKEND (backend), 0.0);
return (((gdouble) backend->res_height * 25.4) /
(gdouble) backend->mm_height);
}
/* FIXME: below should probably be moved into clutter_main */
/**
* clutter_backend_set_double_click_time:
@ -368,7 +213,7 @@ clutter_backend_set_double_click_time (ClutterBackend *backend,
{
g_return_if_fail (CLUTTER_IS_BACKEND (backend));
backend->double_click_time = msec;
backend->priv->double_click_time = msec;
}
/**
@ -387,7 +232,7 @@ clutter_backend_get_double_click_time (ClutterBackend *backend)
{
g_return_val_if_fail (CLUTTER_IS_BACKEND (backend), 0);
return backend->double_click_time;
return backend->priv->double_click_time;
}
/**
@ -405,7 +250,7 @@ clutter_backend_set_double_click_distance (ClutterBackend *backend,
{
g_return_if_fail (CLUTTER_IS_BACKEND (backend));
backend->double_click_distance = distance;
backend->priv->double_click_distance = distance;
}
/**
@ -423,5 +268,5 @@ clutter_backend_get_double_click_distance (ClutterBackend *backend)
{
g_return_val_if_fail (CLUTTER_IS_BACKEND (backend), 0);
return backend->double_click_distance;
return backend->priv->double_click_distance;
}