efl

Форк
0
/
test_photocam.c 
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

7
static const struct {
8
 Evas_Image_Orient orient;
9
 const 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

22
static void
23
my_ph_clicked(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
24
{
25
   printf("clicked\n");
26
}
27

28
static void
29
my_ph_ch(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
30
{
31
    Evas_Object *photocam = data;
32
    Evas_Image_Orient orient = elm_radio_value_get(obj);
33

34
    elm_photocam_image_orient_set(photocam, orient);
35
    fprintf(stderr, "Set %i and got %i\n",
36
            orient, elm_photocam_image_orient_get(photocam));
37
}
38

39
static void
40
my_ph_press(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
41
{
42
   printf("press\n");
43
}
44

45
static void
46
my_ph_longpressed(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
47
{
48
   printf("longpressed\n");
49
}
50

51
static void
52
my_ph_clicked_double(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
53
{
54
   printf("clicked,double\n");
55
}
56

57
static void
58
my_ph_load(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
59
{
60
   printf("load\n");
61
}
62

63
static void
64
my_ph_loaded(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
65
{
66
   printf("loaded\n");
67
}
68

69
static void
70
my_ph_load_details(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
71
{
72
   printf("load,details\n");
73
}
74

75
static void
76
my_ph_loaded_details(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
77
{
78
   printf("loaded,details\n");
79
}
80

81
static void
82
my_ph_zoom_start(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
83
{
84
   printf("zoom,start\n");
85
}
86

87
static void
88
my_ph_zoom_stop(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
89
{
90
   printf("zoom,stop\n");
91
}
92

93
static void
94
my_ph_zoom_change(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
95
{
96
   printf("zoom,change\n");
97
}
98

99
static void
100
my_ph_anim_start(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
101
{
102
   printf("anim,start\n");
103
}
104

105
static void
106
my_ph_anim_stop(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
107
{
108
   printf("anim,stop\n");
109
}
110

111
static void
112
my_ph_drag_start(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
113
{
114
   printf("drag,start\n");
115
}
116

117
static void
118
my_ph_drag_stop(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
119
{
120
   printf("drag_stop\n");
121
}
122

123
static void
124
my_ph_scroll(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
125
{
126
   int x, y, w, h;
127
   elm_photocam_image_region_get(obj, &x, &y, &w, &h);
128
   printf("scroll %i %i %ix%i\n", x, y, w, h);
129
}
130

131
static void
132
my_bt_open(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
133
{
134
   Evas_Object *ph = data;
135
   const char *file = event_info;
136

137
   if (file && !eina_str_has_extension(file, ".edj"))
138
     elm_photocam_file_set(ph, file);
139
   else if (file)
140
     {
141
        Eina_List *grps = edje_file_collection_list(file);
142

143
        if (eina_list_count(grps) > 0)
144
          {
145
             const char *grp = eina_list_nth(grps, 0);
146
             efl_file_simple_load(ph, file, grp);
147
             printf("Successfully set the edje file: %s, group: %s\n", file, grp);
148
          }
149
        else printf("Failed to set edje file\n");
150

151
        eina_list_free(grps);
152
     }
153
}
154

155
static void
156
my_bt_show_reg(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
157
{
158
   elm_photocam_image_region_show(data, 30, 50, 500, 300);
159
}
160

161
static void
162
my_bt_bring_reg(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
163

164
{
165
   elm_photocam_image_region_bring_in(data, 800, 300, 500, 300);
166
}
167

168
static void
169
my_bt_zoom_in(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
170
{
171
   double zoom;
172

173
   zoom = elm_photocam_zoom_get(data);
174
   if (zoom > 1.5)
175
     zoom -= 0.5;
176
   else if ((zoom > 1.0) && (zoom <= 1.5))
177
     zoom = 1.0;
178
   else if (EINA_DBL_EQ(zoom, 1.0))
179
     zoom = 0.8;
180
   else
181
     zoom = zoom * zoom;
182

183
   elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_MANUAL);
184
   if (zoom >= (1.0 / 32.0))
185
     {
186
        printf("zoom %f\n", zoom);
187
        elm_photocam_zoom_set(data, zoom);
188
     }
189
}
190

191
static void
192
my_bt_zoom_out(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
193
{
194
   double zoom;
195

196
   zoom = elm_photocam_zoom_get(data);
197
   zoom += 0.5;
198
   elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_MANUAL);
199
   if (zoom <= 256.0)
200
     {
201
        printf("zoom %f\n", zoom);
202
        elm_photocam_zoom_set(data, zoom);
203
     }
204
}
205

206
static void
207
my_bt_pause(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
208
{
209
   elm_photocam_paused_set(data, !elm_photocam_paused_get(data));
210
}
211

212
static void
213
my_bt_zoom_fit_in(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
214
{
215
   elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT_IN);
216
}
217

218
static void
219
my_bt_zoom_fit(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
220
{
221
   elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT);
222
}
223

224
static void
225
my_bt_zoom_fill(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
226
{
227
   elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_AUTO_FILL);
228
}
229

230
static void
231
my_bt_gesture(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
232
{
233
  elm_photocam_gesture_enabled_set(data, !elm_photocam_gesture_enabled_get(data));
234
}
235

236
static void
237
my_ph_download_progress(void *data EINA_UNUSED, Evas_Object *obj, void *event_info)
238
{
239
   Elm_Photocam_Progress *info = (Elm_Photocam_Progress *) event_info;
240
   Evas_Object *pb = evas_object_data_get(obj, "progressbar");
241

242
   if (info->total > 0.0)
243
     elm_progressbar_value_set(pb, info->now / info->total);
244
}
245

246
static void
247
my_ph_download_done(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
248
{
249
   Evas_Object *pb = evas_object_data_get(obj, "progressbar");
250

251
   evas_object_hide(pb);
252
}
253

254
static void
255
_photocam_mouse_wheel_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
256
{
257
   Evas_Object *photocam = data;
258
   Evas_Event_Mouse_Wheel *ev = (Evas_Event_Mouse_Wheel*) event_info;
259
   int zoom;
260
   double val;
261

262
   //unset the mouse wheel
263
   ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
264

265
   zoom = elm_photocam_zoom_get(photocam);
266
   if ((ev->z>0) && (zoom == 1)) return;
267

268
   if (ev->z > 0)
269
     zoom /= 2;
270
   else
271
     zoom *= 2;
272

273
   val = 1;
274
   int _zoom = zoom;
275
   while (_zoom>1)
276
     {
277
        _zoom /= 2;
278
        val++;
279
     }
280

281
   elm_photocam_zoom_mode_set(photocam, ELM_PHOTOCAM_ZOOM_MODE_MANUAL);
282
   if (zoom >= 1) elm_photocam_zoom_set(photocam, zoom);
283
}
284

285
static void
286
_photocam_move_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
287
{
288
   int x, y, w, h;
289

290
   evas_object_geometry_get(obj, &x, &y, &w, &h);
291
   evas_object_resize(data, w, h);
292
   evas_object_move(data, x, y);
293
}
294

295
void
296
test_photocam(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
297
{
298
   char buf[PATH_MAX];
299
   Evas_Object *win, *ph, *tb2, *bt, *box, *rd, *rdg = NULL;
300
   int i;
301
   Evas_Object *rect = NULL;
302
   win = elm_win_util_standard_add("photocam", "PhotoCam");
303
   elm_win_autodel_set(win, EINA_TRUE);
304

305
   ph = elm_photocam_add(win);
306
   evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
307
   snprintf(buf, sizeof(buf), "%s/images/rock_01.jpg", elm_app_data_dir_get());
308
   elm_photocam_file_set(ph, buf);
309
   elm_win_resize_object_add(win, ph);
310

311
   // this rectangle hooks the event prior to scroller
312
   rect = evas_object_rectangle_add(evas_object_evas_get(win));
313
   evas_object_color_set(rect, 0, 0, 0, 0);
314
   evas_object_repeat_events_set(rect, EINA_TRUE);
315
   evas_object_show(rect);
316
   evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_WHEEL, _photocam_mouse_wheel_cb, ph);
317
   evas_object_raise(rect);
318

319
   // add move/resize callbacks to resize rect manually
320
   evas_object_event_callback_add(ph, EVAS_CALLBACK_RESIZE, _photocam_move_resize_cb, rect);
321
   evas_object_event_callback_add(ph, EVAS_CALLBACK_MOVE, _photocam_move_resize_cb, rect);
322

323
   evas_object_smart_callback_add(ph, "clicked", my_ph_clicked, win);
324
   evas_object_smart_callback_add(ph, "press", my_ph_press, win);
325
   evas_object_smart_callback_add(ph, "longpressed", my_ph_longpressed, win);
326
   evas_object_smart_callback_add(ph, "clicked,double", my_ph_clicked_double, win);
327
   evas_object_smart_callback_add(ph, "load", my_ph_load, win);
328
   evas_object_smart_callback_add(ph, "loaded", my_ph_loaded, win);
329
   evas_object_smart_callback_add(ph, "load,details", my_ph_load_details, win);
330
   evas_object_smart_callback_add(ph, "loaded,details", my_ph_loaded_details, win);
331
   evas_object_smart_callback_add(ph, "zoom,start", my_ph_zoom_start, win);
332
   evas_object_smart_callback_add(ph, "zoom,stop", my_ph_zoom_stop, win);
333
   evas_object_smart_callback_add(ph, "zoom,change", my_ph_zoom_change, win);
334
   evas_object_smart_callback_add(ph, "scroll,anim,start", my_ph_anim_start, win);
335
   evas_object_smart_callback_add(ph, "scroll,anim,stop", my_ph_anim_stop, win);
336
   evas_object_smart_callback_add(ph, "scroll,drag,start", my_ph_drag_start, win);
337
   evas_object_smart_callback_add(ph, "scroll,drag,stop", my_ph_drag_stop, win);
338
   evas_object_smart_callback_add(ph, "scroll", my_ph_scroll, win);
339

340
   evas_object_show(ph);
341

342
   tb2 = elm_table_add(win);
343
   evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
344
   elm_win_resize_object_add(win, tb2);
345

346
   bt = elm_button_add(win);
347
   elm_object_text_set(bt, "Z -");
348
   evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_out, ph);
349
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
350
   evas_object_size_hint_align_set(bt, 0.1, 0.1);
351
   elm_table_pack(tb2, bt, 0, 0, 1, 1);
352
   evas_object_show(bt);
353

354
   bt = elm_fileselector_button_add(win);
355
   elm_object_text_set(bt, "Select Photo");
356
   evas_object_smart_callback_add(bt, "file,chosen", my_bt_open, ph);
357
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
358
   evas_object_size_hint_align_set(bt, 0.5, 0.1);
359
   elm_table_pack(tb2, bt, 1, 0, 1, 1);
360
   evas_object_show(bt);
361

362
   bt = elm_button_add(win);
363
   elm_object_text_set(bt, "Z +");
364
   evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_in, ph);
365
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
366
   evas_object_size_hint_align_set(bt, 0.9, 0.1);
367
   elm_table_pack(tb2, bt, 2, 0, 1, 1);
368
   evas_object_show(bt);
369

370
   bt = elm_button_add(win);
371
   elm_object_text_set(bt, "Show 30,50 500x300");
372
   evas_object_smart_callback_add(bt, "clicked", my_bt_show_reg, ph);
373
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
374
   evas_object_size_hint_align_set(bt, 0.1, 0.5);
375
   elm_table_pack(tb2, bt, 0, 1, 1, 1);
376
   evas_object_show(bt);
377

378
   bt = elm_button_add(win);
379
   elm_object_text_set(bt, "Bring 800,300 500x300");
380
   evas_object_smart_callback_add(bt, "clicked", my_bt_bring_reg, ph);
381
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
382
   evas_object_size_hint_align_set(bt, 0.9, 0.5);
383
   elm_table_pack(tb2, bt, 2, 1, 1, 1);
384
   evas_object_show(bt);
385

386
   box = elm_box_add(win);
387
   elm_box_horizontal_set(box, EINA_TRUE);
388
   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
389
   evas_object_size_hint_align_set(box, 0.0, 0.9);
390
   elm_table_pack(tb2, box, 0, 2, 1, 1);
391
   evas_object_show(box);
392

393
   bt = elm_button_add(win);
394
   elm_object_text_set(bt, "Pause On/Off");
395
   evas_object_smart_callback_add(bt, "clicked", my_bt_pause, ph);
396
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
397
   elm_box_pack_end(box, bt);
398
   evas_object_show(bt);
399

400
   bt = elm_button_add(win);
401
   elm_object_text_set(bt, "Gesture On/Off");
402
   evas_object_smart_callback_add(bt, "clicked", my_bt_gesture, ph);
403
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
404
   elm_box_pack_end(box, bt);
405
   evas_object_show(bt);
406

407
   box = elm_box_add(win);
408
   elm_box_horizontal_set(box, EINA_TRUE);
409
   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
410
   evas_object_size_hint_align_set(box, 0.9, 0.9);
411
   elm_table_pack(tb2, box, 2, 2, 1, 1);
412

413
   bt = elm_button_add(win);
414
   elm_object_text_set(bt, "Fit");
415
   evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_fit, ph);
416
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
417
   elm_box_pack_end(box, bt);
418
   evas_object_show(bt);
419

420
   bt = elm_button_add(win);
421
   elm_object_text_set(bt, "Fit_In");
422
   evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_fit_in, ph);
423
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
424
   elm_box_pack_end(box, bt);
425
   evas_object_show(bt);
426

427
   bt = elm_button_add(win);
428
   elm_object_text_set(bt, "Fill");
429
   evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_fill, ph);
430
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
431
   elm_box_pack_end(box, bt);
432
   evas_object_show(bt);
433

434
   box = elm_box_add(tb2);
435
   elm_box_horizontal_set(box, EINA_TRUE);
436
   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
437
   evas_object_size_hint_align_set(box, 0.9, 0.9);
438
   elm_table_pack(tb2, box, 1, 2, 1, 1);
439
   evas_object_show(box);
440

441
   for (i = 0; photocam_orient[i].name; ++i)
442
     {
443
        rd = elm_radio_add(win);
444
        evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
445
        elm_radio_state_value_set(rd, photocam_orient[i].orient);
446
        elm_object_text_set(rd, photocam_orient[i].name);
447
        elm_box_pack_end(box, rd);
448
        evas_object_show(rd);
449
        evas_object_smart_callback_add(rd, "changed", my_ph_ch, ph);
450
        if (!rdg)
451
          rdg = rd;
452
        else
453
          elm_radio_group_add(rd, rdg);
454
     }
455
   evas_object_show(box);
456
   evas_object_show(tb2);
457

458
   evas_object_resize(win, 800 * elm_config_scale_get(),
459
                           800 * elm_config_scale_get());
460
   evas_object_show(win);
461
}
462

463
void
464
test_photocam_remote(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
465
{
466
   Evas_Object *win, *ph, *tb2, *bt, *box, *pb, *rd;
467
   Evas_Object *rdg = NULL;
468
   Evas_Object *rect = NULL;
469
   // these were just testing - use the "select photo" browser to select one
470
   static const char *url = "http://eoimages.gsfc.nasa.gov/images/imagerecords/73000/73751/world.topo.bathy.200407.3x21600x10800.jpg";
471
   int i;
472

473
   win = elm_win_util_standard_add("photocam", "PhotoCam");
474
   elm_win_autodel_set(win, EINA_TRUE);
475

476
   ph = elm_photocam_add(win);
477
   evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
478
   elm_win_resize_object_add(win, ph);
479

480
   // this rectangle hooks the event prior to scroller
481
   rect = evas_object_rectangle_add(evas_object_evas_get(win));
482
   evas_object_color_set(rect, 0, 0, 0, 0);
483
   evas_object_repeat_events_set(rect, EINA_TRUE);
484
   evas_object_show(rect);
485
   evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_WHEEL, _photocam_mouse_wheel_cb, ph);
486
   evas_object_raise(rect);
487

488
   // add move/resize callbacks to resize rect manually
489
   evas_object_event_callback_add(ph, EVAS_CALLBACK_RESIZE, _photocam_move_resize_cb, rect);
490
   evas_object_event_callback_add(ph, EVAS_CALLBACK_MOVE, _photocam_move_resize_cb, rect);
491

492
   evas_object_smart_callback_add(ph, "clicked", my_ph_clicked, win);
493
   evas_object_smart_callback_add(ph, "press", my_ph_press, win);
494
   evas_object_smart_callback_add(ph, "longpressed", my_ph_longpressed, win);
495
   evas_object_smart_callback_add(ph, "clicked,double", my_ph_clicked_double, win);
496
   evas_object_smart_callback_add(ph, "load", my_ph_load, win);
497
   evas_object_smart_callback_add(ph, "loaded", my_ph_loaded, win);
498
   evas_object_smart_callback_add(ph, "load,details", my_ph_load_details, win);
499
   evas_object_smart_callback_add(ph, "loaded,details", my_ph_loaded_details, win);
500
   evas_object_smart_callback_add(ph, "zoom,start", my_ph_zoom_start, win);
501
   evas_object_smart_callback_add(ph, "zoom,stop", my_ph_zoom_stop, win);
502
   evas_object_smart_callback_add(ph, "zoom,change", my_ph_zoom_change, win);
503
   evas_object_smart_callback_add(ph, "scroll,anim,start", my_ph_anim_start, win);
504
   evas_object_smart_callback_add(ph, "scroll,anim,stop", my_ph_anim_stop, win);
505
   evas_object_smart_callback_add(ph, "scroll,drag,start", my_ph_drag_start, win);
506
   evas_object_smart_callback_add(ph, "scroll,drag,stop", my_ph_drag_stop, win);
507
   evas_object_smart_callback_add(ph, "scroll", my_ph_scroll, win);
508
   evas_object_smart_callback_add(ph, "download,progress", my_ph_download_progress, win);
509
   evas_object_smart_callback_add(ph, "download,done", my_ph_download_done, win);
510

511
   elm_photocam_file_set(ph, url);
512
   evas_object_show(ph);
513

514
   tb2 = elm_table_add(win);
515
   evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
516
   elm_win_resize_object_add(win, tb2);
517

518
   bt = elm_button_add(win);
519
   elm_object_text_set(bt, "Z -");
520
   evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_out, ph);
521
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
522
   evas_object_size_hint_align_set(bt, 0.1, 0.1);
523
   elm_table_pack(tb2, bt, 0, 0, 1, 1);
524
   evas_object_show(bt);
525

526
   bt = elm_button_add(win);
527
   elm_object_text_set(bt, "Z +");
528
   evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_in, ph);
529
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
530
   evas_object_size_hint_align_set(bt, 0.9, 0.1);
531
   elm_table_pack(tb2, bt, 2, 0, 1, 1);
532
   evas_object_show(bt);
533

534
   bt = elm_button_add(win);
535
   elm_object_text_set(bt, "Show 30,50 500x300");
536
   evas_object_smart_callback_add(bt, "clicked", my_bt_show_reg, ph);
537
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
538
   evas_object_size_hint_align_set(bt, 0.1, 0.5);
539
   elm_table_pack(tb2, bt, 0, 1, 1, 1);
540
   evas_object_show(bt);
541

542
   pb = elm_progressbar_add(win);
543
   elm_progressbar_unit_format_set(pb, "Loading %.2f %%");
544
   evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
545
   evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, EVAS_HINT_FILL);
546
   elm_table_pack(tb2, pb, 1, 1, 1, 1);
547
   evas_object_show(pb);
548
   evas_object_data_set(ph, "progressbar", pb);
549

550
   bt = elm_button_add(win);
551
   elm_object_text_set(bt, "Bring 800,300 500x300");
552
   evas_object_smart_callback_add(bt, "clicked", my_bt_bring_reg, ph);
553
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
554
   evas_object_size_hint_align_set(bt, 0.9, 0.5);
555
   elm_table_pack(tb2, bt, 2, 1, 1, 1);
556
   evas_object_show(bt);
557

558
   box = elm_box_add(win);
559
   elm_box_horizontal_set(box, EINA_TRUE);
560
   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
561
   evas_object_size_hint_align_set(box, 0.0, 0.9);
562
   elm_table_pack(tb2, box, 0, 2, 1, 1);
563
   evas_object_show(box);
564

565
   bt = elm_button_add(win);
566
   elm_object_text_set(bt, "Pause On/Off");
567
   evas_object_smart_callback_add(bt, "clicked", my_bt_pause, ph);
568
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
569
   elm_box_pack_end(box, bt);
570
   evas_object_show(bt);
571

572
   bt = elm_button_add(win);
573
   elm_object_text_set(bt, "Gesture On/Off");
574
   evas_object_smart_callback_add(bt, "clicked", my_bt_gesture, ph);
575
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
576
   elm_box_pack_end(box, bt);
577
   evas_object_show(bt);
578

579
   box = elm_box_add(win);
580
   elm_box_horizontal_set(box, EINA_TRUE);
581
   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
582
   evas_object_size_hint_align_set(box, 0.9, 0.9);
583
   elm_table_pack(tb2, box, 2, 2, 1, 1);
584

585
   bt = elm_button_add(win);
586
   elm_object_text_set(bt, "Fit");
587
   evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_fit, ph);
588
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
589
   elm_box_pack_end(box, bt);
590
   evas_object_show(bt);
591

592
   bt = elm_button_add(win);
593
   elm_object_text_set(bt, "Fit_In");
594
   evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_fit_in, ph);
595
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
596
   elm_box_pack_end(box, bt);
597
   evas_object_show(bt);
598

599
   bt = elm_button_add(win);
600
   elm_object_text_set(bt, "Fill");
601
   evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_fill, ph);
602
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
603
   elm_box_pack_end(box, bt);
604
   evas_object_show(bt);
605

606
   box = elm_box_add(tb2);
607
   elm_box_horizontal_set(box, EINA_TRUE);
608
   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
609
   evas_object_size_hint_align_set(box, 0.9, 0.9);
610
   elm_table_pack(tb2, box, 1, 2, 1, 1);
611
   evas_object_show(box);
612

613
   for (i = 0; photocam_orient[i].name; ++i)
614
     {
615
        rd = elm_radio_add(win);
616
        evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
617
        elm_radio_state_value_set(rd, photocam_orient[i].orient);
618
        elm_object_text_set(rd, photocam_orient[i].name);
619
        elm_box_pack_end(box, rd);
620
        evas_object_show(rd);
621
        evas_object_smart_callback_add(rd, "changed", my_ph_ch, ph);
622
        if (!rdg)
623
          rdg = rd;
624
        else
625
          elm_radio_group_add(rd, rdg);
626
     }
627
   evas_object_show(box);
628
   evas_object_show(tb2);
629

630
   evas_object_resize(win, 800 * elm_config_scale_get(),
631
                           800 * elm_config_scale_get());
632
   evas_object_show(win);
633
}
634

635
static const struct {
636
     unsigned char val;
637
     const 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

652
static void
653
_radio_changed_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
654
{
655
   unsigned char index = elm_radio_value_get(obj);
656
   efl_ui_image_icon_set(data, photocam_icons[index].name);
657
   printf("icon is %s\n", efl_ui_image_icon_get(data));
658
}
659

660
void
661
test_photocam_icon(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
662
{
663
   Evas_Object *win, *ph, *tb2, *bt, *bx, *rd;
664
   Evas_Object *rdg = NULL;
665
   Evas_Object *rect = NULL;
666
   int i;
667

668
   win = elm_win_util_standard_add("photocam", "PhotoCam");
669
   elm_win_autodel_set(win, EINA_TRUE);
670

671
   ph = elm_photocam_add(win);
672
   evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
673
   efl_ui_image_icon_set(ph, "home");
674
   elm_win_resize_object_add(win, ph);
675

676
   rect = evas_object_rectangle_add(evas_object_evas_get(win));
677
   evas_object_color_set(rect, 0, 0, 0, 0);
678
   evas_object_repeat_events_set(rect, EINA_TRUE);
679
   evas_object_show(rect);
680
   evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_WHEEL, _photocam_mouse_wheel_cb, ph);
681
   evas_object_raise(rect);
682

683
   evas_object_event_callback_add(ph, EVAS_CALLBACK_RESIZE, _photocam_move_resize_cb, rect);
684
   evas_object_event_callback_add(ph, EVAS_CALLBACK_MOVE, _photocam_move_resize_cb, rect);
685

686
   evas_object_smart_callback_add(ph, "clicked", my_ph_clicked, win);
687
   evas_object_smart_callback_add(ph, "press", my_ph_press, win);
688
   evas_object_smart_callback_add(ph, "longpressed", my_ph_longpressed, win);
689
   evas_object_smart_callback_add(ph, "clicked,double", my_ph_clicked_double, win);
690
   evas_object_smart_callback_add(ph, "load", my_ph_load, win);
691
   evas_object_smart_callback_add(ph, "loaded", my_ph_loaded, win);
692
   evas_object_smart_callback_add(ph, "load,details", my_ph_load_details, win);
693
   evas_object_smart_callback_add(ph, "loaded,details", my_ph_loaded_details, win);
694
   evas_object_smart_callback_add(ph, "zoom,start", my_ph_zoom_start, win);
695
   evas_object_smart_callback_add(ph, "zoom,stop", my_ph_zoom_stop, win);
696
   evas_object_smart_callback_add(ph, "zoom,change", my_ph_zoom_change, win);
697
   evas_object_smart_callback_add(ph, "scroll,anim,start", my_ph_anim_start, win);
698
   evas_object_smart_callback_add(ph, "scroll,anim,stop", my_ph_anim_stop, win);
699
   evas_object_smart_callback_add(ph, "scroll,drag,start", my_ph_drag_start, win);
700
   evas_object_smart_callback_add(ph, "scroll,drag,stop", my_ph_drag_stop, win);
701
   evas_object_smart_callback_add(ph, "scroll", my_ph_scroll, win);
702

703
   evas_object_show(ph);
704

705
   tb2 = elm_table_add(win);
706
   evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
707
   elm_win_resize_object_add(win, tb2);
708

709
   bt = elm_button_add(win);
710
   elm_object_text_set(bt, "Z -");
711
   evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_out, ph);
712
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
713
   evas_object_size_hint_align_set(bt, 0.1, 0.1);
714
   elm_table_pack(tb2, bt, 0, 0, 1, 1);
715
   evas_object_show(bt);
716

717
   bt = elm_button_add(win);
718
   elm_object_text_set(bt, "Z +");
719
   evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_in, ph);
720
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
721
   evas_object_size_hint_align_set(bt, 0.9, 0.1);
722
   elm_table_pack(tb2, bt, 2, 0, 1, 1);
723
   evas_object_show(bt);
724

725
   evas_object_show(tb2);
726

727
   bx = elm_box_add(win);
728
   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
729
   elm_box_horizontal_set(bx, EINA_TRUE);
730
   elm_table_pack(tb2, bx, 1, 2, 1, 1);
731
   evas_object_show(bx);
732

733
   for (i = 0; photocam_icons[i].name; ++i)
734
     {
735
        rd = elm_radio_add(win);
736
        evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
737
        elm_object_text_set(rd, photocam_icons[i].name);
738
        efl_ui_radio_state_value_set(rd, photocam_icons[i].val);
739
        elm_box_pack_end(bx, rd);
740
        evas_object_smart_callback_add(rd, "changed", _radio_changed_cb, ph);
741
        if(!rdg)
742
          rdg = rd;
743
        else
744
          elm_radio_group_add(rd, rdg);
745
        evas_object_show(rd);
746
     }
747

748
   evas_object_resize(win, 150 * elm_config_scale_get(),
749
                           150 * elm_config_scale_get());
750
   evas_object_show(win);
751
}
752

753
static void
754
_zoomable_clicked_cb(void *data EINA_UNUSED, const Efl_Event *ev)
755
{
756
   Eina_Bool paused;
757

758
   paused = efl_player_paused_get(ev->object);
759
   printf("image clicked! paused = %d\n", paused);
760
   efl_player_paused_set(ev->object, !paused);
761
}
762

763
static void
764
_zoomable_move_resize_cb(void *data, const Efl_Event *ev)
765
{
766
   Eina_Rect r;
767

768
   r = efl_gfx_entity_geometry_get(ev->object);
769
   efl_gfx_entity_size_set(data, EINA_SIZE2D(r.w,  r.h));
770
   efl_gfx_entity_position_set(data, r.pos);
771
}
772

773
static void
774
_zoomable_mouse_wheel_cb(void *data, const Efl_Event *e)
775
{
776
   Eo *zoomable = data;
777
   Efl_Input_Pointer *ev = e->info;
778
   int zoom, _zoom, delta, val;
779

780
   zoom = efl_ui_zoom_level_get(zoomable);
781
   delta = efl_input_pointer_wheel_delta_get(ev);
782
   if ((delta > 0) && (zoom == 1)) return;
783

784
   if (delta > 0)
785
     zoom /= 2;
786
   else
787
     zoom *= 2;
788

789
   val = 1;
790
   _zoom = zoom;
791
   while (_zoom>1)
792
     {
793
        _zoom /= 2;
794
        val++;
795
     }
796

797
   efl_ui_zoom_mode_set(zoomable, EFL_UI_ZOOM_MODE_MANUAL);
798
   if (zoom >= 1) efl_ui_zoom_level_set(zoomable, zoom);
799
}
800

801
void
802
test_image_zoomable_animated(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
803
{
804
   Eo *win, *bx, *zoomable, *rect;
805
   char buf[PATH_MAX];
806

807
   win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),
808
                                  efl_text_set(efl_added, "Efl.Ui.Image_Zoomable animation"),
809
                 efl_ui_win_autodel_set(efl_added, EINA_TRUE));
810

811
   bx = efl_add(EFL_UI_BOX_CLASS, win,
812
                efl_ui_layout_orientation_set(efl_added, EFL_UI_LAYOUT_ORIENTATION_VERTICAL),
813
                efl_content_set(win, efl_added));
814

815
   efl_add(EFL_UI_TEXTBOX_CLASS, bx,
816
           efl_text_set(efl_added, "Clicking the image will play/pause animation."),
817
           efl_text_interactive_editable_set(efl_added, EINA_FALSE),
818
           efl_gfx_hint_weight_set(efl_added, 1, 0),
819
           efl_text_font_family_set(efl_added, "Sans"),
820
           efl_text_font_size_set(efl_added, 10),
821
           efl_text_color_set(efl_added, 255, 255, 255, 255),
822
           efl_pack(bx, efl_added)
823
          );
824

825
   snprintf(buf, sizeof(buf), "%s/images/animated_logo.gif", elm_app_data_dir_get());
826
   zoomable = efl_add(EFL_UI_IMAGE_ZOOMABLE_CLASS, win,
827
                      efl_file_set(efl_added, buf),
828
                      efl_file_load(efl_added),
829
                      efl_pack(bx, efl_added),
830
                      efl_event_callback_add(efl_added, EFL_INPUT_EVENT_CLICKED, _zoomable_clicked_cb, NULL)
831
                     );
832

833
   if (efl_playable_get(zoomable))
834
     {
835
        printf("animation is available for this image.\n");
836
        efl_player_autoplay_set(zoomable, EINA_TRUE);
837
        efl_player_playback_loop_set(zoomable, EINA_TRUE);
838
     }
839

840
   rect = efl_add(EFL_CANVAS_RECTANGLE_CLASS, win,
841
                  efl_gfx_color_set(efl_added, 0, 0, 0, 0),
842
                  efl_gfx_stack_raise_to_top(efl_added),
843
                  efl_canvas_object_repeat_events_set(efl_added, EINA_TRUE),
844
                  efl_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
848
   efl_event_callback_add(zoomable, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, _zoomable_move_resize_cb, rect);
849
   efl_event_callback_add(zoomable, EFL_GFX_ENTITY_EVENT_POSITION_CHANGED, _zoomable_move_resize_cb, rect);
850

851
   efl_gfx_entity_size_set(win, EINA_SIZE2D(300,  320));
852
}
853

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.