将多点触控添加到SDL 1.2.15

时间:2015-03-24 16:37:54

标签: sdl x11 multi-touch

我有一个基于SDL 1.2.15的应用程序,我想包括多点触控功能。所以我试图像{SDL2}那样,通过XISelectEvents做这样的事情:

/* Set up MPX events */
XIEventMask eventmask;

eventmask.deviceid = XIAllMasterDevices;
eventmask.mask_len = XIMaskLen(XI_LASTEVENT);
eventmask.mask = (unsigned char*) calloc(eventmask.mask_len, sizeof(char));

/* Events we want to listen for */
XISetMask(eventmask.mask, XI_TouchBegin);
XISetMask(eventmask.mask, XI_TouchUpdate);
XISetMask(eventmask.mask, XI_TouchEnd);


/* Register events on the window */
XISelectEvents(display, win, &eventmask, 1);

此代码在一个简单的X11应用程序上正常运行,我正在为多点触控GenericEvent获取X11事件。

所以这鼓励我在SDL_x11video.c的static int X11_CreateWindow函数末尾包含下一个代码:

XIEventMask eventmask;

eventmask.deviceid = XIAllMasterDevices;
eventmask.mask_len = XIMaskLen(XI_LASTEVENT);
eventmask.mask = (unsigned char*) calloc(eventmask.mask_len, sizeof(char));

// Events we want to listen for
XISetMask(eventmask.mask, XI_TouchBegin);
XISetMask(eventmask.mask, XI_TouchUpdate);
XISetMask(eventmask.mask, XI_TouchEnd);

printf( "Goto register on XISelectEvents\n");
printf("XISelectEvents: %d, %d\n", __LINE__, SDL_Display);
// Register events on the window
if (XISelectEvents(SDL_Display, SDL_Window, &eventmask, 1) != Success)
{
  printf( "Impossible to run  XISelectEvents\n");
}
printf( "register on XISelectEvents DONE\n");

关键是,虽然XISelectEvents看起来像是正常工作,但是当我使用与鼠标相关的触笔X11事件(ButtonPressButtonReleaseMotionNotify)而不是{{ 1}}期待。

作为限制,我无法更改为SDL2,迁移任务可能会很大。

有什么建议吗?

0 个答案:

没有答案