Re: Accuracy of motion events

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2 September 2014 10:15, Stefan Salewski <mail@xxxxxxxxxxxx> wrote:
> On Mon, 2014-09-01 at 23:29 +0200, ax487 wrote:
>> Just as an illustration: http://picpaste.com/event-DmCNqCHZ.png
>> It does make a difference :)
>
> Yes -- so my assumption was that you get events with better time
> resolution than 10 ms without compression.
>
> So I hacked together a small test in plain C.
> But again, I can not see a difference for my Box.
> (Linux AMD64, Gtk3.12, Gnome3, X11, AMDX2 CPU, nvidia-drivers ...)
>
> Here is the C code and the output, event time delta is general 12 ms
> with few exceptions, no matter if compression is enabled or disabled.
>
> /* http://zetcode.com/tutorials/gtktutorial/firstprograms/ */
> #include <gtk/gtk.h>
>
> void print_event(GtkWidget *widget, GdkEventMotion *event, gpointer p)
> {
>   printf("%.0f, %.0f: %d\n", event->x, event->y, event->time);
> }
>
> int main( int argc, char *argv[])
> {
>   GtkWidget *window;
>         GdkWindow *gdkwin;
>
>   gtk_init(&argc, &argv);
>
>   window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
>   gtk_window_set_default_size(GTK_WINDOW(window), 800, 800);
>
>   gtk_widget_set_events(window, GDK_POINTER_MOTION_MASK);
>
>   gtk_widget_show(window);
>
>   g_signal_connect(window, "motion_notify_event",
>       G_CALLBACK (print_event), NULL);
>
>   g_signal_connect_swapped(G_OBJECT(window), "destroy",
>       G_CALLBACK(gtk_main_quit), NULL);
>
>   gdkwin = gtk_widget_get_window(window);
>
>   // gdk_window_set_event_compression(gdkwin, FALSE);
>   gdk_window_set_event_compression(gdkwin, TRUE);
>
>   gtk_main();
>
>   return 0;
> }
>
> 36, 422: 42037389
> 36, 426: 42037401
> 48, 438: 42037413
> 62, 451: 42037432
> 79, 464: 42037437
> 102, 475: 42037455
> 129, 486: 42037465
> 150, 493: 42037477
> 179, 500: 42037489
> 206, 502: 42037501
> 233, 502: 42037513
> 262, 502: 42037525
> 285, 491: 42037537
> 314, 480: 42037549
> 343, 469: 42037566
> 372, 460: 42037577
> 391, 447: 42037589
> 406, 430: 42037601
> 421, 413: 42037613
> 436, 396: 42037631
> 447, 377: 42037637
>

As stated before, motion events are only *delivered* per frame, all
the compress flag does is set it to deliver the motion as one event
per frame or multiple events per frame.  If you have compress true (as
above) only one event is delivered, on each frame time, so thats the
time you see.  You only get the position at the end of the frame.

If you turn compress off you will get all the events generated during
the last frame cycle.  That allows applications to trace the positions
that the cursor moved through.

Cheers
Lex

>
>
>
>
> _______________________________________________
> gtk-list mailing list
> gtk-list@xxxxxxxxx
> https://mail.gnome.org/mailman/listinfo/gtk-list
_______________________________________________
gtk-list mailing list
gtk-list@xxxxxxxxx
https://mail.gnome.org/mailman/listinfo/gtk-list




[Index of Archives]     [Touch Screen Library]     [GIMP Users]     [Gnome]     [KDE]     [Yosemite News]     [Steve's Art]

  Powered by Linux