efl
852 строки · 29.5 Кб
1#ifdef HAVE_CONFIG_H
2# include "elementary_config.h"
3#endif
4#include <Efl_Ui.h>
5#include <Elementary.h>
6
7static const struct {
8Evas_Image_Orient orient;
9const char *name;
10} photocam_orient[] = {
11{ EVAS_IMAGE_ORIENT_NONE, "None" },
12{ EVAS_IMAGE_ORIENT_90, "Rotate 90" },
13{ EVAS_IMAGE_ORIENT_180, "Rotate 180" },
14{ EVAS_IMAGE_ORIENT_270, "Rotate 270" },
15{ EVAS_IMAGE_FLIP_HORIZONTAL, "Horizontal Flip" },
16{ EVAS_IMAGE_FLIP_VERTICAL, "Vertical Flip" },
17{ EVAS_IMAGE_FLIP_TRANSPOSE, "Transpose" },
18{ EVAS_IMAGE_FLIP_TRANSVERSE, "Transverse" },
19{ 0, NULL }
20};
21
22static void
23my_ph_clicked(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
24{
25printf("clicked\n");
26}
27
28static void
29my_ph_ch(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
30{
31Evas_Object *photocam = data;
32Evas_Image_Orient orient = elm_radio_value_get(obj);
33
34elm_photocam_image_orient_set(photocam, orient);
35fprintf(stderr, "Set %i and got %i\n",
36orient, elm_photocam_image_orient_get(photocam));
37}
38
39static void
40my_ph_press(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
41{
42printf("press\n");
43}
44
45static void
46my_ph_longpressed(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
47{
48printf("longpressed\n");
49}
50
51static void
52my_ph_clicked_double(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
53{
54printf("clicked,double\n");
55}
56
57static void
58my_ph_load(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
59{
60printf("load\n");
61}
62
63static void
64my_ph_loaded(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
65{
66printf("loaded\n");
67}
68
69static void
70my_ph_load_details(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
71{
72printf("load,details\n");
73}
74
75static void
76my_ph_loaded_details(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
77{
78printf("loaded,details\n");
79}
80
81static void
82my_ph_zoom_start(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
83{
84printf("zoom,start\n");
85}
86
87static void
88my_ph_zoom_stop(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
89{
90printf("zoom,stop\n");
91}
92
93static void
94my_ph_zoom_change(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
95{
96printf("zoom,change\n");
97}
98
99static void
100my_ph_anim_start(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
101{
102printf("anim,start\n");
103}
104
105static void
106my_ph_anim_stop(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
107{
108printf("anim,stop\n");
109}
110
111static void
112my_ph_drag_start(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
113{
114printf("drag,start\n");
115}
116
117static void
118my_ph_drag_stop(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
119{
120printf("drag_stop\n");
121}
122
123static void
124my_ph_scroll(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
125{
126int x, y, w, h;
127elm_photocam_image_region_get(obj, &x, &y, &w, &h);
128printf("scroll %i %i %ix%i\n", x, y, w, h);
129}
130
131static void
132my_bt_open(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
133{
134Evas_Object *ph = data;
135const char *file = event_info;
136
137if (file && !eina_str_has_extension(file, ".edj"))
138elm_photocam_file_set(ph, file);
139else if (file)
140{
141Eina_List *grps = edje_file_collection_list(file);
142
143if (eina_list_count(grps) > 0)
144{
145const char *grp = eina_list_nth(grps, 0);
146efl_file_simple_load(ph, file, grp);
147printf("Successfully set the edje file: %s, group: %s\n", file, grp);
148}
149else printf("Failed to set edje file\n");
150
151eina_list_free(grps);
152}
153}
154
155static void
156my_bt_show_reg(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
157{
158elm_photocam_image_region_show(data, 30, 50, 500, 300);
159}
160
161static void
162my_bt_bring_reg(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
163
164{
165elm_photocam_image_region_bring_in(data, 800, 300, 500, 300);
166}
167
168static void
169my_bt_zoom_in(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
170{
171double zoom;
172
173zoom = elm_photocam_zoom_get(data);
174if (zoom > 1.5)
175zoom -= 0.5;
176else if ((zoom > 1.0) && (zoom <= 1.5))
177zoom = 1.0;
178else if (EINA_DBL_EQ(zoom, 1.0))
179zoom = 0.8;
180else
181zoom = zoom * zoom;
182
183elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_MANUAL);
184if (zoom >= (1.0 / 32.0))
185{
186printf("zoom %f\n", zoom);
187elm_photocam_zoom_set(data, zoom);
188}
189}
190
191static void
192my_bt_zoom_out(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
193{
194double zoom;
195
196zoom = elm_photocam_zoom_get(data);
197zoom += 0.5;
198elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_MANUAL);
199if (zoom <= 256.0)
200{
201printf("zoom %f\n", zoom);
202elm_photocam_zoom_set(data, zoom);
203}
204}
205
206static void
207my_bt_pause(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
208{
209elm_photocam_paused_set(data, !elm_photocam_paused_get(data));
210}
211
212static void
213my_bt_zoom_fit_in(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
214{
215elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT_IN);
216}
217
218static void
219my_bt_zoom_fit(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
220{
221elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT);
222}
223
224static void
225my_bt_zoom_fill(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
226{
227elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_AUTO_FILL);
228}
229
230static void
231my_bt_gesture(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
232{
233elm_photocam_gesture_enabled_set(data, !elm_photocam_gesture_enabled_get(data));
234}
235
236static void
237my_ph_download_progress(void *data EINA_UNUSED, Evas_Object *obj, void *event_info)
238{
239Elm_Photocam_Progress *info = (Elm_Photocam_Progress *) event_info;
240Evas_Object *pb = evas_object_data_get(obj, "progressbar");
241
242if (info->total > 0.0)
243elm_progressbar_value_set(pb, info->now / info->total);
244}
245
246static void
247my_ph_download_done(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
248{
249Evas_Object *pb = evas_object_data_get(obj, "progressbar");
250
251evas_object_hide(pb);
252}
253
254static void
255_photocam_mouse_wheel_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
256{
257Evas_Object *photocam = data;
258Evas_Event_Mouse_Wheel *ev = (Evas_Event_Mouse_Wheel*) event_info;
259int zoom;
260double val;
261
262//unset the mouse wheel
263ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
264
265zoom = elm_photocam_zoom_get(photocam);
266if ((ev->z>0) && (zoom == 1)) return;
267
268if (ev->z > 0)
269zoom /= 2;
270else
271zoom *= 2;
272
273val = 1;
274int _zoom = zoom;
275while (_zoom>1)
276{
277_zoom /= 2;
278val++;
279}
280
281elm_photocam_zoom_mode_set(photocam, ELM_PHOTOCAM_ZOOM_MODE_MANUAL);
282if (zoom >= 1) elm_photocam_zoom_set(photocam, zoom);
283}
284
285static void
286_photocam_move_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
287{
288int x, y, w, h;
289
290evas_object_geometry_get(obj, &x, &y, &w, &h);
291evas_object_resize(data, w, h);
292evas_object_move(data, x, y);
293}
294
295void
296test_photocam(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
297{
298char buf[PATH_MAX];
299Evas_Object *win, *ph, *tb2, *bt, *box, *rd, *rdg = NULL;
300int i;
301Evas_Object *rect = NULL;
302win = elm_win_util_standard_add("photocam", "PhotoCam");
303elm_win_autodel_set(win, EINA_TRUE);
304
305ph = elm_photocam_add(win);
306evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
307snprintf(buf, sizeof(buf), "%s/images/rock_01.jpg", elm_app_data_dir_get());
308elm_photocam_file_set(ph, buf);
309elm_win_resize_object_add(win, ph);
310
311// this rectangle hooks the event prior to scroller
312rect = evas_object_rectangle_add(evas_object_evas_get(win));
313evas_object_color_set(rect, 0, 0, 0, 0);
314evas_object_repeat_events_set(rect, EINA_TRUE);
315evas_object_show(rect);
316evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_WHEEL, _photocam_mouse_wheel_cb, ph);
317evas_object_raise(rect);
318
319// add move/resize callbacks to resize rect manually
320evas_object_event_callback_add(ph, EVAS_CALLBACK_RESIZE, _photocam_move_resize_cb, rect);
321evas_object_event_callback_add(ph, EVAS_CALLBACK_MOVE, _photocam_move_resize_cb, rect);
322
323evas_object_smart_callback_add(ph, "clicked", my_ph_clicked, win);
324evas_object_smart_callback_add(ph, "press", my_ph_press, win);
325evas_object_smart_callback_add(ph, "longpressed", my_ph_longpressed, win);
326evas_object_smart_callback_add(ph, "clicked,double", my_ph_clicked_double, win);
327evas_object_smart_callback_add(ph, "load", my_ph_load, win);
328evas_object_smart_callback_add(ph, "loaded", my_ph_loaded, win);
329evas_object_smart_callback_add(ph, "load,details", my_ph_load_details, win);
330evas_object_smart_callback_add(ph, "loaded,details", my_ph_loaded_details, win);
331evas_object_smart_callback_add(ph, "zoom,start", my_ph_zoom_start, win);
332evas_object_smart_callback_add(ph, "zoom,stop", my_ph_zoom_stop, win);
333evas_object_smart_callback_add(ph, "zoom,change", my_ph_zoom_change, win);
334evas_object_smart_callback_add(ph, "scroll,anim,start", my_ph_anim_start, win);
335evas_object_smart_callback_add(ph, "scroll,anim,stop", my_ph_anim_stop, win);
336evas_object_smart_callback_add(ph, "scroll,drag,start", my_ph_drag_start, win);
337evas_object_smart_callback_add(ph, "scroll,drag,stop", my_ph_drag_stop, win);
338evas_object_smart_callback_add(ph, "scroll", my_ph_scroll, win);
339
340evas_object_show(ph);
341
342tb2 = elm_table_add(win);
343evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
344elm_win_resize_object_add(win, tb2);
345
346bt = elm_button_add(win);
347elm_object_text_set(bt, "Z -");
348evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_out, ph);
349evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
350evas_object_size_hint_align_set(bt, 0.1, 0.1);
351elm_table_pack(tb2, bt, 0, 0, 1, 1);
352evas_object_show(bt);
353
354bt = elm_fileselector_button_add(win);
355elm_object_text_set(bt, "Select Photo");
356evas_object_smart_callback_add(bt, "file,chosen", my_bt_open, ph);
357evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
358evas_object_size_hint_align_set(bt, 0.5, 0.1);
359elm_table_pack(tb2, bt, 1, 0, 1, 1);
360evas_object_show(bt);
361
362bt = elm_button_add(win);
363elm_object_text_set(bt, "Z +");
364evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_in, ph);
365evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
366evas_object_size_hint_align_set(bt, 0.9, 0.1);
367elm_table_pack(tb2, bt, 2, 0, 1, 1);
368evas_object_show(bt);
369
370bt = elm_button_add(win);
371elm_object_text_set(bt, "Show 30,50 500x300");
372evas_object_smart_callback_add(bt, "clicked", my_bt_show_reg, ph);
373evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
374evas_object_size_hint_align_set(bt, 0.1, 0.5);
375elm_table_pack(tb2, bt, 0, 1, 1, 1);
376evas_object_show(bt);
377
378bt = elm_button_add(win);
379elm_object_text_set(bt, "Bring 800,300 500x300");
380evas_object_smart_callback_add(bt, "clicked", my_bt_bring_reg, ph);
381evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
382evas_object_size_hint_align_set(bt, 0.9, 0.5);
383elm_table_pack(tb2, bt, 2, 1, 1, 1);
384evas_object_show(bt);
385
386box = elm_box_add(win);
387elm_box_horizontal_set(box, EINA_TRUE);
388evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
389evas_object_size_hint_align_set(box, 0.0, 0.9);
390elm_table_pack(tb2, box, 0, 2, 1, 1);
391evas_object_show(box);
392
393bt = elm_button_add(win);
394elm_object_text_set(bt, "Pause On/Off");
395evas_object_smart_callback_add(bt, "clicked", my_bt_pause, ph);
396evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
397elm_box_pack_end(box, bt);
398evas_object_show(bt);
399
400bt = elm_button_add(win);
401elm_object_text_set(bt, "Gesture On/Off");
402evas_object_smart_callback_add(bt, "clicked", my_bt_gesture, ph);
403evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
404elm_box_pack_end(box, bt);
405evas_object_show(bt);
406
407box = elm_box_add(win);
408elm_box_horizontal_set(box, EINA_TRUE);
409evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
410evas_object_size_hint_align_set(box, 0.9, 0.9);
411elm_table_pack(tb2, box, 2, 2, 1, 1);
412
413bt = elm_button_add(win);
414elm_object_text_set(bt, "Fit");
415evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_fit, ph);
416evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
417elm_box_pack_end(box, bt);
418evas_object_show(bt);
419
420bt = elm_button_add(win);
421elm_object_text_set(bt, "Fit_In");
422evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_fit_in, ph);
423evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
424elm_box_pack_end(box, bt);
425evas_object_show(bt);
426
427bt = elm_button_add(win);
428elm_object_text_set(bt, "Fill");
429evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_fill, ph);
430evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
431elm_box_pack_end(box, bt);
432evas_object_show(bt);
433
434box = elm_box_add(tb2);
435elm_box_horizontal_set(box, EINA_TRUE);
436evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
437evas_object_size_hint_align_set(box, 0.9, 0.9);
438elm_table_pack(tb2, box, 1, 2, 1, 1);
439evas_object_show(box);
440
441for (i = 0; photocam_orient[i].name; ++i)
442{
443rd = elm_radio_add(win);
444evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
445elm_radio_state_value_set(rd, photocam_orient[i].orient);
446elm_object_text_set(rd, photocam_orient[i].name);
447elm_box_pack_end(box, rd);
448evas_object_show(rd);
449evas_object_smart_callback_add(rd, "changed", my_ph_ch, ph);
450if (!rdg)
451rdg = rd;
452else
453elm_radio_group_add(rd, rdg);
454}
455evas_object_show(box);
456evas_object_show(tb2);
457
458evas_object_resize(win, 800 * elm_config_scale_get(),
459800 * elm_config_scale_get());
460evas_object_show(win);
461}
462
463void
464test_photocam_remote(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
465{
466Evas_Object *win, *ph, *tb2, *bt, *box, *pb, *rd;
467Evas_Object *rdg = NULL;
468Evas_Object *rect = NULL;
469// these were just testing - use the "select photo" browser to select one
470static const char *url = "http://eoimages.gsfc.nasa.gov/images/imagerecords/73000/73751/world.topo.bathy.200407.3x21600x10800.jpg";
471int i;
472
473win = elm_win_util_standard_add("photocam", "PhotoCam");
474elm_win_autodel_set(win, EINA_TRUE);
475
476ph = elm_photocam_add(win);
477evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
478elm_win_resize_object_add(win, ph);
479
480// this rectangle hooks the event prior to scroller
481rect = evas_object_rectangle_add(evas_object_evas_get(win));
482evas_object_color_set(rect, 0, 0, 0, 0);
483evas_object_repeat_events_set(rect, EINA_TRUE);
484evas_object_show(rect);
485evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_WHEEL, _photocam_mouse_wheel_cb, ph);
486evas_object_raise(rect);
487
488// add move/resize callbacks to resize rect manually
489evas_object_event_callback_add(ph, EVAS_CALLBACK_RESIZE, _photocam_move_resize_cb, rect);
490evas_object_event_callback_add(ph, EVAS_CALLBACK_MOVE, _photocam_move_resize_cb, rect);
491
492evas_object_smart_callback_add(ph, "clicked", my_ph_clicked, win);
493evas_object_smart_callback_add(ph, "press", my_ph_press, win);
494evas_object_smart_callback_add(ph, "longpressed", my_ph_longpressed, win);
495evas_object_smart_callback_add(ph, "clicked,double", my_ph_clicked_double, win);
496evas_object_smart_callback_add(ph, "load", my_ph_load, win);
497evas_object_smart_callback_add(ph, "loaded", my_ph_loaded, win);
498evas_object_smart_callback_add(ph, "load,details", my_ph_load_details, win);
499evas_object_smart_callback_add(ph, "loaded,details", my_ph_loaded_details, win);
500evas_object_smart_callback_add(ph, "zoom,start", my_ph_zoom_start, win);
501evas_object_smart_callback_add(ph, "zoom,stop", my_ph_zoom_stop, win);
502evas_object_smart_callback_add(ph, "zoom,change", my_ph_zoom_change, win);
503evas_object_smart_callback_add(ph, "scroll,anim,start", my_ph_anim_start, win);
504evas_object_smart_callback_add(ph, "scroll,anim,stop", my_ph_anim_stop, win);
505evas_object_smart_callback_add(ph, "scroll,drag,start", my_ph_drag_start, win);
506evas_object_smart_callback_add(ph, "scroll,drag,stop", my_ph_drag_stop, win);
507evas_object_smart_callback_add(ph, "scroll", my_ph_scroll, win);
508evas_object_smart_callback_add(ph, "download,progress", my_ph_download_progress, win);
509evas_object_smart_callback_add(ph, "download,done", my_ph_download_done, win);
510
511elm_photocam_file_set(ph, url);
512evas_object_show(ph);
513
514tb2 = elm_table_add(win);
515evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
516elm_win_resize_object_add(win, tb2);
517
518bt = elm_button_add(win);
519elm_object_text_set(bt, "Z -");
520evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_out, ph);
521evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
522evas_object_size_hint_align_set(bt, 0.1, 0.1);
523elm_table_pack(tb2, bt, 0, 0, 1, 1);
524evas_object_show(bt);
525
526bt = elm_button_add(win);
527elm_object_text_set(bt, "Z +");
528evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_in, ph);
529evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
530evas_object_size_hint_align_set(bt, 0.9, 0.1);
531elm_table_pack(tb2, bt, 2, 0, 1, 1);
532evas_object_show(bt);
533
534bt = elm_button_add(win);
535elm_object_text_set(bt, "Show 30,50 500x300");
536evas_object_smart_callback_add(bt, "clicked", my_bt_show_reg, ph);
537evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
538evas_object_size_hint_align_set(bt, 0.1, 0.5);
539elm_table_pack(tb2, bt, 0, 1, 1, 1);
540evas_object_show(bt);
541
542pb = elm_progressbar_add(win);
543elm_progressbar_unit_format_set(pb, "Loading %.2f %%");
544evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
545evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, EVAS_HINT_FILL);
546elm_table_pack(tb2, pb, 1, 1, 1, 1);
547evas_object_show(pb);
548evas_object_data_set(ph, "progressbar", pb);
549
550bt = elm_button_add(win);
551elm_object_text_set(bt, "Bring 800,300 500x300");
552evas_object_smart_callback_add(bt, "clicked", my_bt_bring_reg, ph);
553evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
554evas_object_size_hint_align_set(bt, 0.9, 0.5);
555elm_table_pack(tb2, bt, 2, 1, 1, 1);
556evas_object_show(bt);
557
558box = elm_box_add(win);
559elm_box_horizontal_set(box, EINA_TRUE);
560evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
561evas_object_size_hint_align_set(box, 0.0, 0.9);
562elm_table_pack(tb2, box, 0, 2, 1, 1);
563evas_object_show(box);
564
565bt = elm_button_add(win);
566elm_object_text_set(bt, "Pause On/Off");
567evas_object_smart_callback_add(bt, "clicked", my_bt_pause, ph);
568evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
569elm_box_pack_end(box, bt);
570evas_object_show(bt);
571
572bt = elm_button_add(win);
573elm_object_text_set(bt, "Gesture On/Off");
574evas_object_smart_callback_add(bt, "clicked", my_bt_gesture, ph);
575evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
576elm_box_pack_end(box, bt);
577evas_object_show(bt);
578
579box = elm_box_add(win);
580elm_box_horizontal_set(box, EINA_TRUE);
581evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
582evas_object_size_hint_align_set(box, 0.9, 0.9);
583elm_table_pack(tb2, box, 2, 2, 1, 1);
584
585bt = elm_button_add(win);
586elm_object_text_set(bt, "Fit");
587evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_fit, ph);
588evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
589elm_box_pack_end(box, bt);
590evas_object_show(bt);
591
592bt = elm_button_add(win);
593elm_object_text_set(bt, "Fit_In");
594evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_fit_in, ph);
595evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
596elm_box_pack_end(box, bt);
597evas_object_show(bt);
598
599bt = elm_button_add(win);
600elm_object_text_set(bt, "Fill");
601evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_fill, ph);
602evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
603elm_box_pack_end(box, bt);
604evas_object_show(bt);
605
606box = elm_box_add(tb2);
607elm_box_horizontal_set(box, EINA_TRUE);
608evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
609evas_object_size_hint_align_set(box, 0.9, 0.9);
610elm_table_pack(tb2, box, 1, 2, 1, 1);
611evas_object_show(box);
612
613for (i = 0; photocam_orient[i].name; ++i)
614{
615rd = elm_radio_add(win);
616evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
617elm_radio_state_value_set(rd, photocam_orient[i].orient);
618elm_object_text_set(rd, photocam_orient[i].name);
619elm_box_pack_end(box, rd);
620evas_object_show(rd);
621evas_object_smart_callback_add(rd, "changed", my_ph_ch, ph);
622if (!rdg)
623rdg = rd;
624else
625elm_radio_group_add(rd, rdg);
626}
627evas_object_show(box);
628evas_object_show(tb2);
629
630evas_object_resize(win, 800 * elm_config_scale_get(),
631800 * elm_config_scale_get());
632evas_object_show(win);
633}
634
635static const struct {
636unsigned char val;
637const char *name;
638} photocam_icons[] = {
639{0, "home"},
640{1, "folder"},
641{2, "network-server"},
642{3, "folder-music"},
643{4, "user-trash"},
644{5, "start-here"},
645{6, "folder-download"},
646{7, "emblem-system"},
647{8, "emblem-mail"},
648{9, "None"},
649{0, NULL}
650};
651
652static void
653_radio_changed_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
654{
655unsigned char index = elm_radio_value_get(obj);
656efl_ui_image_icon_set(data, photocam_icons[index].name);
657printf("icon is %s\n", efl_ui_image_icon_get(data));
658}
659
660void
661test_photocam_icon(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
662{
663Evas_Object *win, *ph, *tb2, *bt, *bx, *rd;
664Evas_Object *rdg = NULL;
665Evas_Object *rect = NULL;
666int i;
667
668win = elm_win_util_standard_add("photocam", "PhotoCam");
669elm_win_autodel_set(win, EINA_TRUE);
670
671ph = elm_photocam_add(win);
672evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
673efl_ui_image_icon_set(ph, "home");
674elm_win_resize_object_add(win, ph);
675
676rect = evas_object_rectangle_add(evas_object_evas_get(win));
677evas_object_color_set(rect, 0, 0, 0, 0);
678evas_object_repeat_events_set(rect, EINA_TRUE);
679evas_object_show(rect);
680evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_WHEEL, _photocam_mouse_wheel_cb, ph);
681evas_object_raise(rect);
682
683evas_object_event_callback_add(ph, EVAS_CALLBACK_RESIZE, _photocam_move_resize_cb, rect);
684evas_object_event_callback_add(ph, EVAS_CALLBACK_MOVE, _photocam_move_resize_cb, rect);
685
686evas_object_smart_callback_add(ph, "clicked", my_ph_clicked, win);
687evas_object_smart_callback_add(ph, "press", my_ph_press, win);
688evas_object_smart_callback_add(ph, "longpressed", my_ph_longpressed, win);
689evas_object_smart_callback_add(ph, "clicked,double", my_ph_clicked_double, win);
690evas_object_smart_callback_add(ph, "load", my_ph_load, win);
691evas_object_smart_callback_add(ph, "loaded", my_ph_loaded, win);
692evas_object_smart_callback_add(ph, "load,details", my_ph_load_details, win);
693evas_object_smart_callback_add(ph, "loaded,details", my_ph_loaded_details, win);
694evas_object_smart_callback_add(ph, "zoom,start", my_ph_zoom_start, win);
695evas_object_smart_callback_add(ph, "zoom,stop", my_ph_zoom_stop, win);
696evas_object_smart_callback_add(ph, "zoom,change", my_ph_zoom_change, win);
697evas_object_smart_callback_add(ph, "scroll,anim,start", my_ph_anim_start, win);
698evas_object_smart_callback_add(ph, "scroll,anim,stop", my_ph_anim_stop, win);
699evas_object_smart_callback_add(ph, "scroll,drag,start", my_ph_drag_start, win);
700evas_object_smart_callback_add(ph, "scroll,drag,stop", my_ph_drag_stop, win);
701evas_object_smart_callback_add(ph, "scroll", my_ph_scroll, win);
702
703evas_object_show(ph);
704
705tb2 = elm_table_add(win);
706evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
707elm_win_resize_object_add(win, tb2);
708
709bt = elm_button_add(win);
710elm_object_text_set(bt, "Z -");
711evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_out, ph);
712evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
713evas_object_size_hint_align_set(bt, 0.1, 0.1);
714elm_table_pack(tb2, bt, 0, 0, 1, 1);
715evas_object_show(bt);
716
717bt = elm_button_add(win);
718elm_object_text_set(bt, "Z +");
719evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_in, ph);
720evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
721evas_object_size_hint_align_set(bt, 0.9, 0.1);
722elm_table_pack(tb2, bt, 2, 0, 1, 1);
723evas_object_show(bt);
724
725evas_object_show(tb2);
726
727bx = elm_box_add(win);
728evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
729elm_box_horizontal_set(bx, EINA_TRUE);
730elm_table_pack(tb2, bx, 1, 2, 1, 1);
731evas_object_show(bx);
732
733for (i = 0; photocam_icons[i].name; ++i)
734{
735rd = elm_radio_add(win);
736evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
737elm_object_text_set(rd, photocam_icons[i].name);
738efl_ui_radio_state_value_set(rd, photocam_icons[i].val);
739elm_box_pack_end(bx, rd);
740evas_object_smart_callback_add(rd, "changed", _radio_changed_cb, ph);
741if(!rdg)
742rdg = rd;
743else
744elm_radio_group_add(rd, rdg);
745evas_object_show(rd);
746}
747
748evas_object_resize(win, 150 * elm_config_scale_get(),
749150 * elm_config_scale_get());
750evas_object_show(win);
751}
752
753static void
754_zoomable_clicked_cb(void *data EINA_UNUSED, const Efl_Event *ev)
755{
756Eina_Bool paused;
757
758paused = efl_player_paused_get(ev->object);
759printf("image clicked! paused = %d\n", paused);
760efl_player_paused_set(ev->object, !paused);
761}
762
763static void
764_zoomable_move_resize_cb(void *data, const Efl_Event *ev)
765{
766Eina_Rect r;
767
768r = efl_gfx_entity_geometry_get(ev->object);
769efl_gfx_entity_size_set(data, EINA_SIZE2D(r.w, r.h));
770efl_gfx_entity_position_set(data, r.pos);
771}
772
773static void
774_zoomable_mouse_wheel_cb(void *data, const Efl_Event *e)
775{
776Eo *zoomable = data;
777Efl_Input_Pointer *ev = e->info;
778int zoom, _zoom, delta, val;
779
780zoom = efl_ui_zoom_level_get(zoomable);
781delta = efl_input_pointer_wheel_delta_get(ev);
782if ((delta > 0) && (zoom == 1)) return;
783
784if (delta > 0)
785zoom /= 2;
786else
787zoom *= 2;
788
789val = 1;
790_zoom = zoom;
791while (_zoom>1)
792{
793_zoom /= 2;
794val++;
795}
796
797efl_ui_zoom_mode_set(zoomable, EFL_UI_ZOOM_MODE_MANUAL);
798if (zoom >= 1) efl_ui_zoom_level_set(zoomable, zoom);
799}
800
801void
802test_image_zoomable_animated(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
803{
804Eo *win, *bx, *zoomable, *rect;
805char buf[PATH_MAX];
806
807win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),
808efl_text_set(efl_added, "Efl.Ui.Image_Zoomable animation"),
809efl_ui_win_autodel_set(efl_added, EINA_TRUE));
810
811bx = efl_add(EFL_UI_BOX_CLASS, win,
812efl_ui_layout_orientation_set(efl_added, EFL_UI_LAYOUT_ORIENTATION_VERTICAL),
813efl_content_set(win, efl_added));
814
815efl_add(EFL_UI_TEXTBOX_CLASS, bx,
816efl_text_set(efl_added, "Clicking the image will play/pause animation."),
817efl_text_interactive_editable_set(efl_added, EINA_FALSE),
818efl_gfx_hint_weight_set(efl_added, 1, 0),
819efl_text_font_family_set(efl_added, "Sans"),
820efl_text_font_size_set(efl_added, 10),
821efl_text_color_set(efl_added, 255, 255, 255, 255),
822efl_pack(bx, efl_added)
823);
824
825snprintf(buf, sizeof(buf), "%s/images/animated_logo.gif", elm_app_data_dir_get());
826zoomable = efl_add(EFL_UI_IMAGE_ZOOMABLE_CLASS, win,
827efl_file_set(efl_added, buf),
828efl_file_load(efl_added),
829efl_pack(bx, efl_added),
830efl_event_callback_add(efl_added, EFL_INPUT_EVENT_CLICKED, _zoomable_clicked_cb, NULL)
831);
832
833if (efl_playable_get(zoomable))
834{
835printf("animation is available for this image.\n");
836efl_player_autoplay_set(zoomable, EINA_TRUE);
837efl_player_playback_loop_set(zoomable, EINA_TRUE);
838}
839
840rect = efl_add(EFL_CANVAS_RECTANGLE_CLASS, win,
841efl_gfx_color_set(efl_added, 0, 0, 0, 0),
842efl_gfx_stack_raise_to_top(efl_added),
843efl_canvas_object_repeat_events_set(efl_added, EINA_TRUE),
844efl_event_callback_add(efl_added, EFL_EVENT_POINTER_WHEEL, _zoomable_mouse_wheel_cb, zoomable)
845);
846
847// add move/resize callbacks to resize rect manually
848efl_event_callback_add(zoomable, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, _zoomable_move_resize_cb, rect);
849efl_event_callback_add(zoomable, EFL_GFX_ENTITY_EVENT_POSITION_CHANGED, _zoomable_move_resize_cb, rect);
850
851efl_gfx_entity_size_set(win, EINA_SIZE2D(300, 320));
852}
853