summaryrefslogtreecommitdiff
path: root/src/examples/edje/signals2.c
blob: b43b8878c8df0054da6bf756590bd1c39fc7b55f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#ifdef HAVE_CONFIG_H
#include "config.h"
#else
#define PACKAGE_EXAMPLES_DIR "."
#define EINA_UNUSED
#endif

#include <Ecore.h>
#include <Ecore_Evas.h>
#include <Edje.h>
#include <stdio.h>

#define WIDTH     (700)
#define HEIGHT    (700)

static void
_on_delete(Ecore_Evas *ee EINA_UNUSED)
{
   ecore_main_loop_quit();
}

/* mouse over signals */
static void
_on_mouse_over(void *data, Evas_Object *edje_obj,
               const char *emission EINA_UNUSED, const char *source EINA_UNUSED)
{
   Evas *evas;
   int x, y, mouseX, mouseY;

   evas = (Evas *) data;
   evas_object_geometry_get(edje_obj, &x, &y, NULL, NULL);

   evas_pointer_output_xy_get(evas, &mouseX, &mouseY);

   if ((rand() % 2) == 0)
     x += ((mouseX - x) + (x / 4 + mouseY / 2));
   else
     x -= ((mouseX - x) + (x / 4 + mouseY / 2));

   if ((rand() % 2) == 0)
     y += ((mouseY - y) + (y / 4 + mouseX / 2));
   else
     y -= ((mouseY - y) + (y / 4 + mouseX / 2));

   if (x > WIDTH)
     x = WIDTH;
   else if (x < 0) x = 0;

   if (y > HEIGHT)
     y = HEIGHT;
   else if (y < 0) y = 0;

   fprintf(stdout, "Moving object to - (%d,%d)\n", x, y);

   evas_object_move(edje_obj, x, y);
}

int
main(int argc EINA_UNUSED, char **argv)
{
   const char *edje_file = "signalsBubble.edj";
   char edje_file_path[PATH_MAX];
   Eina_Prefix *pfx;
   Ecore_Evas *ee;
   Evas *evas;
   Evas_Object *bg;
   Evas_Object *edje_obj;

   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;

   ee = ecore_evas_new(NULL, 0, 0, WIDTH, HEIGHT, NULL);

   if (!ee) goto eina_prefix_free;

   ecore_evas_callback_delete_request_set(ee, _on_delete);
   ecore_evas_title_set(ee, "Edje animations and signals");

   evas = ecore_evas_get(ee);

   bg = evas_object_rectangle_add(evas);
   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
   evas_object_show(bg);

   ecore_evas_object_associate(ee, bg, ECORE_EVAS_OBJECT_ASSOCIATE_BASE);
   evas_object_focus_set(bg, EINA_TRUE);

   edje_obj = edje_object_add(evas);

   snprintf(edje_file_path, sizeof(edje_file_path), "%s/examples/%s",
            eina_prefix_data_get(pfx), edje_file);

   if (!edje_object_file_set(edje_obj, edje_file_path, "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 eina_prefix_free;
     }

   edje_object_signal_callback_add(edje_obj, "mouse,move", "part_image",
                                   _on_mouse_over, evas);
   evas_object_resize(edje_obj, 63, 63);
   evas_object_move(edje_obj, 50, 50);
   evas_object_show(edje_obj);

   ecore_evas_show(ee);

   ecore_main_loop_begin();

   eina_prefix_free(pfx);
   ecore_evas_free(ee);
   edje_shutdown();
   ecore_evas_shutdown();

   return EXIT_SUCCESS;

   eina_prefix_free: eina_prefix_free(pfx);

   shutdown_edje: edje_shutdown();

   shutdown_ecore_evas: ecore_evas_shutdown();

   return EXIT_FAILURE;
}