FYI, I'm trying a merge of evilphillip-cocoa-ctypes2 into pyglet. There are 16 files updated and three files with conflicts:
- pyglet/app/cocoa.py
- pyglet/image/codecs/quartz.py
- pyglet/window/cocoa/__init__.py
They don't look too bad but I think it would be better if someone more familiar with the code tried to fix it. Below are snippets to give you an idea of what we're up against.
================
pyglet/app/cocoa.py
================
class CocoaEventLoop(PlatformEventLoop):
def __init__(self):
super(CocoaEventLoop, self).__init__()
# Prepare the default application.
self.NSApp = NSApplication.sharedApplication()
# Create an autorelease pool for menu creation and finishLaunching
<<<<<<< local
pool = NSAutoreleasePool.alloc().init()
self._create_application_menu()
NSApp().setActivationPolicy_(0) # Mac OS X 10.6
NSApp().finishLaunching()
NSApp().activateIgnoringOtherApps_(True)
# Then get rid of the pool when we're done.
del pool
def _create_application_menu(self):
# Sets up a menu and installs a "quit" item so that we can use
# Command-Q to exit the application.
# See
http://cocoawithlove.com/2010/09/minimalist-cocoa-programming.html
# This could also be done much more easily with a NIB.
menubar = NSMenu.alloc().init()
appMenuItem = NSMenuItem.alloc().init()
menubar.addItem_(appMenuItem)
NSApp().setMainMenu_(menubar)
appMenu = NSMenu.alloc().init()
processName = NSProcessInfo.processInfo().processName()
hideItem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(
"Hide " + processName, "hide:", "h")
appMenu.addItem_(hideItem)
appMenu.addItem_(NSMenuItem.separatorItem())
quitItem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(
"Quit " + processName, "terminate:", "q")
appMenu.addItem_(quitItem)
appMenuItem.setSubmenu_(appMenu)
=======
self.pool = NSAutoreleasePool.alloc().init()
create_menu()
self.NSApp.setActivationPolicy_(NSApplicationActivationPolicyRegular)
self.NSApp.finishLaunching()
self.NSApp.activateIgnoringOtherApps_(True)
>>>>>>> other
=====================
pyglet/image/codecs/quartz.py
========================
class QuartzImageDecoder(ImageDecoder):
def get_file_extensions(self):
# Quartz can actually decode many more formats, but these are the most common.
return [ '.bmp', '.cur', '.gif', '.ico', '.jp2', '.jpg', '.jpeg',
'.pcx', '.png', '.tga', '.tif', '.tiff', '.xbm', '.xpm' ]
def get_animation_file_extensions(self):
return ['.gif']
def _get_pyglet_ImageData_from_source_at_index(self, sourceRef, index):
<<<<<<< local
imageRef = Quartz.CGImageSourceCreateImageAtIndex(sourceRef, index, None)
=======
imageRef = c_void_p(quartz.CGImageSourceCreateImageAtIndex(sourceRef, index, None))
>>>>>>> other
# Regardless of the internal format of the image (L, LA, RGB, RGBA, etc)
# we just automatically convert everything to an RGBA format.
format = 'RGBA'
<<<<<<< local
rgbColorSpace = Quartz.CGColorSpaceCreateDeviceRGB()
=======
rgbColorSpace = c_void_p(quartz.CGColorSpaceCreateDeviceRGB())
>>>>>>> other
bitsPerComponent = 8
<<<<<<< local
width = Quartz.CGImageGetWidth(imageRef)
height = Quartz.CGImageGetHeight(imageRef)
=======
width = quartz.CGImageGetWidth(imageRef)
height = quartz.CGImageGetHeight(imageRef)
>>>>>>> other
bytesPerRow = 4 * width
# Create a buffer to store the RGBA formatted data.
bufferSize = height * bytesPerRow
buffer = (c_byte * bufferSize)()
# Create a bitmap context for the RGBA formatted data.
<<<<<<< local
bitmap = Quartz.CGBitmapContextCreate(buffer,
width, height,
bitsPerComponent,
bytesPerRow,
rgbColorSpace,
Quartz.kCGImageAlphaPremultipliedLast)
=======
# Note that premultiplied alpha is required:
#
http://developer.apple.com/library/mac/#qa/qa1037/_index.html
bitmap = c_void_p(quartz.CGBitmapContextCreate(buffer,
width, height,
bitsPerComponent,
bytesPerRow,
rgbColorSpace,
kCGImageAlphaPremultipliedLast))
>>>>>>> other
# Write the image data into the bitmap.
<<<<<<< local
Quartz.CGContextDrawImage(bitmap, Quartz.CGRectMake(0,0,width, height), imageRef)
del bitmap, imageRef, rgbColorSpace
=======
quartz.CGContextDrawImage(bitmap, NSMakeRect(0,0,width,height), imageRef)
quartz.CGImageRelease(imageRef)
quartz.CGContextRelease(bitmap)
quartz.CGColorSpaceRelease(rgbColorSpace)
>>>>>>> other
pitch = bytesPerRow
return ImageData(width, height, format, buffer, -pitch)