added example of evas_object_show/hide() for vg shapes 05/240705/5
authorPiotr Kalota <p.kalota@AVDC686.digital.local>
Tue, 4 Aug 2020 10:00:16 +0000 (12:00 +0200)
committerHermet Park <chuneon.park@samsung.com>
Tue, 18 Aug 2020 08:41:19 +0000 (08:41 +0000)
Change-Id: I78679b7e1d3f7ffe29ab9e8642f131611e15b322

src/examples/evas/evas-vg-visibility.c [new file with mode: 0644]
src/examples/evas/meson.build

diff --git a/src/examples/evas/evas-vg-visibility.c b/src/examples/evas/evas-vg-visibility.c
new file mode 100644 (file)
index 0000000..c9f98f0
--- /dev/null
@@ -0,0 +1,161 @@
+/**
+ * gcc -o evas-vg-visibility evas-vg-visibility.c `pkg-config --libs --cflags ecore ecore-evas`
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#else
+#define PACKAGE_EXAMPLES_DIR "."
+#endif
+
+#define WIDTH  600
+#define HEIGHT 600
+
+#include <Ecore.h>
+#include <Ecore_Evas.h>
+#include <stdio.h>
+
+struct content
+{
+   Ecore_Evas  *ee;
+   Evas        *ev;
+   Evas_Object *bg;
+   Evas_Object *vg;
+   Efl_VG      *container;
+   Efl_VG      *shapes[3];
+};
+static struct content cnt;
+
+static void
+_print_help()
+{
+   printf("q - exit\n");
+   printf("1-3 - toggle visibility of single shape\n");
+   printf("c - toggle visibility of whole container (all shapes)\n");
+}
+
+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,
+            void        *einfo)
+{
+   Evas_Event_Key_Down *ei = einfo;
+
+   switch (*ei->key)
+     {
+      case 'q':
+         _on_delete(cnt.ee);
+         break;
+      case '1':
+         if (evas_object_visible_get(cnt.shapes[0]))
+            evas_object_hide(cnt.shapes[0]);
+         else evas_object_show(cnt.shapes[0]);
+         break;
+      case '2':
+         if (evas_object_visible_get(cnt.shapes[1]))
+            evas_object_hide(cnt.shapes[1]);
+         else evas_object_show(cnt.shapes[1]);
+         break;
+      case '3':
+         if (evas_object_visible_get(cnt.shapes[2]))
+            evas_object_hide(cnt.shapes[2]);
+         else evas_object_show(cnt.shapes[2]);
+         break;
+      case 'c':
+         if (evas_object_visible_get(cnt.container))
+            evas_object_hide(cnt.container);
+         else evas_object_show(cnt.container);
+         break;
+      default:
+         break;
+      }
+}
+
+static int
+_init_win()
+{
+   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, 0, 0, 0, 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);
+   _print_help();
+}
+
+static void
+_draw_commands(){
+   int sd = 0; //shift down
+   Evas_Vg_Join join_types[] = {EVAS_VG_JOIN_MITER, EVAS_VG_JOIN_ROUND, EVAS_VG_JOIN_BEVEL};
+   for (int i=0; i<3; ++i)
+     {
+        sd = i*150;
+        cnt.shapes[i] = evas_vg_shape_add(cnt.container);
+        evas_vg_shape_append_move_to(cnt.shapes[i], 150, 150 + sd);
+        evas_vg_shape_append_line_to(cnt.shapes[i], 200, 100 + sd);
+        evas_vg_shape_append_line_to(cnt.shapes[i], 250, 150 + sd);
+        evas_vg_shape_append_line_to(cnt.shapes[i], 280, 50 + sd);
+        evas_vg_shape_append_line_to(cnt.shapes[i], 350, 150 + sd);
+        evas_vg_shape_append_line_to(cnt.shapes[i], 400, 100 + sd);
+        evas_vg_shape_append_line_to(cnt.shapes[i], 450, 150 + sd);
+        evas_vg_shape_stroke_join_set(cnt.shapes[i], join_types[i]);
+        evas_vg_shape_stroke_width_set(cnt.shapes[i], 20);
+        evas_vg_shape_stroke_color_set(cnt.shapes[i], 255, 0 ,0 ,255);
+     }
+}
+
+static void
+_init_vg()
+{
+   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);
+   _draw_commands();
+   evas_object_vg_root_node_set(cnt.vg, cnt.container);
+}
+
+int
+main(void)
+{
+   int err = _init_win();
+   if (err==EXIT_FAILURE || err==-1) return err;
+
+   _init_vg();
+
+   ecore_main_loop_begin();
+   ecore_evas_shutdown();
+
+   return 0;
+}
index 6e89547..47927d3 100644 (file)
@@ -34,6 +34,7 @@ examples = [
   'evas-vg-interpolation',
   'evas-vg-star-path',
   'evas-vg-stroke-join',
+  'evas-vg-visibility',
   'evas-vg-batman',
   'evas-vg-simple',
   'evas-vg-json',