From f6dce7f9e525a115014923a4c70a9a357a274d0b Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Thu, 15 May 2008 14:31:43 +0000 Subject: [PATCH] 2008-05-15 Emmanuele Bassi * clutter/x11/clutter-backend-x11.c: * clutter/clutter-event.h: * clutter/clutter-feature.h: * clutter/clutter-fixed.c: * clutter/clutter-model.h: Fix documentation. * clutter/eglnative/clutter-backend-egl.[ch]: * clutter/eglnative/clutter-event-egl.c: Add the same solution used for the SDL backend in order to get the time of an event. This should fix the motion event throttling and the click count on button press. * tests/test-pixmap.c (create_pixmap), (main): Fix preprocessor directives. --- ChangeLog | 17 ++++++++++ clutter/clutter-event.h | 2 ++ clutter/clutter-feature.h | 1 + clutter/clutter-fixed.c | 4 +-- clutter/clutter-model.h | 1 + clutter/eglnative/clutter-backend-egl.c | 8 +++++ clutter/eglnative/clutter-backend-egl.h | 3 ++ clutter/eglnative/clutter-event-egl.c | 42 +++++++++++++++++++------ clutter/x11/clutter-backend-x11.c | 1 + tests/test-pixmap.c | 32 +++++++++---------- 10 files changed, 84 insertions(+), 27 deletions(-) diff --git a/ChangeLog b/ChangeLog index a1c902c33..9d485cf0e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2008-05-15 Emmanuele Bassi + + * clutter/x11/clutter-backend-x11.c: + * clutter/clutter-event.h: + * clutter/clutter-feature.h: + * clutter/clutter-fixed.c: + * clutter/clutter-model.h: Fix documentation. + + * clutter/eglnative/clutter-backend-egl.[ch]: + * clutter/eglnative/clutter-event-egl.c: Add the same solution + used for the SDL backend in order to get the time of an event. + This should fix the motion event throttling and the click count + on button press. + + * tests/test-pixmap.c (create_pixmap), (main): Fix preprocessor + directives. + 2008-05-14 Emmanuele Bassi * tests/test-threads.c: Add a "progress bar" actor and diff --git a/clutter/clutter-event.h b/clutter/clutter-event.h index e93a2bf0b..056cf0cf7 100644 --- a/clutter/clutter-event.h +++ b/clutter/clutter-event.h @@ -189,6 +189,7 @@ typedef struct _ClutterInputDevice ClutterInputDevice; * @type: event type * @time: event time * @flags: event flags + * @stage: event source stage * @source: event source actor * * Common members for a #ClutterEvent @@ -209,6 +210,7 @@ struct _ClutterAnyEvent * @type: event type * @time: event time * @flags: event flags + * @stage: event source stage * @source: event source actor * @modifier_state: key modifiers * @keyval: raw key value diff --git a/clutter/clutter-feature.h b/clutter/clutter-feature.h index 1c94aa7d4..b8c4264bb 100644 --- a/clutter/clutter-feature.h +++ b/clutter/clutter-feature.h @@ -39,6 +39,7 @@ G_BEGIN_DECLS /** * ClutterFeatureFlags: + * @CLUTTER_FEATURE_TEXTURE_RECTANGLE: Set if rectangular textures supported. * @CLUTTER_FEATURE_TEXTURE_RECTANGLE: Set if NPOTS textures supported. * @CLUTTER_FEATURE_SYNC_TO_VBLANK: Set if vblank syncing supported. * @CLUTTER_FEATURE_TEXTURE_YUV: Set if YUV based textures supported. diff --git a/clutter/clutter-fixed.c b/clutter/clutter-fixed.c index cd6dbef39..599e81a7f 100644 --- a/clutter/clutter-fixed.c +++ b/clutter/clutter-fixed.c @@ -793,7 +793,7 @@ clutter_sqrti (gint number) } /** - * clutter_fixed_qmulx: + * clutter_qmulx: * @op1: #ClutterFixed * @op2: #ClutterFixed * @@ -833,7 +833,7 @@ clutter_qmulx (ClutterFixed op1, ClutterFixed op2) } /** - * clutter_fixed_qdivx: + * clutter_qdivx: * @op1: #ClutterFixed * @op2: #ClutterFixed * diff --git a/clutter/clutter-model.h b/clutter/clutter-model.h index cfe128d34..94c8326e2 100644 --- a/clutter/clutter-model.h +++ b/clutter/clutter-model.h @@ -300,6 +300,7 @@ struct _ClutterModelIter * iterator belongs to * @get_row: Virtual function for getting the row to which the iterator * points + * @copy: Virtual function for copying a #ClutterModelIter. * * Class for #ClutterModelIter instances. * diff --git a/clutter/eglnative/clutter-backend-egl.c b/clutter/eglnative/clutter-backend-egl.c index d5c00c1ba..cb68e8c1f 100644 --- a/clutter/eglnative/clutter-backend-egl.c +++ b/clutter/eglnative/clutter-backend-egl.c @@ -142,6 +142,12 @@ clutter_backend_egl_dispose (GObject *gobject) backend_egl->edpy = 0; } + if (backend_egl->event_timer) + { + g_timer_destroy (backend_egl->event_timer); + backend_egl->event_timer = NULL; + } + G_OBJECT_CLASS (clutter_backend_egl_parent_class)->dispose (gobject); } @@ -218,6 +224,8 @@ clutter_backend_egl_init (ClutterBackendEGL *backend_egl) clutter_backend_set_resolution (backend, 96.0); clutter_backend_set_double_click_time (backend, 250); clutter_backend_set_double_click_distance (backend, 5); + + backend_egl->event_timer = g_timer_new (); } GType diff --git a/clutter/eglnative/clutter-backend-egl.h b/clutter/eglnative/clutter-backend-egl.h index 13e3c39d5..5327e166e 100644 --- a/clutter/eglnative/clutter-backend-egl.h +++ b/clutter/eglnative/clutter-backend-egl.h @@ -58,6 +58,9 @@ struct _ClutterBackendEGL /* event source */ GSource *event_source; + /* event timer */ + GTimer *event_timer; + /*< private >*/ }; diff --git a/clutter/eglnative/clutter-event-egl.c b/clutter/eglnative/clutter-event-egl.c index e09bb9385..240d9bc62 100644 --- a/clutter/eglnative/clutter-event-egl.c +++ b/clutter/eglnative/clutter-event-egl.c @@ -81,6 +81,16 @@ clutter_event_source_new (ClutterBackend *backend) return source; } +static guint32 +get_backend_time (void) +{ + ClutterBackendEGL *backend_egl; + + backend_egl = CLUTTER_BACKEND_EGL (clutter_get_default_backend ()); + + return g_timer_elapsed (backend_egl->event_timer) * 1000; +} + void _clutter_events_init (ClutterBackend *backend) { @@ -88,19 +98,22 @@ _clutter_events_init (ClutterBackend *backend) GSource *source; ClutterEventSource *event_source; + CLUTTER_NOTE (EVENT, "Starting timer"); + g_assert (backend_egl->event_timer != NULL); + g_timer_start (backend_egl->event_timer); + #ifdef HAVE_TSLIB /* FIXME LEAK on error paths */ source = backend_egl->event_source = clutter_event_source_new (backend); event_source = (ClutterEventSource *) source; - event_source->ts_device = ts_open(g_getenv("TSLIB_TSDEVICE"), 0); + event_source->ts_device = ts_open (g_getenv ("TSLIB_TSDEVICE"), 0); if (event_source->ts_device) { + CLUTTER_NOTE (EVENT, "Opened '%s'", g_getenv ("TSLIB_TSDEVICE")); - CLUTTER_NOTE (EVENT, "Opened '%s'", g_getenv("TSLIB_TSDEVICE")); - - if (ts_config(event_source->ts_device)) + if (ts_config (event_source->ts_device)) { g_warning ("ts_config() failed"); ts_close (event_source->ts_device); @@ -129,6 +142,12 @@ _clutter_events_uninit (ClutterBackend *backend) { ClutterBackendEGL *backend_egl = CLUTTER_BACKEND_EGL (backend); + if (backend_egl->event_timer) + { + CLUTTER_NOTE (EVENT, "Stopping the timer"); + g_timer_stop (backend_egl->event_timer); + } + if (backend_egl->event_source) { CLUTTER_NOTE (EVENT, "Destroying the event source"); @@ -220,27 +239,32 @@ clutter_event_dispatch (GSource *source, last_x = event->button.x = tsevent.x; last_y = event->button.y = tsevent.y; - event->button.time = 0; - event->button.modifier_state = 0; - event->button.button = 1; - if (tsevent.pressure && !clicked) { event->button.type = event->type = CLUTTER_BUTTON_PRESS; + event->button.time = get_backend_time (); + event->button.modifier_state = 0; + event->button.button = 1; + clicked = TRUE; } else if (tsevent.pressure && clicked) { event->motion.type = event->type = CLUTTER_MOTION; + event->motion.time = get_backend_time (); + event->motion.modifier_state = 0; } else { event->button.type = event->type = CLUTTER_BUTTON_RELEASE; + event->button.time = get_backend_time (); + event->button.modifier_state = 0; + event->button.button = 1; + clicked = FALSE; } g_queue_push_head (clutter_context->events_queue, event); - } #endif diff --git a/clutter/x11/clutter-backend-x11.c b/clutter/x11/clutter-backend-x11.c index 1200e24e5..09e6a4893 100644 --- a/clutter/x11/clutter-backend-x11.c +++ b/clutter/x11/clutter-backend-x11.c @@ -381,6 +381,7 @@ clutter_x11_get_default_display (void) /** * clutter_x11_set_display: * @xdpy: pointer to a X display connection. + * * Sets the display connection clutter should use; must be called * before clutter_init(). * diff --git a/tests/test-pixmap.c b/tests/test-pixmap.c index ea5e408e9..14908f35a 100644 --- a/tests/test-pixmap.c +++ b/tests/test-pixmap.c @@ -16,7 +16,7 @@ #define IMAGE "redhand.png" -#ifdef USE_GDKPIXBUF +# ifdef USE_GDKPIXBUF static gboolean stage_press_cb (ClutterActor *actor, @@ -87,10 +87,10 @@ create_pixmap (guint *width, guint *height, guint *depth) for (p = line; p < endofline; p += 4, d+=4) { -#define r ((guint32)(*(p))) -#define g ((guint32)(*(p+1))) -#define b ((guint32)(*(p+2))) -#define a ((guint32)(*(p+3))) +# define r ((guint32)(*(p))) +# define g ((guint32)(*(p+1))) +# define b ((guint32)(*(p+2))) +# define a ((guint32)(*(p+3))) guint32 pixel = ((a << 24) & 0xFF000000 ) | ((r << 16) & 0x00FF0000 ) | @@ -100,10 +100,10 @@ create_pixmap (guint *width, guint *height, guint *depth) *((guint32 *)d) = pixel; } -#undef r -#undef g -#undef b -#undef a +# undef r +# undef g +# undef b +# undef a } @@ -136,12 +136,12 @@ create_pixmap (guint *width, guint *height, guint *depth) return pixmap; } -#endif +# endif /* USE_GDKPIXBUF */ int main (int argc, char **argv) { -#ifdef USE_GDKPIXBUF +# ifdef USE_GDKPIXBUF ClutterActor *stage, *tex; Pixmap pixmap; guint w, h, d; @@ -168,7 +168,7 @@ main (int argc, char **argv) clutter_x11_texture_pixmap_set_automatic (CLUTTER_X11_TEXTURE_PIXMAP (tex), TRUE); -#ifdef HAVE_CLUTTER_GLX +# ifdef HAVE_CLUTTER_GLX /* pixmap = create_pixmap (&w, &h, &d); */ @@ -191,7 +191,7 @@ main (int argc, char **argv) clutter_container_add_actor (CLUTTER_CONTAINER (stage), tex); -#endif +# endif /* HAVE_CLUTTER_GLX */ g_signal_connect (stage, "button-press-event", G_CALLBACK (stage_press_cb), (gpointer)pixmap); @@ -199,10 +199,10 @@ main (int argc, char **argv) clutter_actor_show (stage); clutter_main (); -#endif +# endif /* USE_GDKPIXBUF */ } -#else +#else /* HAVE_CLUTTER_GLX */ int main(int argc, char **argv){return 0;}; -#endif +#endif /* HAVE_CLUTTER_GLX */