1 /**
2  * gcc -g filter_example.c -o filter_example `pkg-config --cflags --libs elementary`
3  */
4 #define EFL_BETA_API_SUPPORT 1
5 #include <Elementary.h>
6 
7 typedef struct _Filter
8 {
9    const char *name;
10    const char *code;
11 } Filter;
12 
13 static Filter filters[] = {
14    { "no", NULL },
15    { "blend",
16      "blend { color = '#fff8' }" },
17    { "blur",
18      "blur { 15 }" },
19    { "grow",
20      "a = buffer { 'rgba' }\n"
21      "blend { dst = a }\n"
22      "grow { 6, src = a }" },
23    { "curve",
24      "a = buffer ('alpha')\n"
25      "blur ({ 4, dst = a })\n"
26      "p = {}\n"
27      "p[0] = 0\n"
28      "p[20] = 0\n"
29      "p[60] = 255\n"
30      "p[160] = 255\n"
31      "p[200] = 0\n"
32      "p[255] = 0\n"
33      "curve ({ points = p, src = a, dst = a })\n"
34      "blend ({ src = a, color = 'white' })\n" },
35    { "fill",
36      "fill { color = 'darkblue' }" },
37    { "mask",
38      "a = buffer ('alpha')\n"
39      "blur ({ 6, dst = a })\n"
40      "p = {}\n"
41      "p[0] = 255\n"
42      "p[128] = 255\n"
43      "p[255] = 0\n"
44      "curve ({ points = p, src = a, dst = a })\n"
45      "blend ({ color = 'black' })\n"
46      "mask ({ mask = a, color = 'cyan' })" },
47    { "bump",
48      "a = buffer { 'alpha' }\n"
49      "grow { 5, dst = a }\n"
50      "blur { 6, src = a , dst = a }\n"
51      "bump { map = a, color = '#f60', specular = 1, compensate = true }" },
52    { "trans",
53      "t = buffer ('alpha')\n"
54      "transform ({ oy = 20, dst = t })\n"
55      "blend ({ src = t, color = '#fff8' })\n"
56      "blend ({ color = 'white' })" },
57 };
58 
59 EAPI_MAIN int
elm_main(int argc EINA_UNUSED,char ** argv EINA_UNUSED)60 elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
61 {
62    Filter *f;
63    unsigned int i;
64    char buf[PATH_MAX];
65    Eo *win, *scroller, *hbox, *box, *text, *img;
66 
67    elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
68    elm_app_info_set(elm_main, "elementary", "images");
69 
70    win = elm_win_util_standard_add("Gfx Filter Test", "Gfx Filter Test");
71    elm_win_autodel_set(win, EINA_TRUE);
72 
73    scroller = elm_scroller_add(win);
74    evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
75    elm_win_resize_object_add(win, scroller);
76    evas_object_show(scroller);
77 
78    hbox = elm_box_add(win);
79    elm_box_horizontal_set(hbox, EINA_TRUE);
80    evas_object_size_hint_weight_set(hbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
81    elm_object_content_set(scroller, hbox);
82    evas_object_show(hbox);
83 
84    box = elm_box_add(win);
85    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
86    elm_box_pack_end(hbox, box);
87    evas_object_show(box);
88 
89    for (i = 0; i < EINA_C_ARRAY_LENGTH(filters); i++)
90      {
91         f = &filters[i];
92         text = evas_object_text_add(evas_object_evas_get(win));
93         evas_object_size_hint_align_set(text, 0, EVAS_HINT_FILL);
94         evas_object_size_hint_min_set(text, 100, 100);
95         evas_object_text_font_set(text, "Sans:style=Bold", 50);
96         evas_object_text_text_set(text, f->name);
97         elm_box_pack_end(box, text);
98         evas_object_show(text);
99 
100         efl_gfx_filter_program_set(text, f->code, f->name);
101      }
102 
103    box = elm_box_add(win);
104    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
105    elm_box_pack_end(hbox, box);
106    evas_object_show(box);
107 
108    snprintf(buf, sizeof(buf), "%s/images/logo.png", elm_app_data_dir_get());
109    for (i = 0; i < EINA_C_ARRAY_LENGTH(filters); i++)
110      {
111         f = &filters[i];
112         img = evas_object_image_filled_add(evas_object_evas_get(win));
113         evas_object_size_hint_align_set(img, 0, EVAS_HINT_FILL);
114         evas_object_image_file_set(img, buf, 0);
115         evas_object_size_hint_min_set(img, 100, 100);
116         elm_box_pack_end(box, img);
117         evas_object_show(img);
118 
119         efl_gfx_filter_program_set(img, f->code, f->name);
120      }
121 
122    evas_object_resize(win, 400, 400);
123    evas_object_show(win);
124 
125    elm_run();
126 
127    return 0;
128 }
129 ELM_MAIN()
130