Mercurial > MadButterfly
annotate src/shape_rect.c @ 48:bdf711cbf0fb
Use absolute time to dispatch animation actions.
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Sat, 09 Aug 2008 18:26:20 +0800 |
parents | e292beec12d4 |
children | 9ab15ebc9061 |
rev | line source |
---|---|
33
d82749f77108
Fix bug of demo and remove *_fill() and *_stroke().
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
1 #include <stdio.h> |
35
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
2 #include <stdlib.h> |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
3 #include <string.h> |
33
d82749f77108
Fix bug of demo and remove *_fill() and *_stroke().
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
4 #include "mb_types.h" |
d82749f77108
Fix bug of demo and remove *_fill() and *_stroke().
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
5 #include "shapes.h" |
d82749f77108
Fix bug of demo and remove *_fill() and *_stroke().
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
6 |
d82749f77108
Fix bug of demo and remove *_fill() and *_stroke().
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
7 typedef struct _sh_rect { |
d82749f77108
Fix bug of demo and remove *_fill() and *_stroke().
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
8 shape_t shape; |
d82749f77108
Fix bug of demo and remove *_fill() and *_stroke().
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
9 co_aix x, y; |
35
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
10 co_aix w, h; |
33
d82749f77108
Fix bug of demo and remove *_fill() and *_stroke().
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
11 co_aix rx, ry; |
35
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
12 co_aix poses[12][2]; |
33
d82749f77108
Fix bug of demo and remove *_fill() and *_stroke().
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
13 } sh_rect_t; |
d82749f77108
Fix bug of demo and remove *_fill() and *_stroke().
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
14 |
35
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
15 shape_t *sh_rect_new(co_aix x, co_aix y, co_aix w, co_aix h, |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
16 co_aix rx, co_aix ry) { |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
17 sh_rect_t *rect; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
18 |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
19 rect = (sh_rect_t *)malloc(sizeof(sh_rect_t)); |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
20 if(rect == NULL) |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
21 return NULL; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
22 |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
23 memset(rect, 0, sizeof(sh_rect_t)); |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
24 |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
25 rect->shape.sh_type = SHT_RECT; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
26 rect->x = x; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
27 rect->y = y; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
28 rect->w = w; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
29 rect->h = h; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
30 rect->rx = rx; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
31 rect->ry = ry; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
32 |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
33 return (shape_t *)rect; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
34 } |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
35 |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
36 void sh_rect_free(shape_t *shape) { |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
37 free(shape); |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
38 } |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
39 |
40 | 40 void sh_rect_set(shape_t *shape, co_aix x, co_aix y, |
41 co_aix w, co_aix h, co_aix rx, co_aix ry) { | |
42 sh_rect_t *rect = (sh_rect_t *)shape; | |
43 | |
44 rect->x = x; | |
45 rect->y = y; | |
46 rect->w = w; | |
47 rect->h = h; | |
48 rect->rx = rx; | |
49 rect->ry = ry; | |
50 } | |
51 | |
35
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
52 void sh_rect_transform(shape_t *shape) { |
34
07c523c799f4
Fix bug of relative path command
Thinker K.F. Li <thinker@branda.to>
parents:
33
diff
changeset
|
53 sh_rect_t *rect = (sh_rect_t *)shape; |
35
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
54 co_aix x, y, w, h, rx, ry; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
55 co_aix (*poses)[2]; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
56 co_aix width; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
57 area_t *area; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
58 int i; |
34
07c523c799f4
Fix bug of relative path command
Thinker K.F. Li <thinker@branda.to>
parents:
33
diff
changeset
|
59 |
35
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
60 x = rect->x; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
61 y = rect->y; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
62 w = rect->w; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
63 h = rect->h; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
64 rx = rect->rx; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
65 ry = rect->ry; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
66 |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
67 poses = rect->poses; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
68 |
36
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
69 if(rect->rx != 0 && rect->ry != 0) { |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
70 poses[0][0] = x + w - rx; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
71 poses[0][1] = y; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
72 poses[1][0] = x + w; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
73 poses[1][1] = y; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
74 poses[2][0] = x + w; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
75 poses[2][1] = y + ry; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
76 |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
77 poses[3][0] = x + w; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
78 poses[3][1] = y + h - ry; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
79 poses[4][0] = x + w; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
80 poses[4][1] = y + h; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
81 poses[5][0] = x + w - rx; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
82 poses[5][1] = y + h; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
83 |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
84 poses[6][0] = x + rx; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
85 poses[6][1] = y + h; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
86 poses[7][0] = x; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
87 poses[7][1] = y + h; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
88 poses[8][0] = x; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
89 poses[8][1] = y + h - ry; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
90 |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
91 poses[9][0] = x; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
92 poses[9][1] = y + ry; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
93 poses[10][0] = x; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
94 poses[10][1] = y; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
95 poses[11][0] = x + rx; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
96 poses[11][1] = y; |
35
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
97 |
36
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
98 for(i = 0; i < 12; i++) |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
99 coord_trans_pos(shape->coord, &poses[i][0], &poses[i][1]); |
35
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
100 |
36
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
101 geo_from_positions(shape->geo, 12, poses); |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
102 } else { |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
103 poses[0][0] = x; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
104 poses[0][1] = y; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
105 poses[1][0] = x + w; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
106 poses[1][1] = y; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
107 poses[2][0] = x + w; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
108 poses[2][1] = y + h; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
109 poses[3][0] = x; |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
110 poses[3][1] = y + h; |
35
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
111 |
36
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
112 for(i = 0; i < 4; i++) |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
113 coord_trans_pos(shape->coord, &poses[i][0], &poses[i][1]); |
35
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
114 |
36
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
115 geo_from_positions(shape->geo, 4, poses); |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
116 } |
35
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
117 |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
118 if(shape->stroke) { |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
119 area = shape->geo->cur_area; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
120 width = shape->stroke_width; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
121 area->x -= width / 2 + 1; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
122 area->y -= width / 2 + 1; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
123 area->w += width + 2; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
124 area->h += width + 2; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
125 } |
34
07c523c799f4
Fix bug of relative path command
Thinker K.F. Li <thinker@branda.to>
parents:
33
diff
changeset
|
126 } |
35
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
127 |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
128 void sh_rect_draw(shape_t *shape, cairo_t *cr) { |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
129 sh_rect_t *rect = (sh_rect_t *)shape; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
130 int i; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
131 co_aix (*poses)[2]; |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
132 |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
133 poses = rect->poses; |
36
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
134 if(rect->rx != 0 && rect->ry != 0) { |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
135 cairo_move_to(cr, poses[11][0], poses[11][1]); |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
136 for(i = 0; i < 12; i += 3) { |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
137 cairo_line_to(cr, poses[i][0], poses[i][1]); |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
138 cairo_curve_to(cr, |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
139 poses[i + 1][0], poses[i + 1][1], |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
140 poses[i + 1][0], poses[i + 1][1], |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
141 poses[i + 2][0], poses[i + 2][1]); |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
142 } |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
143 } else { |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
144 cairo_move_to(cr, poses[3][0], poses[3][1]); |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
145 for(i = 0; i < 4; i++) |
51a20f240ce3
short-cut for no-rounded rectangle
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
146 cairo_line_to(cr, poses[i][0], poses[i][1]); |
35
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
147 } |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
34
diff
changeset
|
148 } |