事件重放函數:
static gboolean replay_one_event (gpointer user_data)
...{
DFBContext *context = (DFBContext*)user_data;
off_t cur = 0;
DFBInputEvent event = context->event;
if(event.type == DIET_KEYPRESS || event.type == DIET_KEYRELEASE)
...{
dfb_input_dispatch (context->keyboard_device, &event);
}
else
...{
dfb_input_dispatch (context->mouse_device, &event);
}
if (fread (&context->event, sizeof (DFBInputEvent), 1, context->file) == 1)
...{
guint ms = (context->event.timestamp.tv_sec - event.timestamp.tv_sec) * 1000
+ (context->event.timestamp.tv_usec - event.timestamp.tv_usec)/1000;
g_timeout_add (ms, replay_one_event, user_data); 軟件測試 }
else
...{
g_main_loop_quit (context->loop);
}
return FALSE;
}
注意:DirectFB中的筆點事件是以相對坐標方式表示的,所以要保證重放時光標在同樣的初始位置。如果DirectFB以多進程的方式運行,這個程序可以是一個獨立的進程,否則要放到應用程序的進程中才行。
原文轉自:http://www.anti-gravitydesign.com