edje_codegen: Adding a basic example

Patch by: Flavio Ceolin <flavio.ceolin@profusion.mobi>



SVN revision: 76148
This commit is contained in:
Flavio Ceolin 2012-09-04 21:43:26 +00:00 committed by Gustavo Sverzut Barbieri
parent d626583b92
commit 6237f9ec9d
5 changed files with 233 additions and 1 deletions

View File

@ -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])

View File

@ -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.*

View File

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

View File

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

View File

@ -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)