def _update_background(self, *_): #print "updating background" conn = self.connection rp = self._root_pixmap() if rp is not None: conn.core.CopyArea(rp, self.back_pixmap, self._gc, self.x, self.y, 0,0, self.width, self.height) self.set_source(self._back_cairo_c, self.bg, self.shading, self.height) cawc.cairo_set_line_width(self._back_cairo_c, 4) cawc.cairo_rectangle(self._back_cairo_c, 0, 0, self.width, self.height); cawc.cairo_fill(self._back_cairo_c) i = 0 r,g,b = self.rgb(self.border) cawc.cairo_set_line_width(self._back_cairo_c, 1.0) cawc.cairo_set_source_rgba(self._back_cairo_c, r, g, b, 1.0) while i < self.border_width: cawc.cairo_rectangle(self._back_cairo_c, i, i, self.width-2*i-1, self.height-2*i-1); cawc.cairo_stroke(self._back_cairo_c) i+=1
def set_source(self, cairo, color, shading, height): a = shading / 255. if isinstance(color, tuple) or isinstance(color, list): pattern = cawc.cairo_pattern_create_linear(0,0,0,height) step = float(height) / (len(color) - 1) cur = 0 for color in self.bg: r,g,b = self.rgb(color) cawc.cairo_pattern_add_color_stop_rgba(pattern, cur, r, g, b, a) cur += step cawc.cairo_set_source(cairo, pattern) cawc.cairo_pattern_destroy(pattern) else: r,g,b = self.rgb(color) cawc.cairo_set_source_rgba(cairo, r, g, b, a)