XQuartz: Updated Tablet code to include ranges for valuators and added cursor and erasor
This commit is contained in:
parent
2f1e163d5d
commit
6bca787609
|
@ -905,12 +905,48 @@ extern int darwin_modifier_flags; // darwinEvents.c
|
|||
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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue
Block a user