#!/usr/bin/python2.6 # coding=utf-8 import os import sys import gtk import cairo import gobject #--------------------------------------------------------------------------------# class Canvas: def __init__(self): self.width = 480 # default canvas (screen) width self.height = 640 # default canvas (screen) height self.win = None self.i = 0 self.times = 1 self.bg = None self.buffers = {} def mk_iface(self): if not self.bg in self.buffers: self.buffers[self.bg] = self.generate_buffer(self.bg) buffer = self.canvas.window.cairo_create() buffer.set_source_surface(self.buffers[self.bg],0,0) buffer.paint() def generate_buffer(self, fn): image = cairo.ImageSurface.create_from_png(fn) buffer_surf = cairo.ImageSurface(cairo.FORMAT_ARGB32, self.width, self.height) buffer = cairo.Context(buffer_surf) buffer.set_source_surface(image, 0,0) buffer.paint() # Return buffer surface: return buffer_surf def regenerate_base(self): # Background: if self.bg == 'bg1.png': self.bg = 'bg2.png' else: self.bg = 'bg1.png' # Retrieve/generate background buffer image and paint it: self.mk_iface() self.i += 1 if self.i > self.times: sys.exit() return True def expose_win(self, drawing_area, event): nm = 'bg1.png' if not nm in self.buffers: self.buffers[nm] = self.generate_buffer(nm) ctx = drawing_area.window.cairo_create() ctx.set_source_surface(self.buffers[nm], 0, 0) ctx.paint() #--------------------------------------------------------------------------------# C = Canvas() # Main window: C.win = gtk.Window() C.win.set_default_size(C.width, C.height) # Drawing area: C.canvas = gtk.DrawingArea() C.win.add(C.canvas) C.canvas.connect('expose_event', C.expose_win) C.canvas.realize() C.regenerate_base() # Repeat drawing of bg: try: C.times = int(sys.argv[1]) except: C.times = 1 gobject.idle_add(C.regenerate_base) C.win.show_all() # Main loop: gtk.main()