XQuartz: Updated Tablet code to include ranges for valuators and added cursor and erasor

(cherry picked from commit 6bca787609)
This commit is contained in:
Jeremy Huddleston 2008-09-03 09:11:25 -07:00
parent 7542c00b96
commit fafcafd6de
4 changed files with 85 additions and 18 deletions

View File

@ -924,11 +924,47 @@ static void send_nsevent(NSEvent *e) {
tilt_y = [e tilt].y; tilt_y = [e tilt].y;
} }
if([e subtype] != NSTabletProximityEventSubtype) {
switch([e pointingDeviceType]) {
case NSEraserPointingDevice:
darwinTabletCurrent=darwinTabletEraser;
break;
case NSPenPointingDevice:
darwinTabletCurrent=darwinTabletStylus;
break;
case NSCursorPointingDevice:
case NSUnknownPointingDevice:
default:
darwinTabletCurrent=darwinTabletCursor;
break;
}
DarwinSendProximityEvents([e isEnteringProximity]?ProximityIn:ProximityOut,
pointer_x, pointer_y);
}
DarwinSendPointerEvents(ev_type, ev_button, pointer_x, pointer_y, DarwinSendPointerEvents(ev_type, ev_button, pointer_x, pointer_y,
pressure, tilt_x, tilt_y); pressure, tilt_x, tilt_y);
break; break;
case NSTabletProximity: case NSTabletProximity:
if([e subtype] != NSTabletProximityEventSubtype) {
switch([e pointingDeviceType]) {
case NSEraserPointingDevice:
darwinTabletCurrent=darwinTabletEraser;
break;
case NSPenPointingDevice:
darwinTabletCurrent=darwinTabletStylus;
break;
case NSCursorPointingDevice:
case NSUnknownPointingDevice:
default:
darwinTabletCurrent=darwinTabletCursor;
break;
}
}
DarwinSendProximityEvents([e isEnteringProximity]?ProximityIn:ProximityOut, DarwinSendProximityEvents([e isEnteringProximity]?ProximityIn:ProximityOut,
pointer_x, pointer_y); pointer_x, pointer_y);
break; break;

View File

