viewer: show image files to content area 02/42502/2
authorMinkyu Kang <mk7.kang@samsung.com>
Mon, 29 Jun 2015 10:37:12 +0000 (19:37 +0900)
committerMinkyu Kang <mk7.kang@samsung.com>
Mon, 29 Jun 2015 12:55:48 +0000 (21:55 +0900)
Change-Id: I757c6a5056ab848121f560f6a153e020fd69b058
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
src/view/viewer.c

index fedf010..96a05b6 100644 (file)
@@ -56,6 +56,9 @@ struct _playlist {
 struct _priv {
        Evas_Object *win;
        Evas_Object *base;
+       Evas_Object *photo;
+       Evas_Object *photo_pre;
+       Evas_Object *favorite;
 
        struct _viewer viewer;
        struct _playlist playlist;
@@ -238,6 +241,118 @@ static void _up_string(char *str)
        }
 }
 
+static void _draw_thumbnail(struct _priv *priv, int id, app_media_info *mi)
+{
+       Evas_Object *obj;
+
+       if (priv->photo_pre) {
+               evas_object_del(priv->photo_pre);
+               priv->photo_pre = NULL;
+       }
+
+       if (priv->photo) {
+               evas_object_del(priv->photo);
+               priv->photo = NULL;
+       }
+
+       obj = elm_image_add(priv->base);
+       if (!obj) {
+               _ERR("failed to adding image");
+               return;
+       }
+
+       elm_image_file_set(obj, mi->thumbnail_path, NULL);
+       elm_object_part_content_set(priv->base, PART_VIEWER_CONTENT, obj);
+
+       priv->photo = obj;
+}
+
+static void _image_loaded(void *data, Evas_Object *obj, void *ev)
+{
+       struct _priv *priv;
+
+       if (!data || !obj)
+               return;
+
+       priv = data;
+
+       if (priv->photo != priv->photo_pre) {
+               if (priv->photo)
+                       evas_object_del(priv->photo);
+
+               priv->photo = obj;
+       }
+
+       elm_object_part_content_set(priv->base, PART_VIEWER_CONTENT, obj);
+}
+
+static void _image_loaded_detail(void *data, Evas_Object *obj, void *ev)
+{
+       struct _priv *priv;
+
+       if (!data)
+               return;
+
+       priv = data;
+
+       priv->photo_pre = NULL;
+}
+
+static void _load_image_file(struct _priv *priv, int id, app_media_info *mi)
+{
+       Evas_Object *obj;
+       int w, h;
+       int mode;
+
+       if (id == VIEWER_MOVIE) {
+               elm_object_part_content_unset(priv->base, PART_VIEWER_CONTENT);
+               return;
+       } else if (id == VIEWER_VIDEO) {
+               _draw_thumbnail(priv, id, mi);
+               return;
+       }
+
+       if (!mi->file_path)
+               return;
+
+       if (priv->photo_pre) {
+               obj = priv->photo_pre;
+       } else {
+               obj = elm_photocam_add(priv->base);
+               if (!obj) {
+                       _ERR("failed to adding photocam");
+                       return;
+               }
+
+               evas_object_smart_callback_add(obj, "loaded",
+                               _image_loaded, priv);
+               evas_object_smart_callback_add(obj, "loaded,detail",
+                               _image_loaded_detail, priv);
+
+               elm_object_focus_allow_set(obj, EINA_FALSE);
+               elm_scroller_policy_set(obj,
+                               ELM_SCROLLER_POLICY_AUTO,
+                               ELM_SCROLLER_POLICY_AUTO);
+
+               /*
+                * set this photocam object to photo_pre (preloaded photo)
+                * On "loaded" callback, photo_pre object will pass to photo
+                * On "loaded,detail" callback, photo_pre object will set to NULL
+                */
+               priv->photo_pre = obj;
+       }
+
+       elm_photocam_file_set(obj, mi->file_path);
+
+       elm_photocam_image_size_get(obj, &w, &h);
+       if (h > w)
+               mode = ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT;
+       else
+               mode = ELM_PHOTOCAM_ZOOM_MODE_AUTO_FILL;
+
+       elm_photocam_zoom_mode_set(obj, mode);
+}
+
 static void _draw_title_bar(struct _priv *priv, int id, app_media_info *mi)
 {
        char buf[32] = {0,};
@@ -283,19 +398,11 @@ static void _draw_time_info(struct _priv *priv, int id, app_media_info *mi)
 
 static void _draw_favorite_icon(struct _priv *priv, int id, app_media_info *mi)
 {
-       Evas_Object *img;
-
        if (!mi->favorite)
                return;
 
-       img = elm_image_add(priv->base);
-       if (!img)
-               return;
-
-       elm_image_file_set(img, IMAGE_VIEWER_FAVORITE, NULL);
-
-       evas_object_show(img);
-       elm_object_part_content_set(priv->base, PART_VIEWER_FAVORITE, img);
+       elm_object_part_content_set(priv->base,
+                       PART_VIEWER_FAVORITE, priv->favorite);
 }
 
 static bool _viewer_show(struct _priv *priv, int cur, int foc)
@@ -355,6 +462,8 @@ static bool _viewer_show(struct _priv *priv, int cur, int foc)
        }
        ctl->ops->focus(ctl->handle, loc, true);
 
+       _load_image_file(priv, id, mi);
+
        _draw_title_bar(priv, id, mi);
        _draw_time_info(priv, id, mi);
        _draw_favorite_icon(priv, id, mi);
@@ -451,6 +560,7 @@ static bool _viewer_next(struct _priv *priv)
 
 static bool _ui_init(struct _priv *priv)
 {
+       Evas_Object *obj;
        bool r;
        int i;
 
@@ -460,6 +570,15 @@ static bool _ui_init(struct _priv *priv)
                        goto err;
        }
 
+       obj = elm_image_add(priv->base);
+       if (!obj) {
+               _ERR("failed to adding image");
+               goto err;
+       }
+
+       elm_image_file_set(obj, IMAGE_VIEWER_FAVORITE, NULL);
+       priv->favorite = obj;
+
        return true;
 
 err: