Tizen 2.1 base
[framework/uifw/ecore.git] / src / examples / ecore_evas_buffer_example_01.c
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