zoom = elm_photocam_zoom_get(data);
zoom *= 2;
elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_MANUAL);
- if (zoom <= 32) elm_photocam_zoom_set(data, zoom);
+ if (zoom <= 256) elm_photocam_zoom_set(data, zoom);
+}
+
+void
+my_bt_zoom_man(void *data, Evas_Object *obj, void *event_info)
+{
+ elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_MANUAL);
+}
+
+void
+my_bt_zoom_fit(void *data, Evas_Object *obj, void *event_info)
+{
+ elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT);
+}
+
+void
+my_bt_zoom_fill(void *data, Evas_Object *obj, void *event_info)
+{
+ elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_AUTO_FILL);
}
void
evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_in, ph);
evas_object_size_hint_weight_set(bt, 1.0, 1.0);
evas_object_size_hint_align_set(bt, 0.9, 0.1);
- elm_table_pack(tb2, bt, 0, 0, 1, 1);
+ elm_table_pack(tb2, bt, 2, 0, 1, 1);
+ evas_object_show(bt);
+
+ bt = elm_button_add(win);
+ elm_button_label_set(bt, "Manual");
+ evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_man, ph);
+ evas_object_size_hint_weight_set(bt, 1.0, 1.0);
+ evas_object_size_hint_align_set(bt, 0.1, 0.9);
+ elm_table_pack(tb2, bt, 0, 1, 1, 1);
+ evas_object_show(bt);
+
+ bt = elm_button_add(win);
+ elm_button_label_set(bt, "Fit");
+ evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_fit, ph);
+ evas_object_size_hint_weight_set(bt, 1.0, 1.0);
+ evas_object_size_hint_align_set(bt, 0.5, 0.9);
+ elm_table_pack(tb2, bt, 1, 1, 1, 1);
+ evas_object_show(bt);
+
+ bt = elm_button_add(win);
+ elm_button_label_set(bt, "Fill");
+ evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_fill, ph);
+ evas_object_size_hint_weight_set(bt, 1.0, 1.0);
+ evas_object_size_hint_align_set(bt, 0.9, 0.9);
+ elm_table_pack(tb2, bt, 2, 1, 1, 1);
evas_object_show(bt);
evas_object_show(tb2);
Evas_Object *obj = data;
Widget_Data *wd = elm_widget_data_get(obj);
double t;
- Evas_Coord ow, oh;
+ Evas_Coord xx, yy, ow, oh;
t = ecore_loop_time_get();
if (t >= wd->t_end)
t = 1.0 - (t * t);
wd->size.w = (wd->size.ow * (1.0 - t)) + (wd->size.nw * t);
wd->size.h = (wd->size.oh * (1.0 - t)) + (wd->size.nh * t);
- printf("%3.3f %3.3f\n", wd->size.spos.x, wd->size.spos.y);
-// elm_smart_scroller_child_viewport_size_get(wd->scr, &ow, &oh);
-// elm_smart_scroller_child_region_show
-// (wd->scr,
-// (wd->size.spos.x * wd->size.w) - (ow / 2),
-// (wd->size.spos.y * wd->size.h) - (oh / 2),
-// ow, oh);
+ elm_smart_scroller_child_viewport_size_get(wd->scr, &ow, &oh);
+ xx = (wd->size.spos.x * wd->size.w) - (ow / 2);
+ yy = (wd->size.spos.y * wd->size.h) - (oh / 2);
+ if (xx < 0) xx = 0;
+ else if (xx > (wd->size.w - ow)) xx = wd->size.w - ow;
+ if (yy < 0) yy = 0;
+ else if (yy > (wd->size.h - oh)) yy = wd->size.h - oh;
+ elm_smart_scroller_child_region_show(wd->scr, xx, yy, ow, oh);
if (wd->calc_job) ecore_job_del(wd->calc_job);
wd->calc_job = ecore_job_add(_calc_job, wd);
if (t >= 1.0)
Eina_List *l;
Grid *g, *g_zoom = NULL;
Evas_Coord pw, ph, rx, ry, rw, rh;
+ int z;
Ecore_Animator *an;
if (zoom < 1) zoom = 1;
wd->zoom = zoom;
wd->size.ow = wd->size.w;
wd->size.oh = wd->size.h;
- wd->size.nw = wd->size.imw / wd->zoom;
- wd->size.nh = wd->size.imh / wd->zoom;
- wd->size.w = wd->size.nw;
- wd->size.h = wd->size.nh;
- if (wd->main_load_pending) goto done;
+ elm_smart_scroller_child_pos_get(wd->scr, &rx, &ry);
+ elm_smart_scroller_child_viewport_size_get(wd->scr, &rw, &rh);
+ if (wd->mode == ELM_PHOTOCAM_ZOOM_MODE_MANUAL)
+ {
+ wd->size.nw = wd->size.imw / wd->zoom;
+ wd->size.nh = wd->size.imh / wd->zoom;
+ }
+ else if (wd->mode == ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT)
+ {
+ ph = (wd->size.imh * rw) / wd->size.imw;
+ if (ph > rh)
+ {
+ pw = (wd->size.imw * rh) / wd->size.imh;
+ ph = rh;
+ }
+ else
+ {
+ pw = rw;
+ }
+ if ((pw > wd->size.imw) || (ph > wd->size.imh))
+ {
+ pw = wd->size.imw;
+ ph = wd->size.imh;
+ }
+ if (wd->size.imw > wd->size.imh)
+ z = wd->size.imw / pw;
+ else
+ z = wd->size.imh / ph;
+ z++;
+ if (z <= 1) z == 1;
+ else if (z <= 2) z = 2;
+ else if (z <= 4) z = 4;
+ else if (z <= 8) z = 8;
+ else z = 8;
+ wd->zoom = z;
+ wd->size.nw = pw;
+ wd->size.nh = ph;
+ }
+ else if (wd->mode == ELM_PHOTOCAM_ZOOM_MODE_AUTO_FILL)
+ {
+ ph = (wd->size.imh * rw) / wd->size.imw;
+ if (ph < rh)
+ {
+ pw = (wd->size.imw * rh) / wd->size.imh;
+ ph = rh;
+ }
+ else
+ {
+ pw = rw;
+ }
+ if (wd->size.imw > wd->size.imh)
+ z = wd->size.imw / pw;
+ else
+ z = wd->size.imh / ph;
+ z++;
+ if (z <= 1) z == 1;
+ else if (z <= 2) z = 2;
+ else if (z <= 4) z = 4;
+ else if (z <= 8) z = 8;
+ else z = 8;
+ wd->zoom = z;
+ wd->size.nw = pw;
+ wd->size.nh = ph;
+ }
+ if (wd->main_load_pending)
+ {
+ wd->size.w = wd->size.nw;
+ wd->size.h = wd->size.nh;
+ goto done;
+ }
EINA_LIST_FOREACH(wd->grids, l, g)
{
if (g->zoom == wd->zoom)
if (wd->nosmooth == 1) _smooth_update(obj);
}
wd->t_start = ecore_loop_time_get();
- elm_smart_scroller_child_pos_get(wd->scr, &rx, &ry);
- elm_smart_scroller_child_viewport_size_get(wd->scr, &rw, &rh);
+ wd->t_end = wd->t_start + _elm_config->zoom_friction;
wd->size.spos.x = (double)(rx + (rw / 2)) / (double)wd->size.w;
wd->size.spos.y = (double)(ry + (rh / 2)) / (double)wd->size.h;
- wd->t_end = wd->t_start + _elm_config->zoom_friction;
+ if (rw > wd->size.w) wd->size.spos.x = 0.5;
+ if (rh > wd->size.h) wd->size.spos.y = 0.5;
+ if (wd->size.spos.x > 1.0) wd->size.spos.x = 1.0;
+ if (wd->size.spos.y > 1.0) wd->size.spos.y = 1.0;
an = wd->zoom_animator;
if (!_zoom_anim(obj)) ecore_animator_del(an);
if (wd->calc_job) ecore_job_del(wd->calc_job);
{
Widget_Data *wd = elm_widget_data_get(obj);
if (wd->mode == mode) return;
+ wd->mode = mode;
+ wd->zoom++;
+ elm_photocam_zoom_set(obj, wd->zoom - 1);
}
/**