ajwillia-ms pushed a commit to branch master.

http://git.enlightenment.org/tools/examples.git/commit/?id=9ef1398bfc7a681575e9c42835a4ca4f7631b39e

commit 9ef1398bfc7a681575e9c42835a4ca4f7631b39e
Author: Andy Williams <a...@andywilliams.me>
Date:   Tue Dec 5 15:07:32 2017 +0000

    core: Add an events reference example
---
 reference/c/core/src/core_event.c | 156 ++++++++++++++++++++++++++++++++++++++
 reference/c/core/src/meson.build  |   7 ++
 2 files changed, 163 insertions(+)

diff --git a/reference/c/core/src/core_event.c 
b/reference/c/core/src/core_event.c
new file mode 100644
index 0000000..3ddebbc
--- /dev/null
+++ b/reference/c/core/src/core_event.c
@@ -0,0 +1,156 @@
+#define EFL_EO_API_SUPPORT 1
+#define EFL_BETA_API_SUPPORT 1
+
+#include <stdio.h>
+
+#include <Eina.h>
+#include <Efl_Core.h>
+
+/*
+ * Efl Core Event examples.
+ *
+ * This example shows the various ways of adding callbacks for standard events.
+ * It also demonstrates the creation of a custom event and how to freeze and
+ * thaw events on an object.
+ */
+
+Efl_Event_Description *_CUSTOM_EVENT;
+
+static void
+_add_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
+{
+   printf("  Add\n");
+}
+
+static void
+_del_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
+{
+   printf("  Delete Callback\n");
+}
+
+static void
+_del_obj_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
+{
+   printf("  Delete Object\n");
+}
+
+static void
+_custom_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
+{
+   printf("  Custom\n");
+}
+
+static void
+_poll_cb(void *data, const Efl_Event *event EINA_UNUSED)
+{
+   Efl_Loop *mainloop;
+
+   mainloop = (Efl_Loop *)data;
+   printf("  Poll\n");
+
+   efl_event_callback_del(mainloop, _CUSTOM_EVENT, _custom_cb, NULL);
+}
+
+static void
+_fast_cb(void *data, const Efl_Event *event EINA_UNUSED)
+{
+   Efl_Loop *mainloop;
+
+   mainloop = (Efl_Loop *)data;
+   printf("  Running\n");
+}
+
+static void
+_freezethaw_cb(void *data, const Efl_Event *event EINA_UNUSED)
+{
+   Efl_Loop *polled;
+   static int called = 0;
+
+   polled = data;
+   switch (called)
+     {
+        case 0:
+          printf("  Freeze\n");
+          efl_event_freeze(polled);
+          break;
+        case 1:
+          printf("  Thaw\n");
+          efl_event_thaw(polled);
+          break;
+        default:
+          efl_exit(0);
+     }
+
+   called++;
+}
+
+static void
+_events_freeze(Efl_Loop *mainloop)
+{
+   Efl_Loop *polled;
+
+   printf("Test 2:\n");
+
+   polled = efl_add(EFL_LOOP_CLASS, mainloop);
+   efl_event_callback_add(polled, EFL_LOOP_EVENT_POLL_HIGH, _fast_cb, NULL);
+
+   efl_add(EFL_LOOP_TIMER_CLASS, mainloop,
+           efl_loop_timer_interval_set(efl_added, .1),
+           efl_event_callback_add(efl_added, EFL_LOOP_TIMER_EVENT_TICK, 
_freezethaw_cb, polled));
+}
+
+static void
+_timer_cb(void *data EINA_UNUSED, const Efl_Event *event)
+{
+   Efl_Loop *mainloop;
+
+   mainloop = (Efl_Loop *)data;
+   _events_freeze(mainloop);
+
+   // cancel this timer
+   efl_del(event->object);
+}
+
+EFL_CALLBACKS_ARRAY_DEFINE(_callback_array,
+{ EFL_LOOP_EVENT_POLL_MEDIUM, _poll_cb },
+{ EFL_EVENT_CALLBACK_DEL, _del_cb },
+{ EFL_EVENT_DEL, _del_obj_cb })
+
+static void
+_events_demo(Efl_Loop *mainloop)
+{
+   // this is a definition of a custom event, for our app
+   Efl_Event_Description desc = EFL_EVENT_DESCRIPTION("custom-event");
+
+   _CUSTOM_EVENT = &desc;
+   printf("Test 1:\n");
+
+   // add a singe callback that monitors for new callbacks added
+   efl_event_callback_add(mainloop, EFL_EVENT_CALLBACK_ADD, _add_cb, NULL);
+
+   // add an array of callbacks (defined above)
+   // this is more efficient if you have multiple callbacks to add
+   efl_event_callback_array_add(mainloop, _callback_array(), mainloop);
+
+   // here we add a custom callback and call it immediately
+   efl_event_callback_add(mainloop, _CUSTOM_EVENT, _custom_cb, NULL);
+   efl_event_callback_call(mainloop, _CUSTOM_EVENT, NULL);
+
+   // we will exit from this timer
+   efl_add(EFL_LOOP_TIMER_CLASS, mainloop,
+           efl_loop_timer_interval_set(efl_added, 10),
+           efl_event_callback_add(efl_added, EFL_LOOP_TIMER_EVENT_TICK, 
_timer_cb, mainloop));
+
+   printf("  Waiting for timer to call back (10 seconds)...\n");
+}
+
+EAPI_MAIN void
+efl_main(void *data EINA_UNUSED, const Efl_Event *ev)
+{
+   Efl_Loop *mainloop;
+
+   mainloop = ev->object;
+   _events_demo(mainloop);
+}
+EFL_MAIN()
+
diff --git a/reference/c/core/src/meson.build b/reference/c/core/src/meson.build
index 6906e53..26085f6 100644
--- a/reference/c/core/src/meson.build
+++ b/reference/c/core/src/meson.build
@@ -7,6 +7,13 @@ executable('efl_reference_core_loop',
   install : true
 )
 
+executable('efl_reference_core_event',
+  files(['core_event.c']),
+  dependencies : deps,
+  include_directories : inc,
+  install : true
+)
+
 executable('efl_reference_core_io',
   files(['core_io.c']),
   dependencies : deps,

-- 


Reply via email to