@ -121,9 +121,12 @@ int darwinAppKitModMask = 0; // Any of these bits
int windowItemModMask = NX_COMMANDMASK; int windowItemModMask = NX_COMMANDMASK;
// devices // devices
DeviceIntPtr darwinPointer = NULL;
DeviceIntPtr darwinTablet = NULL;
DeviceIntPtr darwinKeyboard = NULL; DeviceIntPtr darwinKeyboard = NULL;
DeviceIntPtr darwinPointer = NULL;
DeviceIntPtr darwinTabletCurrent = NULL;
DeviceIntPtr darwinTabletStylus = NULL;
DeviceIntPtr darwinTabletCursor = NULL;
DeviceIntPtr darwinTabletEraser = NULL;
// Common pixmap formats // Common pixmap formats
static PixmapFormatRec formats[] = { static PixmapFormatRec formats[] = {
@ -355,7 +358,8 @@ static int DarwinMouseProc(DeviceIntPtr pPointer, int what) {
GetMotionHistory, GetMotionHistory,
(PtrCtrlProcPtr)NoopDDA, (PtrCtrlProcPtr)NoopDDA,
GetMotionHistorySize(), 2); GetMotionHistorySize(), 2);
pPointer->name = strdup("Quartz Pointing Device"); InitAbsoluteClassDeviceStruct(pPointer);
pPointer->valuator->mode = Absolute; // Relative
break; break;
case DEVICE_ON: case DEVICE_ON:
pPointer->public.on = TRUE; pPointer->public.on = TRUE;
@ -382,10 +386,22 @@ static int DarwinTabletProc(DeviceIntPtr pPointer, int what) {
InitPointerDeviceStruct((DevicePtr)pPointer, map, 3, InitPointerDeviceStruct((DevicePtr)pPointer, map, 3,
GetMotionHistory, GetMotionHistory,
(PtrCtrlProcPtr)NoopDDA, (PtrCtrlProcPtr)NoopDDA,
GetMotionHistorySize(), 7); GetMotionHistorySize(), 5);
pPointer->valuator->mode = Absolute; // Relative
InitProximityClassDeviceStruct(pPointer); InitProximityClassDeviceStruct(pPointer);
// InitAbsoluteClassDeviceStruct(pPointer); InitAbsoluteClassDeviceStruct(pPointer);
pPointer->name = strdup("pen");
// InitValuatorAxisStruct(pPointer, 0, 0, 1440, 1, 0, 1);
// InitValuatorAxisStruct(pPointer, 1, 0, 900, 1, 0, 1);
InitValuatorAxisStruct(pPointer, 2, 0, 1023, 1, 0, 1);
InitValuatorAxisStruct(pPointer, 3, -64, 64, 1, 0, 1);
InitValuatorAxisStruct(pPointer, 4, -64, 64, 1, 0, 1);
// InitValuatorAxisStruct(pPointer, 2, 0, 240, 49999, 49999, 49999);
// InitValuatorAxisStruct(pPointer, 3, -64, 63, 128, 128, 128);
// InitValuatorAxisStruct(pPointer, 4, -64, 63, 128, 128, 128);
// InitValuatorAxisStruct(pPointer, 5, 0, 1023, 128, 128, 128);
// pPointer->use = IsXExtensionDevice;
break; break;
case DEVICE_ON: case DEVICE_ON:
pPointer->public.on = TRUE; pPointer->public.on = TRUE;
@ -409,7 +425,6 @@ static int DarwinKeybdProc( DeviceIntPtr pDev, int onoff )
switch ( onoff ) { switch ( onoff ) {
case DEVICE_INIT: case DEVICE_INIT:
DarwinKeyboardInit( pDev ); DarwinKeyboardInit( pDev );
pDev->name = strdup("Quartz Keyboard");
break; break;
case DEVICE_ON: case DEVICE_ON:
pDev->public.on = TRUE; pDev->public.on = TRUE;
@ -531,14 +546,27 @@ int DarwinParseModifierList(const char *constmodifiers, int separatelr)
*/ */
void InitInput( int argc, char **argv ) void InitInput( int argc, char **argv )
{ {
darwinPointer = AddInputDevice(DarwinMouseProc, TRUE);
RegisterPointerDevice( darwinPointer );
darwinTablet = AddInputDevice(DarwinTabletProc, TRUE);
RegisterPointerDevice( darwinTablet );
darwinKeyboard = AddInputDevice(DarwinKeybdProc, TRUE); darwinKeyboard = AddInputDevice(DarwinKeybdProc, TRUE);
RegisterKeyboardDevice( darwinKeyboard ); RegisterKeyboardDevice( darwinKeyboard );
darwinKeyboard->name = strdup("Quartz Keyboard");
darwinPointer = AddInputDevice(DarwinMouseProc, TRUE);
RegisterPointerDevice( darwinPointer );
darwinPointer->name = strdup("Quartz Pointing Device");
darwinTabletStylus = AddInputDevice(DarwinTabletProc, TRUE);
RegisterPointerDevice( darwinTabletStylus );
darwinTabletStylus->name = strdup("stylus");
darwinTabletCursor = AddInputDevice(DarwinTabletProc, TRUE);
RegisterPointerDevice( darwinTabletCursor );
darwinTabletCursor->name = strdup("cursor");
darwinTabletEraser = AddInputDevice(DarwinTabletProc, TRUE);
RegisterPointerDevice( darwinTabletEraser );
darwinTabletEraser->name = strdup("eraser");
darwinTabletCurrent = darwinTabletStylus;
DarwinEQInit(); DarwinEQInit();

View File

@ -71,7 +71,10 @@ extern io_connect_t darwinParamConnect;
extern int darwinEventReadFD; extern int darwinEventReadFD;
extern int darwinEventWriteFD; extern int darwinEventWriteFD;
extern DeviceIntPtr darwinPointer; extern DeviceIntPtr darwinPointer;
extern DeviceIntPtr darwinTablet; extern DeviceIntPtr darwinTabletCurrent;
extern DeviceIntPtr darwinTabletCursor;
extern DeviceIntPtr darwinTabletStylus;
extern DeviceIntPtr darwinTabletEraser;
extern DeviceIntPtr darwinKeyboard; extern DeviceIntPtr darwinKeyboard;
// User preferences // User preferences

View File

@ -70,7 +70,7 @@ in this Software without prior written authorization from The Open Group.
/* These values were chosen to match the output of xinput under Linux */ /* These values were chosen to match the output of xinput under Linux */
#define SCALEFACTOR_TILT 64.0 #define SCALEFACTOR_TILT 64.0
#define SCALEFACTOR_PRESSURE 1000.0 #define SCALEFACTOR_PRESSURE 1023.0
#define _APPLEWM_SERVER_ #define _APPLEWM_SERVER_
#include "applewmExt.h" #include "applewmExt.h"
@ -416,7 +416,7 @@ void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int poin
if (pressure == 0 && tilt_x == 0 && tilt_y == 0) if (pressure == 0 && tilt_x == 0 && tilt_y == 0)
dev = darwinPointer; dev = darwinPointer;
else else
dev = darwinTablet; dev = darwinTabletCurrent;
screen = miPointerGetScreen(dev); screen = miPointerGetScreen(dev);
if(!screen) { if(!screen) {
@ -459,7 +459,7 @@ void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int poin
DarwinPrepareValuators(valuators, screen, pointer_x, pointer_y, pressure, tilt_x, tilt_y); DarwinPrepareValuators(valuators, screen, pointer_x, pointer_y, pressure, tilt_x, tilt_y);
darwinEvents_lock(); { darwinEvents_lock(); {
num_events = GetPointerEvents(darwinEvents, dev, ev_type, ev_button, num_events = GetPointerEvents(darwinEvents, dev, ev_type, ev_button,
POINTER_ABSOLUTE, 0, dev==darwinTablet?5:2, valuators); POINTER_ABSOLUTE, 0, dev==darwinTabletCurrent?5:2, valuators);
for(i=0; i<num_events; i++) mieqEnqueue (dev, &darwinEvents[i]); for(i=0; i<num_events; i++) mieqEnqueue (dev, &darwinEvents[i]);
DarwinPokeEQ(); DarwinPokeEQ();
} darwinEvents_unlock(); } darwinEvents_unlock();
@ -496,7 +496,7 @@ void DarwinSendKeyboardEvents(int ev_type, int keycode) {
void DarwinSendProximityEvents(int ev_type, int pointer_x, int pointer_y) { void DarwinSendProximityEvents(int ev_type, int pointer_x, int pointer_y) {
int i, num_events; int i, num_events;
ScreenPtr screen; ScreenPtr screen;
DeviceIntPtr dev = darwinTablet; DeviceIntPtr dev = darwinTabletCurrent;
int valuators[5]; int valuators[5];
DEBUG_LOG("DarwinSendProximityEvents(%d, %d, %d)\n", ev_type, pointer_x, pointer_y); DEBUG_LOG("DarwinSendProximityEvents(%d, %d, %d)\n", ev_type, pointer_x, pointer_y);