Rev 5553 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5553 | serge | 1 | |
2 | #include |
||
3 | #include |
||
4 | #include |
||
5 | #include |
||
6 | #include |
||
7 | #include |
||
8 | #include |
||
9 | #include FT_FREETYPE_H |
||
10 | #include "tiger.inc" |
||
11 | |||
12 | |||
13 | |||
14 | |||
15 | int height = 400; |
||
16 | |||
17 | |||
18 | unsigned char *winbitmap; |
||
19 | int winstride; |
||
20 | |||
21 | |||
22 | |||
23 | |||
24 | |||
25 | |||
26 | { |
||
27 | cairo_identity_matrix (cr); |
||
28 | |||
29 | |||
30 | CAIRO_FONT_WEIGHT_BOLD); |
||
31 | cairo_set_font_size (cr, 28); |
||
32 | cairo_set_source_rgb (cr, 0, 0, 0); |
||
33 | cairo_move_to (cr, 160.0, 360.0); |
||
34 | cairo_show_text (cr, "Press any key"); |
||
35 | }; |
||
36 | |||
37 | |||
38 | |||
39 | { |
||
40 | cairo_identity_matrix (cr); |
||
41 | |||
42 | |||
43 | cairo_paint(cr); |
||
44 | |||
45 | |||
46 | cairo_set_source_rgb(cr,0, 0,0); |
||
47 | cairo_set_line_width(cr, 10); |
||
48 | |||
49 | |||
50 | cairo_stroke_preserve(cr); |
||
51 | cairo_set_source_rgb(cr, 0, 0.5, 0.5); |
||
52 | cairo_fill(cr); |
||
53 | |||
54 | |||
55 | cairo_rectangle(cr, 180, 20, 80, 80); |
||
56 | cairo_stroke_preserve(cr); |
||
57 | cairo_set_source_rgb(cr, 0, 1, 1); |
||
58 | cairo_fill(cr); |
||
59 | |||
60 | |||
61 | cairo_arc(cr, 330, 60, 40, 0, 2*M_PI); |
||
62 | cairo_stroke_preserve(cr); |
||
63 | cairo_set_source_rgb(cr, 0.5, 0.0, 0.5); |
||
64 | cairo_fill(cr); |
||
65 | |||
66 | |||
67 | cairo_arc(cr, 90, 160, 40, M_PI/4, M_PI); |
||
68 | cairo_close_path(cr); |
||
69 | cairo_stroke_preserve(cr); |
||
70 | cairo_set_source_rgb(cr, 0.5, 0.5, 0.0); |
||
71 | cairo_fill(cr); |
||
72 | |||
73 | |||
74 | cairo_translate(cr, 220, 180); |
||
75 | cairo_scale(cr, 1, 0.7); |
||
76 | cairo_arc(cr, 0, 0, 50, 0, 2*M_PI); |
||
77 | cairo_stroke_preserve(cr); |
||
78 | cairo_set_source_rgb(cr, 1, 0, 1); |
||
79 | cairo_fill(cr); |
||
80 | |||
81 | |||
82 | |||
83 | |||
84 | |||
85 | |||
86 | { 0, 85 }, |
||
87 | { 75, 75 }, |
||
88 | { 100, 10 }, |
||
89 | { 125, 75 }, |
||
90 | { 200, 85 }, |
||
91 | { 150, 125 }, |
||
92 | { 160, 190 }, |
||
93 | { 100, 150 }, |
||
94 | { 40, 190 }, |
||
95 | { 50, 125 }, |
||
96 | { 0, 85 } |
||
97 | }; |
||
98 | |||
99 | |||
100 | { |
||
101 | cairo_set_source_rgb(cr, 1, 1, 1); |
||
102 | cairo_paint(cr); |
||
103 | |||
104 | |||
105 | |||
106 | |||
107 | cairo_set_line_width(cr, 10); |
||
108 | cairo_move_to(cr, 0, 85); |
||
109 | |||
110 | |||
111 | for ( i = 0; i < 10; i++ ) { |
||
112 | cairo_line_to(cr, points[i][0], points[i][1]); |
||
113 | } |
||
114 | |||
115 | |||
116 | cairo_stroke_preserve(cr); |
||
117 | cairo_set_source_rgb(cr, 0, 1, 0); |
||
118 | cairo_fill(cr); |
||
119 | |||
120 | |||
121 | cairo_line_to(cr, 240, 160); |
||
122 | cairo_line_to(cr, 350, 160); |
||
123 | cairo_close_path(cr); |
||
124 | |||
125 | |||
126 | cairo_stroke_preserve(cr); |
||
127 | cairo_set_source_rgb(cr, 1, 0, 0); |
||
128 | cairo_fill(cr); |
||
129 | |||
130 | |||
131 | cairo_line_to(cr, 380, 160); |
||
132 | cairo_line_to(cr, 450, 160); |
||
133 | cairo_curve_to(cr, 440, 155, 380, 145, 380, 40); |
||
134 | |||
135 | |||
136 | cairo_stroke_preserve(cr); |
||
137 | cairo_set_source_rgb(cr, 1, 0, 1); |
||
138 | cairo_fill(cr); |
||
139 | |||
140 | |||
141 | |||
142 | |||
143 | |||
144 | |||
145 | { |
||
146 | cairo_pattern_t *pat1; |
||
147 | cairo_pattern_t *pat2; |
||
148 | cairo_pattern_t *pat3; |
||
149 | |||
150 | |||
151 | |||
152 | |||
153 | |||
154 | cairo_paint(cr); |
||
155 | |||
156 | |||
157 | |||
158 | |||
159 | |||
160 | |||
161 | int count = 1; |
||
162 | for ( j = 0.1; j < 1; j += 0.1 ) |
||
163 | { |
||
164 | if (( count % 2 )) |
||
165 | { |
||
166 | cairo_pattern_add_color_stop_rgb(pat1, j, 0, 0, 0); |
||
167 | } |
||
168 | else { |
||
169 | cairo_pattern_add_color_stop_rgb(pat1, j, 1, 0, 0); |
||
170 | } |
||
171 | count++; |
||
172 | } |
||
173 | |||
174 | |||
175 | cairo_set_source(cr, pat1); |
||
176 | cairo_fill(cr); |
||
177 | |||
178 | |||
179 | |||
180 | |||
181 | count = 1; |
||
182 | for ( i = 0.05; i < 0.95; i += 0.025 ) |
||
183 | { |
||
184 | if (( count % 2 )) |
||
185 | { |
||
186 | cairo_pattern_add_color_stop_rgb(pat2, i, 0, 0, 0); |
||
187 | } |
||
188 | else { |
||
189 | cairo_pattern_add_color_stop_rgb(pat2, i, 0, 0, 1); |
||
190 | } |
||
191 | count++; |
||
192 | } |
||
193 | |||
194 | |||
195 | cairo_set_source(cr, pat2); |
||
196 | cairo_fill(cr); |
||
197 | |||
198 | |||
199 | |||
200 | |||
201 | cairo_pattern_add_color_stop_rgb(pat3, 0.5, 1, 1, 0); |
||
202 | cairo_pattern_add_color_stop_rgb(pat3, 0.9, 0, 0, 0); |
||
203 | |||
204 | |||
205 | cairo_set_source(cr, pat3); |
||
206 | cairo_fill(cr); |
||
207 | |||
208 | |||
209 | cairo_pattern_destroy(pat2); |
||
210 | cairo_pattern_destroy(pat3); |
||
211 | |||
212 | |||
213 | |||
214 | |||
215 | |||
216 | |||
217 | { |
||
218 | cairo_translate(cr, 110,20); |
||
219 | cairo_set_source_rgb(cr, 1, 1,1); |
||
220 | cairo_paint(cr); |
||
221 | |||
222 | |||
223 | cairo_set_line_width(cr, 10); |
||
224 | |||
225 | |||
226 | cairo_line_to (cr, 230.4, 230.4); |
||
227 | cairo_rel_line_to (cr, -102.4, 0.0); |
||
228 | cairo_curve_to (cr, 51.2, 230.4, 51.2, 128.0, 128.0, 128.0); |
||
229 | cairo_close_path (cr); |
||
230 | |||
231 | |||
232 | cairo_rel_line_to (cr, 51.2, 51.2); |
||
233 | cairo_rel_line_to (cr, -51.2, 51.2); |
||
234 | cairo_rel_line_to (cr, -51.2, -51.2); |
||
235 | cairo_close_path (cr); |
||
236 | |||
237 | |||
238 | cairo_set_source_rgb (cr, 0, 0, 1); |
||
239 | cairo_fill_preserve (cr); |
||
240 | cairo_set_source_rgb (cr, 0, 0, 0); |
||
241 | cairo_stroke (cr); |
||
242 | |||
243 | |||
244 | } |
||
245 | |||
246 | |||
247 | { |
||
248 | cairo_set_source_rgb(cr, 0.7, 0.7, 0.7); |
||
249 | cairo_paint(cr); |
||
250 | |||
251 | |||
252 | |||
253 | |||
254 | CAIRO_FONT_WEIGHT_BOLD); |
||
255 | |||
256 | |||
257 | |||
258 | |||
259 | |||
260 | |||
261 | cairo_show_text (cr, "Hello"); |
||
262 | |||
263 | |||
264 | cairo_move_to (cr, 70.0, 170.0); |
||
265 | cairo_text_path (cr, "world"); |
||
266 | cairo_set_source_rgb (cr, 0.5, 0.5, 1); |
||
267 | cairo_fill_preserve (cr); |
||
268 | cairo_set_source_rgb (cr, 0, 0, 0); |
||
269 | cairo_set_line_width (cr, 2.56); |
||
270 | cairo_stroke (cr); |
||
271 | |||
272 | |||
273 | |||
274 | cairo_set_font_size (cr, 140); |
||
275 | cairo_set_source_rgb (cr, 0, 0, 1); |
||
276 | cairo_move_to (cr, 80.0, 175.0); |
||
277 | cairo_show_text (cr, "world"); |
||
278 | #endif |
||
279 | |||
280 | |||
281 | |||
282 | |||
283 | CAIRO_FONT_WEIGHT_BOLD); |
||
284 | cairo_set_font_size (cr, 16); |
||
285 | cairo_set_source_rgb (cr, 0, 0, 1); |
||
286 | cairo_move_to (cr, 160.0, 210.0); |
||
287 | cairo_show_text (cr, "www.cairographics.org"); |
||
288 | |||
289 | |||
290 | }; |
||
291 | |||
292 | |||
293 | { |
||
294 | unsigned int i; |
||
295 | |||
296 | |||
297 | cairo_set_source_rgba (cr, 0.1, 0.2, 0.3, 1.0); |
||
298 | cairo_paint (cr); |
||
299 | cairo_set_operator (cr, CAIRO_OPERATOR_OVER); |
||
300 | |||
301 | |||
302 | cairo_scale (cr, .85, .85); |
||
303 | |||
304 | |||
305 | const struct command *cmd = &tiger_commands[i]; |
||
306 | switch (cmd->type) { |
||
307 | case 'm': |
||
308 | cairo_move_to (cr, cmd->x0, cmd->y0); |
||
309 | break; |
||
310 | case 'l': |
||
311 | cairo_line_to (cr, cmd->x0, cmd->y0); |
||
312 | break; |
||
313 | case 'c': |
||
314 | cairo_curve_to (cr, |
||
315 | cmd->x0, cmd->y0, |
||
316 | cmd->x1, cmd->y1, |
||
317 | cmd->x2, cmd->y2); |
||
318 | break; |
||
319 | case 'f': |
||
320 | cairo_set_source_rgba (cr, |
||
321 | cmd->x0, cmd->y0, cmd->x1, cmd->y1); |
||
322 | cairo_fill (cr); |
||
323 | break; |
||
324 | } |
||
325 | } |
||
326 | } |
||
327 | |||
328 | |||
329 | { |
||
330 | screen_0, |
||
331 | screen_1, |
||
332 | screen_2, |
||
333 | screen_3, |
||
334 | draw_tiger |
||
335 | }; |
||
336 | |||
337 | |||
338 | |||
6072 | serge | 339 | { |
5553 | serge | 340 | uint32_t ev; |
341 | oskey_t key; |
||
342 | int retval = 1; |
||
343 | |||
344 | |||
345 | |||
346 | |||
347 | { |
||
348 | case 1: |
||
349 | BeginDraw(); |
||
350 | DrawWindow(0,0,0,0,NULL,0,0x73); |
||
6072 | serge | 351 | Blit(winbitmap, TYPE_3_BORDER_WIDTH, get_skin_height(), |
5553 | serge | 352 | 0, 0, width, height,width,height,winstride); |
353 | EndDraw(); |
||
354 | break; |
||
355 | |||
356 | |||
357 | key = get_key(); |
||
358 | |||
359 | |||
360 | break; |
||
361 | |||
362 | |||
363 | break; |
||
364 | |||
365 | |||
366 | { |
||
367 | retval = 0; |
||
368 | break; |
||
369 | }; |
||
370 | if(++screen > 4){screen = 0;}; |
||
371 | draw_screen[screen](cr,width,height); |
||
372 | Blit(winbitmap, TYPE_3_BORDER_WIDTH, get_skin_height(), |
||
373 | 0, 0, width, height,width,height,winstride); |
||
374 | break; |
||
375 | |||
376 | |||
377 | if(get_os_button()==1) |
||
378 | retval = 0; |
||
379 | break; |
||
380 | }; |
||
381 | return retval; |
||
382 | } |
||
383 | |||
384 | |||
385 | static void rounded_flat(cairo_t *cr, int x, int y, int w, int h) |
||
386 | { |
||
387 | double radius = 4; |
||
388 | double degrees = M_PI / 180.0; |
||
389 | |||
390 | |||
391 | cairo_arc (cr, x + w - radius, y + radius, radius, -90 * degrees, 0 * degrees); |
||
392 | cairo_arc (cr, x + w - radius, y + h - radius, radius, 0 * degrees, 90 * degrees); |
||
393 | cairo_arc (cr, x +radius, y + h - radius, radius, 90 * degrees, 180 * degrees); |
||
394 | cairo_arc (cr, x +radius, y + radius, radius, 180 * degrees, 270 * degrees); |
||
395 | cairo_close_path (cr); |
||
396 | |||
397 | |||
398 | cairo_fill_preserve (cr); |
||
399 | cairo_set_source_rgba (cr, 0.2, 0.2, 0.2, 0.5); |
||
400 | cairo_set_line_width (cr, 2.0); |
||
401 | cairo_stroke (cr); |
||
402 | }; |
||
403 | |||
404 | |||
405 | { |
||
406 | cairo_pattern_t *pat; |
||
407 | double radius = 5; |
||
408 | double degrees = M_PI / 180.0; |
||
409 | |||
410 | |||
411 | cairo_pattern_add_color_stop_rgb (pat, 0, 0.7, 0.7, 0.7); |
||
412 | cairo_pattern_add_color_stop_rgb (pat, 0.125, 0.85, 0.85, 0.85); |
||
413 | cairo_pattern_add_color_stop_rgb (pat, 0.25, 1.0, 1.0, 1.0); |
||
414 | cairo_pattern_add_color_stop_rgb (pat, 0.75, 1.0, 1.0, 1.0); |
||
415 | cairo_pattern_add_color_stop_rgb (pat, 1, 0.6, 0.6, 0.6); |
||
416 | |||
417 | |||
418 | cairo_arc (cr, x + w - radius, y + radius, radius, -90 * degrees, 0 * degrees); |
||
419 | cairo_arc (cr, x + w - radius, y + h - radius, radius, 0 * degrees, 90 * degrees); |
||
420 | cairo_arc (cr, x +radius, y + h - radius, radius, 90 * degrees, 180 * degrees); |
||
421 | cairo_arc (cr, x +radius, y + radius, radius, 180 * degrees, 270 * degrees); |
||
422 | cairo_close_path (cr); |
||
423 | |||
424 | |||
425 | cairo_fill_preserve (cr); |
||
426 | |||
427 | |||
428 | cairo_set_line_width (cr, 1.0); |
||
429 | cairo_stroke (cr); |
||
430 | cairo_pattern_destroy (pat); |
||
431 | }; |
||
432 | |||
433 | |||
434 | { |
||
435 | cairo_pattern_t *pat; |
||
436 | double radius = 5; |
||
437 | double degrees = M_PI / 180.0; |
||
438 | |||
439 | |||
440 | cairo_pattern_add_color_stop_rgb (pat, 0, 0.7, 0.7, 0.7); |
||
441 | cairo_pattern_add_color_stop_rgb (pat, 0.125, 0.85, 0.85, 0.85); |
||
442 | cairo_pattern_add_color_stop_rgb (pat, 0.25, 1.0, 1.0, 1.0); |
||
443 | cairo_pattern_add_color_stop_rgb (pat, 0.75, 1.0, 1.0, 1.0); |
||
444 | cairo_pattern_add_color_stop_rgb (pat, 1, 0.6, 0.6, 0.6); |
||
445 | |||
446 | |||
447 | cairo_arc (cr, x + w - radius, y + radius, radius, -90 * degrees, 0 * degrees); |
||
448 | cairo_arc (cr, x + w - radius, y + h - radius, radius, 0 * degrees, 90 * degrees); |
||
449 | cairo_arc (cr, x +radius, y + h - radius, radius, 90 * degrees, 180 * degrees); |
||
450 | cairo_arc (cr, x +radius, y + radius, radius, 180 * degrees, 270 * degrees); |
||
451 | cairo_close_path (cr); |
||
452 | |||
453 | |||
454 | cairo_fill_preserve (cr); |
||
455 | |||
456 | |||
457 | cairo_set_line_width (cr, 2.0); |
||
458 | cairo_stroke (cr); |
||
459 | cairo_pattern_destroy (pat); |
||
460 | |||
461 | |||
462 | CAIRO_FONT_WEIGHT_BOLD); |
||
463 | |||
464 | |||
465 | |||
466 | |||
467 | cairo_text_extents (cr, "Cancel", &extents); |
||
468 | |||
469 | |||
470 | y+= h/2 - (extents.height/2 + extents.y_bearing); |
||
471 | |||
472 | |||
473 | cairo_set_source_rgb (cr, 0, 0, 0); |
||
474 | |||
475 | |||
476 | cairo_set_source_rgb (cr, 0, 0, 0); |
||
477 | }; |
||
478 | #endif |
||
479 | |||
480 | |||
481 | { |
||
482 | |||
483 | |||
484 | |||
485 | |||
486 | |||
487 | |||
488 | } |
||
489 | |||
490 | |||
491 | { |
||
492 | int tmp; |
||
493 | cairo_t *cr; |
||
494 | |||
495 | |||
496 | "int $0x40" |
||
497 | :"=a"(tmp) |
||
498 | :"a"(66),"b"(1),"c"(1)); |
||
499 | |||
500 | |||
6072 | serge | 501 | "int $0x40" |
502 | ::"a"(40), "b"(0xc0000027)); |
||
503 | |||
504 | |||
5553 | serge | 505 | cr = cairo_create(main_surface); |
506 | |||
507 | |||
508 | winbitmap = cairo_image_surface_get_data(main_surface); |
||
509 | |||
510 | |||
511 | |||
512 | |||
513 | DrawWindow(30, 40, width+TYPE_3_BORDER_WIDTH*2, |
||
6072 | serge | 514 | height+TYPE_3_BORDER_WIDTH+get_skin_height(), "Cairo demo", 0x000000, 0x73); |
515 | Blit(winbitmap, TYPE_3_BORDER_WIDTH, get_skin_height(), 0, 0, width, height, |
||
5553 | serge | 516 | width,height,winstride); |
517 | EndDraw(); |
||
518 | |||
519 | |||
520 | |||
521 | |||
522 | cairo_surface_destroy(main_surface); |
||
523 | |||
524 | |||
525 | }>>>> |
||
526 |