Subversion Repositories Kolibri OS

Rev

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