Edje basics example 2

In this example we will show how to load an image and move it across the window.

To load the image to our program, it needs to be declared in the .edc using the images block:

images{
image: "bubble.png" COMP;
}
Note
COMP means that we are using a lossless compression

Then to be able to use it in our window we must declare a part for this image:

part{
name: "part_image";
type: IMAGE;
description{
image{
normal: "bubble.png";
}
}
}

Now we move to our .c file, you will notice this define:

#define WALK 10

This means how fast we want to move the image across the screen

To load our edje file we will use this command, we do just like the last example (Basic example):

if(!edje_object_file_set(edje_obj, edje_file, "image_group"))
{
int err = edje_object_load_error_get(edje_obj);
const char *errmsg = edje_load_error_str(err);
fprintf(stderr, "Could not load the edje file - reason:%s\n", errmsg);
goto shutdown_edje;
}
evas_object_move(edje_obj, 50, 50);
evas_object_resize(edje_obj, 64, 64);
evas_object_show(edje_obj);

If we want to move our image, we need to add a callback to be able to do this, so we define:

To get the position of the image we use this:

evas_object_geometry_get(edje_obj, &x, &y, NULL, NULL);

Now we use the if's to check in what direction the user wants to move the image then we move it:

if(strcmp(ev->key,"Escape") == 0)
{
}
else if(strcmp(ev->key, "Down") == 0)
{
y+=WALK;
}
else if(strcmp(ev->key, "Up") == 0)
{
y-=WALK;
}
else if(strcmp(ev->key, "Right") == 0)
{
x+=WALK;
}
else if(strcmp(ev->key, "Left") == 0)
{
x-=WALK;
}
else
{
printf("Key %s not supported.\nCommands:%s", ev->key, commands);
return;
}
evas_object_move(edje_obj, x, y);

The example's window should look like this picture:

The complete .edc file:

collections {
group {
name: "image_group";
max: 500 500;
min: 50 50;
images{
image: "bubble.png" COMP;
}
parts{
part{
name: "part_image";
type: IMAGE;
description{
image{
normal: "bubble.png";
}
}
}
}
}
}

And the source code:

#ifdef HAVE_CONFIG_H
# include "config.h"
#else
# define EINA_UNUSED
#endif
#ifndef PACKAGE_DATA_DIR
#define PACKAGE_DATA_DIR "."
#endif
#include <stdio.h>
#include <Eina.h>
#include <Ecore.h>
#include <Ecore_Evas.h>
#include <Edje.h>
#define WIDTH (700)
#define HEIGHT (700)
#define WALK 10
static const char commands[] = "commands are:\nEsc - Exit\nUp - move image up\nDown - move image down\n"\
"Right - move image to right\nLeft - move image to left\n";
static void
_on_key_down(void *data,
void *einfo)
{
Evas_Object *edje_obj;
int x,y;
ev = (Evas_Event_Key_Down *)einfo;
edje_obj = (Evas_Object *)data;
evas_object_geometry_get(edje_obj, &x, &y, NULL, NULL);
if(strcmp(ev->key,"Escape") == 0)
{
}
else if(strcmp(ev->key, "Down") == 0)
{
y+=WALK;
}
else if(strcmp(ev->key, "Up") == 0)
{
y-=WALK;
}
else if(strcmp(ev->key, "Right") == 0)
{
x+=WALK;
}
else if(strcmp(ev->key, "Left") == 0)
{
x-=WALK;
}
else
{
printf("Key %s not supported.\nCommands:%s", ev->key, commands);
return;
}
evas_object_move(edje_obj, x, y);
}
static void
_on_delete(Ecore_Evas *ee EINA_UNUSED)
{
}
int
main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
{
const char *edje_file = PACKAGE_DATA_DIR"/basic2.edj";
Ecore_Evas *ee;
Evas *evas;
Evas_Object *edje_obj;
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_title_set(ee, "Edje show image");
evas = ecore_evas_get(ee);
evas_object_color_set(bg, 255, 255, 255, 255); //White
evas_object_move(bg, 0, 0); //orign
evas_object_resize(bg, WIDTH, HEIGHT); //cover the window
ecore_evas_object_associate(ee, bg, ECORE_EVAS_OBJECT_ASSOCIATE_BASE);
edje_obj = edje_object_add(evas);
if(!edje_object_file_set(edje_obj, edje_file, "image_group"))
{
int err = edje_object_load_error_get(edje_obj);
const char *errmsg = edje_load_error_str(err);
fprintf(stderr, "Could not load the edje file - reason:%s\n", errmsg);
goto shutdown_edje;
}
evas_object_move(edje_obj, 50, 50);
evas_object_resize(edje_obj, 64, 64);
evas_object_show(edje_obj);
printf("%s", commands);
return EXIT_SUCCESS;
shutdown_edje:
shutdown_ecore_evas:
return EXIT_FAILURE;
}

To compile use this command:

