From: Mateusz Palkowski Date: Mon, 10 Aug 2020 08:39:04 +0000 (+0200) Subject: evas/canvas/vg: added gradient example X-Git-Tag: accepted/tizen/unified/20200820.034628~7 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F71%2F240771%2F3;p=platform%2Fupstream%2Fefl.git evas/canvas/vg: added gradient example Change-Id: Id7f929d5fda53da8d780548434a58b562cbf0a76 --- diff --git a/src/examples/evas/evas-vg-gradient.c b/src/examples/evas/evas-vg-gradient.c new file mode 100644 index 0000000..16f143b --- /dev/null +++ b/src/examples/evas/evas-vg-gradient.c @@ -0,0 +1,189 @@ +/** + * gcc evas-gradient.c -o evas-gradient `pkg-config --libs --cflags ecore ecore-evas` + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#else +#define PACKAGE_EXAMPLES_DIR "." +#endif + +#define WIDTH 500 +#define HEIGHT 500 + +#include +#include + +struct content +{ + Ecore_Evas *ee; + Evas *ev; + Evas_Object *bg; + Evas_Object *vg; + Efl_VG *container; +}; +static struct content cnt; + +static void +_on_delete(Ecore_Evas *ee EINA_UNUSED) +{ + ecore_main_loop_quit(); +} + +static void +_canvas_resize_cb(Ecore_Evas *ee) +{ + int w, h; + + ecore_evas_geometry_get(ee, NULL, NULL, &w, &h); + evas_object_resize(cnt.bg, w, h); + evas_object_resize(cnt.vg, w, h); +} + +static void +_on_keydown(void *data EINA_UNUSED, + Evas *evas EINA_UNUSED, + Evas_Object *o EINA_UNUSED, + void *event_info) +{ + Evas_Event_Key_Down *ei = event_info; + static Efl_VG *gradient = NULL; + static Efl_VG *shape = NULL; + + if (!strcmp(ei->key, "q")) + _on_delete(cnt.ee); + if (!strcmp(ei->key, "r")) + { + if (shape != NULL) + { + gradient = evas_vg_gradient_radial_add(cnt.container); + evas_vg_gradient_radial_center_set(gradient, 440, 440); + evas_vg_gradient_radial_radius_set(gradient, 40); + + Evas_Vg_Gradient_Stop stops5[] = + { + {.offset = 0, .r = 255, .g = 255, .b = 0, .a = 255}, + {.offset = 1, .r = 0, .g = 0, .b = 255, .a = 255} + }; + evas_vg_gradient_stop_set(gradient, stops5, 2); + evas_vg_shape_fill_set(shape, gradient); + } + else + { + shape = evas_vg_shape_add(cnt.container); + evas_vg_shape_append_rect(shape, 400, 400, 80, 80, 10, 10); + + gradient = evas_vg_gradient_linear_add(cnt.container); + evas_vg_gradient_linear_start_set(gradient, 400, 400); + evas_vg_gradient_linear_end_set(gradient, 480, 480); + + Evas_Vg_Gradient_Stop stops4[] = + { + {.offset = 0, .r = 240, .g = 255, .b = 200, .a = 255}, + {.offset = 0.75, .r = 255, .g = 42, .b = 0, .a = 255}, + {.offset = 1, .r = 219, .g = 57, .b = 24, .a = 255} + }; + evas_vg_gradient_spread_set(gradient, EVAS_VG_GRADIENT_SPREAD_REFLECT); + evas_vg_gradient_stop_set(gradient, stops4, 3); + evas_vg_shape_fill_set(shape, gradient); + } + } +} + +int main(void) +{ + Efl_VG *shape; + Efl_VG *gradient; + + if (!ecore_evas_init()) return EXIT_FAILURE; + + cnt.ee = ecore_evas_new(NULL, 0, 0, WIDTH, HEIGHT, NULL); + if (!cnt.ee) + { + ecore_evas_shutdown(); + return -1; + } + + ecore_evas_callback_delete_request_set(cnt.ee, _on_delete); + ecore_evas_callback_resize_set(cnt.ee, _canvas_resize_cb); + ecore_evas_show(cnt.ee); + + cnt.ev = ecore_evas_get(cnt.ee); + cnt.bg = evas_object_rectangle_add(cnt.ev); + evas_object_color_set(cnt.bg, 255, 255, 255, 255); + evas_object_focus_set(cnt.bg, EINA_TRUE); + evas_object_show(cnt.bg); + evas_object_event_callback_add(cnt.bg, EVAS_CALLBACK_KEY_DOWN, _on_keydown, NULL); + cnt.vg = evas_object_vg_add(cnt.ev); + evas_object_show(cnt.vg); + _canvas_resize_cb(cnt.ee); + cnt.container = evas_vg_container_add(cnt.vg); + shape = evas_vg_shape_add(cnt.container); + evas_vg_shape_append_rect(shape, 50, 50, 100, 100, 2, 2); + + gradient = evas_vg_gradient_linear_add(cnt.container); + evas_vg_gradient_linear_start_set(gradient, 50, 50); + evas_vg_gradient_linear_end_set(gradient, 150, 150); + + Evas_Vg_Gradient_Stop stops1[] = + { + {.offset = 0, .r = 2, .g = 27, .b = 92, .a = 255}, + {.offset = 1, .r = 16, .g = 80, .b = 240, .a = 255} + }; + evas_vg_gradient_stop_set(gradient, stops1, 2); + evas_vg_shape_fill_set(shape, gradient); + + shape = evas_vg_shape_add(cnt.container); + evas_vg_shape_append_rect(shape, 200, 50, 100, 100, 2, 2); + + gradient = evas_vg_gradient_linear_add(cnt.container); + evas_vg_gradient_linear_start_set(gradient, 200, 50); + evas_vg_gradient_linear_end_set(gradient, 300, 150); + + Evas_Vg_Gradient_Stop stops2[] = + { + {.offset = 0, .r = 0, .g = 0, .b = 0, .a = 255}, + {.offset = 1, .r = 255, .g = 255, .b = 255, .a = 255} + }; + evas_vg_gradient_stop_set(gradient, stops2, 2); + evas_vg_shape_stroke_fill_set(shape, gradient); + evas_vg_shape_stroke_width_set(shape, 10); + + shape = evas_vg_shape_add(cnt.container); + evas_vg_shape_append_rect(shape, 350, 50, 100, 100, 2, 2); + + gradient = evas_vg_gradient_radial_add(cnt.container); + evas_vg_gradient_radial_center_set(gradient, 400, 100); + evas_vg_gradient_radial_radius_set(gradient, 100); + + Evas_Vg_Gradient_Stop stops3[] = + { + {.offset = 0, .r = 240, .g = 255, .b = 200, .a = 255}, + {.offset = 0.75, .r = 255, .g = 42, .b = 0, .a = 255}, + {.offset = 1, .r = 219, .g = 57, .b = 24, .a = 255} + }; + evas_vg_gradient_stop_set(gradient, stops3, 3); + evas_vg_shape_fill_set(shape, gradient); + + shape = evas_vg_shape_add(cnt.container); + evas_vg_shape_append_rect(shape, 50, 200, 300, 300, 50, 50); + + gradient = evas_vg_gradient_linear_add(cnt.container); + evas_vg_gradient_linear_start_set(gradient, 50, 200); + evas_vg_gradient_linear_end_set(gradient, 100, 250); + + Evas_Vg_Gradient_Stop stops4[] = + { + {.offset = 0, .r = 240, .g = 255, .b = 200, .a = 255}, + {.offset = 0.75, .r = 255, .g = 42, .b = 0, .a = 255}, + {.offset = 1, .r = 219, .g = 57, .b = 24, .a = 255} + }; + evas_vg_gradient_spread_set(gradient, EVAS_VG_GRADIENT_SPREAD_REFLECT); + evas_vg_gradient_stop_set(gradient, stops4, 3); + evas_vg_shape_fill_set(shape, gradient); + + evas_object_vg_root_node_set(cnt.vg, cnt.container); + ecore_main_loop_begin(); + ecore_evas_shutdown(); + return 0; +} \ No newline at end of file diff --git a/src/examples/evas/meson.build b/src/examples/evas/meson.build index d43838a..3bec6d0 100644 --- a/src/examples/evas/meson.build +++ b/src/examples/evas/meson.build @@ -38,6 +38,7 @@ examples = [ 'evas-vg-dup', 'evas-vg-reset' 'evas-vg-cubic' + 'evas-vg-gradient' ] foreach example : examples