73 lines
2.3 KiB
Python
73 lines
2.3 KiB
Python
#
|
|
# Python GUI - DrawableViews - Gtk
|
|
#
|
|
|
|
import os, traceback
|
|
from math import floor, ceil
|
|
import gtk
|
|
from gtk import gdk
|
|
from GUI import export
|
|
from GUI import Canvas, Event, rgb
|
|
from GUI.StdColors import grey
|
|
from GUI.GDrawableContainers import DrawableContainer as GDrawableContainer
|
|
|
|
class DrawableContainer(GDrawableContainer):
|
|
|
|
_background_color = grey
|
|
|
|
def __init__(self, _gtk_outer = None, **kwds):
|
|
gtk_layout = gtk.Layout()
|
|
gtk_layout.add_events(gdk.EXPOSURE_MASK)
|
|
gtk_layout.show()
|
|
self._gtk_connect(gtk_layout, 'expose-event',
|
|
self._gtk_expose_event_signal)
|
|
if _gtk_outer:
|
|
_gtk_outer.add(gtk_layout)
|
|
else:
|
|
_gtk_outer = gtk_layout
|
|
GDrawableContainer.__init__(self, _gtk_outer = _gtk_outer, _gtk_inner = gtk_layout,
|
|
_gtk_focus = gtk_layout, _gtk_input = gtk_layout)
|
|
self.set(**kwds)
|
|
|
|
#
|
|
# Other methods
|
|
#
|
|
|
|
def with_canvas(self, proc):
|
|
hadj, vadj = self._gtk_adjustments()
|
|
clip = rect_sized((hadj.value, vadj.value), self.size)
|
|
canvas = Canvas._from_gdk_drawable(self._gtk_inner_widget.bin_window)
|
|
proc(canvas)
|
|
|
|
def invalidate_rect(self, (l, t, r, b)):
|
|
gdk_window = self._gtk_inner_widget.bin_window
|
|
if gdk_window:
|
|
gdk_rect = (int(floor(l)), int(floor(t)),
|
|
int(ceil(r - l)), int(ceil(b - t)))
|
|
#print "View.invalidate_rect: gdk_rect =", gdk_rect ###
|
|
gdk_window.invalidate_rect(gdk_rect, 0)
|
|
|
|
def update(self):
|
|
gdk_window = self._gtk_inner_widget.bin_window
|
|
gdk_window.process_updates()
|
|
|
|
#
|
|
# Internal
|
|
#
|
|
|
|
def _gtk_expose_event_signal(self, gtk_event):
|
|
try:
|
|
#print "View._gtk_expose_event_signal:", self ###
|
|
l, t, w, h = gtk_event.area
|
|
clip = (l, t, l + w, t + h)
|
|
#print "...clip =", clip ###
|
|
gtk_layout = self._gtk_inner_widget
|
|
canvas = Canvas._from_gdk_drawable(gtk_layout.bin_window)
|
|
update = self._draw_background(canvas, clip)
|
|
self.draw(canvas, update)
|
|
except:
|
|
print "------------------ Exception while drawing ------------------"
|
|
traceback.print_exc()
|
|
|
|
export(DrawableContainer)
|