aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/ecore/src/examples/ecore_evas_buffer_example_01.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/ecore/src/examples/ecore_evas_buffer_example_01.c')
-rw-r--r--libraries/ecore/src/examples/ecore_evas_buffer_example_01.c121
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
28static Ecore_Evas *ee;
29
30/* support function to save scene as PPM image */
31static 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
69int
70main(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
114error:
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