edje/examples: add example of use_custom_seat_names flag

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.
This commit is contained in:
Bruno Dilly 2016-12-14 17:47:18 -02:00
parent d11a8d3682
commit 6979be8215
4 changed files with 329 additions and 0 deletions

1
edje/.gitignore vendored
View File

@ -14,6 +14,7 @@
/edje-entry
/edje-focus
/edje-multiseat
/edje-multiseat-custom-names
/edje-multisense
/edje-perspective
/edje-signals-messages

View File

@ -46,6 +46,7 @@ focus.edc \
lua_script.edc \
messages_echo.edc \
multiseat.edc \
multiseat_custom_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-custom-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-custom-names \
edje-perspective \
edje-signals-messages \
edje-swallow \

View File

@ -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_custom_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;
}

View File

@ -0,0 +1,175 @@
collections {
group {
name: "example/main";
min: 400 400;
use_custom_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";
}
}
}
}