def draw_hlinear(cr, x, y, w, h, color_infos, radius=0, left_to_right=True): ''' Draw linear area horticulturally. @param cr: Cairo context. @param x: X coordinate of draw area. @param y: Y coordinate of draw area. @param w: Width of draw area. @param h: Height of draw area. @param color_infos: A list of ColorInfo, ColorInfo format: (color_stop_position, (color_hex_value, color_alpha)) @param radius: Rectangle corner radious. @param left_to_right: Draw direction, default is from left to right, function will draw from right to left if set option as False. ''' with cairo_state(cr): # Translate x coordinate, otherwise x is too big for LinearGradient cause render bug. cr.translate(x, 0) if left_to_right: pat = cairo.LinearGradient(0, 0, w, 0) else: pat = cairo.LinearGradient(w, 0, 0, 0) for (pos, color_info) in color_infos: add_color_stop_rgba(pat, pos, color_info) cr.set_operator(cairo.OPERATOR_OVER) cr.set_source(pat) draw_round_rectangle(cr, 0, y, w, h, radius) cr.fill()
def draw_radial_round(cr, x, y, r, color_infos): '''Draw radial round.''' radial = cairo.RadialGradient(x, y, r, x, y, 0) for (pos, color_info) in color_infos: add_color_stop_rgba(radial, pos, color_info) cr.arc(x, y, r, 0, 2 * math.pi) cr.set_source(radial) cr.fill()
def draw_radial_round(cr, x, y, r, color_infos): ''' Draw radial round. @param cr: Cairo context. @param x: X coordinate of draw area. @param y: Y coordinate of draw area. @param r: Radious of radial round. @param color_infos: A list of ColorInfo, ColorInfo format: (color_stop_position, (color_hex_value, color_alpha)) ''' radial = cairo.RadialGradient(x, y, r, x, y, 0) for (pos, color_info) in color_infos: add_color_stop_rgba(radial, pos, color_info) cr.arc(x, y, r, 0, 2 * math.pi) cr.set_source(radial) cr.fill()
def draw_hlinear(cr, x, y, w, h, color_infos, radius=0, left_to_right=True): '''Draw linear rectangle.''' with cairo_state(cr): # Translate x coordinate, otherwise x is too big for LinearGradient cause render bug. cr.translate(x, 0) if left_to_right: pat = cairo.LinearGradient(0, 0, w, 0) else: pat = cairo.LinearGradient(w, 0, 0, 0) for (pos, color_info) in color_infos: add_color_stop_rgba(pat, pos, color_info) cr.set_operator(cairo.OPERATOR_OVER) cr.set_source(pat) draw_round_rectangle(cr, 0, y, w, h, radius) cr.fill()