summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Dilly <bdilly@profusion.mobi>2016-12-14 17:47:18 -0200
committerBruno Dilly <bdilly@profusion.mobi>2016-12-14 18:17:28 -0200
commit1d53f7ec8acb0aeb471d44145cc4ff874188e96d (patch)
tree034e792ddea8a42ff46d0b16f5bbb09f02acf942
parent83b1d3d983424ba63844e1e6736f24b0e87a4062 (diff)
downloadefl-devs/bdilly/edje_multiseat.tar.gz
edje/examples: add example of use_systeam_seat_names flagdevs/bdilly/edje_multiseat
Since seat names defined on evas will depend on evas backends, maybe udev rules, etc, we aren't able to demonstrate it without manually setting another name for such seats with efl_input_devices_name_set(). Otherwise we wouldn't have guarantees it would match names on EDC.
-rw-r--r--src/examples/edje/.gitignore1
-rw-r--r--src/examples/edje/Makefile.am3
-rw-r--r--src/examples/edje/edje-multiseat-system-names.c150
-rw-r--r--src/examples/edje/multiseat_system_names.edc175
4 files changed, 329 insertions, 0 deletions
diff --git a/src/examples/edje/.gitignore b/src/examples/edje/.gitignore
index d3d18389ac..503a501ac8 100644
--- a/src/examples/edje/.gitignore
+++ b/src/examples/edje/.gitignore
@@ -14,6 +14,7 @@
/edje-entry
/edje-focus
/edje-multiseat
+/edje-multiseat-system-names
/edje-multisense
/edje-perspective
/edje-signals-messages
diff --git a/src/examples/edje/Makefile.am b/src/examples/edje/Makefile.am
index 78365a4618..4c376045c8 100644
--- a/src/examples/edje/Makefile.am
+++ b/src/examples/edje/Makefile.am
@@ -46,6 +46,7 @@ focus.edc \
lua_script.edc \
messages_echo.edc \
multiseat.edc \
+multiseat_system_names.edc \
perspective.edc \
signals-messages.edc \
signalsBubble.edc \
@@ -146,6 +147,7 @@ edje-edit-part-box.c \
edje-entry.c \
edje-focus.c \
edje-multiseat.c \
+edje-multiseat-system-names.c \
edje-multisense.c \
edje-perspective.c \
edje-signals-messages.c \
@@ -222,6 +224,7 @@ edje-edit-part-box \
edje-entry \
edje-focus \
edje-multiseat \
+edje-multiseat-system-names \
edje-perspective \
edje-signals-messages \
edje-swallow \
diff --git a/src/examples/edje/edje-multiseat-system-names.c b/src/examples/edje/edje-multiseat-system-names.c
new file mode 100644
index 0000000000..ce15ffb015
--- /dev/null
+++ b/src/examples/edje/edje-multiseat-system-names.c
@@ -0,0 +1,150 @@
+/**
+ * Edje example demonstrating how to deal with part and objects focus.
+ *
+ * @verbatim
+ * edje_cc focus.edc && gcc -o edje-focus edje-focus.c `pkg-config --libs --cflags evas ecore ecore-evas edje`
+ * @endverbatim
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#else
+# define EINA_UNUSED
+#endif
+
+#ifndef PACKAGE_DATA_DIR
+#define PACKAGE_DATA_DIR "."
+#endif
+
+#include <Ecore.h>
+#include <Ecore_Evas.h>
+#include <Edje.h>
+
+#define WIDTH 400
+#define HEIGHT 400
+
+static const char *GROUPNAME = "example/main";
+static const char *EDJE_FILE = PACKAGE_DATA_DIR"/multiseat_system_names.edj";
+
+static Efl_Input_Device *default_seat = NULL;
+static Efl_Input_Device *secondary_seat = NULL;
+
+static void
+_on_destroy(Ecore_Evas *ee EINA_UNUSED)
+{
+ ecore_main_loop_quit();
+}
+
+static void
+_on_canvas_resize(Ecore_Evas *ee)
+{
+ Evas_Object *edje_obj;
+ int w, h;
+
+ edje_obj = ecore_evas_data_get(ee, "edje_obj");
+
+ ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
+ evas_object_resize(edje_obj, w, h);
+}
+
+static void
+_device_rename(Efl_Input_Device *dev)
+{
+ if (!default_seat) {
+ default_seat = dev;
+ efl_input_device_name_set(dev, "default");
+ return;
+ }
+
+ if (!secondary_seat) {
+ secondary_seat = dev;
+ efl_input_device_name_set(dev, "secondary");
+ }
+}
+
+static void
+_device_added(void *data EINA_UNUSED, const Efl_Event *event)
+{
+ Efl_Input_Device *dev = event->info;
+
+ if (efl_input_device_type_get(dev) != EFL_INPUT_DEVICE_CLASS_SEAT)
+ return;
+ _device_rename(dev);
+}
+
+static void
+_device_changed(void *data EINA_UNUSED, const Efl_Event *event)
+{
+ Efl_Input_Device *dev = event->info;
+
+ if (dev == default_seat)
+ efl_input_device_name_set(dev, "default");
+ else if (dev == secondary_seat)
+ efl_input_device_name_set(dev, "secondary");
+}
+
+int
+main(int argc EINA_UNUSED, char *argv[] EINA_UNUSED)
+{
+ const Eina_List *devices, *l;
+ Efl_Input_Device *dev;
+ Evas_Object *edje_obj;
+ Ecore_Evas *ee;
+ Evas *evas;
+
+ if (!ecore_evas_init())
+ return EXIT_FAILURE;
+
+ if (!edje_init())
+ goto shutdown_ecore_evas;
+
+ ee = ecore_evas_new(NULL, 0, 0, WIDTH, HEIGHT, NULL);
+ if (!ee) goto shutdown_edje;
+
+ ecore_evas_callback_destroy_set(ee, _on_destroy);
+ ecore_evas_callback_resize_set(ee, _on_canvas_resize);
+ ecore_evas_title_set(ee, "Edje Focus Example");
+
+ evas = ecore_evas_get(ee);
+
+ edje_obj = edje_object_add(evas);
+
+ if (!edje_object_file_set(edje_obj, EDJE_FILE, GROUPNAME))
+ printf("failed to set file %s.\n", EDJE_FILE);
+
+ evas_object_move(edje_obj, 0, 0);
+ evas_object_resize(edje_obj, WIDTH, HEIGHT);
+ evas_object_show(edje_obj);
+ ecore_evas_data_set(ee, "edje_obj", edje_obj);
+
+ devices = evas_device_list(evas, NULL);
+ EINA_LIST_FOREACH(devices, l, dev)
+ {
+ if (efl_input_device_type_get(dev) == EFL_INPUT_DEVICE_CLASS_SEAT)
+ _device_rename(dev);
+ }
+ efl_event_callback_add(evas, EFL_CANVAS_EVENT_DEVICE_ADDED,
+ _device_added, NULL);
+ efl_event_callback_add(evas, EFL_CANVAS_EVENT_DEVICE_CHANGED,
+ _device_changed, NULL);
+
+ printf("Running example on evas engine %s\n",
+ ecore_evas_engine_name_get(ee));
+
+ ecore_evas_show(ee);
+
+ ecore_main_loop_begin();
+
+ ecore_evas_free(ee);
+ ecore_evas_shutdown();
+ edje_shutdown();
+
+ return EXIT_SUCCESS;
+
+shutdown_edje:
+ edje_shutdown();
+shutdown_ecore_evas:
+ ecore_evas_shutdown();
+
+ return EXIT_FAILURE;
+}
diff --git a/src/examples/edje/multiseat_system_names.edc b/src/examples/edje/multiseat_system_names.edc
new file mode 100644
index 0000000000..3f79109749
--- /dev/null
+++ b/src/examples/edje/multiseat_system_names.edc
@@ -0,0 +1,175 @@
+collections {
+
+ group {
+ name: "example/main";
+ min: 400 400;
+ use_system_seat_names: 1;
+
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ }
+ }
+
+ part {
+ name: "title";
+ type: TEXT;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 0 0;
+ to: "bg";
+ }
+ rel2 {
+ relative: 1.0 0.2;
+ offset: -1 -1;
+ to: "bg";
+ }
+ text {
+ text: "Multiseat System Names Example";
+ size: 16;
+ font: "sans";
+ min: 1 1;
+ }
+ }
+ }
+
+ part {
+ name: "button_bg,1";
+ type: RECT;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.1 0.25;
+ rel2.relative: 0.45 0.8;
+ color: 200 200 200 255;
+ }
+ description {
+ state: "over,default" 0.0;
+ inherit: "default" 0.0;
+ color: 200 120 120 255;
+ }
+ description {
+ state: "over,secondary" 0.0;
+ inherit: "default" 0.0;
+ color: 120 120 200 255;
+ }
+ }
+
+ part {
+ name: "button,1";
+ type: RECT;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: "button_bg,1";
+ offset: 10 10;
+ }
+ rel2 {
+ to: "button_bg,1";
+ offset: -11 -11;
+ }
+ color: 200 200 200 255;
+ }
+ }
+
+ part {
+ name: "button_bg,2";
+ type: RECT;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.55 0.25;
+ rel2.relative: 0.9 0.8;
+ color: 200 200 200 255;
+ }
+ description {
+ state: "over,default" 0.0;
+ inherit: "default" 0.0;
+ color: 200 120 120 255;
+ }
+ description {
+ state: "over,secondary" 0.0;
+ inherit: "default" 0.0;
+ color: 120 120 200 255;
+ }
+ }
+
+ part {
+ name: "button,2";
+ type: RECT;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: "button_bg,2";
+ offset: 10 10;
+ }
+ rel2 {
+ to: "button_bg,2";
+ offset: -11 -11;
+ }
+ color: 200 200 200 255;
+ }
+ }
+ }
+
+ programs {
+ program {
+ name: "button,1,over,default";
+ signal: "mouse,in,default";
+ source: "button_bg,1";
+ action: STATE_SET "over,default" 0.0;
+ target: "button_bg,1";
+ }
+
+ program {
+ name: "button,1,over,secondary";
+ signal: "mouse,in,secondary";
+ source: "button_bg,1";
+ action: STATE_SET "over,secondary" 0.0;
+ target: "button_bg,1";
+ }
+
+ program {
+ name: "button,1,out";
+ signal: "mouse,out";
+ source: "button_bg,1";
+ action: STATE_SET "default" 0.0;
+ target: "button_bg,1";
+ }
+
+ program {
+ name: "button,2,over,default";
+ signal: "mouse,in,default";
+ source: "button_bg,2";
+ action: STATE_SET "over,default" 0.0;
+ target: "button_bg,2";
+ }
+
+ program {
+ name: "button,2,over,secondary";
+ signal: "mouse,in,secondary";
+ source: "button_bg,2";
+ action: STATE_SET "over,secondary" 0.0;
+ target: "button_bg,2";
+ }
+
+ program {
+ name: "button,2,out";
+ signal: "mouse,out";
+ source: "button_bg,2";
+ action: STATE_SET "default" 0.0;
+ target: "button_bg,2";
+ }
+ }
+ }
+}