dix: export subpixel precision in XI2 events for root/event coordinates.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2009-05-08 10:10:25 +10:00
parent bae070914f
commit 00bc043fa0
3 changed files with 9 additions and 5 deletions

View File

@ -385,8 +385,8 @@ eventToDeviceEvent(DeviceEvent *ev, xEvent **xi)
xde->valuators_len = vallen;
xde->deviceid = ev->deviceid;
xde->sourceid = ev->sourceid;
xde->root_x = FP1616(ev->root_x, 0);
xde->root_y = FP1616(ev->root_y, 0);
xde->root_x = FP1616(ev->root_x, ev->root_x_frac);
xde->root_y = FP1616(ev->root_y, ev->root_y_frac);
xde->mods.base_mods = ev->mods.base;
xde->mods.latched_mods = ev->mods.latched;

View File

@ -44,6 +44,7 @@
#include "dixevents.h"
#include "mipointer.h"
#include "events.h"
#include "eventconvert.h"
#include <X11/extensions/XKBproto.h>
#include "xkbsrv.h"
@ -1070,9 +1071,10 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons,
event->detail.button = buttons;
}
/* XXX: this should be 16.16 fixed point */
event->root_x = cx; /* root_x/y always in screen coords */
event->root_y = cy;
event->root_x_frac = pDev->last.remainder[0];
event->root_y_frac = pDev->last.remainder[1];
set_valuators(pDev, event, first_valuator, num_valuators, valuators);

View File

@ -86,8 +86,10 @@ typedef struct
uint32_t button; /**< Button number */
uint32_t key; /**< Key code */
} detail;
uint32_t root_x; /**< Pos relative to root window in 16.16 fixed pt */
uint32_t root_y; /**< Pos relative to root window in 16.16 fixed pt */
uint16_t root_x; /**< Pos relative to root window in integral data */
float root_x_frac; /**< Pos relative to root window in frac part */
uint16_t root_y; /**< Pos relative to root window in integral part */
float root_y_frac; /**< Pos relative to root window in frac part */
uint8_t buttons[(MAX_BUTTONS + 7)/8]; /**< Button mask */
struct {
uint8_t mask[(MAX_VALUATORS + 7)/8]; /**< Valuator mask */