Changeset View
Changeset View
Standalone View
Standalone View
src/lib/elementary/efl_ui_image_zoomable.c
1 | #ifdef HAVE_CONFIG_H | 1 | #ifdef HAVE_CONFIG_H | ||
---|---|---|---|---|---|
2 | # include "elementary_config.h" | 2 | # include "elementary_config.h" | ||
3 | #endif | 3 | #endif | ||
4 | 4 | | |||
5 | #define EFL_ACCESS_PROTECTED | 5 | #define EFL_ACCESS_PROTECTED | ||
6 | #define EFL_ACCESS_WIDGET_ACTION_PROTECTED | 6 | #define EFL_ACCESS_WIDGET_ACTION_PROTECTED | ||
7 | #define EFL_UI_SCROLL_MANAGER_PROTECTED | ||||
8 | #define EFL_UI_SCROLLBAR_PROTECTED | ||||
9 | #define EFL_UI_SCROLLBAR_BETA | ||||
7 | 10 | | |||
8 | #include <Elementary.h> | 11 | #include <Elementary.h> | ||
9 | 12 | | |||
10 | #include "elm_priv.h" | 13 | #include "elm_priv.h" | ||
11 | #include "efl_ui_image_zoomable_private.h" | 14 | #include "efl_ui_image_zoomable_private.h" | ||
12 | #include "elm_interface_scrollable.h" | | |||
13 | 15 | | |||
14 | #define MY_PAN_CLASS EFL_UI_IMAGE_ZOOMABLE_PAN_CLASS | 16 | #define MY_PAN_CLASS EFL_UI_IMAGE_ZOOMABLE_PAN_CLASS | ||
15 | 17 | | |||
16 | #define MY_PAN_CLASS_NAME "Efl.Ui.Image_Zoomable_Pan" | 18 | #define MY_PAN_CLASS_NAME "Efl.Ui.Image_Zoomable_Pan" | ||
17 | #define MY_PAN_CLASS_NAME_LEGACY "elm_photocam_pan" | 19 | #define MY_PAN_CLASS_NAME_LEGACY "elm_photocam_pan" | ||
18 | 20 | | |||
19 | #define MY_CLASS EFL_UI_IMAGE_ZOOMABLE_CLASS | 21 | #define MY_CLASS EFL_UI_IMAGE_ZOOMABLE_CLASS | ||
20 | 22 | | |||
▲ Show 20 Lines • Show All 117 Lines • ▼ Show 20 Line(s) | 137 | { | |||
138 | elm_photocam_zoom_set(obj, tz); | 140 | elm_photocam_zoom_set(obj, tz); | ||
139 | } | 141 | } | ||
140 | } | 142 | } | ||
141 | if ((minw != sd->minw) || (minh != sd->minh)) | 143 | if ((minw != sd->minw) || (minh != sd->minh)) | ||
142 | { | 144 | { | ||
143 | sd->minw = minw; | 145 | sd->minw = minw; | ||
144 | sd->minh = minh; | 146 | sd->minh = minh; | ||
145 | 147 | | |||
146 | efl_event_callback_legacy_call(sd->pan_obj, ELM_PAN_EVENT_CHANGED, NULL); | 148 | efl_event_callback_call(sd->pan_obj, EFL_UI_PAN_EVENT_CONTENT_CHANGED, NULL); | ||
147 | _sizing_eval(obj); | 149 | _sizing_eval(obj); | ||
jpeg: I think the event info should be in a struct here. Better for bindings. | |||||
148 | } | 150 | } | ||
149 | sd->calc_job = NULL; | 151 | sd->calc_job = NULL; | ||
150 | evas_object_smart_changed(sd->pan_obj); | 152 | evas_object_smart_changed(sd->pan_obj); | ||
151 | } | 153 | } | ||
152 | 154 | | |||
153 | EOLIAN static void | 155 | EOLIAN static void | ||
154 | _efl_ui_image_zoomable_pan_efl_gfx_position_set(Eo *obj, Efl_Ui_Image_Zoomable_Pan_Data *psd, Eina_Position2D pos) | 156 | _efl_ui_image_zoomable_pan_efl_gfx_position_set(Eo *obj, Efl_Ui_Image_Zoomable_Pan_Data *psd, Eina_Position2D pos) | ||
155 | { | 157 | { | ||
Show All 39 Lines | 188 | { | |||
195 | if (!sd->zoom_g_layer) | 197 | if (!sd->zoom_g_layer) | ||
196 | { | 198 | { | ||
197 | if (ow > gw) ax = (ow - gw) / 2; | 199 | if (ow > gw) ax = (ow - gw) / 2; | ||
198 | if (oh > gh) ay = (oh - gh) / 2; | 200 | if (oh > gh) ay = (oh - gh) / 2; | ||
199 | } | 201 | } | ||
200 | evas_object_move(sd->img, ox + 0 - px + ax, oy + 0 - py + ay); | 202 | evas_object_move(sd->img, ox + 0 - px + ax, oy + 0 - py + ay); | ||
201 | evas_object_resize(sd->img, gw, gh); | 203 | evas_object_resize(sd->img, gw, gh); | ||
202 | 204 | | |||
203 | if (sd->show.show) | 205 | if (sd->show_item) | ||
204 | { | 206 | { | ||
205 | sd->show.show = EINA_FALSE; | 207 | sd->show_item = EINA_FALSE; | ||
206 | elm_interface_scrollable_content_region_show | 208 | efl_ui_scrollable_scroll | ||
Not Done ReplyJust efl_ui_scrollable_show(sd->manager, sd->show); jpeg: Just
```
efl_ui_scrollable_show(sd->manager, sd->show);
``` | |||||
207 | (obj, sd->show.x, sd->show.y, sd->show.w, sd->show.h); | 209 | (sd->smanager, sd->show, EINA_FALSE); | ||
208 | } | 210 | } | ||
209 | } | 211 | } | ||
210 | 212 | | |||
211 | static void | 213 | static void | ||
212 | _grid_load(Evas_Object *obj, | 214 | _grid_load(Evas_Object *obj, | ||
213 | Efl_Ui_Image_Zoomable_Grid *g) | 215 | Efl_Ui_Image_Zoomable_Grid *g) | ||
214 | { | 216 | { | ||
215 | int x, y; | 217 | int x, y; | ||
▲ Show 20 Lines • Show All 160 Lines • ▼ Show 20 Line(s) | 376 | { | |||
376 | _grid_place( | 378 | _grid_place( | ||
377 | wd->obj, g, psd->wsd->pan_x, | 379 | wd->obj, g, psd->wsd->pan_x, | ||
378 | psd->wsd->pan_y, ox - psd->wsd->g_layer_zoom.imx, | 380 | psd->wsd->pan_y, ox - psd->wsd->g_layer_zoom.imx, | ||
379 | oy - psd->wsd->g_layer_zoom.imy, ow, oh); | 381 | oy - psd->wsd->g_layer_zoom.imy, ow, oh); | ||
380 | } | 382 | } | ||
381 | } | 383 | } | ||
382 | 384 | | |||
383 | EOLIAN static void | 385 | EOLIAN static void | ||
384 | _efl_ui_image_zoomable_pan_elm_pan_pos_set(Eo *obj, Efl_Ui_Image_Zoomable_Pan_Data *psd, Evas_Coord x, Evas_Coord y) | 386 | _efl_ui_image_zoomable_pan_efl_ui_pan_pan_position_set(Eo *obj, Efl_Ui_Image_Zoomable_Pan_Data *psd, Eina_Position2D pos) | ||
385 | { | 387 | { | ||
386 | if ((x == psd->wsd->pan_x) && (y == psd->wsd->pan_y)) return; | 388 | if ((pos.x == psd->wsd->pan_x) && (pos.y == psd->wsd->pan_y)) return; | ||
387 | psd->wsd->pan_x = x; | 389 | psd->wsd->pan_x = pos.x; | ||
388 | psd->wsd->pan_y = y; | 390 | psd->wsd->pan_y = pos.y; | ||
389 | evas_object_smart_changed(obj); | 391 | evas_object_smart_changed(obj); | ||
392 | | ||||
393 | efl_event_callback_call(obj, EFL_UI_PAN_EVENT_POSITION_CHANGED, NULL); | ||||
390 | } | 394 | } | ||
391 | 395 | | |||
392 | EOLIAN static void | 396 | EOLIAN static Eina_Position2D | ||
393 | _efl_ui_image_zoomable_pan_elm_pan_pos_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Pan_Data *psd, Evas_Coord *x, Evas_Coord *y) | 397 | _efl_ui_image_zoomable_pan_efl_ui_pan_pan_position_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Pan_Data *psd) | ||
394 | { | 398 | { | ||
395 | if (x) *x = psd->wsd->pan_x; | 399 | return EINA_POSITION2D(psd->wsd->pan_x, psd->wsd->pan_y); | ||
396 | if (y) *y = psd->wsd->pan_y; | | |||
397 | } | 400 | } | ||
398 | 401 | | |||
399 | EOLIAN static void | 402 | EOLIAN static Eina_Position2D | ||
400 | _efl_ui_image_zoomable_pan_elm_pan_pos_max_get(Eo *obj, Efl_Ui_Image_Zoomable_Pan_Data *psd, Evas_Coord *x, Evas_Coord *y) | 403 | _efl_ui_image_zoomable_pan_efl_ui_pan_pan_position_max_get(Eo *obj, Efl_Ui_Image_Zoomable_Pan_Data *psd) | ||
401 | { | 404 | { | ||
402 | Evas_Coord ow, oh; | 405 | Evas_Coord ow, oh; | ||
403 | 406 | | |||
404 | evas_object_geometry_get(obj, NULL, NULL, &ow, &oh); | 407 | evas_object_geometry_get(obj, NULL, NULL, &ow, &oh); | ||
405 | ow = psd->wsd->minw - ow; | 408 | ow = psd->wsd->minw - ow; | ||
406 | if (ow < 0) ow = 0; | 409 | if (ow < 0) ow = 0; | ||
407 | oh = psd->wsd->minh - oh; | 410 | oh = psd->wsd->minh - oh; | ||
408 | if (oh < 0) oh = 0; | 411 | if (oh < 0) oh = 0; | ||
409 | if (x) *x = ow; | 412 | | ||
410 | if (y) *y = oh; | 413 | return EINA_POSITION2D(ow, oh); | ||
411 | } | 414 | } | ||
412 | 415 | | |||
413 | EOLIAN static void | 416 | EOLIAN static Eina_Position2D | ||
414 | _efl_ui_image_zoomable_pan_elm_pan_pos_min_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Pan_Data *_pd EINA_UNUSED, Evas_Coord *x, Evas_Coord *y) | 417 | _efl_ui_image_zoomable_pan_efl_ui_pan_pan_position_min_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Pan_Data *_pd EINA_UNUSED) | ||
415 | { | 418 | { | ||
416 | if (x) *x = 0; | 419 | return EINA_POSITION2D(0, 0); | ||
417 | if (y) *y = 0; | | |||
418 | } | 420 | } | ||
419 | 421 | | |||
420 | EOLIAN static void | 422 | EOLIAN static Eina_Size2D | ||
421 | _efl_ui_image_zoomable_pan_elm_pan_content_size_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Pan_Data *psd, Evas_Coord *w, Evas_Coord *h) | 423 | _efl_ui_image_zoomable_pan_efl_ui_pan_content_size_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Pan_Data *psd) | ||
422 | { | 424 | { | ||
423 | if (w) *w = psd->wsd->minw; | 425 | return EINA_SIZE2D(psd->wsd->minw, psd->wsd->minh); | ||
424 | if (h) *h = psd->wsd->minh; | | |||
425 | } | 426 | } | ||
426 | 427 | | |||
427 | EOLIAN static void | 428 | EOLIAN static void | ||
428 | _efl_ui_image_zoomable_pan_efl_object_destructor(Eo *obj, Efl_Ui_Image_Zoomable_Pan_Data *psd) | 429 | _efl_ui_image_zoomable_pan_efl_object_destructor(Eo *obj, Efl_Ui_Image_Zoomable_Pan_Data *psd) | ||
429 | { | 430 | { | ||
430 | efl_data_unref(psd->wobj, psd->wsd); | 431 | efl_data_unref(psd->wobj, psd->wsd); | ||
432 | | ||||
431 | efl_destructor(efl_super(obj, MY_PAN_CLASS)); | 433 | efl_destructor(efl_super(obj, MY_PAN_CLASS)); | ||
432 | } | 434 | } | ||
433 | 435 | | |||
434 | EOLIAN static void | 436 | EOLIAN static void | ||
435 | _efl_ui_image_zoomable_pan_class_constructor(Efl_Class *klass) | 437 | _efl_ui_image_zoomable_pan_class_constructor(Efl_Class *klass) | ||
436 | { | 438 | { | ||
437 | evas_smart_legacy_type_register(MY_PAN_CLASS_NAME_LEGACY, klass); | 439 | evas_smart_legacy_type_register(MY_PAN_CLASS_NAME_LEGACY, klass); | ||
438 | } | 440 | } | ||
▲ Show 20 Lines • Show All 281 Lines • ▼ Show 20 Line(s) | 721 | efl_event_callback_legacy_call | |||
720 | (obj, EFL_UI_IMAGE_ZOOMABLE_EVENT_LOADED_DETAIL, NULL); | 722 | (obj, EFL_UI_IMAGE_ZOOMABLE_EVENT_LOADED_DETAIL, NULL); | ||
721 | } | 723 | } | ||
722 | } | 724 | } | ||
723 | 725 | | |||
724 | static Eina_Bool | 726 | static Eina_Bool | ||
725 | _zoom_do(Evas_Object *obj, | 727 | _zoom_do(Evas_Object *obj, | ||
726 | double t) | 728 | double t) | ||
727 | { | 729 | { | ||
728 | Evas_Coord xx, yy, ow = 0, oh = 0; | 730 | Evas_Coord xx, yy; | ||
731 | Eina_Rect view = {}; | ||||
729 | 732 | | |||
730 | EFL_UI_IMAGE_ZOOMABLE_DATA_GET(obj, sd); | 733 | EFL_UI_IMAGE_ZOOMABLE_DATA_GET(obj, sd); | ||
731 | 734 | | |||
732 | sd->size.w = (sd->size.ow * (1.0 - t)) + (sd->size.nw * t); | 735 | sd->size.w = (sd->size.ow * (1.0 - t)) + (sd->size.nw * t); | ||
733 | sd->size.h = (sd->size.oh * (1.0 - t)) + (sd->size.nh * t); | 736 | sd->size.h = (sd->size.oh * (1.0 - t)) + (sd->size.nh * t); | ||
734 | elm_interface_scrollable_content_viewport_geometry_get | 737 | view = efl_ui_scrollable_viewport_geometry_get(sd->smanager); | ||
735 | (obj, NULL, NULL, &ow, &oh); | 738 | xx = (sd->size.spos.x * sd->size.w) - (view.w / 2); | ||
736 | xx = (sd->size.spos.x * sd->size.w) - (ow / 2); | 739 | yy = (sd->size.spos.y * sd->size.h) - (view.h / 2); | ||
Done Replycode style. view should be declared at the beginning of a block jpeg: code style. view should be declared at the beginning of a block | |||||
737 | yy = (sd->size.spos.y * sd->size.h) - (oh / 2); | | |||
738 | if (xx < 0) xx = 0; | 740 | if (xx < 0) xx = 0; | ||
739 | else if (xx > (sd->size.w - ow)) | 741 | else if (xx > (sd->size.w - view.w)) | ||
740 | xx = sd->size.w - ow; | 742 | xx = sd->size.w - view.w; | ||
741 | if (yy < 0) yy = 0; | 743 | if (yy < 0) yy = 0; | ||
742 | else if (yy > (sd->size.h - oh)) | 744 | else if (yy > (sd->size.h - view.h)) | ||
743 | yy = sd->size.h - oh; | 745 | yy = sd->size.h - view.h; | ||
744 | 746 | | |||
745 | sd->show.show = EINA_TRUE; | 747 | sd->show_item = EINA_TRUE; | ||
746 | sd->show.x = xx; | 748 | sd->show.x = xx; | ||
747 | sd->show.y = yy; | 749 | sd->show.y = yy; | ||
748 | sd->show.w = ow; | 750 | sd->show.w = view.w; | ||
749 | sd->show.h = oh; | 751 | sd->show.h = view.h; | ||
750 | 752 | | |||
751 | if (sd->orientation_changed) | 753 | if (sd->orientation_changed) | ||
752 | { | 754 | { | ||
753 | evas_object_smart_member_del(sd->img); | 755 | evas_object_smart_member_del(sd->img); | ||
754 | elm_widget_sub_object_del(obj, sd->img); | 756 | elm_widget_sub_object_del(obj, sd->img); | ||
755 | evas_object_smart_member_add(sd->img, sd->pan_obj); | 757 | evas_object_smart_member_add(sd->img, sd->pan_obj); | ||
756 | elm_widget_sub_object_add(obj, sd->img); | 758 | elm_widget_sub_object_add(obj, sd->img); | ||
757 | } | 759 | } | ||
▲ Show 20 Lines • Show All 123 Lines • ▼ Show 20 Line(s) | 882 | edje_object_signal_emit | |||
881 | (wd->resize_obj, "elm,action,unfocus", "elm"); | 883 | (wd->resize_obj, "elm,action,unfocus", "elm"); | ||
882 | evas_object_focus_set(wd->resize_obj, EINA_FALSE); | 884 | evas_object_focus_set(wd->resize_obj, EINA_FALSE); | ||
883 | } | 885 | } | ||
884 | 886 | | |||
885 | return EINA_TRUE; | 887 | return EINA_TRUE; | ||
886 | } | 888 | } | ||
887 | 889 | | |||
888 | EOLIAN static Efl_Ui_Theme_Apply | 890 | EOLIAN static Efl_Ui_Theme_Apply | ||
889 | _efl_ui_image_zoomable_elm_widget_theme_apply(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd EINA_UNUSED) | 891 | _efl_ui_image_zoomable_elm_widget_theme_apply(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd) | ||
890 | { | 892 | { | ||
891 | Efl_Ui_Theme_Apply int_ret = EFL_UI_THEME_APPLY_FAILED; | 893 | Efl_Ui_Theme_Apply int_ret = EFL_UI_THEME_APPLY_FAILED; | ||
892 | Eina_Bool fdo = EINA_FALSE; | 894 | Eina_Bool fdo = EINA_FALSE; | ||
893 | 895 | | |||
894 | if (sd->stdicon) | 896 | if (sd->stdicon) | ||
895 | _internal_efl_ui_image_zoomable_icon_set(obj, sd->stdicon, &fdo, EINA_TRUE); | 897 | _internal_efl_ui_image_zoomable_icon_set(obj, sd->stdicon, &fdo, EINA_TRUE); | ||
896 | 898 | | |||
897 | int_ret = efl_ui_widget_theme_apply(efl_super(obj, MY_CLASS)); | 899 | int_ret = efl_ui_widget_theme_apply(efl_super(obj, MY_CLASS)); | ||
898 | if (!int_ret) return EFL_UI_THEME_APPLY_FAILED; | 900 | if (!int_ret) return EFL_UI_THEME_APPLY_FAILED; | ||
899 | 901 | | |||
902 | efl_ui_mirrored_set(sd->smanager, efl_ui_mirrored_get(obj)); | ||||
903 | | ||||
900 | _sizing_eval(obj); | 904 | _sizing_eval(obj); | ||
901 | 905 | | |||
902 | return int_ret; | 906 | return int_ret; | ||
903 | } | 907 | } | ||
904 | 908 | | |||
905 | static void | 909 | static void | ||
906 | _scroll_animate_start_cb(Evas_Object *obj, | 910 | _scroll_cb(void * data, | ||
907 | void *data EINA_UNUSED) | 911 | const Efl_Event *event EINA_UNUSED) | ||
908 | { | | |||
909 | efl_event_callback_legacy_call | | |||
910 | (obj, EFL_UI_EVENT_SCROLL_ANIM_START, NULL); | | |||
911 | } | | |||
912 | | ||||
913 | static void | | |||
914 | _scroll_animate_stop_cb(Evas_Object *obj, | | |||
915 | void *data EINA_UNUSED) | | |||
916 | { | | |||
917 | efl_event_callback_legacy_call | | |||
918 | (obj, EFL_UI_EVENT_SCROLL_ANIM_STOP, NULL); | | |||
919 | } | | |||
920 | | ||||
921 | static void | | |||
922 | _scroll_drag_start_cb(Evas_Object *obj, | | |||
923 | void *data EINA_UNUSED) | | |||
924 | { | | |||
925 | efl_event_callback_legacy_call | | |||
926 | (obj, EFL_UI_EVENT_SCROLL_DRAG_START, NULL); | | |||
927 | } | | |||
928 | | ||||
929 | static void | | |||
930 | _scroll_drag_stop_cb(Evas_Object *obj, | | |||
931 | void *data EINA_UNUSED) | | |||
932 | { | | |||
933 | efl_event_callback_legacy_call | | |||
934 | (obj, EFL_UI_EVENT_SCROLL_DRAG_STOP, NULL); | | |||
935 | } | | |||
936 | | ||||
937 | static void | | |||
938 | _scroll_cb(Evas_Object *obj, | | |||
939 | void *data EINA_UNUSED) | | |||
940 | { | 912 | { | ||
913 | Evas_Object *obj = data; | ||||
941 | EFL_UI_IMAGE_ZOOMABLE_DATA_GET(obj, sd); | 914 | EFL_UI_IMAGE_ZOOMABLE_DATA_GET(obj, sd); | ||
942 | 915 | | |||
943 | if (!sd->scr_timer) | 916 | if (!sd->scr_timer) | ||
944 | { | 917 | { | ||
945 | sd->no_smooth++; | 918 | sd->no_smooth++; | ||
946 | if (sd->no_smooth == 1) _smooth_update(obj); | 919 | if (sd->no_smooth == 1) _smooth_update(obj); | ||
947 | } | 920 | } | ||
948 | 921 | | |||
949 | ecore_timer_del(sd->scr_timer); | 922 | ecore_timer_del(sd->scr_timer); | ||
950 | sd->scr_timer = ecore_timer_add(0.5, _scroll_timeout_cb, obj); | 923 | sd->scr_timer = ecore_timer_add(0.5, _scroll_timeout_cb, obj); | ||
951 | | ||||
952 | efl_event_callback_legacy_call | | |||
953 | (obj, EFL_UI_EVENT_SCROLL, NULL); | | |||
954 | } | 924 | } | ||
955 | 925 | | |||
956 | static Eina_Bool | 926 | static Eina_Bool | ||
957 | _key_action_move(Evas_Object *obj, const char *params) | 927 | _key_action_move(Evas_Object *obj, const char *params) | ||
958 | { | 928 | { | ||
929 | Eina_Rect view = {}; | ||||
930 | Eina_Position2D pos = {}; | ||||
959 | const char *dir = params; | 931 | const char *dir = params; | ||
932 | EFL_UI_IMAGE_ZOOMABLE_DATA_GET(obj, sd); | ||||
960 | 933 | | |||
961 | Evas_Coord x = 0; | | |||
962 | Evas_Coord y = 0; | | |||
963 | Evas_Coord v_h = 0; | | |||
964 | Evas_Coord step_x = 0; | 934 | Evas_Coord step_x = 0; | ||
965 | Evas_Coord step_y = 0; | 935 | Evas_Coord step_y = 0; | ||
966 | Evas_Coord page_x = 0; | | |||
967 | Evas_Coord page_y = 0; | 936 | Evas_Coord page_y = 0; | ||
968 | 937 | | |||
969 | elm_interface_scrollable_content_pos_get(obj, &x, &y); | 938 | pos = efl_ui_scrollable_content_pos_get(sd->smanager); | ||
970 | elm_interface_scrollable_step_size_get(obj, &step_x, &step_y); | 939 | view = efl_ui_scrollable_viewport_geometry_get(sd->smanager); | ||
Not Done Replycode style jpeg: code style | |||||
971 | elm_interface_scrollable_page_size_get(obj, &page_x, &page_y); | | |||
972 | elm_interface_scrollable_content_viewport_geometry_get | | |||
973 | (obj, NULL, NULL, NULL, &v_h); | | |||
974 | 940 | | |||
975 | if (!strcmp(dir, "left")) | 941 | if (!strcmp(dir, "left")) | ||
976 | { | 942 | { | ||
977 | x -= step_x; | 943 | pos.x -= step_x; | ||
978 | } | 944 | } | ||
979 | else if (!strcmp(dir, "right")) | 945 | else if (!strcmp(dir, "right")) | ||
980 | { | 946 | { | ||
981 | x += step_x; | 947 | pos.x += step_x; | ||
982 | } | 948 | } | ||
983 | else if (!strcmp(dir, "up")) | 949 | else if (!strcmp(dir, "up")) | ||
984 | { | 950 | { | ||
985 | y -= step_y; | 951 | pos.y -= step_y; | ||
986 | } | 952 | } | ||
987 | else if (!strcmp(dir, "down")) | 953 | else if (!strcmp(dir, "down")) | ||
988 | { | 954 | { | ||
989 | y += step_y; | 955 | pos.y += step_y; | ||
990 | } | 956 | } | ||
991 | else if (!strcmp(dir, "prior")) | 957 | else if (!strcmp(dir, "prior")) | ||
992 | { | 958 | { | ||
993 | if (page_y < 0) | 959 | if (page_y < 0) | ||
994 | y -= -(page_y * v_h) / 100; | 960 | pos.y -= -(page_y * view.h) / 100; | ||
995 | else | 961 | else | ||
996 | y -= page_y; | 962 | pos.y -= page_y; | ||
997 | } | 963 | } | ||
998 | else if (!strcmp(dir, "next")) | 964 | else if (!strcmp(dir, "next")) | ||
999 | { | 965 | { | ||
1000 | if (page_y < 0) | 966 | if (page_y < 0) | ||
1001 | y += -(page_y * v_h) / 100; | 967 | pos.y += -(page_y * view.h) / 100; | ||
1002 | else | 968 | else | ||
1003 | y += page_y; | 969 | pos.y += page_y; | ||
1004 | } | 970 | } | ||
1005 | else return EINA_FALSE; | 971 | else return EINA_FALSE; | ||
1006 | 972 | | |||
1007 | elm_interface_scrollable_content_pos_set(obj, x, y, EINA_TRUE); | 973 | efl_ui_scrollable_content_pos_set(sd->smanager, pos); | ||
1008 | return EINA_TRUE; | 974 | return EINA_TRUE; | ||
1009 | } | 975 | } | ||
1010 | 976 | | |||
1011 | static Eina_Bool | 977 | static Eina_Bool | ||
1012 | _key_action_zoom(Evas_Object *obj, const char *params) | 978 | _key_action_zoom(Evas_Object *obj, const char *params) | ||
1013 | { | 979 | { | ||
1014 | const char *dir = params; | 980 | const char *dir = params; | ||
1015 | double zoom; | 981 | double zoom; | ||
▲ Show 20 Lines • Show All 55 Lines • ▼ Show 20 Line(s) | 1004 | { | |||
1071 | 1037 | | |||
1072 | return; | 1038 | return; | ||
1073 | 1039 | | |||
1074 | on_end: | 1040 | on_end: | ||
1075 | sd->g_layer_zoom.imx = 0; | 1041 | sd->g_layer_zoom.imx = 0; | ||
1076 | sd->g_layer_zoom.imy = 0; | 1042 | sd->g_layer_zoom.imy = 0; | ||
1077 | sd->zoom_g_layer = EINA_FALSE; | 1043 | sd->zoom_g_layer = EINA_FALSE; | ||
1078 | 1044 | | |||
1079 | elm_interface_scrollable_freeze_set(obj, EINA_FALSE); | 1045 | efl_ui_scrollable_scroll_freeze_set(sd->smanager, EINA_FALSE); | ||
1080 | 1046 | | |||
1081 | efl_event_callback_del(obj, EFL_EVENT_ANIMATOR_TICK, _bounce_eval, obj); | 1047 | efl_event_callback_del(obj, EFL_EVENT_ANIMATOR_TICK, _bounce_eval, obj); | ||
1082 | } | 1048 | } | ||
1083 | 1049 | | |||
1084 | static void | 1050 | static void | ||
1085 | _efl_ui_image_zoomable_bounce_reset(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd EINA_UNUSED) | 1051 | _efl_ui_image_zoomable_bounce_reset(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd EINA_UNUSED) | ||
1086 | { | 1052 | { | ||
1087 | Eina_Bool r; | 1053 | Eina_Bool r; | ||
Show All 19 Lines | |||||
1107 | 1073 | | |||
1108 | static void | 1074 | static void | ||
1109 | _g_layer_zoom_do(Evas_Object *obj, | 1075 | _g_layer_zoom_do(Evas_Object *obj, | ||
1110 | Evas_Coord px, | 1076 | Evas_Coord px, | ||
1111 | Evas_Coord py, | 1077 | Evas_Coord py, | ||
1112 | Elm_Gesture_Zoom_Info *g_layer) | 1078 | Elm_Gesture_Zoom_Info *g_layer) | ||
1113 | { | 1079 | { | ||
1114 | int regx, regy, regw, regh, ix, iy, iw, ih; | 1080 | int regx, regy, regw, regh, ix, iy, iw, ih; | ||
1115 | Evas_Coord rx, ry, rw = 0, rh = 0; | | |||
1116 | int xx, yy; | 1081 | int xx, yy; | ||
1082 | Eina_Rect view = {}; | ||||
1117 | 1083 | | |||
1118 | EFL_UI_IMAGE_ZOOMABLE_DATA_GET(obj, sd); | 1084 | EFL_UI_IMAGE_ZOOMABLE_DATA_GET(obj, sd); | ||
1119 | sd->mode = ELM_PHOTOCAM_ZOOM_MODE_MANUAL; | 1085 | sd->mode = ELM_PHOTOCAM_ZOOM_MODE_MANUAL; | ||
1120 | sd->zoom = sd->g_layer_start / g_layer->zoom; | 1086 | sd->zoom = sd->g_layer_start / g_layer->zoom; | ||
1121 | sd->size.ow = sd->size.w; | 1087 | sd->size.ow = sd->size.w; | ||
1122 | sd->size.oh = sd->size.h; | 1088 | sd->size.oh = sd->size.h; | ||
1123 | elm_interface_scrollable_content_pos_get(obj, &rx, &ry); | 1089 | view = efl_ui_scrollable_viewport_geometry_get(sd->smanager); | ||
1124 | elm_interface_scrollable_content_viewport_geometry_get | 1090 | if ((view.w <= 0) || (view.h <= 0)) return; | ||
Not Done Replycode style jpeg: code style | |||||
1125 | (obj, NULL, NULL, &rw, &rh); | | |||
1126 | if ((rw <= 0) || (rh <= 0)) return; | | |||
1127 | 1091 | | |||
1128 | sd->size.nw = (double)sd->size.imw / sd->zoom; | 1092 | sd->size.nw = (double)sd->size.imw / sd->zoom; | ||
1129 | sd->size.nh = (double)sd->size.imh / sd->zoom; | 1093 | sd->size.nh = (double)sd->size.imh / sd->zoom; | ||
1130 | 1094 | | |||
1131 | elm_photocam_image_region_get(obj, ®x, ®y, ®w, ®h); | 1095 | elm_photocam_image_region_get(obj, ®x, ®y, ®w, ®h); | ||
1132 | evas_object_geometry_get(sd->img, &ix, &iy, &iw, &ih); | 1096 | evas_object_geometry_get(sd->img, &ix, &iy, &iw, &ih); | ||
1133 | 1097 | | |||
1134 | sd->pvx = g_layer->x; | 1098 | sd->pvx = g_layer->x; | ||
1135 | sd->pvy = g_layer->y; | 1099 | sd->pvy = g_layer->y; | ||
1136 | 1100 | | |||
1137 | xx = (px / sd->zoom) - sd->pvx; | 1101 | xx = (px / sd->zoom) - sd->pvx; | ||
1138 | yy = (py / sd->zoom) - sd->pvy; | 1102 | yy = (py / sd->zoom) - sd->pvy; | ||
1139 | sd->g_layer_zoom.imx = 0; | 1103 | sd->g_layer_zoom.imx = 0; | ||
1140 | sd->g_layer_zoom.imy = 0; | 1104 | sd->g_layer_zoom.imy = 0; | ||
1141 | 1105 | | |||
1142 | if ((xx < 0) || (rw > sd->size.nw)) | 1106 | if ((xx < 0) || (view.w > sd->size.nw)) | ||
1143 | { | 1107 | { | ||
1144 | sd->g_layer_zoom.imx = xx; | 1108 | sd->g_layer_zoom.imx = xx; | ||
1145 | xx = 0; | 1109 | xx = 0; | ||
1146 | } | 1110 | } | ||
1147 | else if ((xx + rw) > sd->size.nw) | 1111 | else if ((xx + view.w) > sd->size.nw) | ||
1148 | { | 1112 | { | ||
1149 | sd->g_layer_zoom.imx = xx + rw - sd->size.nw; | 1113 | sd->g_layer_zoom.imx = xx + view.w - sd->size.nw; | ||
1150 | xx = sd->size.nw - rw; | 1114 | xx = sd->size.nw - view.w; | ||
1151 | } | 1115 | } | ||
1152 | 1116 | | |||
1153 | if ((yy < 0) || (rh > sd->size.nh)) | 1117 | if ((yy < 0) || (view.h > sd->size.nh)) | ||
1154 | { | 1118 | { | ||
1155 | sd->g_layer_zoom.imy = yy; | 1119 | sd->g_layer_zoom.imy = yy; | ||
1156 | yy = 0; | 1120 | yy = 0; | ||
1157 | } | 1121 | } | ||
1158 | else if ((yy + rh) > sd->size.nh) | 1122 | else if ((yy + view.h) > sd->size.nh) | ||
1159 | { | 1123 | { | ||
1160 | sd->g_layer_zoom.imy = yy + rh - sd->size.nh; | 1124 | sd->g_layer_zoom.imy = yy + view.h - sd->size.nh; | ||
1161 | yy = sd->size.nh - rh; | 1125 | yy = sd->size.nh - view.h; | ||
1162 | } | 1126 | } | ||
1163 | 1127 | | |||
1164 | sd->size.spos.x = (double)(xx + (rw / 2)) / (double)(sd->size.nw); | 1128 | sd->size.spos.x = (double)(xx + (view.w / 2)) / (double)(sd->size.nw); | ||
1165 | sd->size.spos.y = (double)(yy + (rh / 2)) / (double)(sd->size.nh); | 1129 | sd->size.spos.y = (double)(yy + (view.h / 2)) / (double)(sd->size.nh); | ||
1166 | 1130 | | |||
1167 | _zoom_do(obj, 1.0); | 1131 | _zoom_do(obj, 1.0); | ||
1168 | } | 1132 | } | ||
1169 | 1133 | | |||
1170 | static Evas_Event_Flags | 1134 | static Evas_Event_Flags | ||
1171 | _g_layer_zoom_start_cb(void *data, | 1135 | _g_layer_zoom_start_cb(void *data, | ||
1172 | void *event_info) | 1136 | void *event_info) | ||
1173 | { | 1137 | { | ||
1174 | Evas_Object *obj = data; | 1138 | Evas_Object *obj = data; | ||
1175 | Elm_Gesture_Zoom_Info *p = event_info; | 1139 | Elm_Gesture_Zoom_Info *p = event_info; | ||
1176 | EFL_UI_IMAGE_ZOOMABLE_DATA_GET(obj, sd); | 1140 | EFL_UI_IMAGE_ZOOMABLE_DATA_GET(obj, sd); | ||
1177 | double marginx = 0, marginy = 0; | 1141 | double marginx = 0, marginy = 0; | ||
1178 | Evas_Coord rw = 0, rh = 0; | | |||
1179 | int x, y, w, h; | 1142 | int x, y, w, h; | ||
1143 | Eina_Rect view = {}; | ||||
1180 | 1144 | | |||
1181 | _efl_ui_image_zoomable_bounce_reset(obj, sd); | 1145 | _efl_ui_image_zoomable_bounce_reset(obj, sd); | ||
1182 | sd->zoom_g_layer = EINA_TRUE; | 1146 | sd->zoom_g_layer = EINA_TRUE; | ||
1183 | 1147 | | |||
1184 | elm_interface_scrollable_freeze_set(obj, EINA_TRUE); | 1148 | efl_ui_scrollable_scroll_freeze_set(sd->smanager, EINA_TRUE); | ||
1185 | 1149 | | |||
1186 | elm_photocam_image_region_get(obj, &x, &y, &w, &h); | 1150 | elm_photocam_image_region_get(obj, &x, &y, &w, &h); | ||
1187 | elm_interface_scrollable_content_viewport_geometry_get | 1151 | view = efl_ui_scrollable_viewport_geometry_get(sd->smanager); | ||
Not Done Replystyle jpeg: style | |||||
1188 | (obj, NULL, NULL, &rw, &rh); | | |||
1189 | 1152 | | |||
1190 | if (rw > sd->size.nw) | 1153 | if (view.w > sd->size.nw) | ||
1191 | marginx = (rw - sd->size.nw) / 2; | 1154 | marginx = (view.w - sd->size.nw) / 2; | ||
1192 | if (rh > sd->size.nh) | 1155 | if (view.h > sd->size.nh) | ||
1193 | marginy = (rh - sd->size.nh) / 2; | 1156 | marginy = (view.h - sd->size.nh) / 2; | ||
1194 | 1157 | | |||
1195 | sd->g_layer_start = sd->zoom; | 1158 | sd->g_layer_start = sd->zoom; | ||
1196 | 1159 | | |||
1197 | sd->zoom_point_x = x + ((p->x - marginx) * sd->zoom) + | 1160 | sd->zoom_point_x = x + ((p->x - marginx) * sd->zoom) + | ||
1198 | sd->g_layer_zoom.imx; | 1161 | sd->g_layer_zoom.imx; | ||
1199 | sd->zoom_point_y = y + ((p->y - marginy) * sd->zoom) + | 1162 | sd->zoom_point_y = y + ((p->y - marginy) * sd->zoom) + | ||
1200 | sd->g_layer_zoom.imy; | 1163 | sd->g_layer_zoom.imy; | ||
1201 | 1164 | | |||
Show All 13 Lines | |||||
1215 | } | 1178 | } | ||
1216 | 1179 | | |||
1217 | static Evas_Event_Flags | 1180 | static Evas_Event_Flags | ||
1218 | _g_layer_zoom_end_cb(void *data, | 1181 | _g_layer_zoom_end_cb(void *data, | ||
1219 | void *event_info EINA_UNUSED) | 1182 | void *event_info EINA_UNUSED) | ||
1220 | { | 1183 | { | ||
1221 | Evas_Object *obj = data; | 1184 | Evas_Object *obj = data; | ||
1222 | EFL_UI_IMAGE_ZOOMABLE_DATA_GET(obj, sd); | 1185 | EFL_UI_IMAGE_ZOOMABLE_DATA_GET(obj, sd); | ||
1223 | Evas_Coord rw, rh; | | |||
1224 | 1186 | | |||
1225 | elm_interface_scrollable_content_viewport_geometry_get | 1187 | Eina_Rect view = efl_ui_scrollable_viewport_geometry_get(sd->smanager); | ||
1226 | (obj, NULL, NULL, &rw, &rh); | | |||
1227 | sd->g_layer_start = 1.0; | 1188 | sd->g_layer_start = 1.0; | ||
1228 | 1189 | | |||
1229 | if (sd->g_layer_zoom.imx || sd->g_layer_zoom.imy) | 1190 | if (sd->g_layer_zoom.imx || sd->g_layer_zoom.imy) | ||
1230 | { | 1191 | { | ||
1231 | double t; | 1192 | double t; | ||
1232 | 1193 | | |||
1233 | t = ecore_loop_time_get(); | 1194 | t = ecore_loop_time_get(); | ||
1234 | sd->g_layer_zoom.bounce.x_start = sd->g_layer_zoom.imx; | 1195 | sd->g_layer_zoom.bounce.x_start = sd->g_layer_zoom.imx; | ||
1235 | sd->g_layer_zoom.bounce.y_start = sd->g_layer_zoom.imy; | 1196 | sd->g_layer_zoom.bounce.y_start = sd->g_layer_zoom.imy; | ||
1236 | sd->g_layer_zoom.bounce.x_end = 0; | 1197 | sd->g_layer_zoom.bounce.x_end = 0; | ||
1237 | sd->g_layer_zoom.bounce.y_end = 0; | 1198 | sd->g_layer_zoom.bounce.y_end = 0; | ||
1238 | 1199 | | |||
1239 | if (rw > sd->size.nw && | 1200 | if (view.w > sd->size.nw && | ||
1240 | rh > sd->size.nh) | 1201 | view.h > sd->size.nh) | ||
1241 | { | 1202 | { | ||
1242 | Evas_Coord pw, ph; | 1203 | Evas_Coord pw, ph; | ||
1243 | double z; | 1204 | double z; | ||
1244 | 1205 | | |||
1245 | if ((sd->size.imw < rw) && (sd->size.imh < rh)) | 1206 | if ((sd->size.imw < view.w) && (sd->size.imh < view.h)) | ||
1246 | { | 1207 | { | ||
1247 | sd->zoom = 1; | 1208 | sd->zoom = 1; | ||
1248 | sd->size.nw = sd->size.imw; | 1209 | sd->size.nw = sd->size.imw; | ||
1249 | sd->size.nh = sd->size.imh; | 1210 | sd->size.nh = sd->size.imh; | ||
1250 | } | 1211 | } | ||
1251 | else | 1212 | else | ||
1252 | { | 1213 | { | ||
1253 | ph = (sd->size.imh * rw) / sd->size.imw; | 1214 | ph = (sd->size.imh * view.w) / sd->size.imw; | ||
1254 | if (ph > rh) | 1215 | if (ph > view.h) | ||
1255 | { | 1216 | { | ||
1256 | pw = (sd->size.imw * rh) / sd->size.imh; | 1217 | pw = (sd->size.imw * view.h) / sd->size.imh; | ||
1257 | ph = rh; | 1218 | ph = view.h; | ||
1258 | } | 1219 | } | ||
1259 | else | 1220 | else | ||
1260 | { | 1221 | { | ||
1261 | pw = rw; | 1222 | pw = view.w; | ||
1262 | } | 1223 | } | ||
1263 | if (sd->size.imw > sd->size.imh) | 1224 | if (sd->size.imw > sd->size.imh) | ||
1264 | z = (double)sd->size.imw / pw; | 1225 | z = (double)sd->size.imw / pw; | ||
1265 | else | 1226 | else | ||
1266 | z = (double)sd->size.imh / ph; | 1227 | z = (double)sd->size.imh / ph; | ||
1267 | 1228 | | |||
1268 | sd->zoom = z; | 1229 | sd->zoom = z; | ||
1269 | sd->size.nw = pw; | 1230 | sd->size.nw = pw; | ||
1270 | sd->size.nh = ph; | 1231 | sd->size.nh = ph; | ||
1271 | } | 1232 | } | ||
1272 | sd->g_layer_zoom.bounce.x_end = (sd->size.nw - rw) / 2; | 1233 | sd->g_layer_zoom.bounce.x_end = (sd->size.nw - view.w) / 2; | ||
1273 | sd->g_layer_zoom.bounce.y_end = (sd->size.nh - rh) / 2; | 1234 | sd->g_layer_zoom.bounce.y_end = (sd->size.nh - view.h) / 2; | ||
1274 | } | 1235 | } | ||
1275 | else | 1236 | else | ||
1276 | { | 1237 | { | ||
1277 | int xx, yy; | 1238 | int xx, yy; | ||
1278 | 1239 | | |||
1279 | xx = (sd->zoom_point_x / sd->zoom) - sd->pvx; | 1240 | xx = (sd->zoom_point_x / sd->zoom) - sd->pvx; | ||
1280 | yy = (sd->zoom_point_y / sd->zoom) - sd->pvy; | 1241 | yy = (sd->zoom_point_y / sd->zoom) - sd->pvy; | ||
1281 | 1242 | | |||
1282 | if (xx < 0) xx = 0; | 1243 | if (xx < 0) xx = 0; | ||
1283 | if (yy < 0) yy = 0; | 1244 | if (yy < 0) yy = 0; | ||
1284 | 1245 | | |||
1285 | if (rw > sd->size.nw) | 1246 | if (view.w > sd->size.nw) | ||
1286 | sd->g_layer_zoom.bounce.x_end = (sd->size.nw - rw) / 2; | 1247 | sd->g_layer_zoom.bounce.x_end = (sd->size.nw - view.w) / 2; | ||
1287 | if ((xx + rw) > sd->size.nw) | 1248 | if ((xx + view.w) > sd->size.nw) | ||
1288 | xx = sd->size.nw - rw; | 1249 | xx = sd->size.nw - view.w; | ||
1289 | 1250 | | |||
1290 | if (rh > sd->size.nh) | 1251 | if (view.h > sd->size.nh) | ||
1291 | sd->g_layer_zoom.bounce.y_end = (sd->size.nh - rh) / 2; | 1252 | sd->g_layer_zoom.bounce.y_end = (sd->size.nh - view.h) / 2; | ||
1292 | if ((yy + rh) > sd->size.nh) | 1253 | if ((yy + view.h) > sd->size.nh) | ||
1293 | yy = sd->size.nh - rh; | 1254 | yy = sd->size.nh - view.h; | ||
1294 | 1255 | | |||
1295 | sd->size.spos.x = (double)(xx + (rw / 2)) / (double)(sd->size.nw); | 1256 | sd->size.spos.x = (double)(xx + (view.w / 2)) / (double)(sd->size.nw); | ||
1296 | sd->size.spos.y = (double)(yy + (rh / 2)) / (double)(sd->size.nh); | 1257 | sd->size.spos.y = (double)(yy + (view.h / 2)) / (double)(sd->size.nh); | ||
1297 | } | 1258 | } | ||
1298 | 1259 | | |||
1299 | sd->g_layer_zoom.bounce.t_start = t; | 1260 | sd->g_layer_zoom.bounce.t_start = t; | ||
1300 | sd->g_layer_zoom.bounce.t_end = t + | 1261 | sd->g_layer_zoom.bounce.t_end = t + | ||
1301 | _elm_config->page_scroll_friction; | 1262 | _elm_config->page_scroll_friction; | ||
1302 | 1263 | | |||
1303 | efl_event_callback_add(obj, EFL_EVENT_ANIMATOR_TICK, _bounce_eval, obj); | 1264 | efl_event_callback_add(obj, EFL_EVENT_ANIMATOR_TICK, _bounce_eval, obj); | ||
1304 | } | 1265 | } | ||
1305 | else | 1266 | else | ||
1306 | { | 1267 | { | ||
1307 | elm_interface_scrollable_freeze_set(obj, EINA_FALSE); | 1268 | efl_ui_scrollable_scroll_freeze_set(obj, EINA_FALSE); | ||
1308 | sd->zoom_g_layer = EINA_FALSE; | 1269 | sd->zoom_g_layer = EINA_FALSE; | ||
1309 | } | 1270 | } | ||
1310 | 1271 | | |||
1311 | return EVAS_EVENT_FLAG_NONE; | 1272 | return EVAS_EVENT_FLAG_NONE; | ||
1312 | } | 1273 | } | ||
1313 | 1274 | | |||
1314 | static void | 1275 | static void | ||
1315 | _orient_do(Evas_Object *obj, Efl_Ui_Image_Zoomable_Data *sd) | 1276 | _orient_do(Evas_Object *obj, Efl_Ui_Image_Zoomable_Data *sd) | ||
▲ Show 20 Lines • Show All 78 Lines • ▼ Show 20 Line(s) | |||||
1394 | } | 1355 | } | ||
1395 | 1356 | | |||
1396 | EOLIAN static Efl_Flip | 1357 | EOLIAN static Efl_Flip | ||
1397 | _efl_ui_image_zoomable_efl_flipable_flip_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Data *sd) | 1358 | _efl_ui_image_zoomable_efl_flipable_flip_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Data *sd) | ||
1398 | { | 1359 | { | ||
1399 | return sd->flip; | 1360 | return sd->flip; | ||
1400 | } | 1361 | } | ||
1401 | 1362 | | |||
1363 | static void | ||||
1364 | _efl_ui_image_zoomable_bar_read_and_update(Eo *obj) | ||||
1365 | { | ||||
1366 | EFL_UI_IMAGE_ZOOMABLE_DATA_GET(obj, sd); | ||||
1367 | ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); | ||||
1368 | double vx, vy; | ||||
1369 | | ||||
1370 | edje_object_part_drag_value_get | ||||
1371 | (wd->resize_obj, "elm.dragable.vbar", NULL, &vy); | ||||
1372 | edje_object_part_drag_value_get | ||||
1373 | (wd->resize_obj, "elm.dragable.hbar", &vx, NULL); | ||||
1374 | efl_ui_scrollbar_bar_position_set(sd->smanager, vx, vy); | ||||
1375 | } | ||||
1376 | | ||||
1377 | static void | ||||
1378 | _efl_ui_image_zoomable_reload_cb(void *data, | ||||
1379 | Evas_Object *obj EINA_UNUSED, | ||||
1380 | const char *emission EINA_UNUSED, | ||||
1381 | const char *source EINA_UNUSED) | ||||
1382 | { | ||||
1383 | EFL_UI_IMAGE_ZOOMABLE_DATA_GET(data, sd); | ||||
1384 | | ||||
1385 | efl_ui_scrollbar_bar_visibility_update(sd->smanager); | ||||
1386 | } | ||||
1387 | | ||||
1388 | static void | ||||
1389 | _efl_ui_image_zoomable_vbar_drag_cb(void *data, | ||||
1390 | Evas_Object *obj EINA_UNUSED, | ||||
1391 | const char *emission EINA_UNUSED, | ||||
1392 | const char *source EINA_UNUSED) | ||||
1393 | { | ||||
1394 | _efl_ui_image_zoomable_bar_read_and_update(data); | ||||
1395 | | ||||
1396 | Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_VERTICAL; | ||||
1397 | efl_event_callback_call(data, EFL_UI_SCROLLBAR_EVENT_BAR_DRAG, &type); | ||||
1398 | } | ||||
1399 | | ||||
1400 | static void | ||||
1401 | _efl_ui_image_zoomable_vbar_press_cb(void *data, | ||||
1402 | Evas_Object *obj EINA_UNUSED, | ||||
1403 | const char *emission EINA_UNUSED, | ||||
1404 | const char *source EINA_UNUSED) | ||||
1405 | { | ||||
1406 | Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_VERTICAL; | ||||
1407 | efl_event_callback_call(data, EFL_UI_SCROLLBAR_EVENT_BAR_PRESS, &type); | ||||
1408 | } | ||||
1409 | | ||||
1410 | static void | ||||
1411 | _efl_ui_image_zoomable_vbar_unpress_cb(void *data, | ||||
1412 | Evas_Object *obj EINA_UNUSED, | ||||
1413 | const char *emission EINA_UNUSED, | ||||
1414 | const char *source EINA_UNUSED) | ||||
1415 | { | ||||
1416 | Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_VERTICAL; | ||||
1417 | efl_event_callback_call(data, EFL_UI_SCROLLBAR_EVENT_BAR_UNPRESS, &type); | ||||
1418 | } | ||||
1419 | | ||||
1420 | static void | ||||
1421 | _efl_ui_image_zoomable_edje_drag_start_cb(void *data, | ||||
1422 | Evas_Object *obj EINA_UNUSED, | ||||
1423 | const char *emission EINA_UNUSED, | ||||
1424 | const char *source EINA_UNUSED) | ||||
1425 | { | ||||
1426 | EFL_UI_IMAGE_ZOOMABLE_DATA_GET(data, sd); | ||||
1427 | | ||||
1428 | _efl_ui_image_zoomable_bar_read_and_update(data); | ||||
1429 | | ||||
1430 | sd->freeze_want = efl_ui_scrollable_scroll_freeze_get(sd->smanager); | ||||
1431 | efl_ui_scrollable_scroll_freeze_set(sd->smanager, EINA_TRUE); | ||||
1432 | efl_event_callback_call(data, EFL_UI_EVENT_SCROLL_DRAG_START, NULL); | ||||
1433 | } | ||||
1434 | | ||||
1435 | static void | ||||
1436 | _efl_ui_image_zoomable_edje_drag_stop_cb(void *data, | ||||
1437 | Evas_Object *obj EINA_UNUSED, | ||||
1438 | const char *emission EINA_UNUSED, | ||||
1439 | const char *source EINA_UNUSED) | ||||
1440 | { | ||||
1441 | EFL_UI_IMAGE_ZOOMABLE_DATA_GET(data, sd); | ||||
1442 | | ||||
1443 | _efl_ui_image_zoomable_bar_read_and_update(data); | ||||
1444 | | ||||
1445 | efl_ui_scrollable_scroll_freeze_set(sd->smanager, sd->freeze_want); | ||||
1446 | efl_event_callback_call(data, EFL_UI_EVENT_SCROLL_DRAG_STOP, NULL); | ||||
1447 | } | ||||
1448 | | ||||
1449 | static void | ||||
1450 | _efl_ui_image_zoomable_edje_drag_cb(void *data, | ||||
1451 | Evas_Object *obj EINA_UNUSED, | ||||
1452 | const char *emission EINA_UNUSED, | ||||
1453 | const char *source EINA_UNUSED) | ||||
1454 | { | ||||
1455 | _efl_ui_image_zoomable_bar_read_and_update(data); | ||||
1456 | } | ||||
1457 | | ||||
1458 | static void | ||||
1459 | _efl_ui_image_zoomable_hbar_drag_cb(void *data, | ||||
1460 | Evas_Object *obj EINA_UNUSED, | ||||
1461 | const char *emission EINA_UNUSED, | ||||
1462 | const char *source EINA_UNUSED) | ||||
1463 | { | ||||
1464 | _efl_ui_image_zoomable_bar_read_and_update(data); | ||||
1465 | | ||||
1466 | Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_HORIZONTAL; | ||||
1467 | efl_event_callback_call(data, EFL_UI_SCROLLBAR_EVENT_BAR_DRAG, &type); | ||||
1468 | } | ||||
1469 | | ||||
1470 | static void | ||||
1471 | _efl_ui_image_zoomable_hbar_press_cb(void *data, | ||||
1472 | Evas_Object *obj EINA_UNUSED, | ||||
1473 | const char *emission EINA_UNUSED, | ||||
1474 | const char *source EINA_UNUSED) | ||||
1475 | { | ||||
1476 | Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_HORIZONTAL; | ||||
1477 | efl_event_callback_call(data, EFL_UI_SCROLLBAR_EVENT_BAR_PRESS, &type); | ||||
1478 | } | ||||
1479 | | ||||
1480 | static void | ||||
1481 | _efl_ui_image_zoomable_hbar_unpress_cb(void *data, | ||||
1482 | Evas_Object *obj EINA_UNUSED, | ||||
1483 | const char *emission EINA_UNUSED, | ||||
1484 | const char *source EINA_UNUSED) | ||||
1485 | { | ||||
1486 | Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_HORIZONTAL; | ||||
1487 | efl_event_callback_call(data, EFL_UI_SCROLLBAR_EVENT_BAR_UNPRESS, &type); | ||||
1488 | } | ||||
1489 | | ||||
1490 | static void | ||||
1491 | _efl_ui_image_zoomable_bar_size_changed_cb(void *data, const Efl_Event *event EINA_UNUSED) | ||||
1492 | { | ||||
1493 | Eo *obj = data; | ||||
1494 | EFL_UI_IMAGE_ZOOMABLE_DATA_GET(obj, sd); | ||||
1495 | ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); | ||||
1496 | | ||||
1497 | double width = 0.0, height = 0.0; | ||||
1498 | | ||||
1499 | efl_ui_scrollbar_bar_size_get(sd->smanager, &width, &height); | ||||
1500 | edje_object_part_drag_size_set(wd->resize_obj, "elm.dragable.hbar", width, 1.0); | ||||
1501 | edje_object_part_drag_size_set(wd->resize_obj, "elm.dragable.vbar", 1.0, height); | ||||
1502 | } | ||||
1503 | | ||||
1504 | static void | ||||
1505 | _efl_ui_image_zoomable_bar_pos_changed_cb(void *data, const Efl_Event *event EINA_UNUSED) | ||||
1506 | { | ||||
1507 | Eo *obj = data; | ||||
1508 | EFL_UI_IMAGE_ZOOMABLE_DATA_GET(obj, sd); | ||||
1509 | ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); | ||||
1510 | | ||||
1511 | double posx = 0.0, posy = 0.0; | ||||
1512 | | ||||
1513 | efl_ui_scrollbar_bar_position_get(sd->smanager, &posx, &posy); | ||||
1514 | edje_object_part_drag_value_set(wd->resize_obj, "elm.dragable.hbar", posx, 0.0); | ||||
1515 | edje_object_part_drag_value_set(wd->resize_obj, "elm.dragable.vbar", 0.0, posy); | ||||
1516 | } | ||||
1517 | | ||||
1518 | static void | ||||
1519 | _efl_ui_image_zoomable_bar_show_cb(void *data, const Efl_Event *event) | ||||
1520 | { | ||||
1521 | Eo *obj = data; | ||||
1522 | ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); | ||||
1523 | Efl_Ui_Scrollbar_Direction type = *(Efl_Ui_Scrollbar_Direction *)(event->info); | ||||
1524 | | ||||
1525 | if (type == EFL_UI_SCROLLBAR_DIRECTION_HORIZONTAL) | ||||
1526 | edje_object_signal_emit(wd->resize_obj, "elm,action,show,hbar", "elm"); | ||||
1527 | else if (type == EFL_UI_SCROLLBAR_DIRECTION_VERTICAL) | ||||
1528 | edje_object_signal_emit(wd->resize_obj, "elm,action,show,vbar", "elm"); | ||||
1529 | } | ||||
1530 | | ||||
1531 | static void | ||||
1532 | _efl_ui_image_zoomable_bar_hide_cb(void *data, const Efl_Event *event) | ||||
1533 | { | ||||
1534 | Eo *obj = data; | ||||
1535 | ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); | ||||
1536 | Efl_Ui_Scrollbar_Direction type = *(Efl_Ui_Scrollbar_Direction *)(event->info); | ||||
1537 | | ||||
1538 | if (type == EFL_UI_SCROLLBAR_DIRECTION_HORIZONTAL) | ||||
1539 | edje_object_signal_emit(wd->resize_obj, "elm,action,hide,hbar", "elm"); | ||||
1540 | else if (type == EFL_UI_SCROLLBAR_DIRECTION_VERTICAL) | ||||
1541 | edje_object_signal_emit(wd->resize_obj, "elm,action,hide,vbar", "elm"); | ||||
1542 | } | ||||
1543 | | ||||
1544 | static void | ||||
1545 | _efl_ui_image_zoomable_edje_object_attach(Eo *obj) | ||||
1546 | { | ||||
1547 | efl_layout_signal_callback_add | ||||
1548 | (obj, "reload", "elm", _efl_ui_image_zoomable_reload_cb, obj); | ||||
1549 | efl_layout_signal_callback_add | ||||
1550 | (obj, "drag", "elm.dragable.vbar", _efl_ui_image_zoomable_vbar_drag_cb, | ||||
1551 | obj); | ||||
1552 | efl_layout_signal_callback_add | ||||
1553 | (obj, "drag,set", "elm.dragable.vbar", | ||||
1554 | _efl_ui_image_zoomable_edje_drag_cb, obj); | ||||
1555 | efl_layout_signal_callback_add | ||||
1556 | (obj, "drag,start", "elm.dragable.vbar", | ||||
1557 | _efl_ui_image_zoomable_edje_drag_start_cb, obj); | ||||
1558 | efl_layout_signal_callback_add | ||||
1559 | (obj, "drag,stop", "elm.dragable.vbar", | ||||
1560 | _efl_ui_image_zoomable_edje_drag_stop_cb, obj); | ||||
1561 | efl_layout_signal_callback_add | ||||
1562 | (obj, "drag,step", "elm.dragable.vbar", | ||||
1563 | _efl_ui_image_zoomable_edje_drag_cb, obj); | ||||
1564 | efl_layout_signal_callback_add | ||||
1565 | (obj, "drag,page", "elm.dragable.vbar", | ||||
1566 | _efl_ui_image_zoomable_edje_drag_cb, obj); | ||||
1567 | efl_layout_signal_callback_add | ||||
1568 | (obj, "elm,vbar,press", "elm", | ||||
1569 | _efl_ui_image_zoomable_vbar_press_cb, obj); | ||||
1570 | efl_layout_signal_callback_add | ||||
1571 | (obj, "elm,vbar,unpress", "elm", | ||||
1572 | _efl_ui_image_zoomable_vbar_unpress_cb, obj); | ||||
1573 | efl_layout_signal_callback_add | ||||
1574 | (obj, "drag", "elm.dragable.hbar", _efl_ui_image_zoomable_hbar_drag_cb, | ||||
1575 | obj); | ||||
1576 | efl_layout_signal_callback_add | ||||
1577 | (obj, "drag,set", "elm.dragable.hbar", | ||||
1578 | _efl_ui_image_zoomable_edje_drag_cb, obj); | ||||
1579 | efl_layout_signal_callback_add | ||||
1580 | (obj, "drag,start", "elm.dragable.hbar", | ||||
1581 | _efl_ui_image_zoomable_edje_drag_start_cb, obj); | ||||
1582 | efl_layout_signal_callback_add | ||||
1583 | (obj, "drag,stop", "elm.dragable.hbar", | ||||
1584 | _efl_ui_image_zoomable_edje_drag_stop_cb, obj); | ||||
1585 | efl_layout_signal_callback_add | ||||
1586 | (obj, "drag,step", "elm.dragable.hbar", | ||||
1587 | _efl_ui_image_zoomable_edje_drag_cb, obj); | ||||
1588 | efl_layout_signal_callback_add | ||||
1589 | (obj, "drag,page", "elm.dragable.hbar", | ||||
1590 | _efl_ui_image_zoomable_edje_drag_cb, obj); | ||||
1591 | efl_layout_signal_callback_add | ||||
1592 | (obj, "elm,hbar,press", "elm", | ||||
1593 | _efl_ui_image_zoomable_hbar_press_cb, obj); | ||||
1594 | efl_layout_signal_callback_add | ||||
1595 | (obj, "elm,hbar,unpress", "elm", | ||||
1596 | _efl_ui_image_zoomable_hbar_unpress_cb, obj); | ||||
1597 | } | ||||
1598 | | ||||
1599 | static void | ||||
1600 | _efl_ui_image_zoomable_edje_object_detach(Evas_Object *obj) | ||||
1601 | { | ||||
1602 | efl_layout_signal_callback_del | ||||
1603 | (obj, "reload", "elm", _efl_ui_image_zoomable_reload_cb, obj); | ||||
1604 | efl_layout_signal_callback_del | ||||
1605 | (obj, "drag", "elm.dragable.vbar", _efl_ui_image_zoomable_vbar_drag_cb, | ||||
1606 | obj); | ||||
1607 | efl_layout_signal_callback_del | ||||
1608 | (obj, "drag,set", "elm.dragable.vbar", | ||||
1609 | _efl_ui_image_zoomable_edje_drag_cb, obj); | ||||
1610 | efl_layout_signal_callback_del | ||||
1611 | (obj, "drag,start", "elm.dragable.vbar", | ||||
1612 | _efl_ui_image_zoomable_edje_drag_start_cb, obj); | ||||
1613 | efl_layout_signal_callback_del | ||||
1614 | (obj, "drag,stop", "elm.dragable.vbar", | ||||
1615 | _efl_ui_image_zoomable_edje_drag_stop_cb, obj); | ||||
1616 | efl_layout_signal_callback_del | ||||
1617 | (obj, "drag,step", "elm.dragable.vbar", | ||||
1618 | _efl_ui_image_zoomable_edje_drag_cb, obj); | ||||
1619 | efl_layout_signal_callback_del | ||||
1620 | (obj, "drag,page", "elm.dragable.vbar", | ||||
1621 | _efl_ui_image_zoomable_edje_drag_cb, obj); | ||||
1622 | efl_layout_signal_callback_del | ||||
1623 | (obj, "elm,vbar,press", "elm", | ||||
1624 | _efl_ui_image_zoomable_vbar_press_cb, obj); | ||||
1625 | efl_layout_signal_callback_del | ||||
1626 | (obj, "elm,vbar,unpress", "elm", | ||||
1627 | _efl_ui_image_zoomable_vbar_unpress_cb, obj); | ||||
1628 | efl_layout_signal_callback_del | ||||
1629 | (obj, "drag", "elm.dragable.hbar", _efl_ui_image_zoomable_hbar_drag_cb, | ||||
1630 | obj); | ||||
1631 | efl_layout_signal_callback_del | ||||
1632 | (obj, "drag,set", "elm.dragable.hbar", | ||||
1633 | _efl_ui_image_zoomable_edje_drag_cb, obj); | ||||
1634 | efl_layout_signal_callback_del | ||||
1635 | (obj, "drag,start", "elm.dragable.hbar", | ||||
1636 | _efl_ui_image_zoomable_edje_drag_start_cb, obj); | ||||
1637 | efl_layout_signal_callback_del | ||||
1638 | (obj, "drag,stop", "elm.dragable.hbar", | ||||
1639 | _efl_ui_image_zoomable_edje_drag_stop_cb, obj); | ||||
1640 | efl_layout_signal_callback_del | ||||
1641 | (obj, "drag,step", "elm.dragable.hbar", | ||||
1642 | _efl_ui_image_zoomable_edje_drag_cb, obj); | ||||
1643 | efl_layout_signal_callback_del | ||||
1644 | (obj, "drag,page", "elm.dragable.hbar", | ||||
1645 | _efl_ui_image_zoomable_edje_drag_cb, obj); | ||||
1646 | efl_layout_signal_callback_del | ||||
1647 | (obj, "elm,hbar,press", "elm", | ||||
1648 | _efl_ui_image_zoomable_hbar_press_cb, obj); | ||||
1649 | efl_layout_signal_callback_del | ||||
1650 | (obj, "elm,hbar,unpress", "elm", | ||||
1651 | _efl_ui_image_zoomable_hbar_unpress_cb, obj); | ||||
1652 | } | ||||
1653 | | ||||
1402 | EOLIAN static void | 1654 | EOLIAN static void | ||
1403 | _efl_ui_image_zoomable_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Image_Zoomable_Data *priv) | 1655 | _efl_ui_image_zoomable_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Image_Zoomable_Data *priv) | ||
1404 | { | 1656 | { | ||
1405 | Eina_Bool bounce = _elm_config->thumbscroll_bounce_enable; | 1657 | Eina_Bool bounce = _elm_config->thumbscroll_bounce_enable; | ||
1406 | Efl_Ui_Image_Zoomable_Pan_Data *pan_data; | 1658 | Efl_Ui_Image_Zoomable_Pan_Data *pan_data; | ||
1407 | Evas_Object *edje; | 1659 | Evas_Object *edje; | ||
1408 | Evas_Coord minw, minh; | 1660 | Evas_Coord minw, minh; | ||
1409 | 1661 | | |||
1410 | elm_widget_sub_object_parent_add(obj); | 1662 | elm_widget_sub_object_parent_add(obj); | ||
1411 | 1663 | | |||
1412 | edje = edje_object_add(evas_object_evas_get(obj)); | 1664 | edje = edje_object_add(evas_object_evas_get(obj)); | ||
1413 | elm_widget_resize_object_set(obj, edje); | 1665 | elm_widget_resize_object_set(obj, edje); | ||
1414 | 1666 | | |||
1415 | efl_canvas_group_add(efl_super(obj, MY_CLASS)); | 1667 | efl_canvas_group_add(efl_super(obj, MY_CLASS)); | ||
1416 | 1668 | | |||
1417 | elm_widget_theme_object_set | 1669 | elm_widget_theme_object_set | ||
1418 | (obj, edje, "photocam", "base", elm_widget_style_get(obj)); | 1670 | (obj, edje, "photocam", "base", elm_widget_style_get(obj)); | ||
1419 | 1671 | | |||
1420 | priv->hit_rect = evas_object_rectangle_add(evas_object_evas_get(obj)); | | |||
1421 | evas_object_smart_member_add(priv->hit_rect, obj); | | |||
1422 | elm_widget_sub_object_add(obj, priv->hit_rect); | | |||
1423 | | ||||
1424 | /* common scroller hit rectangle setup */ | | |||
1425 | evas_object_color_set(priv->hit_rect, 0, 0, 0, 0); | | |||
1426 | evas_object_show(priv->hit_rect); | | |||
1427 | evas_object_repeat_events_set(priv->hit_rect, EINA_TRUE); | | |||
1428 | | ||||
1429 | elm_widget_can_focus_set(obj, EINA_TRUE); | 1672 | elm_widget_can_focus_set(obj, EINA_TRUE); | ||
1430 | 1673 | | |||
1431 | elm_interface_scrollable_objects_set(obj, edje, priv->hit_rect); | 1674 | priv->smanager = efl_add(EFL_UI_SCROLL_MANAGER_CLASS, obj); | ||
1432 | 1675 | | |||
1433 | elm_interface_scrollable_animate_start_cb_set(obj, _scroll_animate_start_cb); | 1676 | efl_ui_mirrored_set(priv->smanager, efl_ui_mirrored_get(obj)); | ||
1434 | elm_interface_scrollable_animate_stop_cb_set(obj, _scroll_animate_stop_cb); | 1677 | efl_ui_scrollable_bounce_enabled_set(priv->smanager, bounce, bounce); | ||
1435 | elm_interface_scrollable_drag_start_cb_set(obj, _scroll_drag_start_cb); | | |||
1436 | elm_interface_scrollable_drag_stop_cb_set(obj, _scroll_drag_stop_cb); | | |||
1437 | elm_interface_scrollable_scroll_cb_set(obj, _scroll_cb); | | |||
1438 | 1678 | | |||
1439 | elm_interface_scrollable_bounce_allow_set(obj, bounce, bounce); | 1679 | priv->pan_obj = efl_add(MY_PAN_CLASS, obj); | ||
1680 | | ||||
1681 | efl_ui_scroll_manager_pan_set(priv->smanager, priv->pan_obj); | ||||
1682 | edje_object_part_swallow(edje, "elm.swallow.content", priv->pan_obj); | ||||
1440 | 1683 | | |||
1441 | priv->pan_obj = efl_add(MY_PAN_CLASS, evas_object_evas_get(obj)); | | |||
1442 | pan_data = efl_data_scope_get(priv->pan_obj, MY_PAN_CLASS); | 1684 | pan_data = efl_data_scope_get(priv->pan_obj, MY_PAN_CLASS); | ||
1443 | efl_data_ref(obj, MY_CLASS); | 1685 | efl_data_ref(obj, MY_CLASS); | ||
1444 | pan_data->wobj = obj; | 1686 | pan_data->wobj = obj; | ||
1445 | pan_data->wsd = priv; | 1687 | pan_data->wsd = priv; | ||
1446 | 1688 | | |||
1447 | elm_interface_scrollable_extern_pan_set(obj, priv->pan_obj); | 1689 | efl_event_callback_add(obj, EFL_UI_EVENT_SCROLL, _scroll_cb, obj); | ||
1448 | 1690 | | |||
1449 | priv->g_layer_start = 1.0; | 1691 | priv->g_layer_start = 1.0; | ||
1450 | priv->zoom = 1; | 1692 | priv->zoom = 1; | ||
1451 | priv->mode = ELM_PHOTOCAM_ZOOM_MODE_MANUAL; | 1693 | priv->mode = ELM_PHOTOCAM_ZOOM_MODE_MANUAL; | ||
1452 | priv->tsize = 512; | 1694 | priv->tsize = 512; | ||
1453 | 1695 | | |||
1454 | priv->img = evas_object_image_add(evas_object_evas_get(obj)); | 1696 | priv->img = evas_object_image_add(evas_object_evas_get(obj)); | ||
1455 | evas_object_image_load_orientation_set(priv->img, EINA_TRUE); | 1697 | evas_object_image_load_orientation_set(priv->img, EINA_TRUE); | ||
Show All 10 Lines | |||||
1466 | elm_widget_sub_object_add(obj, priv->img); | 1708 | elm_widget_sub_object_add(obj, priv->img); | ||
1467 | evas_object_image_filled_set(priv->img, EINA_TRUE); | 1709 | evas_object_image_filled_set(priv->img, EINA_TRUE); | ||
1468 | evas_object_event_callback_add | 1710 | evas_object_event_callback_add | ||
1469 | (priv->img, EVAS_CALLBACK_IMAGE_PRELOADED, _main_img_preloaded_cb, obj); | 1711 | (priv->img, EVAS_CALLBACK_IMAGE_PRELOADED, _main_img_preloaded_cb, obj); | ||
1470 | 1712 | | |||
1471 | edje_object_size_min_calc(edje, &minw, &minh); | 1713 | edje_object_size_min_calc(edje, &minw, &minh); | ||
1472 | evas_object_size_hint_min_set(obj, minw, minh); | 1714 | evas_object_size_hint_min_set(obj, minw, minh); | ||
1473 | 1715 | | |||
1474 | _sizing_eval(obj); | 1716 | _efl_ui_image_zoomable_edje_object_attach(obj); | ||
1475 | 1717 | | |||
1718 | efl_event_callback_add(obj, EFL_UI_SCROLLBAR_EVENT_BAR_SIZE_CHANGED, | ||||
1719 | _efl_ui_image_zoomable_bar_size_changed_cb, obj); | ||||
1720 | efl_event_callback_add(obj, EFL_UI_SCROLLBAR_EVENT_BAR_POS_CHANGED, | ||||
1721 | _efl_ui_image_zoomable_bar_pos_changed_cb, obj); | ||||
1722 | efl_event_callback_add(obj, EFL_UI_SCROLLBAR_EVENT_BAR_SHOW, | ||||
1723 | _efl_ui_image_zoomable_bar_show_cb, obj); | ||||
1724 | efl_event_callback_add(obj, EFL_UI_SCROLLBAR_EVENT_BAR_HIDE, | ||||
1725 | _efl_ui_image_zoomable_bar_hide_cb, obj); | ||||
1726 | _sizing_eval(obj); | ||||
1476 | } | 1727 | } | ||
1477 | 1728 | | |||
1478 | EOLIAN static void | 1729 | EOLIAN static void | ||
1479 | _efl_ui_image_zoomable_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd) | 1730 | _efl_ui_image_zoomable_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd) | ||
1480 | { | 1731 | { | ||
1481 | Efl_Ui_Image_Zoomable_Grid *g; | 1732 | Efl_Ui_Image_Zoomable_Grid *g; | ||
1482 | 1733 | | |||
1483 | ecore_timer_del(sd->anim_timer); | 1734 | ecore_timer_del(sd->anim_timer); | ||
Show All 11 Lines | |||||
1495 | if (sd->remote.copier) _efl_ui_image_zoomable_remote_copier_cancel(obj, sd); | 1746 | if (sd->remote.copier) _efl_ui_image_zoomable_remote_copier_cancel(obj, sd); | ||
1496 | if (sd->remote.binbuf) ELM_SAFE_FREE(sd->remote.binbuf, eina_binbuf_free); | 1747 | if (sd->remote.binbuf) ELM_SAFE_FREE(sd->remote.binbuf, eina_binbuf_free); | ||
1497 | eina_stringshare_del(sd->file); | 1748 | eina_stringshare_del(sd->file); | ||
1498 | ecore_job_del(sd->calc_job); | 1749 | ecore_job_del(sd->calc_job); | ||
1499 | ecore_timer_del(sd->scr_timer); | 1750 | ecore_timer_del(sd->scr_timer); | ||
1500 | ecore_timer_del(sd->long_timer); | 1751 | ecore_timer_del(sd->long_timer); | ||
1501 | efl_event_callback_del(obj, EFL_EVENT_ANIMATOR_TICK, _zoom_anim_cb, obj); | 1752 | efl_event_callback_del(obj, EFL_EVENT_ANIMATOR_TICK, _zoom_anim_cb, obj); | ||
1502 | efl_event_callback_del(obj, EFL_EVENT_ANIMATOR_TICK, _bounce_eval, obj); | 1753 | efl_event_callback_del(obj, EFL_EVENT_ANIMATOR_TICK, _bounce_eval, obj); | ||
1754 | efl_event_callback_del(obj, EFL_UI_EVENT_SCROLL, _scroll_cb, obj); | ||||
1503 | 1755 | | |||
1756 | _efl_ui_image_zoomable_edje_object_detach(obj); | ||||
1757 | efl_del(sd->pan_obj); | ||||
1758 | sd->pan_obj = NULL; | ||||
1759 | efl_del(sd->smanager); | ||||
1760 | sd->smanager = NULL; | ||||
1504 | efl_canvas_group_del(efl_super(obj, MY_CLASS)); | 1761 | efl_canvas_group_del(efl_super(obj, MY_CLASS)); | ||
1505 | } | 1762 | } | ||
1506 | 1763 | | |||
1507 | EOLIAN static void | 1764 | EOLIAN static void | ||
1508 | _efl_ui_image_zoomable_efl_gfx_position_set(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd, Eina_Position2D pos) | 1765 | _efl_ui_image_zoomable_efl_gfx_position_set(Eo *obj, Efl_Ui_Image_Zoomable_Data *sdi EINA_UNUSED, Eina_Position2D pos) | ||
1509 | { | 1766 | { | ||
1510 | if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_MOVE, 0, pos.x, pos.y)) | 1767 | if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_MOVE, 0, pos.x, pos.y)) | ||
1511 | return; | 1768 | return; | ||
1512 | 1769 | | |||
1513 | efl_gfx_position_set(efl_super(obj, MY_CLASS), pos); | 1770 | efl_gfx_position_set(efl_super(obj, MY_CLASS), pos); | ||
1514 | efl_gfx_position_set(sd->hit_rect, pos); | | |||
1515 | } | 1771 | } | ||
1516 | 1772 | | |||
1517 | EOLIAN static void | 1773 | EOLIAN static void | ||
1518 | _efl_ui_image_zoomable_efl_gfx_size_set(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd, Eina_Size2D sz) | 1774 | _efl_ui_image_zoomable_efl_gfx_size_set(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd EINA_UNUSED, Eina_Size2D sz) | ||
1519 | { | 1775 | { | ||
1520 | if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_RESIZE, 0, sz.w, sz.h)) | 1776 | if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_RESIZE, 0, sz.w, sz.h)) | ||
1521 | return; | 1777 | return; | ||
1522 | 1778 | | |||
1523 | efl_gfx_size_set(efl_super(obj, MY_CLASS), sz); | 1779 | efl_gfx_size_set(efl_super(obj, MY_CLASS), sz); | ||
1524 | efl_gfx_size_set(sd->hit_rect, sz); | | |||
1525 | } | 1780 | } | ||
1526 | 1781 | | |||
1527 | EOLIAN static void | 1782 | EOLIAN static void | ||
1528 | _efl_ui_image_zoomable_efl_canvas_group_group_member_add(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd, Evas_Object *member) | 1783 | _efl_ui_image_zoomable_efl_canvas_group_group_member_add(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd EINA_UNUSED, Evas_Object *member) | ||
1529 | { | 1784 | { | ||
1530 | | ||||
1531 | efl_canvas_group_member_add(efl_super(obj, MY_CLASS), member); | 1785 | efl_canvas_group_member_add(efl_super(obj, MY_CLASS), member); | ||
1532 | | ||||
1533 | if (sd->hit_rect) | | |||
1534 | evas_object_raise(sd->hit_rect); | | |||
1535 | } | 1786 | } | ||
1536 | 1787 | | |||
1537 | EOLIAN static Eo * | 1788 | EOLIAN static Eo * | ||
1538 | _efl_ui_image_zoomable_efl_object_constructor(Eo *obj, Efl_Ui_Image_Zoomable_Data *_pd EINA_UNUSED) | 1789 | _efl_ui_image_zoomable_efl_object_constructor(Eo *obj, Efl_Ui_Image_Zoomable_Data *_pd EINA_UNUSED) | ||
1539 | { | 1790 | { | ||
1540 | obj = efl_constructor(efl_super(obj, MY_CLASS)); | 1791 | obj = efl_constructor(efl_super(obj, MY_CLASS)); | ||
1541 | efl_canvas_object_type_set(obj, MY_CLASS_NAME_LEGACY); | 1792 | efl_canvas_object_type_set(obj, MY_CLASS_NAME_LEGACY); | ||
1542 | evas_object_smart_callbacks_descriptions_set(obj, _smart_callbacks); | 1793 | evas_object_smart_callbacks_descriptions_set(obj, _smart_callbacks); | ||
Show All 21 Lines | |||||
1564 | _efl_ui_image_zoomable_efl_layout_group_group_size_max_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Data *sd) | 1815 | _efl_ui_image_zoomable_efl_layout_group_group_size_max_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Data *sd) | ||
1565 | { | 1816 | { | ||
1566 | if (sd->edje) | 1817 | if (sd->edje) | ||
1567 | return efl_layout_group_size_max_get(sd->edje); | 1818 | return efl_layout_group_size_max_get(sd->edje); | ||
1568 | else | 1819 | else | ||
1569 | return EINA_SIZE2D(0, 0); | 1820 | return EINA_SIZE2D(0, 0); | ||
1570 | } | 1821 | } | ||
1571 | 1822 | | |||
1823 | EOLIAN static Eina_Bool | ||||
1824 | _efl_ui_image_zoomable_efl_layout_signal_signal_callback_add(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Data *sd EINA_UNUSED, const char *emission, const char *source, Edje_Signal_Cb func_cb, void *data) | ||||
1825 | { | ||||
1826 | Eina_Bool ok; | ||||
1827 | ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); | ||||
1828 | | ||||
1829 | ok = efl_layout_signal_callback_add(wd->resize_obj, emission, source, func_cb, data); | ||||
1830 | | ||||
1831 | return ok; | ||||
1832 | } | ||||
1833 | | ||||
1834 | EOLIAN static Eina_Bool | ||||
1835 | _efl_ui_image_zoomable_efl_layout_signal_signal_callback_del(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Data *sd EINA_UNUSED, const char *emission, const char *source, Edje_Signal_Cb func_cb, void *data) | ||||
1836 | { | ||||
1837 | Eina_Bool ok; | ||||
1838 | ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); | ||||
1839 | | ||||
1840 | ok = efl_layout_signal_callback_del(wd->resize_obj, emission, source, func_cb, data); | ||||
1841 | | ||||
1842 | return ok; | ||||
1843 | } | ||||
1844 | | ||||
1572 | static Eina_Bool | 1845 | static Eina_Bool | ||
1573 | _img_proxy_set(Evas_Object *obj, Efl_Ui_Image_Zoomable_Data *sd, | 1846 | _img_proxy_set(Evas_Object *obj, Efl_Ui_Image_Zoomable_Data *sd, | ||
1574 | const char *file, const Eina_File *f, const char *group, | 1847 | const char *file, const Eina_File *f, const char *group, | ||
1575 | Eina_Bool resize) | 1848 | Eina_Bool resize) | ||
1576 | { | 1849 | { | ||
1577 | ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); | 1850 | ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); | ||
1578 | double tz; | 1851 | double tz; | ||
1579 | int w, h; | 1852 | int w, h; | ||
▲ Show 20 Lines • Show All 375 Lines • ▼ Show 20 Line(s) | |||||
1955 | } | 2228 | } | ||
1956 | 2229 | | |||
1957 | EOLIAN static void | 2230 | EOLIAN static void | ||
1958 | _efl_ui_image_zoomable_efl_ui_zoom_zoom_set(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd, double zoom) | 2231 | _efl_ui_image_zoomable_efl_ui_zoom_zoom_set(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd, double zoom) | ||
1959 | { | 2232 | { | ||
1960 | double z; | 2233 | double z; | ||
1961 | Eina_List *l; | 2234 | Eina_List *l; | ||
1962 | Efl_Ui_Image_Zoomable_Grid *g, *g_zoom = NULL; | 2235 | Efl_Ui_Image_Zoomable_Grid *g, *g_zoom = NULL; | ||
1963 | Evas_Coord pw, ph, rx, ry, rw, rh; | 2236 | Evas_Coord pw, ph; | ||
1964 | int zoom_changed = 0, started = 0; | 2237 | int zoom_changed = 0, started = 0; | ||
1965 | Eina_Bool an = EINA_FALSE; | 2238 | Eina_Bool an = EINA_FALSE; | ||
2239 | Eina_Rect view = {}; | ||||
2240 | Eina_Position2D pos = {}; | ||||
1966 | 2241 | | |||
1967 | if (zoom <= (1.0 / 256.0)) zoom = (1.0 / 256.0); | 2242 | if (zoom <= (1.0 / 256.0)) zoom = (1.0 / 256.0); | ||
1968 | if (EINA_DBL_EQ(zoom, sd->zoom)) return; | 2243 | if (EINA_DBL_EQ(zoom, sd->zoom)) return; | ||
1969 | 2244 | | |||
1970 | sd->zoom = zoom; | 2245 | sd->zoom = zoom; | ||
1971 | sd->size.ow = sd->size.w; | 2246 | sd->size.ow = sd->size.w; | ||
1972 | sd->size.oh = sd->size.h; | 2247 | sd->size.oh = sd->size.h; | ||
1973 | elm_interface_scrollable_content_pos_get(obj, &rx, &ry); | 2248 | pos = efl_ui_scrollable_content_pos_get(sd->smanager); | ||
1974 | elm_interface_scrollable_content_viewport_geometry_get | 2249 | view = efl_ui_scrollable_viewport_geometry_get(sd->smanager); | ||
1975 | (obj, NULL, NULL, &rw, &rh); | 2250 | if ((view.w <= 0) || (view.h <= 0)) return; | ||
1976 | if ((rw <= 0) || (rh <= 0)) return; | | |||
1977 | 2251 | | |||
1978 | if (sd->mode == ELM_PHOTOCAM_ZOOM_MODE_MANUAL) | 2252 | if (sd->mode == ELM_PHOTOCAM_ZOOM_MODE_MANUAL) | ||
1979 | { | 2253 | { | ||
1980 | sd->size.nw = (double)sd->size.imw / sd->zoom; | 2254 | sd->size.nw = (double)sd->size.imw / sd->zoom; | ||
1981 | sd->size.nh = (double)sd->size.imh / sd->zoom; | 2255 | sd->size.nh = (double)sd->size.imh / sd->zoom; | ||
1982 | } | 2256 | } | ||
1983 | else if (sd->mode == ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT) | 2257 | else if (sd->mode == ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT) | ||
1984 | { | 2258 | { | ||
1985 | if ((sd->size.imw < 1) || (sd->size.imh < 1)) | 2259 | if ((sd->size.imw < 1) || (sd->size.imh < 1)) | ||
1986 | { | 2260 | { | ||
1987 | sd->size.nw = 0; | 2261 | sd->size.nw = 0; | ||
1988 | sd->size.nh = 0; | 2262 | sd->size.nh = 0; | ||
1989 | } | 2263 | } | ||
1990 | else | 2264 | else | ||
1991 | { | 2265 | { | ||
1992 | ph = (sd->size.imh * rw) / sd->size.imw; | 2266 | ph = (sd->size.imh * view.w) / sd->size.imw; | ||
1993 | if (ph > rh) | 2267 | if (ph > view.h) | ||
1994 | { | 2268 | { | ||
1995 | pw = (sd->size.imw * rh) / sd->size.imh; | 2269 | pw = (sd->size.imw * view.h) / sd->size.imh; | ||
1996 | ph = rh; | 2270 | ph = view.h; | ||
1997 | } | 2271 | } | ||
1998 | else | 2272 | else | ||
1999 | { | 2273 | { | ||
2000 | pw = rw; | 2274 | pw = view.w; | ||
2001 | } | 2275 | } | ||
2002 | if (sd->size.imw > sd->size.imh) | 2276 | if (sd->size.imw > sd->size.imh) | ||
2003 | z = (double)sd->size.imw / pw; | 2277 | z = (double)sd->size.imw / pw; | ||
2004 | else | 2278 | else | ||
2005 | z = (double)sd->size.imh / ph; | 2279 | z = (double)sd->size.imh / ph; | ||
2006 | if (!EINA_DBL_EQ(z, sd->zoom)) | 2280 | if (!EINA_DBL_EQ(z, sd->zoom)) | ||
2007 | zoom_changed = 1; | 2281 | zoom_changed = 1; | ||
2008 | sd->zoom = z; | 2282 | sd->zoom = z; | ||
2009 | sd->size.nw = pw; | 2283 | sd->size.nw = pw; | ||
2010 | sd->size.nh = ph; | 2284 | sd->size.nh = ph; | ||
2011 | } | 2285 | } | ||
2012 | } | 2286 | } | ||
2013 | else if (sd->mode == ELM_PHOTOCAM_ZOOM_MODE_AUTO_FILL) | 2287 | else if (sd->mode == ELM_PHOTOCAM_ZOOM_MODE_AUTO_FILL) | ||
2014 | { | 2288 | { | ||
2015 | if ((sd->size.imw < 1) || (sd->size.imh < 1)) | 2289 | if ((sd->size.imw < 1) || (sd->size.imh < 1)) | ||
2016 | { | 2290 | { | ||
2017 | sd->size.nw = 0; | 2291 | sd->size.nw = 0; | ||
2018 | sd->size.nh = 0; | 2292 | sd->size.nh = 0; | ||
2019 | } | 2293 | } | ||
2020 | else | 2294 | else | ||
2021 | { | 2295 | { | ||
2022 | ph = (sd->size.imh * rw) / sd->size.imw; | 2296 | ph = (sd->size.imh * view.w) / sd->size.imw; | ||
2023 | if (ph < rh) | 2297 | if (ph < view.h) | ||
2024 | { | 2298 | { | ||
2025 | pw = (sd->size.imw * rh) / sd->size.imh; | 2299 | pw = (sd->size.imw * view.h) / sd->size.imh; | ||
2026 | ph = rh; | 2300 | ph = view.h; | ||
2027 | } | 2301 | } | ||
2028 | else | 2302 | else | ||
2029 | { | 2303 | { | ||
2030 | pw = rw; | 2304 | pw = view.w; | ||
2031 | } | 2305 | } | ||
2032 | if (sd->size.imw > sd->size.imh) | 2306 | if (sd->size.imw > sd->size.imh) | ||
2033 | z = (double)sd->size.imw / pw; | 2307 | z = (double)sd->size.imw / pw; | ||
2034 | else | 2308 | else | ||
2035 | z = (double)sd->size.imh / ph; | 2309 | z = (double)sd->size.imh / ph; | ||
2036 | if (z != sd->zoom) | 2310 | if (z != sd->zoom) | ||
2037 | zoom_changed = 1; | 2311 | zoom_changed = 1; | ||
2038 | sd->zoom = z; | 2312 | sd->zoom = z; | ||
2039 | sd->size.nw = pw; | 2313 | sd->size.nw = pw; | ||
2040 | sd->size.nh = ph; | 2314 | sd->size.nh = ph; | ||
2041 | } | 2315 | } | ||
2042 | } | 2316 | } | ||
2043 | else if (sd->mode == ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT_IN) | 2317 | else if (sd->mode == ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT_IN) | ||
2044 | { | 2318 | { | ||
2045 | if ((sd->size.imw < 1) || (sd->size.imh < 1)) | 2319 | if ((sd->size.imw < 1) || (sd->size.imh < 1)) | ||
2046 | { | 2320 | { | ||
2047 | sd->size.nw = 0; | 2321 | sd->size.nw = 0; | ||
2048 | sd->size.nh = 0; | 2322 | sd->size.nh = 0; | ||
2049 | } | 2323 | } | ||
2050 | else if ((sd->size.imw < rw) && (sd->size.imh < rh)) | 2324 | else if ((sd->size.imw < view.w) && (sd->size.imh < view.h)) | ||
2051 | { | 2325 | { | ||
2052 | if (!EINA_DBL_EQ(sd->zoom, 1)) zoom_changed = 1; | 2326 | if (!EINA_DBL_EQ(sd->zoom, 1)) zoom_changed = 1; | ||
2053 | sd->zoom = 1; | 2327 | sd->zoom = 1; | ||
2054 | sd->size.nw = sd->size.imw; | 2328 | sd->size.nw = sd->size.imw; | ||
2055 | sd->size.nh = sd->size.imh; | 2329 | sd->size.nh = sd->size.imh; | ||
2056 | } | 2330 | } | ||
2057 | else | 2331 | else | ||
2058 | { | 2332 | { | ||
2059 | ph = (sd->size.imh * rw) / sd->size.imw; | 2333 | ph = (sd->size.imh * view.w) / sd->size.imw; | ||
2060 | if (ph > rh) | 2334 | if (ph > view.h) | ||
2061 | { | 2335 | { | ||
2062 | pw = (sd->size.imw * rh) / sd->size.imh; | 2336 | pw = (sd->size.imw * view.h) / sd->size.imh; | ||
2063 | ph = rh; | 2337 | ph = view.h; | ||
2064 | } | 2338 | } | ||
2065 | else | 2339 | else | ||
2066 | pw = rw; | 2340 | pw = view.w; | ||
2067 | if (sd->size.imw > sd->size.imh) | 2341 | if (sd->size.imw > sd->size.imh) | ||
2068 | z = (double)sd->size.imw / pw; | 2342 | z = (double)sd->size.imw / pw; | ||
2069 | else | 2343 | else | ||
2070 | z = (double)sd->size.imh / ph; | 2344 | z = (double)sd->size.imh / ph; | ||
2071 | if (EINA_DBL_EQ(z, sd->zoom)) | 2345 | if (EINA_DBL_EQ(z, sd->zoom)) | ||
2072 | zoom_changed = 1; | 2346 | zoom_changed = 1; | ||
2073 | sd->zoom = z; | 2347 | sd->zoom = z; | ||
2074 | sd->size.nw = pw; | 2348 | sd->size.nw = pw; | ||
▲ Show 20 Lines • Show All 45 Lines • ▼ Show 20 Line(s) | 2390 | EINA_LIST_FREE(sd->grids, g) | |||
2120 | } | 2394 | } | ||
2121 | } | 2395 | } | ||
2122 | 2396 | | |||
2123 | done: | 2397 | done: | ||
2124 | sd->t_start = ecore_loop_time_get(); | 2398 | sd->t_start = ecore_loop_time_get(); | ||
2125 | sd->t_end = sd->t_start + _elm_config->zoom_friction; | 2399 | sd->t_end = sd->t_start + _elm_config->zoom_friction; | ||
2126 | if ((sd->size.w > 0) && (sd->size.h > 0)) | 2400 | if ((sd->size.w > 0) && (sd->size.h > 0)) | ||
2127 | { | 2401 | { | ||
2128 | sd->size.spos.x = (double)(rx + (rw / 2)) / (double)sd->size.w; | 2402 | sd->size.spos.x = (double)(pos.x + (view.w / 2)) / (double)sd->size.w; | ||
2129 | sd->size.spos.y = (double)(ry + (rh / 2)) / (double)sd->size.h; | 2403 | sd->size.spos.y = (double)(pos.y + (view.h / 2)) / (double)sd->size.h; | ||
2130 | } | 2404 | } | ||
2131 | else | 2405 | else | ||
2132 | { | 2406 | { | ||
2133 | sd->size.spos.x = 0.5; | 2407 | sd->size.spos.x = 0.5; | ||
2134 | sd->size.spos.y = 0.5; | 2408 | sd->size.spos.y = 0.5; | ||
2135 | } | 2409 | } | ||
2136 | if (rw > sd->size.w) sd->size.spos.x = 0.5; | 2410 | if (view.w > sd->size.w) sd->size.spos.x = 0.5; | ||
2137 | if (rh > sd->size.h) sd->size.spos.y = 0.5; | 2411 | if (view.h > sd->size.h) sd->size.spos.y = 0.5; | ||
2138 | if (sd->size.spos.x > 1.0) sd->size.spos.x = 1.0; | 2412 | if (sd->size.spos.x > 1.0) sd->size.spos.x = 1.0; | ||
2139 | if (sd->size.spos.y > 1.0) sd->size.spos.y = 1.0; | 2413 | if (sd->size.spos.y > 1.0) sd->size.spos.y = 1.0; | ||
2140 | 2414 | | |||
2141 | if (sd->paused) | 2415 | if (sd->paused) | ||
2142 | { | 2416 | { | ||
2143 | _zoom_do(obj, 1.0); | 2417 | _zoom_do(obj, 1.0); | ||
2144 | } | 2418 | } | ||
2145 | else | 2419 | else | ||
▲ Show 20 Lines • Show All 61 Lines • ▼ Show 20 Line(s) | |||||
2207 | 2481 | | |||
2208 | EOLIAN static Eina_Size2D | 2482 | EOLIAN static Eina_Size2D | ||
2209 | _efl_ui_image_zoomable_efl_gfx_view_view_size_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Data *pd) | 2483 | _efl_ui_image_zoomable_efl_gfx_view_view_size_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Data *pd) | ||
2210 | { | 2484 | { | ||
2211 | return EINA_SIZE2D(pd->size.imw, pd->size.imh); | 2485 | return EINA_SIZE2D(pd->size.imw, pd->size.imh); | ||
2212 | } | 2486 | } | ||
2213 | 2487 | | |||
2214 | EOLIAN static Eina_Rect | 2488 | EOLIAN static Eina_Rect | ||
2215 | _efl_ui_image_zoomable_image_region_get(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd) | 2489 | _efl_ui_image_zoomable_image_region_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Data *sd) | ||
2216 | { | 2490 | { | ||
2217 | Evas_Coord sx, sy, sw, sh; | | |||
2218 | Eina_Rect region = {}; | 2491 | Eina_Rect region = {}; | ||
2219 | 2492 | | |||
2220 | elm_interface_scrollable_content_pos_get((Eo *)obj, &sx, &sy); | 2493 | Eina_Position2D pos = efl_ui_scrollable_content_pos_get(sd->smanager); | ||
2221 | elm_interface_scrollable_content_viewport_geometry_get | 2494 | Eina_Rect view = efl_ui_scrollable_viewport_geometry_get(sd->smanager); | ||
2222 | ((Eo *)obj, NULL, NULL, &sw, &sh); | | |||
2223 | 2495 | | |||
2224 | if (sd->size.w > 0) | 2496 | if (sd->size.w > 0) | ||
2225 | { | 2497 | { | ||
2226 | region.x = (sd->size.imw * sx) / sd->size.w; | 2498 | region.x = (sd->size.imw * pos.x) / sd->size.w; | ||
2227 | if (region.x > sd->size.imw) region.x = sd->size.imw; | 2499 | if (region.x > sd->size.imw) region.x = sd->size.imw; | ||
2228 | region.w = (sd->size.imw * sw) / sd->size.w; | 2500 | region.w = (sd->size.imw * view.w) / sd->size.w; | ||
2229 | if (region.w > sd->size.imw) region.w = sd->size.imw; | 2501 | if (region.w > sd->size.imw) region.w = sd->size.imw; | ||
2230 | else if (region.w < 0) | 2502 | else if (region.w < 0) | ||
2231 | region.w = 0; | 2503 | region.w = 0; | ||
2232 | } | 2504 | } | ||
2233 | 2505 | | |||
2234 | if (sd->size.h > 0) | 2506 | if (sd->size.h > 0) | ||
2235 | { | 2507 | { | ||
2236 | region.y = (sd->size.imh * sy) / sd->size.h; | 2508 | region.y = (sd->size.imh * pos.y) / sd->size.h; | ||
2237 | if (region.y > sd->size.imh) region.y = sd->size.imh; | 2509 | if (region.y > sd->size.imh) region.y = sd->size.imh; | ||
2238 | region.h = (sd->size.imh * sh) / sd->size.h; | 2510 | region.h = (sd->size.imh * view.h) / sd->size.h; | ||
2239 | if (region.h > sd->size.imh) region.h = sd->size.imh; | 2511 | if (region.h > sd->size.imh) region.h = sd->size.imh; | ||
2240 | else if (region.h < 0) | 2512 | else if (region.h < 0) | ||
2241 | region.h = 0; | 2513 | region.h = 0; | ||
2242 | } | 2514 | } | ||
2243 | 2515 | | |||
2244 | return region; | 2516 | return region; | ||
2245 | } | 2517 | } | ||
2246 | 2518 | | |||
Show All 10 Lines | 2521 | { | |||
2257 | if (rw < 1) rw = 1; | 2529 | if (rw < 1) rw = 1; | ||
2258 | if (rh < 1) rh = 1; | 2530 | if (rh < 1) rh = 1; | ||
2259 | if ((rx + rw) > sd->size.w) rx = sd->size.w - rw; | 2531 | if ((rx + rw) > sd->size.w) rx = sd->size.w - rw; | ||
2260 | if ((ry + rh) > sd->size.h) ry = sd->size.h - rh; | 2532 | if ((ry + rh) > sd->size.h) ry = sd->size.h - rh; | ||
2261 | 2533 | | |||
2262 | _efl_ui_image_zoomable_bounce_reset(obj, sd); | 2534 | _efl_ui_image_zoomable_bounce_reset(obj, sd); | ||
2263 | _efl_ui_image_zoomable_zoom_reset(obj, sd); | 2535 | _efl_ui_image_zoomable_zoom_reset(obj, sd); | ||
2264 | 2536 | | |||
2265 | elm_interface_scrollable_content_region_show(obj, rx, ry, rw, rh); | 2537 | efl_ui_scrollable_scroll(sd->smanager, EINA_RECT(rx, ry, rw, rh), EINA_FALSE); | ||
2266 | } | 2538 | } | ||
2267 | 2539 | | |||
2268 | EOLIAN static void | 2540 | EOLIAN static void | ||
2269 | _efl_ui_image_zoomable_elm_interface_scrollable_region_bring_in(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) | 2541 | _efl_ui_image_zoomable_efl_ui_scrollable_interactive_scroll(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd, Eina_Rect rc, Eina_Bool animation) | ||
2270 | { | 2542 | { | ||
2271 | int rx, ry, rw, rh; | 2543 | int rx, ry, rw, rh; | ||
2272 | 2544 | | |||
2273 | if ((sd->size.imw < 1) || (sd->size.imh < 1)) return; | 2545 | if ((sd->size.imw < 1) || (sd->size.imh < 1)) return; | ||
2274 | rx = (x * sd->size.w) / sd->size.imw; | 2546 | rx = (rc.x * sd->size.w) / sd->size.imw; | ||
2275 | ry = (y * sd->size.h) / sd->size.imh; | 2547 | ry = (rc.y * sd->size.h) / sd->size.imh; | ||
2276 | rw = (w * sd->size.w) / sd->size.imw; | 2548 | rw = (rc.w * sd->size.w) / sd->size.imw; | ||
2277 | rh = (h * sd->size.h) / sd->size.imh; | 2549 | rh = (rc.h * sd->size.h) / sd->size.imh; | ||
2278 | if (rw < 1) rw = 1; | 2550 | if (rw < 1) rw = 1; | ||
2279 | if (rh < 1) rh = 1; | 2551 | if (rh < 1) rh = 1; | ||
2280 | if ((rx + rw) > sd->size.w) rx = sd->size.w - rw; | 2552 | if ((rx + rw) > sd->size.w) rx = sd->size.w - rw; | ||
2281 | if ((ry + rh) > sd->size.h) ry = sd->size.h - rh; | 2553 | if ((ry + rh) > sd->size.h) ry = sd->size.h - rh; | ||
2282 | 2554 | | |||
2283 | _efl_ui_image_zoomable_bounce_reset(obj, sd); | 2555 | _efl_ui_image_zoomable_bounce_reset(obj, sd); | ||
2284 | _efl_ui_image_zoomable_zoom_reset(obj, sd); | 2556 | _efl_ui_image_zoomable_zoom_reset(obj, sd); | ||
2285 | 2557 | | |||
2286 | elm_interface_scrollable_region_bring_in(efl_super(obj, MY_CLASS), rx, ry, rw, rh); | 2558 | efl_ui_scrollable_scroll(sd->smanager, EINA_RECT(rx, ry, rw, rh), animation); | ||
2287 | } | 2559 | } | ||
2288 | 2560 | | |||
2289 | EOLIAN static void | 2561 | EOLIAN static void | ||
2290 | _efl_ui_image_zoomable_efl_ui_zoom_zoom_animation_set(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd, Eina_Bool paused) | 2562 | _efl_ui_image_zoomable_efl_ui_zoom_zoom_animation_set(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd, Eina_Bool paused) | ||
2291 | { | 2563 | { | ||
2292 | paused = !!paused; | 2564 | paused = !!paused; | ||
2293 | 2565 | | |||
2294 | if (sd->paused == paused) return; | 2566 | if (sd->paused == paused) return; | ||
▲ Show 20 Lines • Show All 615 Lines • ▼ Show 20 Line(s) | |||||
2910 | EAPI void | 3182 | EAPI void | ||
2911 | elm_photocam_image_region_bring_in(Evas_Object *obj, | 3183 | elm_photocam_image_region_bring_in(Evas_Object *obj, | ||
2912 | int x, | 3184 | int x, | ||
2913 | int y, | 3185 | int y, | ||
2914 | int w, | 3186 | int w, | ||
2915 | int h EINA_UNUSED) | 3187 | int h EINA_UNUSED) | ||
2916 | { | 3188 | { | ||
2917 | ELM_PHOTOCAM_CHECK(obj); | 3189 | ELM_PHOTOCAM_CHECK(obj); | ||
2918 | elm_interface_scrollable_region_bring_in(obj, x, y, w, h); | 3190 | EFL_UI_IMAGE_ZOOMABLE_DATA_GET(obj, sd); | ||
3191 | efl_ui_scrollable_scroll(sd->smanager, EINA_RECT(x, y, w, h), EINA_TRUE); | ||||
2919 | } | 3192 | } | ||
2920 | 3193 | | |||
2921 | EAPI void | 3194 | EAPI void | ||
2922 | elm_photocam_bounce_set(Evas_Object *obj, | 3195 | elm_photocam_bounce_set(Evas_Object *obj, | ||
2923 | Eina_Bool h_bounce, | 3196 | Eina_Bool h_bounce, | ||
2924 | Eina_Bool v_bounce) | 3197 | Eina_Bool v_bounce) | ||
2925 | { | 3198 | { | ||
2926 | ELM_PHOTOCAM_CHECK(obj); | 3199 | ELM_PHOTOCAM_CHECK(obj); | ||
2927 | 3200 | | |||
2928 | elm_interface_scrollable_bounce_allow_set(obj, h_bounce, v_bounce); | 3201 | efl_ui_scrollable_bounce_enabled_set(obj, h_bounce, v_bounce); | ||
2929 | } | 3202 | } | ||
2930 | 3203 | | |||
2931 | EAPI void | 3204 | EAPI void | ||
2932 | elm_photocam_bounce_get(const Evas_Object *obj, | 3205 | elm_photocam_bounce_get(const Evas_Object *obj, | ||
2933 | Eina_Bool *h_bounce, | 3206 | Eina_Bool *h_bounce, | ||
2934 | Eina_Bool *v_bounce) | 3207 | Eina_Bool *v_bounce) | ||
2935 | { | 3208 | { | ||
2936 | ELM_PHOTOCAM_CHECK(obj); | 3209 | ELM_PHOTOCAM_CHECK(obj); | ||
2937 | 3210 | | |||
2938 | elm_interface_scrollable_bounce_allow_get((Eo *)obj, h_bounce, v_bounce); | 3211 | efl_ui_scrollable_bounce_enabled_get((Eo *)obj, h_bounce, v_bounce); | ||
2939 | } | 3212 | } | ||
2940 | 3213 | | |||
2941 | EAPI void | 3214 | EAPI void | ||
2942 | elm_photocam_image_region_get(const Efl_Ui_Image_Zoomable *obj, int *x, int *y, int *w, int *h) | 3215 | elm_photocam_image_region_get(const Efl_Ui_Image_Zoomable *obj, int *x, int *y, int *w, int *h) | ||
2943 | { | 3216 | { | ||
2944 | Eina_Rect r; | 3217 | Eina_Rect r; | ||
2945 | 3218 | | |||
2946 | r = efl_ui_image_zoomable_image_region_get(obj); | 3219 | r = efl_ui_image_zoomable_image_region_get(obj); | ||
Show All 16 Lines |
I think the event info should be in a struct here. Better for bindings.