* gcc -o edje-basic2 edje-basic2.c -DPACKAGE_BIN_DIR=\"/Where/enlightenment/is/installed/bin\"
* -DPACKAGE_LIB_DIR=\"/Where/enlightenment/is/installed/lib\"
* -DPACKAGE_DATA_DIR=\"/Where/enlightenment/is/installed/share\"
* `pkg-config --cflags --libs evas ecore ecore-evas edje`
*
* edje_cc -id /path/to/the/image basic2.edc
* 
ecore_evas_object_associate
EAPI Eina_Bool ecore_evas_object_associate(Ecore_Evas *ee, Evas_Object *obj, Ecore_Evas_Object_Associate_Flags flags)
Associates the given object to this ecore evas.
Definition: ecore_evas_util.c:223
edje_init
int edje_init(void)
Initializes the Edje library.
Definition: edje_main.c:35
ecore_evas_new
EAPI Ecore_Evas * ecore_evas_new(const char *engine_name, int x, int y, int w, int h, const char *extra_options)
Creates a new Ecore_Evas based on engine name and common parameters.
Definition: ecore_evas.c:1065
ecore_evas_shutdown
EAPI int ecore_evas_shutdown(void)
Shuts down the Ecore_Evas system.
Definition: ecore_evas.c:674
ecore_main_loop_quit
void ecore_main_loop_quit(void)
Quits the main loop once all the events currently on the queue have been processed.
Definition: ecore_main.c:1300
_Evas_Event_Key_Down
Key press event.
Definition: Evas_Legacy.h:314
EINA_UNUSED
#define EINA_UNUSED
Definition: eina_types.h:339
ecore_evas_free
EAPI void ecore_evas_free(Ecore_Evas *ee)
Frees an Ecore_Evas.
Definition: ecore_evas.c:1109
ecore_evas_title_set
EAPI void ecore_evas_title_set(Ecore_Evas *ee, const char *t)
Sets the title of an Ecore_Evas' window.
Definition: ecore_evas.c:1553
ecore_evas_init
EAPI int ecore_evas_init(void)
Inits the Ecore_Evas system.
Definition: ecore_evas.c:606
Eina.h
Eina Utility library.
Evas_Object
Efl_Canvas_Object Evas_Object
Definition: Evas_Common.h:180
ecore_evas_callback_delete_request_set
EAPI void ecore_evas_callback_delete_request_set(Ecore_Evas *ee, Ecore_Evas_Event_Cb func)
Sets a callback for Ecore_Evas delete request events.
Definition: ecore_evas.c:1202
evas_object_resize
void evas_object_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
Changes the size of the given Evas object.
Definition: evas_object_main.c:1236
Edje.h
Edje Graphical Design Library.
Ecore_Evas.h
Evas wrapper functions.
ecore_evas_get
EAPI Evas * ecore_evas_get(const Ecore_Evas *ee)
Gets an Ecore_Evas's Evas.
Definition: ecore_evas.c:1326
evas_object_geometry_get
void evas_object_geometry_get(const Evas_Object *eo_obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
Retrieves the position and (rectangular) size of the given Evas object.
Definition: evas_object_main.c:1335
evas_object_event_callback_add
void evas_object_event_callback_add(Evas_Object *eo_obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data)
Add (register) a callback function to a given Evas object event.
Definition: evas_callbacks.c:477
EVAS_CALLBACK_KEY_DOWN
@ EVAS_CALLBACK_KEY_DOWN
Key Press Event.
Definition: Evas_Common.h:419
_Evas_Event_Key_Down::key
const char * key
The logical key : (eg shift+1 == exclamation)
Definition: Evas_Legacy.h:320
ecore_main_loop_begin
void ecore_main_loop_begin(void)
Runs the application main loop.
Definition: ecore_main.c:1290
evas_object_focus_set
void evas_object_focus_set(Efl_Canvas_Object *obj, Eina_Bool focus)
Indicates that this object is the keyboard event receiver on its canvas.
Definition: efl_canvas_object_eo.legacy.c:39
evas_object_show
void evas_object_show(Evas_Object *eo_obj)
Makes the given Evas object visible.
Definition: evas_object_main.c:1814
Evas
Eo Evas
Definition: Evas_Common.h:158
EINA_TRUE
#define EINA_TRUE
Definition: eina_types.h:539
evas_object_rectangle_add
Evas_Object * evas_object_rectangle_add(Evas *e)
Adds a rectangle to the given evas.
Definition: evas_object_rectangle.c:78
evas_object_move
void evas_object_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
Move the given Evas object to the given location inside its canvas' viewport.
Definition: evas_object_main.c:1171
ecore_evas_show
EAPI void ecore_evas_show(Ecore_Evas *ee)
Shows an Ecore_Evas' window.
Definition: ecore_evas.c:1506
evas_object_color_set
void evas_object_color_set(Evas_Object *obj, int r, int g, int b, int a)
Sets the general/main color of the given Evas object to the given one.
Definition: evas_object_main.c:2024
edje_shutdown
int edje_shutdown(void)
Shuts down the Edje library.
Definition: edje_main.c:264