summaryrefslogtreecommitdiff
path: root/src/view/viewer.c
diff options
context:
space:
mode:
authorMinkyu Kang <mk7.kang@samsung.com>2015-12-23 14:08:05 +0900
committerMinkyu Kang <mk7.kang@samsung.com>2015-12-23 15:25:30 +0900
commit8c5e2c58c9c2d346370a86f2dab9165d6ad28b53 (patch)
tree417239f0a91a864057f8d906b9c5ebc183353644 /src/view/viewer.c
parent0463b1dea1f37ac058dd900a78e7412be3cde4fb (diff)
downloadair_mediahub-8c5e2c58c9c2d346370a86f2dab9165d6ad28b53.tar.gz
air_mediahub-8c5e2c58c9c2d346370a86f2dab9165d6ad28b53.tar.bz2
air_mediahub-8c5e2c58c9c2d346370a86f2dab9165d6ad28b53.zip
Change-Id: I776b656dab20d54b5123856f15b98ccc5f039ce5 Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
Diffstat (limited to 'src/view/viewer.c')
-rw-r--r--src/view/viewer.c183
1 files changed, 124 insertions, 59 deletions
diff --git a/src/view/viewer.c b/src/view/viewer.c
index 925db14..13ac8ed 100644
--- a/src/view/viewer.c
+++ b/src/view/viewer.c
@@ -38,14 +38,16 @@
#define PART_VIEWER_BTN "control_btn"
#define POSITION_MARGIN 500
-#define VIEWER_TIMEOUT 3.0
+#define VIEWER_TIMEOUT 5.0
#define VIEWER_SEPARATOR "/ "
#define SLIDE_SHOW_INTERVAL 3.0
#define ERROR_MESSAGE "Something went wrong."
#define BTN_LOC_NONE -1
#define BTN_LOC_PREV 0
+#define BTN_LOC_REW 1
#define BTN_LOC_PLAY 2
+#define BTN_LOC_FF 3
#define BTN_LOC_NEXT 4
#define BTN_LOC_ROTATE 5
#define BTN_LOC_ZOOM 5
@@ -53,6 +55,12 @@
#define BTN_LOC_SLIDE 8
enum {
+ WIND_NONE,
+ WIND_FF,
+ WIND_REW,
+};
+
+enum {
VIEWER_MOVIE,
VIEWER_PHOTO,
VIEWER_VIDEO,
@@ -104,10 +112,18 @@ static struct _btn_info btn_movie[] = {
.loc = BTN_LOC_PREV,
},
{
+ .name = SRC_BTN_REW,
+ .loc = BTN_LOC_REW,
+ },
+ {
.name = SRC_BTN_PLAY,
.loc = BTN_LOC_PLAY,
},
{
+ .name = SRC_BTN_FF,
+ .loc = BTN_LOC_FF,
+ },
+ {
.name = SRC_BTN_NEXT,
.loc = BTN_LOC_NEXT,
},
@@ -144,6 +160,10 @@ static struct _btn_info btn_video[] = {
.loc = BTN_LOC_PREV,
},
{
+ .name = SRC_BTN_REW,
+ .loc = BTN_LOC_REW,
+ },
+ {
.name = SRC_BTN_PLAY,
.loc = BTN_LOC_PLAY,
},
@@ -152,6 +172,10 @@ static struct _btn_info btn_video[] = {
.loc = BTN_LOC_NEXT,
},
{
+ .name = SRC_BTN_FF,
+ .loc = BTN_LOC_FF,
+ },
+ {
.name = SRC_BTN_SLIDE,
.loc = BTN_LOC_SLIDE,
},
@@ -166,6 +190,7 @@ struct _viewer_info {
static void _player_play(struct _priv *priv);
static void _player_stop(struct _priv *priv);
+static void _player_pause(struct _priv *priv);
static void _callback_movie(void *data, const char *ev);
static void _callback_photo(void *data, const char *ev);
@@ -178,7 +203,7 @@ static void _slideshow_disable(struct _priv *priv);
static struct _viewer_info viewer_info[] = {
{
.btns = btn_movie,
- .btn_count = 3,
+ .btn_count = 5,
.focus_loc = BTN_LOC_PLAY,
.callback = _callback_movie,
},
@@ -190,7 +215,7 @@ static struct _viewer_info viewer_info[] = {
},
{
.btns = btn_video,
- .btn_count = 4,
+ .btn_count = 6,
.focus_loc = BTN_LOC_NEXT,
.callback = _callback_video,
},
@@ -211,49 +236,6 @@ static void _set_bg_color(struct _priv *priv, int r, int g, int b, int a)
elm_object_part_content_set(priv->base, PART_VIEWER_BG, bg);
}
-static void _draw_thumbnail(struct _priv *priv, 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 _remove_thumbnail(struct _priv *priv)
-{
- 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;
- }
-
- _set_bg_color(priv, 0, 0, 0, 0);
-
- elm_object_part_content_unset(priv->base, PART_VIEWER_CONTENT);
-}
-
static void _image_loaded(void *data, Evas_Object *obj, void *ev)
{
struct _priv *priv;
@@ -295,10 +277,11 @@ static void _draw_contents(struct _priv *priv, int id, app_media_info *mi)
_player_play(priv);
return;
} else if (id == VIEWER_VIDEO) {
- if (priv->slideshow.enable)
- _player_play(priv);
- else
- _draw_thumbnail(priv, mi);
+ _player_play(priv);
+
+ if (!priv->slideshow.enable)
+ _player_pause(priv);
+
return;
} else if (id == VIEWER_PHOTO) {
if (priv->slideshow.enable)
@@ -395,6 +378,18 @@ static void _draw_favorite_icon(struct _priv *priv, int id, app_media_info *mi)
elm_object_signal_emit(priv->base, SIG_VIEWER_HIDE_FAV, "");
}
+static void _draw_wind(struct _priv *priv, int speed)
+{
+ char buf[32] = {0,};
+
+ if (speed) {
+ snprintf(buf, sizeof(buf), "x%d", speed);
+ elm_object_part_text_set(priv->base, PART_VIEWER_WIND, buf);
+ } else {
+ elm_object_part_text_set(priv->base, PART_VIEWER_WIND, "");
+ }
+}
+
static app_media_info *_get_current_media_info(struct _priv *priv)
{
app_media *am;
@@ -612,15 +607,15 @@ static bool _viewer_show(struct _priv *priv)
}
}
- ctl->ops->signal(ctl->handle, loc, SIG_SET_FOCUS);
- ctl->ops->focus(ctl->handle, loc, true);
-
_draw_title_bar(priv, id, mi);
_draw_progressbar(priv, id, mi);
_draw_favorite_icon(priv, id, mi);
_draw_contents(priv, id, mi);
+ ctl->ops->signal(ctl->handle, loc, SIG_SET_FOCUS);
+ ctl->ops->focus(ctl->handle, loc, true);
+
return true;
}
@@ -631,7 +626,6 @@ static void _viewer_hide(struct _priv *priv)
ctl = priv->viewer.ctl[priv->viewer.cur];
ctl->ops->hide(ctl->handle);
- _remove_thumbnail(priv);
elm_object_signal_emit(priv->base, SIG_VIEWER_HIDE_FAV, "");
}
@@ -871,6 +865,7 @@ static void _player_play_pause(struct _priv *priv)
break;
case PLAYER_STATE_PLAYING:
progressbar_pause(priv->progress);
+ playermgr_stop_wind(priv->player);
r = playermgr_pause(priv->player);
if (!r) {
_error_exit(priv);
@@ -885,9 +880,9 @@ static void _player_play_pause(struct _priv *priv)
return;
}
- _remove_thumbnail(priv);
_update_to_player(priv);
+ playermgr_stop_wind(priv->player);
r = playermgr_play(priv->player, mi->file_path,
mi->video->position);
if (!r) {
@@ -934,9 +929,9 @@ static void _player_play(struct _priv *priv)
return;
}
- _remove_thumbnail(priv);
_update_to_player(priv);
+ playermgr_stop_wind(priv->player);
r = playermgr_play(priv->player, mi->file_path,
mi->video->position);
if (!r) {
@@ -1025,6 +1020,52 @@ static void _player_complete_cb(void *data)
}
}
+static void _player_set_wind(struct _priv *priv, int wind)
+{
+ struct controller *ctl;
+
+ switch (wind) {
+ case WIND_FF:
+ elm_object_signal_emit(priv->base, SIG_VIEWER_SHOW_FF, "");
+ playermgr_set_ff(priv->player);
+ timeout_handler_enable(priv->timeout, false);
+ progressbar_resume(priv->progress);
+
+ ctl = priv->viewer.ctl[priv->viewer.cur];
+ ctl->ops->signal(ctl->handle, BTN_LOC_PLAY, SIG_SET_PLAY);
+ break;
+ case WIND_REW:
+ elm_object_signal_emit(priv->base, SIG_VIEWER_SHOW_REW, "");
+ playermgr_set_rew(priv->player);
+ timeout_handler_enable(priv->timeout, false);
+ progressbar_resume(priv->progress);
+
+ ctl = priv->viewer.ctl[priv->viewer.cur];
+ ctl->ops->signal(ctl->handle, BTN_LOC_PLAY, SIG_SET_PLAY);
+ break;
+ case WIND_NONE:
+ default:
+ elm_object_signal_emit(priv->base, SIG_VIEWER_HIDE_WIND, "");
+ playermgr_stop_wind(priv->player);
+ timeout_handler_enable(priv->timeout, true);
+ break;
+ }
+
+ _draw_wind(priv, playermgr_get_wind(priv->player));
+}
+
+static void _player_seek_cb(void *data)
+{
+ struct _priv *priv;
+
+ if (!data)
+ return;
+
+ priv = data;
+
+ _player_set_wind(priv, WIND_NONE);
+}
+
static struct progressbar_ops _progressbar_ops = {
.get_value = _player_get_position,
};
@@ -1038,12 +1079,20 @@ static void _callback_movie(void *data, const char *ev)
priv = data;
- if (!strcmp(ev, SRC_BTN_PREV))
+ if (!strcmp(ev, SRC_BTN_PREV)) {
+ _player_set_wind(priv, WIND_NONE);
_player_set_position(priv, 0);
- else if (!strcmp(ev, SRC_BTN_NEXT))
+ } else if (!strcmp(ev, SRC_BTN_NEXT)) {
+ _player_set_wind(priv, WIND_NONE);
_player_set_position(priv, -1);
- else if (!strcmp(ev, SRC_BTN_PLAY))
+ } else if (!strcmp(ev, SRC_BTN_PLAY)) {
+ _player_set_wind(priv, WIND_NONE);
_player_play_pause(priv);
+ } else if (!strcmp(ev, SRC_BTN_REW)) {
+ _player_set_wind(priv, WIND_REW);
+ } else if (!strcmp(ev, SRC_BTN_FF)) {
+ _player_set_wind(priv, WIND_FF);
+ }
}
static void _callback_photo(void *data, const char *ev)
@@ -1083,17 +1132,25 @@ static void _callback_video(void *data, const char *ev)
priv = data;
if (!strcmp(ev, SRC_BTN_GALLERY_PREV)) {
+ _player_set_wind(priv, WIND_NONE);
_player_stop(priv);
_viewer_prev(priv);
} else if (!strcmp(ev, SRC_BTN_GALLERY_NEXT)) {
+ _player_set_wind(priv, WIND_NONE);
_player_stop(priv);
_viewer_next(priv);
} else if (!strcmp(ev, SRC_BTN_PLAY)) {
+ _player_set_wind(priv, WIND_NONE);
_player_play_pause(priv);
} else if (!strcmp(ev, SRC_BTN_SLIDE)) {
+ _player_set_wind(priv, WIND_NONE);
_slideshow_enable(priv);
_hide_bar(priv);
_viewer_show(priv);
+ } else if (!strcmp(ev, SRC_BTN_REW)) {
+ _player_set_wind(priv, WIND_REW);
+ } else if (!strcmp(ev, SRC_BTN_FF)) {
+ _player_set_wind(priv, WIND_FF);
}
}
@@ -1276,6 +1333,14 @@ static Evas_Object *_create(Evas_Object *win, void *data)
goto err;
}
+ r = playermgr_set_seek_cb(player, _player_seek_cb, priv);
+ if (!r) {
+ _ERR("failed to set callback");
+ evas_object_del(base);
+ playermgr_destroy(player);
+ goto err;
+ }
+
priv->player = player;
r = _ui_init(priv);