1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 from iconview import IconView
24 from listview import ListView
25 from scrolled_window import ScrolledWindow
26 from utils import cairo_state, get_match_parent, get_window_shadow_size
27 from window import Window
28
29 -def draw_mask(widget, x, y, w, h, render_callback):
30 '''
31 Draw mask with given render method.
32
33 @param widget: Target widget.
34 @param x: X coordinate of draw area.
35 @param y: Y coordinate of draw area.
36 @param w: Width of draw area.
37 @param h: Height of draw area.
38 @param render_callback: Render callback.
39 '''
40 if isinstance(widget, Window):
41 draw_window_mask(widget, x, y, w, h, render_callback)
42 elif isinstance(widget, ScrolledWindow):
43 draw_scrolled_window_mask(widget, x, y, w, h, render_callback)
44 elif isinstance(widget, IconView):
45 draw_icon_view_mask(widget, x, y, w, h, render_callback)
46 elif isinstance(widget, ListView):
47 draw_list_view_mask(widget, x, y, w, h, render_callback)
48 else:
49 print "draw_mask: unsupport widget: %s" % (widget)
50
52 '''
53 Draw window mask with given render method.
54
55 @param widget: Target widget.
56 @param x: X coordinate of draw area.
57 @param y: Y coordinate of draw area.
58 @param w: Width of draw area.
59 @param h: Height of draw area.
60 @param render_callback: Render callback.
61 '''
62
63 cr = widget.window.cairo_create()
64
65 with cairo_state(cr):
66 cr.rectangle(x + 1, y, w - 2, 1)
67 cr.rectangle(x, y + 1, w, h - 2)
68 cr.rectangle(x + 1, y + h - 1, w - 2, 1)
69 cr.clip()
70
71 render_callback(cr, x, y, w, h)
72
99
101 '''
102 Draw icon view mask with given render method.
103
104 @param widget: Target widget.
105 @param x: X coordinate of draw area.
106 @param y: Y coordinate of draw area.
107 @param w: Width of draw area.
108 @param h: Height of draw area.
109 @param render_callback: Render callback.
110 '''
111 cr = widget.window.cairo_create()
112 viewport = get_match_parent(widget, ["Viewport"])
113 toplevel = widget.get_toplevel()
114 (offset_x, offset_y) = viewport.translate_coordinates(toplevel, 0, 0)
115 (shadow_x, shadow_y) = get_window_shadow_size(toplevel)
116
117 with cairo_state(cr):
118 cr.rectangle(x, y, w, h)
119 cr.clip()
120
121 render_callback(
122 cr,
123 x - offset_x + shadow_x,
124 y - offset_y + shadow_y,
125 toplevel.allocation.width,
126 toplevel.allocation.height)
127
129 '''
130 Draw list view mask with given render method.
131
132 @param widget: Target widget.
133 @param x: X coordinate of draw area.
134 @param y: Y coordinate of draw area.
135 @param w: Width of draw area.
136 @param h: Height of draw area.
137 @param render_callback: Render callback.
138 '''
139 cr = widget.window.cairo_create()
140 viewport = get_match_parent(widget, ["Viewport"])
141 toplevel = widget.get_toplevel()
142 (offset_x, offset_y) = viewport.translate_coordinates(toplevel, 0, 0)
143 (shadow_x, shadow_y) = get_window_shadow_size(toplevel)
144
145 with cairo_state(cr):
146 cr.rectangle(x, y, w, h)
147 cr.clip()
148
149 render_callback(
150 cr,
151 x - offset_x + shadow_x,
152 y - offset_y + shadow_y,
153 toplevel.allocation.width,
154 toplevel.allocation.height)
155