Wonderful! This looks very promising. I'll adapt this into the other related mouse functions and let you know how I get on.
I figured out how to get subpixel values easily too, something like: loc = nsevent.mouseLocation() // loc.x / y is a float with subpixel data Thanks so much! On Wednesday, April 20, 2016 at 3:54:48 PM UTC-4, Phillip Nguyen wrote: > > After reading Apple’s docs a bit more closely, it looks like most of the > tablet events are automatically converted into corresponding mouse events. > So you will need to add some code to mouseDown_, mouseDragged_, and > mouseUp_ in pyglet_view to catch when this happens and then send out an > on_tablet_point event with the info you want. Here’s how I think I would > rewrite mouseDown_ for example: > > @PygletView.method(‘v@‘) > def mouseDown_(self, nsevent): > x, y = getMousePosition(self, nsevent) > buttons = mouse.LEFT > modifiers = getModifiers(nsevent) > # send out the mouse event as usual > self._window.dispatch_event(‘on_mouse_press’, x, y, buttons, > modifiers) > # then also check if this was a tablet event > if nsevent.subtype() == 1: # I think NSTabletPointEventSubtype is > defined as 1 based on very limited testing > pressure = nsevent.pressure() > tilt = nsevent.tilt() > self._window.dispatch_event(‘on_tablet_point’, x, y, buttons, > pressure, tilt.x, tilt.y, modifiers) > > Note that you can use getMousePosition even in the tabletPoint events. > Otherwise, I think the coordinates you get from absoluteX etc. are not > scaled to the window. > Also it might make more sense to define separate on_tablet_press, > on_tablet_release, on_tablet_drag events instead of sending everything out > as on_tablet_point. In which case the last line of the above code would be > changed to > > self._window.dispatch_event(‘on_tablet_press’, x, y, buttons, pressure, > tilt.x, tilt.y, modifiers) > > —phillip > > > On Apr 20, 2016, at 2:38 PM, future stack <[email protected] > <javascript:>> wrote: > > > > Okay, that got me a little further, many thanks! I've added the > following code to pyglet_view > > > > @PygletView.method('v@') > > def tabletProximity_(self, nsevent): > > > > capabilityMask = nsevent.capabilityMask() > > deviceID = nsevent.deviceID() > > # these are listed > https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSEvent_Class/#//apple_ref/doc/uid/20000016-SW32 > > > # but do not seem to work here > > #enteringProximity = nsevent.enteringProximity() > > pointingDeviceID = nsevent.pointingDeviceID() > > #pointDeviceSerialNumber = nsevent.pointDeviceSerialNumber() > > #pointDeviceType = nsevent.pointDeviceType() > > self._window.dispatch_event('on_tablet_proximity', > capabilityMask, deviceID, pointingDeviceID) > > > > @PygletView.method('v@') > > def tabletPoint_(self, nsevent): > > absoluteX = nsevent.absoluteX() > > absoluteY = nsevent.absoluteY() > > absoluteZ = nsevent.absoluteZ() > > buttonMask = nsevent.buttonMask() > > rotation = nsevent.rotation() > > pressure = nsevent.pressure() > > tangentialPressure = nsevent.tangentialPressure() > > tilt = nsevent.tilt() > > vendorDefined = nsevent.vendorDefined() > > self._window.dispatch_event('on_tablet_point', absoluteX, > absoluteY, absoluteZ, buttonMask, rotation, pressure, tangentialPressure, > tilt, vendorDefined) > > > > > > and this is printing sporadic info - is there another type that I'm > supposed to be looking for? I'm getting maybe 20% of my tablet presses, > which is not helpful as I'm developing a drawing application. > > Maybe it has something to do with event coalescing? > > > > I'm unable to get tablet proximity information out either... any further > tips or tricks would be greatly appreciated. Thanks again > > > > Andrew > > > > > > On Wednesday, April 20, 2016 at 2:40:07 PM UTC-4, Phillip Nguyen wrote: > > > > It’s been a really long time since I looked at this code, but I think > you would want to add something like the following method: > > > > @PygletView.method(‘v@‘) > > def tabletPoint_(self, nsevent): > > // insert code here to extract relevant info from nsevent > > self._window.dispatch_event(‘on_tablet_point’, x, y, buttons, > pressure, tilt, modifiers) > > > > to the existing code in pyglet/window/cocoa/pyglet_view.py. As there > currently is no on_tablet_point event in pyglet, you would be defining it. > > > > —phillip > > > > > > > > > On Apr 20, 2016, at 12:00 PM, future stack <[email protected]> > wrote: > > > > > > I feel like this topic might warrant adding something to the > documentation, since the current documentation is somewhat misleading. > > > > > > This page simply remarks that enumerating tablets is impossible on osx > but says nothing about an alternative approach > > > > https://pyglet.readthedocs.org/en/pyglet-1.2-maintenance/api/pyglet/input/pyglet.input.get_tablets.html > > > > > > > This page on "other devices" covers joysticks and an apple remote but > nothing about tablets: > > > > https://pyglet.readthedocs.org/en/pyglet-1.2-maintenance/programming_guide/input.html?highlight=devices > > > > > > > I can't tell if this is a failing on my part to understand something > basic, or what, but it's been somewhat frustrating digging around for a > simple example. This seems like a fairly common use case. > > > > > > Andrew > > > > > > On Wednesday, April 20, 2016 at 12:17:20 PM UTC-4, future stack wrote: > > > Pardon my ignorance, I've accessed this stuff via NSEvent in c++ but > am unsure how this would be done in a pyglet compatible way. I've tried > adding listeners to the window for the handlers defined in the tablet, and > I've tried enumerating and opening the devices directly with no luck. Am > I supposed to use pyobjc or NSpython? > > > > > > Cheers > > > > > > > > > On Wednesday, April 20, 2016 at 12:06:27 PM UTC-4, swiftcoder wrote: > > > I don't know what Pyglet's support for tablets is like at the moment, > but Wacom provides excellent documentation as to accessing tablet events on > Mac: > > > > > > http://www.wacomeng.com/mac/Developers%20Guide.htm > > > > > > At this point I don't honk any mucking around in Carbon or HID is > required. The standard Cocoa NSEvent object carries everything you need, > which should make it easy to expose to pyglet. > > > On Wed, Apr 20, 2016 at 9:00 AM, Tristam MacDonald <[email protected]> > wrote: > > > Aren't the > > > > > > On Wed, Apr 20, 2016 at 9:00 AM, Tristam MacDonald <[email protected]> > wrote: > > > > > > On Wed, Apr 20, 2016 at 7:57 AM, future stack <[email protected]> > wrote: > > > Hello - I'm curious what the state of tablet support is on osx and if > someone can provide me with an example of how to read pen pressure from a > stylus? > > > > > > I've attached my attempt from a few days ago, but I've been informed > that my approach is wrong. > > > > > > A friend linked me to this page: > > > > > > > https://github.com/jpaalasm/pyglet/blob/master/experimental/input/tablet-notes.txt#L37 > > > > > > > which says that events are subscribeable via carbon or HID, but I > can't find a working example of this anywhere. > > > > > > I also found this: > > > https://bitbucket.org/AnomalousUnderdog/pythonmactabletlib/downloads > > > > > > but this requires wxwidgets to work, which is apparently still 32 bit, > and downgrading my python to get this to work seems less than ideal. > > > > > > Am I barking up the wrong tree(s)? Any leads would be appreciated. > > > > > > Andrew > > > > > > > > > -- > > > You received this message because you are subscribed to the Google > Groups "pyglet-users" group. > > > To unsubscribe from this group and stop receiving emails from it, send > an email to [email protected]. > > > To post to this group, send email to [email protected]. > > > Visit this group at https://groups.google.com/group/pyglet-users. > > > For more options, visit https://groups.google.com/d/optout. > > > > > > -- > > > You received this message because you are subscribed to the Google > Groups "pyglet-users" group. > > > To unsubscribe from this group and stop receiving emails from it, send > an email to [email protected]. > > > To post to this group, send email to [email protected]. > > > Visit this group at https://groups.google.com/group/pyglet-users. > > > For more options, visit https://groups.google.com/d/optout. > > > > > > -- > > You received this message because you are subscribed to the Google > Groups "pyglet-users" group. > > To unsubscribe from this group and stop receiving emails from it, send > an email to [email protected] <javascript:>. > > To post to this group, send email to [email protected] > <javascript:>. > > Visit this group at https://groups.google.com/group/pyglet-users. > > For more options, visit https://groups.google.com/d/optout. > > -- You received this message because you are subscribed to the Google Groups "pyglet-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/pyglet-users. For more options, visit https://groups.google.com/d/optout.
