Mercurial > MadButterfly
annotate src/X_main.c @ 53:ffed18510d55
Use animate feacilities to demo all animation.
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Sun, 10 Aug 2008 00:12:18 +0800 |
parents | 59a295651480 |
children | 1b6dbafdf906 |
rev | line source |
---|---|
3
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
1 #include <stdio.h> |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
2 #include <unistd.h> |
39 | 3 #include <sys/time.h> |
4 #include <sys/select.h> | |
3
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
5 #include <X11/Xlib.h> |
6
772511b8b9be
Cairo specify RGB values in range 0.0 ~ 1.0.
Thinker K.F. Li <thinker@branda.to>
parents:
5
diff
changeset
|
6 #include <X11/Xutil.h> |
3
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
7 #include <cairo.h> |
10 | 8 #include <cairo-xlib.h> |
3
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
9 |
5
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
3
diff
changeset
|
10 #include <string.h> |
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
3
diff
changeset
|
11 #include "shapes.h" |
12 | 12 #include "redraw_man.h" |
18
0f3baa488a62
Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents:
16
diff
changeset
|
13 #include "paint.h" |
39 | 14 #include "mb_timer.h" |
42 | 15 #include "animate.h" |
39 | 16 |
17 #define OK 0 | |
18 #define ERR -1 | |
5
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
3
diff
changeset
|
19 |
16
e17e12b112c4
A simple animation using rdman_redraw_changed().
Thinker K.F. Li <thinker@branda.to>
parents:
15
diff
changeset
|
20 Display *display; |
30
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
21 Window win; |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
22 |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
23 void hint_shape(redraw_man_t *rdman, shape_t *shape) { |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
24 static shape_t *last_shape = NULL; |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
25 if(last_shape != shape) { |
33
d82749f77108
Fix bug of demo and remove *_fill() and *_stroke().
Thinker K.F. Li <thinker@branda.to>
parents:
32
diff
changeset
|
26 if(last_shape != NULL && last_shape->stroke != NULL) { |
30
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
27 last_shape->stroke_width -= 2; |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
28 rdman_shape_changed(rdman, last_shape); |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
29 } |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
30 if(shape != NULL && shape->stroke != NULL) { |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
31 shape->stroke_width += 2; |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
32 rdman_shape_changed(rdman, shape); |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
33 } |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
34 } |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
35 last_shape = shape; |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
36 } |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
37 |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
38 void event_interaction(Display *display, |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
39 redraw_man_t *rdman, int w, int h) { |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
40 XEvent evt; |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
41 XMotionEvent *mevt; |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
42 int r; |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
43 co_aix x, y; |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
44 shape_t *shape = NULL; |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
45 int in_stroke; |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
46 |
39 | 47 while(XEventsQueued(display, QueuedAfterReading) > 0) { |
48 r = XNextEvent(display, &evt); | |
49 if(r == -1) | |
50 break; | |
51 | |
30
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
52 switch(evt.type) { |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
53 case MotionNotify: |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
54 mevt = (XMotionEvent *)&evt; |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
55 x = mevt->x; |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
56 y = mevt->y; |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
57 shape = find_shape_at_pos(rdman, x, y, &in_stroke); |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
58 hint_shape(rdman, shape); |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
59 break; |
37 | 60 case Expose: |
61 rdman_redraw_all(rdman); | |
62 /* rdman_redraw_area(rdman, evt.xexpose.x, evt.xexpose.y, | |
63 evt.xexpose.width, evt.xexpose.height); */ | |
64 break; | |
30
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
65 } |
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
66 } |
53
ffed18510d55
Use animate feacilities to demo all animation.
Thinker K.F. Li <thinker@branda.to>
parents:
52
diff
changeset
|
67 rdman_redraw_changed(rdman); |
39 | 68 XFlush(display); |
69 } | |
70 | |
71 void handle_connection(Display *display, mb_tman_t *tman, | |
72 redraw_man_t *rdman, int w, int h) { | |
73 int xcon; | |
74 fd_set rds; | |
75 int nfds; | |
76 struct timeval tmo; | |
53
ffed18510d55
Use animate feacilities to demo all animation.
Thinker K.F. Li <thinker@branda.to>
parents:
52
diff
changeset
|
77 mb_timeval_t mb_tmo, next_mb_tmo; |
49
6a3726fa7aad
Reduce times of invoking gettimeofday()
Thinker K.F. Li <thinker@branda.to>
parents:
48
diff
changeset
|
78 int r, r1; |
39 | 79 |
80 XSelectInput(display, win, PointerMotionMask | ExposureMask); | |
81 XFlush(display); | |
82 | |
83 xcon = XConnectionNumber(display); | |
84 nfds = xcon + 1; | |
49
6a3726fa7aad
Reduce times of invoking gettimeofday()
Thinker K.F. Li <thinker@branda.to>
parents:
48
diff
changeset
|
85 |
6a3726fa7aad
Reduce times of invoking gettimeofday()
Thinker K.F. Li <thinker@branda.to>
parents:
48
diff
changeset
|
86 r = gettimeofday(&tmo, NULL); |
6a3726fa7aad
Reduce times of invoking gettimeofday()
Thinker K.F. Li <thinker@branda.to>
parents:
48
diff
changeset
|
87 if(r == -1) { |
6a3726fa7aad
Reduce times of invoking gettimeofday()
Thinker K.F. Li <thinker@branda.to>
parents:
48
diff
changeset
|
88 perror("gettimeofday"); |
6a3726fa7aad
Reduce times of invoking gettimeofday()
Thinker K.F. Li <thinker@branda.to>
parents:
48
diff
changeset
|
89 return; |
6a3726fa7aad
Reduce times of invoking gettimeofday()
Thinker K.F. Li <thinker@branda.to>
parents:
48
diff
changeset
|
90 } |
6a3726fa7aad
Reduce times of invoking gettimeofday()
Thinker K.F. Li <thinker@branda.to>
parents:
48
diff
changeset
|
91 MB_TIMEVAL_SET(&mb_tmo, tmo.tv_sec, tmo.tv_usec); |
6a3726fa7aad
Reduce times of invoking gettimeofday()
Thinker K.F. Li <thinker@branda.to>
parents:
48
diff
changeset
|
92 |
39 | 93 while(1) { |
94 FD_ZERO(&rds); | |
95 FD_SET(xcon, &rds); | |
96 | |
53
ffed18510d55
Use animate feacilities to demo all animation.
Thinker K.F. Li <thinker@branda.to>
parents:
52
diff
changeset
|
97 r = mb_tman_next_timeout(tman, &mb_tmo, &next_mb_tmo); |
39 | 98 if(r != OK) |
99 r = select(nfds, &rds, NULL, NULL, NULL); | |
41 | 100 else { |
53
ffed18510d55
Use animate feacilities to demo all animation.
Thinker K.F. Li <thinker@branda.to>
parents:
52
diff
changeset
|
101 tmo.tv_sec = MB_TIMEVAL_SEC(&next_mb_tmo); |
ffed18510d55
Use animate feacilities to demo all animation.
Thinker K.F. Li <thinker@branda.to>
parents:
52
diff
changeset
|
102 tmo.tv_usec = MB_TIMEVAL_USEC(&next_mb_tmo); |
39 | 103 r = select(nfds, &rds, NULL, NULL, &tmo); |
41 | 104 } |
39 | 105 |
106 if(r == -1) { | |
107 perror("select"); | |
108 return; | |
109 } | |
49
6a3726fa7aad
Reduce times of invoking gettimeofday()
Thinker K.F. Li <thinker@branda.to>
parents:
48
diff
changeset
|
110 |
53
ffed18510d55
Use animate feacilities to demo all animation.
Thinker K.F. Li <thinker@branda.to>
parents:
52
diff
changeset
|
111 MB_TIMEVAL_ADD(&mb_tmo, &next_mb_tmo); |
49
6a3726fa7aad
Reduce times of invoking gettimeofday()
Thinker K.F. Li <thinker@branda.to>
parents:
48
diff
changeset
|
112 |
39 | 113 if(r == 0) { |
41 | 114 mb_tman_handle_timeout(tman, &mb_tmo); |
42 | 115 rdman_redraw_changed(rdman); |
39 | 116 XFlush(display); |
117 } else if(FD_ISSET(xcon, &rds)) { | |
118 event_interaction(display, rdman, w, h); | |
119 } | |
120 } | |
30
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
121 } |
16
e17e12b112c4
A simple animation using rdman_redraw_changed().
Thinker K.F. Li <thinker@branda.to>
parents:
15
diff
changeset
|
122 |
5
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
3
diff
changeset
|
123 void draw_path(cairo_t *cr, int w, int h) { |
24
e598bc809c0f
No more flash when animation.
Thinker K.F. Li <thinker@branda.to>
parents:
23
diff
changeset
|
124 cairo_t *tmpcr; |
e598bc809c0f
No more flash when animation.
Thinker K.F. Li <thinker@branda.to>
parents:
23
diff
changeset
|
125 cairo_surface_t *tmpsuf; |
12 | 126 redraw_man_t rdman; |
35
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
33
diff
changeset
|
127 shape_t *path1, *path2, *rect; |
27 | 128 coord_t *coord1, *coord2, *coord3; |
23
56f592f56ff7
Fix bug and add linear gradient paint.
Thinker K.F. Li <thinker@branda.to>
parents:
22
diff
changeset
|
129 paint_t *fill1, *fill2, *fill3; |
27 | 130 paint_t *stroke, *text_stroke; |
131 shape_t *text; | |
23
56f592f56ff7
Fix bug and add linear gradient paint.
Thinker K.F. Li <thinker@branda.to>
parents:
22
diff
changeset
|
132 grad_stop_t fill3_stops[3]; |
27 | 133 cairo_font_face_t *face; |
39 | 134 struct timeval tv; |
135 mb_tman_t *tman; | |
42 | 136 mb_timeval_t mbtv, start, playing; |
137 mb_progm_t *progm; | |
138 mb_word_t *word; | |
139 mb_action_t *act; | |
12 | 140 |
24
e598bc809c0f
No more flash when animation.
Thinker K.F. Li <thinker@branda.to>
parents:
23
diff
changeset
|
141 tmpsuf = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, w, h); |
e598bc809c0f
No more flash when animation.
Thinker K.F. Li <thinker@branda.to>
parents:
23
diff
changeset
|
142 tmpcr = cairo_create(tmpsuf); |
27 | 143 |
24
e598bc809c0f
No more flash when animation.
Thinker K.F. Li <thinker@branda.to>
parents:
23
diff
changeset
|
144 cairo_set_source_surface(cr, tmpsuf, 0, 0); |
e598bc809c0f
No more flash when animation.
Thinker K.F. Li <thinker@branda.to>
parents:
23
diff
changeset
|
145 redraw_man_init(&rdman, tmpcr, cr); |
19 | 146 coord1 = rdman_coord_new(&rdman, rdman.root_coord); |
147 coord2 = rdman_coord_new(&rdman, rdman.root_coord); | |
27 | 148 coord3 = rdman_coord_new(&rdman, rdman.root_coord); |
5
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
3
diff
changeset
|
149 |
21 | 150 fill1 = paint_color_new(&rdman, 1, 1, 0, 0.5); |
151 fill2 = paint_color_new(&rdman, 0, 1, 1, 0.5); | |
22 | 152 stroke = paint_color_new(&rdman, 0.4, 0.4, 0.4, 1); |
27 | 153 text_stroke = paint_color_new(&rdman, 0.5, 0.5, 0.5, 1); |
154 | |
155 face = cairo_get_font_face(tmpcr); | |
156 text = sh_text_new("hello \xe6\xbc\xa2\xe5\xad\x97", 10, h / 4, | |
157 36.0, face); | |
158 rdman_paint_stroke(&rdman, text_stroke, text); | |
159 text->stroke_width = 0.5; | |
53
ffed18510d55
Use animate feacilities to demo all animation.
Thinker K.F. Li <thinker@branda.to>
parents:
52
diff
changeset
|
160 rdman_paint_fill(&rdman, fill1, text); |
27 | 161 rdman_add_shape(&rdman, text, coord3); |
162 | |
19 | 163 path1 = sh_path_new("M 22,89.36218 C -34,-0.63782 39,-9.637817 82,12.36218 C 125,34.36218 142,136.36218 142,136.36218 C 100.66667,125.36218 74.26756,123.42795 22,89.36218 z "); |
164 rdman_paint_fill(&rdman, fill1, path1); | |
22 | 165 rdman_paint_stroke(&rdman, stroke, path1); |
19 | 166 coord1->matrix[0] = 0.8; |
167 coord1->matrix[1] = 0; | |
168 coord1->matrix[2] = 20; | |
169 coord1->matrix[4] = 0.8; | |
170 coord1->matrix[5] = 20; | |
27 | 171 |
19 | 172 path2 = sh_path_new("M 22,89.36218 C -34,-0.63782 39,-9.637817 82,12.36218 C 125,34.36218 142,136.36218 142,136.36218 C 100.66667,125.36218 74.26756,123.42795 22,89.36218 z "); |
173 rdman_paint_fill(&rdman, fill2, path2); | |
22 | 174 rdman_paint_stroke(&rdman, stroke, path2); |
19 | 175 coord2->matrix[0] = -0.8; |
176 coord2->matrix[1] = 0; | |
20
74d3d5dc9aaa
rename XXX_draw() to XXX_fill()
Thinker K.F. Li <thinker@branda.to>
parents:
19
diff
changeset
|
177 coord2->matrix[2] = 180; |
19 | 178 coord2->matrix[4] = 0.8; |
179 coord2->matrix[5] = 20; | |
27 | 180 |
19 | 181 rdman_coord_changed(&rdman, coord1); |
182 rdman_coord_changed(&rdman, coord2); | |
183 rdman_add_shape(&rdman, (shape_t *)path1, coord1); | |
184 rdman_add_shape(&rdman, (shape_t *)path2, coord2); | |
15
c2ce186a5c37
X_main uses rdman_redraw_all()
Thinker K.F. Li <thinker@branda.to>
parents:
13
diff
changeset
|
185 |
23
56f592f56ff7
Fix bug and add linear gradient paint.
Thinker K.F. Li <thinker@branda.to>
parents:
22
diff
changeset
|
186 |
56f592f56ff7
Fix bug and add linear gradient paint.
Thinker K.F. Li <thinker@branda.to>
parents:
22
diff
changeset
|
187 fill3 = paint_linear_new(&rdman, 50, 50, 150, 150); |
56f592f56ff7
Fix bug and add linear gradient paint.
Thinker K.F. Li <thinker@branda.to>
parents:
22
diff
changeset
|
188 grad_stop_init(fill3_stops, 0, 1, 0, 0, 0.5); |
56f592f56ff7
Fix bug and add linear gradient paint.
Thinker K.F. Li <thinker@branda.to>
parents:
22
diff
changeset
|
189 grad_stop_init(fill3_stops + 1, 0.5, 0, 1, 0, 0.5); |
56f592f56ff7
Fix bug and add linear gradient paint.
Thinker K.F. Li <thinker@branda.to>
parents:
22
diff
changeset
|
190 grad_stop_init(fill3_stops + 2, 1, 0, 0, 1, 0.5); |
56f592f56ff7
Fix bug and add linear gradient paint.
Thinker K.F. Li <thinker@branda.to>
parents:
22
diff
changeset
|
191 paint_linear_stops(fill3, 3, fill3_stops); |
35
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
33
diff
changeset
|
192 rect = sh_rect_new(50, 50, 100, 100, 20, 20); |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
33
diff
changeset
|
193 rdman_paint_fill(&rdman, fill3, rect); |
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
33
diff
changeset
|
194 rdman_add_shape(&rdman, (shape_t *)rect, rdman.root_coord); |
23
56f592f56ff7
Fix bug and add linear gradient paint.
Thinker K.F. Li <thinker@branda.to>
parents:
22
diff
changeset
|
195 |
15
c2ce186a5c37
X_main uses rdman_redraw_all()
Thinker K.F. Li <thinker@branda.to>
parents:
13
diff
changeset
|
196 rdman_redraw_all(&rdman); |
c2ce186a5c37
X_main uses rdman_redraw_all()
Thinker K.F. Li <thinker@branda.to>
parents:
13
diff
changeset
|
197 |
16
e17e12b112c4
A simple animation using rdman_redraw_changed().
Thinker K.F. Li <thinker@branda.to>
parents:
15
diff
changeset
|
198 XFlush(display); |
e17e12b112c4
A simple animation using rdman_redraw_changed().
Thinker K.F. Li <thinker@branda.to>
parents:
15
diff
changeset
|
199 |
39 | 200 tman = mb_tman_new(); |
201 if(tman) { | |
53
ffed18510d55
Use animate feacilities to demo all animation.
Thinker K.F. Li <thinker@branda.to>
parents:
52
diff
changeset
|
202 progm = mb_progm_new(10, &rdman); |
42 | 203 |
53
ffed18510d55
Use animate feacilities to demo all animation.
Thinker K.F. Li <thinker@branda.to>
parents:
52
diff
changeset
|
204 MB_TIMEVAL_SET(&start, 0, 0); |
ffed18510d55
Use animate feacilities to demo all animation.
Thinker K.F. Li <thinker@branda.to>
parents:
52
diff
changeset
|
205 MB_TIMEVAL_SET(&playing, 1, 0); |
ffed18510d55
Use animate feacilities to demo all animation.
Thinker K.F. Li <thinker@branda.to>
parents:
52
diff
changeset
|
206 word = mb_progm_next_word(progm, &start, &playing); |
ffed18510d55
Use animate feacilities to demo all animation.
Thinker K.F. Li <thinker@branda.to>
parents:
52
diff
changeset
|
207 |
ffed18510d55
Use animate feacilities to demo all animation.
Thinker K.F. Li <thinker@branda.to>
parents:
52
diff
changeset
|
208 act = mb_shift_new(50, 50, coord1, word); |
ffed18510d55
Use animate feacilities to demo all animation.
Thinker K.F. Li <thinker@branda.to>
parents:
52
diff
changeset
|
209 act = mb_shift_new(-50, 50, coord2, word); |
ffed18510d55
Use animate feacilities to demo all animation.
Thinker K.F. Li <thinker@branda.to>
parents:
52
diff
changeset
|
210 |
42 | 211 MB_TIMEVAL_SET(&start, 1, 0); |
212 MB_TIMEVAL_SET(&playing, 2, 0); | |
213 word = mb_progm_next_word(progm, &start, &playing); | |
53
ffed18510d55
Use animate feacilities to demo all animation.
Thinker K.F. Li <thinker@branda.to>
parents:
52
diff
changeset
|
214 |
47
f3818d996f4f
change interface of creating a animation action
Thinker K.F. Li <thinker@branda.to>
parents:
44
diff
changeset
|
215 act = mb_shift_new(0, 20, coord1, word); |
48
bdf711cbf0fb
Use absolute time to dispatch animation actions.
Thinker K.F. Li <thinker@branda.to>
parents:
47
diff
changeset
|
216 act = mb_shift_new(0, -20, coord2, word); |
44
7d9af44f095b
Demo of concurrent words
Thinker K.F. Li <thinker@branda.to>
parents:
42
diff
changeset
|
217 |
7d9af44f095b
Demo of concurrent words
Thinker K.F. Li <thinker@branda.to>
parents:
42
diff
changeset
|
218 MB_TIMEVAL_SET(&start, 3, 0); |
7d9af44f095b
Demo of concurrent words
Thinker K.F. Li <thinker@branda.to>
parents:
42
diff
changeset
|
219 MB_TIMEVAL_SET(&playing, 2, 0); |
42 | 220 word = mb_progm_next_word(progm, &start, &playing); |
53
ffed18510d55
Use animate feacilities to demo all animation.
Thinker K.F. Li <thinker@branda.to>
parents:
52
diff
changeset
|
221 |
47
f3818d996f4f
change interface of creating a animation action
Thinker K.F. Li <thinker@branda.to>
parents:
44
diff
changeset
|
222 act = mb_shift_new(0, -20, coord1, word); |
48
bdf711cbf0fb
Use absolute time to dispatch animation actions.
Thinker K.F. Li <thinker@branda.to>
parents:
47
diff
changeset
|
223 act = mb_shift_new(0, 20, coord2, word); |
52
59a295651480
Add action mb_chgcolor_t to change color of paints.
Thinker K.F. Li <thinker@branda.to>
parents:
49
diff
changeset
|
224 act = mb_chgcolor_new(0, 0, 1, 0.5, fill1, word); |
59a295651480
Add action mb_chgcolor_t to change color of paints.
Thinker K.F. Li <thinker@branda.to>
parents:
49
diff
changeset
|
225 act = mb_chgcolor_new(1, 0, 0, 0.5, fill2, word); |
42 | 226 |
227 gettimeofday(&tv, NULL); | |
228 MB_TIMEVAL_SET(&mbtv, tv.tv_sec, tv.tv_usec); | |
229 mb_progm_start(progm, tman, &mbtv); | |
230 | |
39 | 231 handle_connection(display, tman, &rdman, w, h); |
41 | 232 |
39 | 233 mb_tman_free(tman); |
234 } | |
30
e06a4a667ce2
Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents:
27
diff
changeset
|
235 |
19 | 236 fill1->free(fill1); |
237 fill2->free(fill2); | |
27 | 238 stroke->free(stroke); |
239 text_stroke->free(text_stroke); | |
15
c2ce186a5c37
X_main uses rdman_redraw_all()
Thinker K.F. Li <thinker@branda.to>
parents:
13
diff
changeset
|
240 redraw_man_destroy(&rdman); |
19 | 241 sh_path_free(path1); |
242 sh_path_free(path2); | |
35
581a03196093
Support rectangle tag of SVG.
Thinker K.F. Li <thinker@branda.to>
parents:
33
diff
changeset
|
243 sh_rect_free(rect); |
27 | 244 sh_text_free(text); |
24
e598bc809c0f
No more flash when animation.
Thinker K.F. Li <thinker@branda.to>
parents:
23
diff
changeset
|
245 cairo_destroy(tmpcr); |
e598bc809c0f
No more flash when animation.
Thinker K.F. Li <thinker@branda.to>
parents:
23
diff
changeset
|
246 cairo_surface_destroy(tmpsuf); |
5
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
3
diff
changeset
|
247 } |
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
3
diff
changeset
|
248 |
3
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
249 void drawing(cairo_surface_t *surface, int w, int h) { |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
250 cairo_t *cr; |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
251 |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
252 cr = cairo_create(surface); |
7
569f3168ba53
Clear background & tranform relative pos into absolute ones
Thinker K.F. Li <thinker@branda.to>
parents:
6
diff
changeset
|
253 cairo_set_source_rgb(cr, 0, 0, 0); |
569f3168ba53
Clear background & tranform relative pos into absolute ones
Thinker K.F. Li <thinker@branda.to>
parents:
6
diff
changeset
|
254 cairo_paint(cr); |
5
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
3
diff
changeset
|
255 draw_path(cr, w, h); |
27 | 256 cairo_destroy(cr); |
3
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
257 } |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
258 |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
259 int |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
260 main(int argc, char * const argv[]) { |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
261 Window root; |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
262 Visual *visual; |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
263 int screen; |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
264 XSetWindowAttributes wattr; |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
265 int depth; |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
266 cairo_surface_t *surface; |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
267 int w, h; |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
268 int x, y; |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
269 int r; |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
270 |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
271 display = XOpenDisplay(":0.0"); |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
272 if(display == NULL) |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
273 printf("XOpenDisplay\n"); |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
274 screen = DefaultScreen(display); |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
275 root = DefaultRootWindow(display); |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
276 visual = DefaultVisual(display, screen); |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
277 depth = DefaultDepth(display, screen); |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
278 wattr.override_redirect = False; |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
279 x = 10; |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
280 y = 10; |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
281 w = 200; |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
282 h = 200; |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
283 win = XCreateWindow(display, root, |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
284 x, y, |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
285 w, h, |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
286 1, depth, InputOutput, visual, |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
287 CWOverrideRedirect, &wattr); |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
288 r = XMapWindow(display, win); |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
289 |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
290 surface = cairo_xlib_surface_create(display, win, visual, w, h); |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
291 if(surface == NULL) |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
292 printf("cairo_xlib_surface_create\n"); |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
293 |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
294 drawing(surface, w, h); |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
295 |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
296 XFlush(display); |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
297 sleep(10); |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
298 |
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
299 XCloseDisplay(display); |
10 | 300 return 0; |
3
164162781a7a
Test cairo with Xlib surface
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
301 } |