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
text.edc \
table.edc \
box.edc \
+ codegen.edc \
drag.edc \
edje_example.edc \
embryo_custom_state.edc \
test.png \
Vera.ttf \
duck.wav \
+ edje-codegen-example.c \
edje_example.c \
edje-basic.c \
edje-swallow.c \
-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 = \
edje-basic \
edje-box \
edje-box2 \
+ edje-codegen-example \
edje-color-class \
edje-drag\
edje-perspective \
endif
clean-local:
- rm -f *.edj
+ rm -f *.edj codegen_example_generated.*
--- /dev/null
+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";
+ }
+ }
+ }
+}
--- /dev/null
+/**
+ * @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 <myapp_myobj> <input.edj> <a_group> <source.c> <header.h>
+ *
+ * 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 <Ecore.h>
+#include <Ecore_Evas.h>
+#include <Edje.h>
+
+#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;
+}