diff --git a/legacy/edje/configure.ac b/legacy/edje/configure.ac index 565a1807a0..a196b52392 100644 --- a/legacy/edje/configure.ac +++ b/legacy/edje/configure.ac @@ -97,6 +97,7 @@ AC_ARG_ENABLE([amalgamation], AM_CONDITIONAL([EDJE_AMALGAMATION], [test "x${do_amalgamation}" = "xyes"]) EFL_WITH_BIN([edje], [edje-cc], [edje_cc]) +EFL_WITH_BIN([edje], [edje-codegen], [edje_codegen]) EFL_ENABLE_BIN([edje-cc]) EFL_ENABLE_BIN([edje-decc]) diff --git a/legacy/edje/src/examples/Makefile.am b/legacy/edje/src/examples/Makefile.am index b83189eaf0..a4ba23a22f 100644 --- a/legacy/edje/src/examples/Makefile.am +++ b/legacy/edje/src/examples/Makefile.am @@ -5,6 +5,9 @@ EDJE_CC_FLAGS_VERBOSE_0 = EDJE_CC_FLAGS_VERBOSE_1 = -v EDJE_CC_FLAGS = $(EDJE_CC_FLAGS_$(V)) -id $(srcdir) -fd $(srcdir) +EDJE_CODEGEN = @edje_codegen@ +EDJE_CODEGEN_FLAGS = --prefix=codegen_example + examplesdir = $(datadir)/$(PACKAGE)/examples if ENABLE_MULTISENSE @@ -21,6 +24,7 @@ EDCS = \ text.edc \ table.edc \ box.edc \ + codegen.edc \ drag.edc \ edje_example.edc \ embryo_custom_state.edc \ @@ -60,6 +64,7 @@ files_DATA = \ test.png \ Vera.ttf \ duck.wav \ + edje-codegen-example.c \ edje_example.c \ edje-basic.c \ edje-swallow.c \ @@ -92,6 +97,13 @@ AM_CPPFLAGS = \ -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \ @EDJE_CFLAGS@ +codegen_example_generated.c codegen_example_generated.h: codegen.edj + $(EDJE_CODEGEN) $(EDJE_CODEGEN_FLAGS) codegen.edj example_group $(builddir)/codegen_example_generated.c $(builddir)/codegen_example_generated.h + +edje_codegen_example_SOURCES = \ + codegen_example_generated.c \ + edje-codegen-example.c + files_DATA += $(EDJS) examples_PROGRAMS = \ @@ -99,6 +111,7 @@ examples_PROGRAMS = \ edje-basic \ edje-box \ edje-box2 \ + edje-codegen-example \ edje-color-class \ edje-drag\ edje-perspective \ @@ -118,4 +131,4 @@ LDADD = $(top_builddir)/src/lib/libedje.la @EDJE_LIBS@ endif clean-local: - rm -f *.edj + rm -f *.edj codegen_example_generated.* diff --git a/legacy/edje/src/examples/codegen.edc b/legacy/edje/src/examples/codegen.edc new file mode 100644 index 0000000000..788a900df9 --- /dev/null +++ b/legacy/edje/src/examples/codegen.edc @@ -0,0 +1,73 @@ +collections { + group { + name: "sel_group"; + parts { + part { + name: "rect"; + type: RECT; + description { + state: "default" 0.0; + color: 0 255 0 255; /* green */ + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + } + } + group { + name: "example_group"; + max: 500 500; + min: 50 50; + + styles { + style { + name: "textblock_style"; + base: "font=Sans font_size=22 color=#600 wrap=word"; + tag: "br" "\n"; + tag: "hilight" "+ font_weight=Bold"; + tag: "b" "+ font_weight=Bold"; + tag: "tab" "\t"; + } + } + parts { + part { + name: "part_one"; + type: TEXT; + api: "part_one"; + description { + min: 50 50; + state: "default" 0.0; + color: 0 0 255 255; /* blue */ + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 0.3; + text { + font: "arial"; + size: 22; + min: 1 1; + } + } + } + part { + name: "part_two"; + type: SWALLOW; + api: "part_two" "The swallow"; + description { + min: 50 50; + state: "default" 0.0; + rel1.relative: 0.0 0.6; + rel2.relative: 1.0 1.0; + } + } + } + + programs { + program { + name: "part_below.hovered"; + signal: "mouse,move"; + source: "part_one"; + action: SIGNAL_EMIT "mouse,over" "part_below"; + api: "part_below_over" "mouse over"; + } + } + } +} diff --git a/legacy/edje/src/examples/edje-codegen-example.c b/legacy/edje/src/examples/edje-codegen-example.c new file mode 100644 index 0000000000..8ce06e61b7 --- /dev/null +++ b/legacy/edje/src/examples/edje-codegen-example.c @@ -0,0 +1,144 @@ +/** + * @since 1.8.0 + * Simple Edje example illustrating the edje_codegen usage. + * + * edje_codegen is a tool that generates code to acessing the parts and programs + * with the keyword "api" of a specified group. This tool make easier working + * with edje avoiding common errors caused by typos when acessing the parts + * and/or programs. + * + * To use the edje_codegen: + * edje_codegen --prefix + * + * In case of this example: + * edje_codegen --prefix=codegen_example codegen.edj group_example \ + codegen_example_generated.c codegen_example_generated.h + * + * @verbatim + * edje_cc codegen.edc && edje_codegen --prefix=codegen_example codegen.edj \ + * example_group codegen_example_generated.c codegen_example_generated.h + * gcc -c codegen_example_generated.c `pkg-config --libs --cflags ecore-evas edje` + * gcc -o edje-codegen-example codegen_example_generated.o \ + * edje-codegen-example.c `pkg-config --libs --cflags ecore-evas edje` + * @endverbatim + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#else +# define __UNUSED__ +#endif + +#include "codegen_example_generated.h" + +#include +#include +#include + +#define WIDTH (300) +#define HEIGHT (300) + +static void +_on_delete(Ecore_Evas *ee) +{ + ecore_main_loop_quit(); +} + +static void +_on_mouse_over(void *data, Evas_Object *obj, const char *emission, + const char *source) +{ + static int i = 0; + + printf("Mouse over, source: %s - emission: %s\n", + source, emission); + if (i++ == 5) + { + Evas_Object *rect = codegen_example_part_two_get(obj); + evas_object_color_set(rect, 0, 255, 0, 255); + codegen_example_part_below_over_callback_del_full(obj,_on_mouse_over, + NULL); + } +} + +int +main(int argc, char *argv[]) +{ + char edje_file_path[PATH_MAX]; + const char *edje_file = "codegen.edj"; + Ecore_Evas *ee; + Evas *evas; + Evas_Object *bg; + Evas_Object *edje_obj; + Evas_Object *red_rect; + Eina_Prefix *pfx; + + if (!ecore_evas_init()) + return EXIT_FAILURE; + + if (!edje_init()) + goto shutdown_ecore_evas; + + pfx = eina_prefix_new(argv[0], main, + "EDJE_EXAMPLES", + "edje/examples", + edje_file, + PACKAGE_BIN_DIR, + PACKAGE_LIB_DIR, + PACKAGE_DATA_DIR, + PACKAGE_DATA_DIR); + if (!pfx) + goto shutdown_edje; + + /* this will give you a window with an Evas canvas under the first + * engine available */ + ee = ecore_evas_new(NULL, 0, 0, WIDTH, HEIGHT, NULL); + if (!ee) + goto free_prefix; + + ecore_evas_callback_delete_request_set(ee, _on_delete); + ecore_evas_title_set(ee, "Edje text Example"); + + evas = ecore_evas_get(ee); + + bg = evas_object_rectangle_add(evas); + evas_object_color_set(bg, 255, 255, 255, 255); /* white bg */ + evas_object_move(bg, 0, 0); /* at canvas' origin */ + evas_object_resize(bg, WIDTH, HEIGHT); /* covers full canvas */ + evas_object_show(bg); + ecore_evas_object_associate(ee, bg, ECORE_EVAS_OBJECT_ASSOCIATE_BASE); + + edje_obj = edje_object_add(evas); + edje_object_file_set(edje_obj, edje_file, "example_group"); + evas_object_move(edje_obj, 20, 20); + evas_object_resize(edje_obj, WIDTH - 40, HEIGHT - 40); + evas_object_show(edje_obj); + + codegen_example_part_one_set(edje_obj, "CODEGEN_EXAMPLE"); + codegen_example_part_below_over_callback_add(edje_obj, _on_mouse_over, NULL); + + red_rect = evas_object_rectangle_add(evas); + evas_object_color_set(red_rect, 255, 0, 0, 255); /* white bg */ + codegen_example_part_two_set(edje_obj, red_rect); + evas_object_show(red_rect); + + ecore_evas_show(ee); + + ecore_main_loop_begin(); + + eina_prefix_free(pfx); + ecore_evas_free(ee); + ecore_evas_shutdown(); + edje_shutdown(); + + return EXIT_SUCCESS; + + free_prefix: + eina_prefix_free(pfx); + shutdown_edje: + edje_shutdown(); + shutdown_ecore_evas: + ecore_evas_shutdown(); + + return EXIT_FAILURE; +} diff --git a/legacy/edje/src/lib/Edje.h b/legacy/edje/src/lib/Edje.h index 59ddfe6eb2..e770e34c26 100644 --- a/legacy/edje/src/lib/Edje.h +++ b/legacy/edje/src/lib/Edje.h @@ -93,6 +93,7 @@ You may use different tools to edit and view the generated ".edj" files, for instance: - edje_player (provided by Edje) + - edje_codegen (provided by Edje) @since 1.8.0 - editje (http://trac.enlightenment.org/e/wiki/Editje) - edje_viewer (http://trac.enlightenment.org/e/wiki/Edje_Viewer)