elementary: add ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT_IN a new policy for zoom in elm_photocam
authoryoz <yoz@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 6 Dec 2011 15:11:59 +0000 (15:11 +0000)
committeryoz <yoz@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 6 Dec 2011 15:11:59 +0000 (15:11 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@65958 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/Elementary.h.in
src/lib/elm_photocam.c

index c66d896..f55d3fd 100644 (file)
@@ -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;
    /**
index a1d04a0..aed1d62 100644 (file)
@@ -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;