[Xquartz-dev] Pen / tablet support and Xquartz
Jonathan Chetwynd
j.chetwynd at btinternet.com
Wed Apr 30 23:13:22 PDT 2008
Ben,
please comment these bugs:
https://bugs.launchpad.net/inkscape/+bug/224290
http://bugzilla.gnome.org/show_bug.cgi?id=152690
jon at joncruz.org should be in contact with you, also on irc
freenode.net/#inkscape
with some luck you may get a useful response
~:"
Jonathan Chetwynd
j.chetwynd at btinternet.com
http://www.iconomy.org/
+44 (0) 20 7978 1764
On 1 May 2008, at 06:31, Ben Byer wrote:
> I'm trying to add support for tablet events into Xquartz, the Mac OS
> DDX part of the X.org Xserver. I've had trouble finding any real
> documentation about this, so I've mostly been trying to read the gdk
> source to see what it's looking for, and looking at the events sent
> by the Wacom driver on Linux.
>
> I now have events coming in that look valid, but gsumi does still
> reports that I have "no input devices", and the Gimp doesn't
> recognize my taps with the pen on the tablet.
>
> Here's what xinput reports:
> $ xinput list
> "Virtual core keyboard" id=0 [XKeyboard]
> Num_keys is 248
> Min_keycode is 8
> Max_keycode is 255
> "Virtual core pointer" id=1 [XPointer]
> Num_buttons is 32
> Num_axes is 2
> Mode is Relative
> Motion_buffer is 256
> Axis 0 :
> Min_value is 0
> Max_value is -1
> Resolution is 0
> Axis 1 :
> Min_value is 0
> Max_value is -1
> Resolution is 0
> "Quartz Pointing Device" id=2 [XExtensionPointer]
> Num_buttons is 7
> Num_axes is 2
> Mode is Relative
> Motion_buffer is 256
> Axis 0 :
> Min_value is 0
> Max_value is -1
> Resolution is 0
>
> Axis 1 :
> Min_value is 0
> Max_value is -1
> Resolution is 0
> "pen" id=3 [XExtensionPointer]
> Num_buttons is 3
> Num_axes is 7
> Mode is Relative
> Motion_buffer is 256
> Axis 0 :
> Min_value is 0
> Max_value is -1
> Resolution is 0
> Axis 1 :
> Min_value is 0
> Max_value is -1
> Resolution is 0
> Axis 2 :
> Min_value is 0
> Max_value is -1
> Resolution is 0
> Axis 3 :
> Min_value is 0
> Max_value is -1
> Resolution is 0
> Axis 4 :
> Min_value is 0
> Max_value is -1
> Resolution is 0
> Axis 5 :
> Min_value is 0
> Max_value is -1
> Resolution is 0
> Axis 6 :
> Min_value is 0
> Max_value is -1
> Resolution is 0
> "Quartz Keyboard" id=4 [XExtensionKeyboard]
> Num_keys is 248
> Min_keycode is 8
> Max_keycode is 255
>
> $ xinput test 3
> [...]
> otion a[0]=535 a[1]=541 a[2]=137 a[3]=0 a[4]=0
> motion a[0]=534 a[1]=541 a[2]=90 a[3]=0 a[4]=0
> motion a[0]=534 a[1]=541 a[2]=74 a[3]=0 a[4]=0
> motion a[0]=533 a[1]=542 a[2]=58 a[3]=0 a[4]=0
> motion a[0]=524 a[1]=707 a[2]=337 a[3]=0 a[4]=0
> [...]
> motion a[0]=514 a[1]=535 a[2]=447 a[3]=0 a[4]=1
> motion a[0]=514 a[1]=535 a[2]=447 a[3]=0 a[4]=5
> motion a[0]=514 a[1]=535 a[2]=443 a[3]=0 a[4]=9
> motion a[0]=514 a[1]=535 a[2]=443 a[3]=0 a[4]=9
> motion a[0]=505 a[1]=535 a[2]=592 a[3]=8 a[4]=0
> motion a[0]=505 a[1]=535 a[2]=592 a[3]=9 a[4]=0
> [...]
>
> The code on the Quartz side is pretty simple:
>
> http://cgit.freedesktop.org/xorg/xserver/tree/hw/xquartz/darwinEvents.c#n363
> (but edited here for clarity)
>
> /* These values were chosen to match the output of xinput under
> Linux */
> #define SCALEFACTOR_TILT 64.0
> #define SCALEFACTOR_PRESSURE 1000.0
>
> void DarwinSendPointerEvents(int ev_type, int ev_button, int
> pointer_x, int pointer_y,
> float pressure, float tilt_x, float
> tilt_y) {
> int i, num_events;
> DeviceIntPtr dev;
>
> int valuators[5] = {pointer_x, pointer_y, pressure *
> SCALEFACTOR_PRESSURE,
> tilt_x * SCALEFACTOR_TILT, tilt_y *
> SCALEFACTOR_TILT};
>
> if (pressure == 0 && tilt_x == 0 && tilt_y == 0) dev =
> darwinPointer;
> else dev = darwinTablet;
>
> mieqEnqueue_lock(); {
> num_events = GetPointerEvents(darwinEvents, dev, ev_type,
> ev_button,
> POINTER_ABSOLUTE, 0,
> dev==darwinTablet?5:2, valuators);
> for(i=0; i<num_events; i++) mieqEnqueue (dev,&darwinEvents[i]);
> DarwinPokeEQ();
>
> } mieqEnqueue_unlock();
> }
>
> Elsewhere, the devices are set up like this:
>
> InitPointerDeviceStruct((DevicePtr)pPointer, map, 7,
> GetMotionHistory,
> (PtrCtrlProcPtr)NoopDDA,
> GetMotionHistorySize(), 2);
>
> pPointer->name = strdup("Quartz Pointing Device");
>
> InitPointerDeviceStruct((DevicePtr)pPointer, map, 3,
> GetMotionHistory,
> (PtrCtrlProcPtr)NoopDDA,
> GetMotionHistorySize(), 7);
> InitProximityClassDeviceStruct(pPointer);
> pPointer->name = strdup("pen");
>
>
> Can anyone give me some advice on what I need to do to get gtk to
> recognize my input devices?
> Thanks!
> Ben
>
> _______________________________________________
> Xquartz-dev mailing list
> Xquartz-dev at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo/xquartz-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/xquartz-dev/attachments/20080501/af7b5265/attachment.html
More information about the Xquartz-dev
mailing list