87 lines
2.7 KiB
Python
87 lines
2.7 KiB
Python
#
|
|
# Python GUI - DrawableContainers - PyObjC
|
|
#
|
|
|
|
from Foundation import NSMakeRect
|
|
from AppKit import NSView, NSScrollView, NSColor
|
|
from GUI import export
|
|
from GUI.Utils import PyGUI_Flipped_NSView
|
|
from GUI import Canvas
|
|
from GUI.Geometry import rect_to_ns_rect
|
|
from GUI.Utils import NSMultiClass, PyGUI_NS_ViewBase
|
|
from GUI.GDrawableContainers import default_size, \
|
|
DrawableContainer as GDrawableContainer
|
|
|
|
ns_gray = NSColor.grayColor()
|
|
|
|
class DrawableContainer(GDrawableContainer):
|
|
|
|
def __init__(self, **kwds):
|
|
width, height = default_size
|
|
ns_frame = NSMakeRect(0, 0, width, height)
|
|
ns_inner_view = PyGUI_User_NSView.alloc().initWithFrame_(ns_frame)
|
|
if self._ns_scrollable:
|
|
ns_view = NSScrollView.alloc().initWithFrame_(ns_frame)
|
|
ns_view.setDocumentView_(ns_inner_view)
|
|
ns_view.setBackgroundColor_(ns_gray)
|
|
else:
|
|
ns_view = ns_inner_view
|
|
ns_inner_view.pygui_component = self
|
|
GDrawableContainer.__init__(self, _ns_view = ns_view, _ns_inner_view = ns_inner_view)
|
|
self.set(**kwds)
|
|
|
|
def destroy(self):
|
|
#print "View.destroy:", self ###
|
|
ns_inner_view = self._ns_inner_view
|
|
GDrawableContainer.destroy(self)
|
|
if ns_inner_view:
|
|
#print "View.destroy: breaking back link from", ns_inner_view ###
|
|
ns_inner_view.pygui_component = None
|
|
|
|
def get_background_color(self):
|
|
ns_view = self._ns_inner_view
|
|
if ns_view.drawsBackground():
|
|
return Color._from_ns_color(ns_view.backgroundColor())
|
|
|
|
def set_background_color(self, x):
|
|
ns_view = self._ns_inner_view
|
|
if x:
|
|
ns_view.setBackgroundColor_(x._ns_color)
|
|
ns_view.setDrawsBackground_(True)
|
|
else:
|
|
ns_view.setDrawsBackground_(False)
|
|
|
|
def invalidate(self):
|
|
self._ns_inner_view.setNeedsDisplay_(True)
|
|
|
|
def invalidate_rect(self, r):
|
|
self._ns_inner_view.setNeedsDisplayInRect_(rect_to_ns_rect(r))
|
|
|
|
def with_canvas(self, proc):
|
|
ns_view = self._ns_view
|
|
ns_view.lockFocus()
|
|
proc(Canvas())
|
|
ns_view.unlockFocus()
|
|
|
|
def update(self):
|
|
self._ns_view.displayIfNeeded()
|
|
|
|
def track_mouse(self):
|
|
return self._ns_track_mouse(self._ns_inner_view)
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
class PyGUI_User_NSView(PyGUI_Flipped_NSView, PyGUI_NS_ViewBase):
|
|
#
|
|
# pygui_component View
|
|
|
|
__metaclass__ = NSMultiClass
|
|
__slots__ = ['pygui_component']
|
|
|
|
def drawRect_(self, ns_rect):
|
|
(l, t), (w, h) = ns_rect
|
|
rect = (l, t, l + w, t + h)
|
|
self.pygui_component.draw(Canvas(), rect)
|
|
|
|
export(DrawableContainer)
|