From 17cdac8d954b00b7446e95c256d106775496323f Mon Sep 17 00:00:00 2001 From: Michael BOUCHAUD Date: Tue, 6 Dec 2011 15:11:59 +0000 Subject: [PATCH] elementary: add ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT_IN a new policy for zoom in elm_photocam SVN revision: 65958 --- legacy/elementary/src/lib/Elementary.h.in | 1 + legacy/elementary/src/lib/elm_photocam.c | 34 +++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/legacy/elementary/src/lib/Elementary.h.in b/legacy/elementary/src/lib/Elementary.h.in index c66d896546..f55d3fdef0 100644 --- a/legacy/elementary/src/lib/Elementary.h.in +++ b/legacy/elementary/src/lib/Elementary.h.in @@ -22671,6 +22671,7 @@ extern "C" { ELM_PHOTOCAM_ZOOM_MODE_MANUAL = 0, /**< Zoom controlled normally by elm_photocam_zoom_set */ ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT, /**< Zoom until photo fits in photocam */ ELM_PHOTOCAM_ZOOM_MODE_AUTO_FILL, /**< Zoom until photo fills photocam */ + ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT_IN, /**< Unzoom until photo fits in photocam */ ELM_PHOTOCAM_ZOOM_MODE_LAST } Elm_Photocam_Zoom_Mode; /** diff --git a/legacy/elementary/src/lib/elm_photocam.c b/legacy/elementary/src/lib/elm_photocam.c index a1d04a0390..aed1d62dbf 100644 --- a/legacy/elementary/src/lib/elm_photocam.c +++ b/legacy/elementary/src/lib/elm_photocam.c @@ -1293,6 +1293,40 @@ elm_photocam_zoom_set(Evas_Object *obj, double zoom) wd->size.nh = ph; } } + else if (wd->mode == ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT_IN) + { + if ((wd->size.imw < 1) || (wd->size.imh < 1)) + { + wd->size.nw = 0; + wd->size.nh = 0; + } + else if ((wd->size.imw < rw) && (wd->size.imh < rh)) + { + if (1 != wd->zoom) zoom_changed = 1; + wd->zoom = 1; + wd->size.nw = wd->size.imw; + wd->size.nh = wd->size.imh; + } + else + { + 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; + if (z != wd->zoom) zoom_changed = 1; + wd->zoom = z; + wd->size.nw = pw; + wd->size.nh = ph; + } + } if (wd->main_load_pending) { wd->size.w = wd->size.nw;