aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/edje/src/examples/edje-drag.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/edje/src/examples/edje-drag.c')
-rw-r--r--libraries/edje/src/examples/edje-drag.c157
1 files changed, 157 insertions, 0 deletions
diff --git a/libraries/edje/src/examples/edje-drag.c b/libraries/edje/src/examples/edje-drag.c
new file mode 100644
index 0000000..78e2e72
--- /dev/null
+++ b/libraries/edje/src/examples/edje-drag.c
@@ -0,0 +1,157 @@
1/**
2 * Simple Edje example illustrating drag functions.
3 *
4 * You'll need at least one Evas engine built for it (excluding the
5 * buffer one). See stdout/stderr for output.
6 *
7 * @verbatim
8 * edje_cc drag.edc && gcc -o drag-box drag-box.c `pkg-config --libs --cflags evas ecore ecore-evas edje`
9 * @endverbatim
10 */
11
12#ifdef HAVE_CONFIG_H
13#include "config.h"
14#else
15#define PACKAGE_EXAMPLES_DIR "."
16#define __UNUSED__
17#endif
18
19#include <Ecore.h>
20#include <Ecore_Evas.h>
21#include <Edje.h>
22
23#define WIDTH 300
24#define HEIGHT 300
25
26#define RECTW 30
27#define RECTH 30
28
29#define NRECTS 20
30
31static const char *PARTNAME = "example/knob";
32
33static const char *edje_file_path = PACKAGE_EXAMPLES_DIR "/drag.edj";
34
35struct _App {
36 Ecore_Evas *ee;
37 Evas_Object *edje;
38 Evas_Object *bg;
39};
40
41static void
42_on_destroy(Ecore_Evas *ee __UNUSED__)
43{
44 ecore_main_loop_quit();
45}
46
47/* here just to keep our example's window size and background image's
48 * size in synchrony */
49static void
50_canvas_resize_cb(Ecore_Evas *ee)
51{
52 int w, h;
53 struct _App *app = ecore_evas_data_get(ee, "app");
54
55 ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
56 evas_object_resize(app->bg, w, h);
57 evas_object_resize(app->edje, w, h);
58}
59
60static void
61_bg_key_down(void *data, Evas *e, Evas_Object *o __UNUSED__, void *event_info)
62{
63 struct _App *app = data;
64 Evas_Event_Key_Down *ev = event_info;
65 Evas_Object *rect;
66 Eina_Bool r;
67
68
69 if (!strcmp(ev->keyname, "Down"))
70 {
71 edje_object_part_drag_step(app->edje, PARTNAME, 0, 1.0);
72 }
73 else if (!strcmp(ev->keyname, "Up"))
74 {
75 edje_object_part_drag_step(app->edje, PARTNAME, 0, -1.0);
76 }
77 else if (!strcmp(ev->keyname, "m"))
78 {
79 edje_object_part_drag_value_set(app->edje, PARTNAME, 0.0, 0.5);
80 }
81 else if (!strcmp(ev->keyname, "Prior"))
82 {
83 edje_object_part_drag_page(app->edje, PARTNAME, 0.0, -1.0);
84 }
85 else if (!strcmp(ev->keyname, "Next"))
86 {
87 edje_object_part_drag_page(app->edje, PARTNAME, 0.0, 1.0);
88 }
89 else if (!strcmp(ev->keyname, "Escape"))
90 ecore_main_loop_quit();
91 else
92 printf("unhandled key: %s\n", ev->keyname);
93}
94
95static void
96_knob_moved_cb(void *data, Evas_Object *o, const char *emission, const char *source)
97{
98 double val;
99 edje_object_part_drag_value_get(o, PARTNAME, NULL, &val);
100 printf("value changed to: %0.3f\n", val);
101}
102
103int
104main(void)
105{
106 Evas *evas;
107 struct _App app;
108 int i;
109
110 ecore_evas_init();
111 edje_init();
112
113 /* this will give you a window with an Evas canvas under the first
114 * engine available */
115 app.ee = ecore_evas_new(NULL, 0, 0, WIDTH, HEIGHT, NULL);
116
117 ecore_evas_callback_destroy_set(app.ee, _on_destroy);
118 ecore_evas_callback_resize_set(app.ee, _canvas_resize_cb);
119 ecore_evas_title_set(app.ee, "Edje Box Example");
120 ecore_evas_show(app.ee);
121
122 ecore_evas_data_set(app.ee, "app", &app);
123
124 evas = ecore_evas_get(app.ee);
125
126 app.bg = evas_object_rectangle_add(evas);
127 evas_object_color_set(app.bg, 255, 255, 255, 255);
128 evas_object_resize(app.bg, WIDTH, HEIGHT);
129 evas_object_focus_set(app.bg, EINA_TRUE);
130 evas_object_show(app.bg);
131
132 evas_object_event_callback_add(app.bg, EVAS_CALLBACK_KEY_DOWN, _bg_key_down, &app);
133
134 app.edje = edje_object_add(evas);
135
136 edje_object_file_set(app.edje, edje_file_path, "example/group");
137 evas_object_move(app.edje, 0, 0);
138 evas_object_resize(app.edje, WIDTH, HEIGHT);
139 evas_object_show(app.edje);
140
141 edje_object_part_drag_size_set(app.edje, PARTNAME, 1.0, 0.4);
142
143 if (!edje_object_part_drag_step_set(app.edje, PARTNAME, 0.0, 0.1))
144 printf("error when setting drag step size.\n");
145
146 if (!edje_object_part_drag_page_set(app.edje, PARTNAME, 0.0, 0.3))
147 printf("error when setting drag page step size.\n");
148
149 edje_object_signal_callback_add(app.edje, "drag", PARTNAME, _knob_moved_cb, &app);
150
151 ecore_main_loop_begin();
152
153 ecore_evas_free(app.ee);
154 ecore_evas_shutdown();
155 edje_shutdown();
156 return 0;
157}