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.

Reply via email to