81 lines
2.8 KiB
Python
81 lines
2.8 KiB
Python
#
|
|
# Python GUI - Pixmaps - Cocoa
|
|
#
|
|
|
|
from Foundation import NSSize
|
|
from AppKit import NSImage, NSCachedImageRep, NSBitmapImageRep, \
|
|
NSCalibratedRGBColorSpace, NSImageCacheNever, NSGraphicsContext, \
|
|
NSAffineTransform
|
|
from GUI import export
|
|
from GUI import Canvas
|
|
from GUI.GPixmaps import Pixmap as GPixmap
|
|
|
|
class Pixmap(GPixmap):
|
|
# _ns_bitmap_image_rep NSBitmapImageRep
|
|
|
|
def __init__(self, width, height):
|
|
GPixmap.__init__(self)
|
|
#ns_size = NSSize(width, height)
|
|
#ns_image = NSImage.alloc().initWithSize_(ns_size)
|
|
ns_image = NSImage.alloc().init()
|
|
ns_image.setCacheMode_(NSImageCacheNever)
|
|
row_bytes = 4 * width
|
|
ns_bitmap = NSBitmapImageRep.alloc().\
|
|
initWithBitmapDataPlanes_pixelsWide_pixelsHigh_bitsPerSample_samplesPerPixel_hasAlpha_isPlanar_colorSpaceName_bytesPerRow_bitsPerPixel_(
|
|
None, width, height, 8, 4, True, False, NSCalibratedRGBColorSpace, row_bytes, 32)
|
|
ns_image.addRepresentation_(ns_bitmap)
|
|
ns_bitmap_context = NSGraphicsContext.graphicsContextWithBitmapImageRep_(ns_bitmap)
|
|
ns_graphics_context = FlippedNSGraphicsContext.alloc().initWithBase_(ns_bitmap_context)
|
|
ns_tr = NSAffineTransform.transform()
|
|
ns_tr.translateXBy_yBy_(0.0, height)
|
|
ns_tr.scaleXBy_yBy_(1.0, -1.0)
|
|
# Using __class__ to get +saveGraphicsState instead of -saveGraphicsState
|
|
NSGraphicsContext.__class__.saveGraphicsState()
|
|
try:
|
|
NSGraphicsContext.setCurrentContext_(ns_graphics_context)
|
|
ns_tr.concat()
|
|
finally:
|
|
NSGraphicsContext.__class__.restoreGraphicsState()
|
|
self._init_with_ns_image(ns_image, flipped = True) #False)
|
|
self._ns_bitmap_image_rep = ns_bitmap
|
|
self._ns_graphics_context = ns_graphics_context
|
|
|
|
def with_canvas(self, proc):
|
|
NSGraphicsContext.__class__.saveGraphicsState()
|
|
NSGraphicsContext.setCurrentContext_(self._ns_graphics_context)
|
|
try:
|
|
canvas = Canvas()
|
|
proc(canvas)
|
|
finally:
|
|
NSGraphicsContext.__class__.restoreGraphicsState()
|
|
|
|
class FlippedNSGraphicsContext(NSGraphicsContext):
|
|
|
|
def initWithBase_(self, base):
|
|
self.base = base
|
|
self.graphics_port = base.graphicsPort()
|
|
return self
|
|
|
|
def isFlipped(self):
|
|
return True
|
|
|
|
def graphicsPort(self):
|
|
return self.graphics_port
|
|
|
|
def isDrawingToScreen(self):
|
|
return self.base.isDrawingToScreen()
|
|
|
|
def setCompositingOperation_(self, x):
|
|
self.base.setCompositingOperation_(x)
|
|
|
|
def focusStack(self):
|
|
return self.base.focusStack()
|
|
|
|
def saveGraphicsState(self):
|
|
return self.base.saveGraphicsState()
|
|
|
|
def restoreGraphicsState(self):
|
|
return self.base.restoreGraphicsState()
|
|
|
|
export(Pixmap)
|