Re: [Pyobjc-dev] Modify wrapper or loadBundleFunctions syntax
Brought to you by:
ronaldoussoren
From: Virgil D. <hs...@ha...> - 2010-04-12 18:39:55
|
On Mon, Apr 12, 2010 at 7:44 PM, Pepijn de Vos <pep...@gm...> wrote: > Hi, > It's me again. > How can I change the wrapper for a function like CGEventCreateMouseEvent > from Quartz? > It seems like my CGPoint uses floats instead of doubles, which is wrong for > 64 bit, like in Snow Leopard. > Another option is going back to using objc and importing the function > manually. > The problem is that I don't know the syntax for loadBundleFunctions. > I managed to get CGPostMouseEvent working with this: v{CGPoint=dd} (instead > of ff) > What would I need to do to import CGEventCreateMouseEvent? > Groeten, > Pepijn de Vos > -- > Sent from my iPod Shuffle > http://pepijndevos.nl > On Apr 4, 2010, at 6:23 PM, Ratko Jagodic wrote: > > Hi Pepijn, > Sorry, but I haven't seen this before. It seemed to work for me. If you feel > adventurous, you could try investigating yourself in the PyObjC source. The > file is _callbacks.m where the link between C/Python is for events. > Sorry I couldn't be of more help. Maybe others on this list could provide > more info. > Good luck. > Ratko > > > On Sun, Apr 4, 2010 at 11:02 AM, Pepijn de Vos <pep...@gm...> > wrote: >> >> Hi, >> As you can see in the code below the returned value of the mouse event has >> an insane value. >> When I generate a click or move event the mouse jumps to the very corner >> of the screen. >> <NSPoint x=13510801139695616.0 y=6.953222975623699e-310> >> Could it be that integer and float conversions between C and Python are >> messed up somewhere? >> I tried to use a tuple, a NSPoint and a CGPoint, which made no difference >> at all. >> Just creating a CGPoint object without the event works fine though. >> Groeten, >> Pepijn de Vos >> -- >> Sent from my iPod Shuffle >> http://pepijndevos.nl >> On Apr 4, 2010, at 5:54 PM, Ratko Jagodic wrote: >> >> I ran across the same problem back in September and there were a few bugs >> in the C code. I reported the bugs and they were fixed so I guess the >> Macports version includes those fixes. Don't know about the version numbers. >> CGEventTapCreate should take 6 parameters, as it does in carbon. >> >> What do you mean by "breaks the location"? >> "When I run Python26 and PyObjC from Macports the event system works fine, >> but making an event breaks the location." >> >> >> Ratko >> >> >> On Sun, Apr 4, 2010 at 10:27 AM, Pepijn de Vos <pep...@gm...> >> wrote: >>> >>> Hi all, >>> >>> I finally managed to get listening to events working, the code is at >>> http://github.com/pepijndevos/PyMouse/blob/master/mac.py#L30 >>> I don't know what made the difference, but after a lot of trying it >>> suddenly worked. >>> >>> Now I have another strange issue. >>> When I run the default Python and PyObjC version that came with Mac OS X >>> 10.6, Python segfaults while creating an event tap. >>> When I run Python26 and PyObjC from Macports the event system works fine, >>> but making an event breaks the location. >>> >>> Stock Python: >>> >>> >>> from Quartz import * >>> >>> def test(*args): >>> ... print args >>> ... >>> >>> tap = CGEventTapCreate( >>> ... kCGSessionEventTap, >>> ... kCGHeadInsertEventTap, >>> ... kCGEventTapOptionDefault, >>> ... CGEventMaskBit(kCGEventMouseMoved) | >>> ... CGEventMaskBit(kCGEventLeftMouseDown) | >>> ... CGEventMaskBit(kCGEventLeftMouseUp) | >>> ... CGEventMaskBit(kCGEventRightMouseDown) | >>> ... CGEventMaskBit(kCGEventRightMouseUp) | >>> ... CGEventMaskBit(kCGEventOtherMouseDown) | >>> ... CGEventMaskBit(kCGEventOtherMouseUp), >>> ... test) >>> Segmentation fault >>> >>> Macports Python: >>> >>> >>> from Quartz import * >>> >>> event = CGEventCreateMouseEvent(None, 3, CGPoint(200, 200), 1) >>> >>> CGEventGetLocation(event) >>> <NSPoint x=13510801139695616.0 y=6.953222975623699e-310> >>> >>> Also the stock version of CGEventTapCreate needs 5 parameters while the >>> Macports version needs 6. >>> >>> Macports version of PyObjC is 2.2 >>> Included version should be 2.2b3 according to a blog I found. >>> >>> Groeten, >>> Pepijn de Vos >>> -- >>> Sent from my iPod Shuffle >>> http://pepijndevos.nl >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> Download Intel® Parallel Studio Eval >>> Try the new software tools for yourself. Speed compiling, find bugs >>> proactively, and fine-tune applications for parallel performance. >>> See why Intel Parallel Studio got high marks during beta. >>> http://p.sf.net/sfu/intel-sw-dev >>> _______________________________________________ >>> Pyobjc-dev mailing list >>> Pyo...@li... >>> https://lists.sourceforge.net/lists/listinfo/pyobjc-dev >> >> > > > > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta. > http://p.sf.net/sfu/intel-sw-dev > _______________________________________________ > Pyobjc-dev mailing list > Pyo...@li... > https://lists.sourceforge.net/lists/listinfo/pyobjc-dev > > Maybe you can inspire yourself from the PyObjC.bridgeSupport file? The entry is: <function name='CGEventCreateMouseEvent'> <retval already_cfretained='true' type='^{__CGEvent=}' /> <arg type='^{__CGEventSource=}' /> <arg type='I' /> <arg type='{CGPoint=ff}' type64='{CGPoint=ff}' /> <arg type='I' /> </function> So maybe that your 64-bit signature would be "^{__CGEvent=}^{__CGEventSource=}I{CGPoint=dd}I" or something? -- Virgil Dupras |