struct _priv {
Evas_Object *win;
Evas_Object *base;
+ Evas_Object *photo;
+ Evas_Object *photo_pre;
+ Evas_Object *favorite;
struct _viewer viewer;
struct _playlist playlist;
}
}
+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,};
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)
}
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);
static bool _ui_init(struct _priv *priv)
{
+ Evas_Object *obj;
bool r;
int i;
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: