mirror of
https://github.com/brl/mutter.git
synced 2025-06-13 16:59:30 +00:00
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:
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user