Re: Accuracy of motion events



On 2 September 2014 10:15, Stefan Salewski <mail ssalewski de> 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 gnome org
https://mail.gnome.org/mailman/listinfo/gtk-list


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