diff options
Diffstat (limited to '')
-rw-r--r-- | libraries/ecore/src/examples/ecore_evas_buffer_example_01.c | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/libraries/ecore/src/examples/ecore_evas_buffer_example_01.c b/libraries/ecore/src/examples/ecore_evas_buffer_example_01.c new file mode 100644 index 0000000..af05530 --- /dev/null +++ b/libraries/ecore/src/examples/ecore_evas_buffer_example_01.c | |||
@@ -0,0 +1,121 @@ | |||
1 | /** | ||
2 | * Simple Ecore_Evas example on the Evas buffer engine wrapper | ||
3 | * functions. | ||
4 | * | ||
5 | * You must have Evas compiled with the buffer engine. | ||
6 | * | ||
7 | * Compile with: | ||
8 | * | ||
9 | * @verbatim | ||
10 | * gcc -o evas-buffer-simple evas-buffer-simple.c `pkg-config --libs --cflags evas evas-software-buffer` | ||
11 | * @endverbatim | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #ifdef HAVE_CONFIG_H | ||
16 | |||
17 | #include "config.h" | ||
18 | #else | ||
19 | #define __UNUSED__ | ||
20 | #endif | ||
21 | |||
22 | #include <Ecore_Evas.h> | ||
23 | #include <stdio.h> | ||
24 | |||
25 | #define WIDTH (320) | ||
26 | #define HEIGHT (240) | ||
27 | |||
28 | static Ecore_Evas *ee; | ||
29 | |||
30 | /* support function to save scene as PPM image */ | ||
31 | static void | ||
32 | _scene_save(Evas *canvas, | ||
33 | const char *dest) | ||
34 | { | ||
35 | const unsigned int *pixels, *pixels_end; | ||
36 | int width, height; | ||
37 | FILE *f; | ||
38 | |||
39 | evas_output_size_get(canvas, &width, &height); | ||
40 | |||
41 | f = fopen(dest, "wb+"); | ||
42 | if (!f) | ||
43 | { | ||
44 | fprintf(stderr, "ERROR: could not open for writing '%s': %s\n", | ||
45 | dest, strerror(errno)); | ||
46 | return; | ||
47 | } | ||
48 | |||
49 | pixels = ecore_evas_buffer_pixels_get(ee); | ||
50 | pixels_end = pixels + (width * height); | ||
51 | |||
52 | /* PPM P6 format is dead simple to write: */ | ||
53 | fprintf(f, "P6\n%d %d\n255\n", width, height); | ||
54 | for (; pixels < pixels_end; pixels++) | ||
55 | { | ||
56 | int r, g, b; | ||
57 | |||
58 | r = ((*pixels) & 0xff0000) >> 16; | ||
59 | g = ((*pixels) & 0x00ff00) >> 8; | ||
60 | b = (*pixels) & 0x0000ff; | ||
61 | |||
62 | fprintf(f, "%c%c%c", r, g, b); | ||
63 | } | ||
64 | |||
65 | fclose(f); | ||
66 | printf("Saved scene as '%s'\n", dest); | ||
67 | } | ||
68 | |||
69 | int | ||
70 | main(void) | ||
71 | { | ||
72 | Evas *canvas; | ||
73 | Evas_Object *bg, *r1, *r2, *r3; | ||
74 | |||
75 | ecore_evas_init(); | ||
76 | |||
77 | ee = ecore_evas_buffer_new(WIDTH, HEIGHT); | ||
78 | if (!ee) goto error; | ||
79 | |||
80 | canvas = ecore_evas_get(ee); | ||
81 | |||
82 | bg = evas_object_rectangle_add(canvas); | ||
83 | evas_object_color_set(bg, 255, 255, 255, 255); /* white bg */ | ||
84 | evas_object_move(bg, 0, 0); /* at origin */ | ||
85 | evas_object_resize(bg, WIDTH, HEIGHT); /* covers full canvas */ | ||
86 | evas_object_show(bg); | ||
87 | |||
88 | r1 = evas_object_rectangle_add(canvas); | ||
89 | evas_object_color_set(r1, 255, 0, 0, 255); /* 100% opaque red */ | ||
90 | evas_object_move(r1, 10, 10); | ||
91 | evas_object_resize(r1, 100, 100); | ||
92 | evas_object_show(r1); | ||
93 | |||
94 | r2 = evas_object_rectangle_add(canvas); | ||
95 | evas_object_color_set(r2, 0, 128, 0, 128); /* 50% opaque green */ | ||
96 | evas_object_move(r2, 10, 10); | ||
97 | evas_object_resize(r2, 50, 50); | ||
98 | evas_object_show(r2); | ||
99 | |||
100 | r3 = evas_object_rectangle_add(canvas); | ||
101 | evas_object_color_set(r3, 0, 128, 0, 255); /* 100% opaque dark green */ | ||
102 | evas_object_move(r3, 60, 60); | ||
103 | evas_object_resize(r3, 50, 50); | ||
104 | evas_object_show(r3); | ||
105 | |||
106 | ecore_evas_manual_render(ee); | ||
107 | _scene_save(canvas, "/tmp/evas-buffer-simple-render.ppm"); | ||
108 | |||
109 | ecore_evas_free(ee); | ||
110 | ecore_evas_shutdown(); | ||
111 | |||
112 | return 0; | ||
113 | |||
114 | error: | ||
115 | fprintf(stderr, "You got to have at least one Evas engine built" | ||
116 | " and linked up to ecore-evas for this example to run" | ||
117 | " properly.\n"); | ||
118 | ecore_evas_shutdown(); | ||
119 | return -1; | ||
120 | } | ||
121 | |||