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

@ -923,12 +923,48 @@ static void send_nsevent(NSEvent *e) {
tilt_x = [e tilt].x;
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,
pressure, tilt_x, tilt_y);
break;
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,
pointer_x, pointer_y);
break;

View File

@ -121,9 +121,12 @@ int darwinAppKitModMask = 0; // Any of these bits
int windowItemModMask = NX_COMMANDMASK;
// devices
DeviceIntPtr darwinPointer = NULL;
DeviceIntPtr darwinTablet = NULL;
DeviceIntPtr darwinKeyboard = NULL;
DeviceIntPtr darwinPointer = NULL;
DeviceIntPtr darwinTabletCurrent = NULL;
DeviceIntPtr darwinTabletStylus = NULL;
DeviceIntPtr darwinTabletCursor = NULL;
DeviceIntPtr darwinTabletEraser = NULL;
// Common pixmap formats
static PixmapFormatRec formats[] = {
@ -355,7 +358,8 @@ static int DarwinMouseProc(DeviceIntPtr pPointer, int what) {
GetMotionHistory,
(PtrCtrlProcPtr)NoopDDA,
GetMotionHistorySize(), 2);
pPointer->name = strdup("Quartz Pointing Device");
InitAbsoluteClassDeviceStruct(pPointer);
pPointer->valuator->mode = Absolute; // Relative
break;
case DEVICE_ON:
pPointer->public.on = TRUE;
@ -382,10 +386,22 @@ static int DarwinTabletProc(DeviceIntPtr pPointer, int what) {
InitPointerDeviceStruct((DevicePtr)pPointer, map, 3,
GetMotionHistory,
(PtrCtrlProcPtr)NoopDDA,
GetMotionHistorySize(), 7);
GetMotionHistorySize(), 5);
pPointer->valuator->mode = Absolute; // Relative
InitProximityClassDeviceStruct(pPointer);
// InitAbsoluteClassDeviceStruct(pPointer);
pPointer->name = strdup("pen");
InitAbsoluteClassDeviceStruct(pPointer);
// 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;
case DEVICE_ON:
pPointer->public.on = TRUE;
@ -409,7 +425,6 @@ static int DarwinKeybdProc( DeviceIntPtr pDev, int onoff )
switch ( onoff ) {
case DEVICE_INIT:
DarwinKeyboardInit( pDev );
pDev->name = strdup("Quartz Keyboard");
break;
case DEVICE_ON:
pDev->public.on = TRUE;
@ -531,15 +546,28 @@ int DarwinParseModifierList(const char *constmodifiers, int separatelr)
*/
void InitInput( int argc, char **argv )
{
darwinPointer = AddInputDevice(DarwinMouseProc, TRUE);
RegisterPointerDevice( darwinPointer );
darwinTablet = AddInputDevice(DarwinTabletProc, TRUE);
RegisterPointerDevice( darwinTablet );
darwinKeyboard = AddInputDevice(DarwinKeybdProc, TRUE);
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();
QuartzInitInput(argc, argv);

View File

@ -71,7 +71,10 @@ extern io_connect_t darwinParamConnect;
extern int darwinEventReadFD;
extern int darwinEventWriteFD;
extern DeviceIntPtr darwinPointer;
extern DeviceIntPtr darwinTablet;
extern DeviceIntPtr darwinTabletCurrent;
extern DeviceIntPtr darwinTabletCursor;
extern DeviceIntPtr darwinTabletStylus;
extern DeviceIntPtr darwinTabletEraser;
extern DeviceIntPtr darwinKeyboard;
// 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 */
#define SCALEFACTOR_TILT 64.0
#define SCALEFACTOR_PRESSURE 1000.0
#define SCALEFACTOR_PRESSURE 1023.0
#define _APPLEWM_SERVER_
#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)
dev = darwinPointer;
else
dev = darwinTablet;
dev = darwinTabletCurrent;
screen = miPointerGetScreen(dev);
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);
darwinEvents_lock(); {
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]);
DarwinPokeEQ();
} darwinEvents_unlock();
@ -496,7 +496,7 @@ void DarwinSendKeyboardEvents(int ev_type, int keycode) {
void DarwinSendProximityEvents(int ev_type, int pointer_x, int pointer_y) {
int i, num_events;
ScreenPtr screen;
DeviceIntPtr dev = darwinTablet;
DeviceIntPtr dev = darwinTabletCurrent;
int valuators[5];
DEBUG_LOG("DarwinSendProximityEvents(%d, %d, %d)\n", ev_type, pointer_x, pointer_y);