forked from enlightenment/rage
parent
f2cb079642
commit
bb5f5b5487
13 changed files with 1112 additions and 960 deletions
@ -0,0 +1,147 @@ |
||||
#include <Elementary.h> |
||||
#include "main.h" |
||||
#include "win.h" |
||||
#include "video.h" |
||||
#include "controls.h" |
||||
|
||||
static void |
||||
_cb_drag(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) |
||||
{ |
||||
Inf *inf = evas_object_data_get(data, "inf"); |
||||
double pos = 0.0; |
||||
|
||||
edje_object_part_drag_value_get(elm_layout_edje_get(inf->lay), |
||||
"rage.dragable.pos", &pos, NULL); |
||||
video_position_set(inf->vid, pos * video_length_get(inf->vid)); |
||||
} |
||||
|
||||
static void |
||||
_cb_pos_prev(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) |
||||
{ |
||||
win_do_prev(data); |
||||
} |
||||
|
||||
static void |
||||
_cb_pos_next(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) |
||||
{ |
||||
win_do_next(data); |
||||
} |
||||
|
||||
static void |
||||
_cb_pos_play(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) |
||||
{ |
||||
win_do_play(data); |
||||
} |
||||
|
||||
static void |
||||
_cb_pos_pause(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) |
||||
{ |
||||
win_do_pause(data); |
||||
} |
||||
|
||||
static void |
||||
_cb_options(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) |
||||
{ |
||||
// win_do_options(data);
|
||||
} |
||||
|
||||
static void |
||||
_time_print(double t, double max, int size, char *buf, Eina_Bool subsec) |
||||
{ |
||||
double tsf; |
||||
long long tl; |
||||
int ts, tm, th; |
||||
|
||||
tl = t; |
||||
ts = tl % 60; |
||||
tm = (tl / 60) % 60; |
||||
th = (tl / (60 * 60)); |
||||
tsf = fmod(t, 60.0); |
||||
if (subsec) |
||||
{ |
||||
if (tsf < 10.0) |
||||
{ |
||||
if (max >= (60 * 60)) |
||||
snprintf(buf, size, "%i:%02i:0%1.02f", th, tm, tsf); |
||||
else if (max >= 60) |
||||
snprintf(buf, size, "%i:0%1.02f", tm, tsf); |
||||
else |
||||
snprintf(buf, size, "%1.02f", tsf); |
||||
} |
||||
else |
||||
{ |
||||
if (max >= (60 * 60)) |
||||
snprintf(buf, size, "%i:%02i:%2.02f", th, tm, tsf); |
||||
else if (max >= 60) |
||||
snprintf(buf, size, "%i:%2.02f", tm, tsf); |
||||
else |
||||
snprintf(buf, size, "%2.02f", tsf); |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
if (max >= (60 * 60)) |
||||
snprintf(buf, size, "%i:%02i:%02i", th, tm, ts); |
||||
else if (max >= 60) |
||||
snprintf(buf, size, "%i:%02i", tm, ts); |
||||
else |
||||
snprintf(buf, size, "%i", ts); |
||||
} |
||||
} |
||||
|
||||
void |
||||
controls_init(Evas_Object *win, Evas_Object *lay) |
||||
{ |
||||
Evas_Object *o; |
||||
Evas_Coord sz; |
||||
|
||||
elm_layout_signal_callback_add(lay, "drag", "rage.dragable.pos", |
||||
_cb_drag, win); |
||||
elm_layout_signal_callback_add(lay, "pos,action,prev", "rage", |
||||
_cb_pos_prev, win); |
||||
elm_layout_signal_callback_add(lay, "pos,action,next", "rage", |
||||
_cb_pos_next, win); |
||||
elm_layout_signal_callback_add(lay, "pos,action,play", "rage", |
||||
_cb_pos_play, win); |
||||
elm_layout_signal_callback_add(lay, "pos,action,pause", "rage", |
||||
_cb_pos_pause, win); |
||||
elm_layout_signal_callback_add(lay, "pos,action,options", "rage", |
||||
_cb_options, win); |
||||
sz = 0; |
||||
elm_coords_finger_size_adjust(1, &sz, 1, &sz); |
||||
|
||||
#define FINGER_SIZE(_nam) \ |
||||
o = evas_object_rectangle_add(evas_object_evas_get(win)); \
|
||||
evas_object_color_set(o, 0, 0, 0, 0); \
|
||||
evas_object_pass_events_set(o, EINA_TRUE); \
|
||||
evas_object_size_hint_min_set(o, sz, sz); \
|
||||
elm_object_part_content_set(lay, _nam, o) |
||||
|
||||
FINGER_SIZE("rage.pos.swallow"); |
||||
FINGER_SIZE("rage.vol.swallow"); |
||||
FINGER_SIZE("rage.options.swallow"); |
||||
FINGER_SIZE("rage.pos.prev.swallow"); |
||||
FINGER_SIZE("rage.pos.play.swallow"); |
||||
FINGER_SIZE("rage.pos.next.swallow"); |
||||
} |
||||
|
||||
void |
||||
controls_update(Evas_Object *lay, Evas_Object *vid) |
||||
{ |
||||
char buf[256]; |
||||
double p; |
||||
|
||||
_time_print(video_position_get(vid), video_length_get(vid), |
||||
sizeof(buf), buf, EINA_TRUE); |
||||
elm_object_part_text_set(lay, "rage.pos", buf); |
||||
_time_print(video_length_get(vid), video_length_get(vid), |
||||
sizeof(buf), buf, EINA_FALSE); |
||||
elm_object_part_text_set(lay, "rage.length", buf); |
||||
elm_layout_signal_emit(lay, "action,frame", "rage"); |
||||
|
||||
if (video_length_get(vid) > 0.0) |
||||
p = video_position_get(vid) / video_length_get(vid); |
||||
else p = 0.0; |
||||
edje_object_part_drag_value_set(elm_layout_edje_get(lay), |
||||
"rage.dragable.pos", p, 0.0); |
||||
} |
@ -0,0 +1,7 @@ |
||||
#ifndef _CONTROLS_H__ |
||||
#define _CONTROLS_H__ 1 |
||||
|
||||
void controls_init(Evas_Object *win, Evas_Object *lay); |
||||
void controls_update(Evas_Object *lay, Evas_Object *vid); |
||||
|
||||
#endif |
@ -0,0 +1,92 @@ |
||||
#include <Elementary.h> |
||||
#include "main.h" |
||||
#include "win.h" |
||||
#include "winvid.h" |
||||
#include "dnd.h" |
||||
|
||||
void |
||||
_cb_drag_enter(void *data EINA_UNUSED, Evas_Object *o EINA_UNUSED) |
||||
{ |
||||
printf("dnd enter\n"); |
||||
} |
||||
|
||||
void |
||||
_cb_drag_leave(void *data EINA_UNUSED, Evas_Object *o EINA_UNUSED) |
||||
{ |
||||
printf("dnd leave\n"); |
||||
} |
||||
|
||||
void |
||||
_cb_drag_pos(void *data EINA_UNUSED, Evas_Object *o EINA_UNUSED, Evas_Coord x, Evas_Coord y, Elm_Xdnd_Action action) |
||||
{ |
||||
printf("dnd at %i %i act:%i\n", x, y, action); |
||||
} |
||||
|
||||
Eina_Bool |
||||
_cb_drop(void *data, Evas_Object *o EINA_UNUSED, Elm_Selection_Data *ev) |
||||
{ |
||||
Evas_Object *win = data; |
||||
Eina_Bool inserted = EINA_FALSE; |
||||
|
||||
if (!ev->data) return EINA_TRUE; |
||||
if (strchr(ev->data, '\n')) |
||||
{ |
||||
char *p, *p2, *p3, *tb; |
||||
|
||||
tb = malloc(strlen(ev->data) + 1); |
||||
if (tb) |
||||
{ |
||||
for (p = ev->data; p;) |
||||
{ |
||||
p2 = strchr(p, '\n'); |
||||
p3 = strchr(p, '\r'); |
||||
if (p2 && p3) |
||||
{ |
||||
if (p3 < p2) p2 = p3; |
||||
} |
||||
else if (!p2) p3 = p2; |
||||
if (p2) |
||||
{ |
||||
strncpy(tb, p, p2 - p); |
||||
tb[p2 - p] = 0; |
||||
p = p2; |
||||
while ((*p) && (isspace(*p))) p++; |
||||
if (strlen(tb) > 0) |
||||
{ |
||||
win_video_insert(win, tb); |
||||
inserted = EINA_TRUE; |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
strcpy(tb, p); |
||||
if (strlen(tb) > 0) |
||||
{ |
||||
win_video_insert(win, tb); |
||||
inserted = EINA_TRUE; |
||||
} |
||||
break; |
||||
} |
||||
} |
||||
free(tb); |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
win_video_insert(win, ev->data); |
||||
inserted = EINA_TRUE; |
||||
} |
||||
if (inserted) win_video_next(win); |
||||
return EINA_TRUE; |
||||
} |
||||
|
||||
void |
||||
dnd_init(Evas_Object *win, Evas_Object *tgt) |
||||
{ |
||||
elm_drop_target_add(tgt, |
||||
ELM_SEL_FORMAT_TEXT | ELM_SEL_FORMAT_IMAGE, |
||||
_cb_drag_enter, win, |
||||
_cb_drag_leave, win, |
||||
_cb_drag_pos, win, |
||||
_cb_drop, win); |
||||
} |
@ -0,0 +1,6 @@ |
||||
#ifndef _DND_H__ |
||||
#define _DND_H__ 1 |
||||
|
||||
void dnd_init(Evas_Object *win, Evas_Object *tgt); |
||||
|
||||
#endif |
@ -0,0 +1,274 @@ |
||||
#include <Elementary.h> |
||||
#include "main.h" |
||||
#include "win.h" |
||||
#include "video.h" |
||||
#include "key.h" |
||||
|
||||
void |
||||
key_handle(Evas_Object *win, Evas_Event_Key_Down *ev) |
||||
{ |
||||
Inf *inf = evas_object_data_get(win, "inf"); |
||||
|
||||
printf("%s | %s\n", ev->key, ev->keyname); |
||||
if ((!strcmp(ev->key, "Left")) || |
||||
(!strcmp(ev->key, "bracketleft"))) |
||||
{ |
||||
if ((video_spu_button_count(inf->vid) > 0) && |
||||
(!strcmp(ev->key, "Left"))) |
||||
video_event_send(inf->vid, EMOTION_EVENT_LEFT); |
||||
else |
||||
{ |
||||
double pos = video_position_get(inf->vid); |
||||
|
||||
if (!inf->last_action_rwind) |
||||
{ |
||||
double t = ecore_time_get(); |
||||
if ((t - inf->last_action) < 1.0) inf->jump *= 1.2; |
||||
else inf->jump = -5.0; |
||||
inf->last_action = t; |
||||
} |
||||
else inf->jump = -5.0; |
||||
if (inf->jump < -300.0) inf->jump = -300.0; |
||||
inf->last_action_rwind = EINA_FALSE; |
||||
pos += inf->jump; |
||||
if (pos < 0.0) pos = 0.0; |
||||
video_position_set(inf->vid, pos); |
||||
elm_layout_signal_emit(inf->lay, "action,rewind", "rage"); |
||||
} |
||||
} |
||||
else if ((!strcmp(ev->key, "Right")) || |
||||
(!strcmp(ev->key, "bracketright"))) |
||||
{ |
||||
double pos = video_position_get(inf->vid); |
||||
double len = video_length_get(inf->vid); |
||||
|
||||
if ((video_spu_button_count(inf->vid) > 0) && |
||||
(!strcmp(ev->key, "Right"))) |
||||
video_event_send(inf->vid, EMOTION_EVENT_RIGHT); |
||||
else |
||||
{ |
||||
if (inf->last_action_rwind) |
||||
{ |
||||
double t = ecore_time_get(); |
||||
if ((t - inf->last_action) < 1.0) inf->jump *= 1.2; |
||||
else inf->jump = 5.0; |
||||
inf->last_action = t; |
||||
} |
||||
else inf->jump = 5.0; |
||||
if (inf->jump > 300.0) inf->jump = 300.0; |
||||
inf->last_action_rwind = EINA_TRUE; |
||||
pos += inf->jump; |
||||
if (pos < (len - 1.0)) video_position_set(inf->vid, pos); |
||||
elm_layout_signal_emit(inf->lay, "action,forward", "rage"); |
||||
} |
||||
} |
||||
else if ((!strcmp(ev->key, "Up")) || |
||||
(!strcmp(ev->key, "plus")) || |
||||
(!strcmp(ev->key, "equal"))) |
||||
{ |
||||
if ((video_spu_button_count(inf->vid) > 0) && |
||||
(!strcmp(ev->key, "Up"))) |
||||
video_event_send(inf->vid, EMOTION_EVENT_UP); |
||||
else |
||||
{ |
||||
double vol = video_volume_get(inf->vid) + 0.05; |
||||
if (vol > 1.0) vol = 1.0; |
||||
video_volume_set(inf->vid, vol); |
||||
elm_layout_signal_emit(inf->lay, "action,volume_up", "rage"); |
||||
} |
||||
} |
||||
else if ((!strcmp(ev->key, "Down")) || |
||||
(!strcmp(ev->key, "minus"))) |
||||
{ |
||||
if ((video_spu_button_count(inf->vid) > 0) && |
||||
(!strcmp(ev->key, "Down"))) |
||||
video_event_send(inf->vid, EMOTION_EVENT_DOWN); |
||||
else |
||||
{ |
||||
double vol = video_volume_get(inf->vid) - 0.05; |
||||
if (vol < 0.0) vol = 0.0; |
||||
video_volume_set(inf->vid, vol); |
||||
elm_layout_signal_emit(inf->lay, "action,volume_down", "rage"); |
||||
} |
||||
} |
||||
else if ((!strcmp(ev->key, "space")) || |
||||
(!strcmp(ev->key, "Pause")) || |
||||
(!strcmp(ev->keyname, "p")) || |
||||
(!strcmp(ev->key, "XF86AudioPlay"))) |
||||
{ |
||||
printf("ch: %i/%i [%s]\n", video_chapter_get(inf->vid), video_chapter_count(inf->vid), video_chapter_name_get(inf->vid, video_chapter_get(inf->vid))); |
||||
printf("ti: %s\n", video_title_get(inf->vid)); |
||||
printf("au: %i/%i [%s]\n", video_audio_channel_get(inf->vid), video_audio_channel_count(inf->vid), video_audio_channel_name_get(inf->vid, video_audio_channel_get(inf->vid))); |
||||
printf("vi: %i/%i [%s]\n", video_video_channel_get(inf->vid), video_video_channel_count(inf->vid), video_video_channel_name_get(inf->vid, video_video_channel_get(inf->vid))); |
||||
printf("sp: %i/%i [%s]\n", video_spu_channel_get(inf->vid), video_spu_channel_count(inf->vid), video_spu_channel_name_get(inf->vid, video_spu_channel_get(inf->vid))); |
||||
|
||||
win_do_play_pause(win); |
||||
} |
||||
else if ((!strcmp(ev->keyname, "s")) || |
||||
(!strcmp(ev->key, "XF86AudioStop"))) |
||||
{ |
||||
video_stop(inf->vid); |
||||
elm_layout_signal_emit(inf->lay, "action,stop", "rage"); |
||||
} |
||||
else if ((!strcmp(ev->key, "Prior")) || |
||||
(!strcmp(ev->key, "XF86AudioPrev"))) |
||||
{ |
||||
win_do_prev(win); |
||||
} |
||||
else if ((!strcmp(ev->key, "Next")) || |
||||
(!strcmp(ev->key, "XF86AudioNext"))) |
||||
{ |
||||
win_do_next(win); |
||||
} |
||||
else if (!strcmp(ev->key, "Home")) |
||||
{ |
||||
if (win_video_have_prev(win)) win_video_first(win); |
||||
else win_video_prev(win); |
||||
} |
||||
else if (!strcmp(ev->key, "End")) |
||||
{ |
||||
if (win_video_have_next(win)) win_video_last(win); |
||||
else win_video_next(win); |
||||
} |
||||
else if ((!strcmp(ev->keyname, "m")) || |
||||
(!strcmp(ev->key, "XF86AudioMute"))) |
||||
{ |
||||
video_mute_set(inf->vid, !video_mute_get(inf->vid)); |
||||
if (video_mute_get(inf->vid)) |
||||
elm_layout_signal_emit(inf->lay, "action,mute", "rage"); |
||||
else |
||||
elm_layout_signal_emit(inf->lay, "action,unmute", "rage"); |
||||
} |
||||
else if (!strcmp(ev->keyname, "l")) |
||||
{ |
||||
video_loop_set(inf->vid, !video_loop_get(inf->vid)); |
||||
if (video_loop_get(inf->vid)) |
||||
elm_layout_signal_emit(inf->lay, "action,loop", "rage"); |
||||
else |
||||
elm_layout_signal_emit(inf->lay, "action,sequential", "rage"); |
||||
} |
||||
else if ((!strcmp(ev->keyname, "q")) || |
||||
(!strcmp(ev->key, "Escape"))) |
||||
{ |
||||
elm_exit(); |
||||
} |
||||
else if ((!strcmp(ev->keyname, "f")) || |
||||
(!strcmp(ev->key, "F11"))) |
||||
{ |
||||
elm_win_fullscreen_set(win, !elm_win_fullscreen_get(win)); |
||||
} |
||||
else if (!strcmp(ev->keyname, "n")) |
||||
{ |
||||
int w, h; |
||||
|
||||
video_ratio_size_get(inf->vid, &w, &h); |
||||
if ((w > 1) && (h > 1)) evas_object_resize(win, w, h); |
||||
} |
||||
else if (!strcmp(ev->keyname, "z")) |
||||
{ |
||||
if (inf->zoom_mode == 0) inf->zoom_mode = 1; |
||||
else inf->zoom_mode = 0; |
||||
win_aspect_adjust(win); |
||||
if (inf->zoom_mode == 1) |
||||
elm_layout_signal_emit(inf->lay, "action,zoom_fill", "rage"); |
||||
else |
||||
elm_layout_signal_emit(inf->lay, "action,zoom_fit", "rage"); |
||||
} |
||||
else if (!strcmp(ev->keyname, "e")) |
||||
{ |
||||
video_eject(inf->vid); |
||||
elm_layout_signal_emit(inf->lay, "action,eject", "rage"); |
||||
} |
||||
else if ((!strcmp(ev->key, "Return")) || |
||||
(!strcmp(ev->key, "KP_Enter"))) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_SELECT); |
||||
} |
||||
else if ((!strcmp(ev->key, "comman")) || |
||||
(!strcmp(ev->key, "less"))) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_ANGLE_PREV); |
||||
} |
||||
else if ((!strcmp(ev->key, "period")) || |
||||
(!strcmp(ev->key, "greater"))) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_ANGLE_NEXT); |
||||
} |
||||
else if (!strcmp(ev->key, "Tab")) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_FORCE); |
||||
} |
||||
else if (!strcmp(ev->key, "0")) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_0); |
||||
} |
||||
else if (!strcmp(ev->key, "1")) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_1); |
||||
} |
||||
else if (!strcmp(ev->key, "2")) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_2); |
||||
} |
||||
else if (!strcmp(ev->key, "3")) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_3); |
||||
} |
||||
else if (!strcmp(ev->key, "4")) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_4); |
||||
} |
||||
else if (!strcmp(ev->key, "5")) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_5); |
||||
} |
||||
else if (!strcmp(ev->key, "6")) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_6); |
||||
} |
||||
else if (!strcmp(ev->key, "7")) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_7); |
||||
} |
||||
else if (!strcmp(ev->key, "8")) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_8); |
||||
} |
||||
else if (!strcmp(ev->key, "9")) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_9); |
||||
} |
||||
else if ((!strcmp(ev->key, "grave")) || |
||||
(!strcmp(ev->key, "asciitilde"))) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_10); |
||||
} |
||||
else if (!strcmp(ev->key, "F1")) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_MENU1); |
||||
} |
||||
else if (!strcmp(ev->key, "F2")) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_MENU2); |
||||
} |
||||
else if (!strcmp(ev->key, "F3")) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_MENU3); |
||||
} |
||||
else if (!strcmp(ev->key, "F4")) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_MENU4); |
||||
} |
||||
else if (!strcmp(ev->key, "F5")) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_MENU5); |
||||
} |
||||
else if (!strcmp(ev->key, "F6")) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_MENU6); |
||||
} |
||||
else if (!strcmp(ev->key, "F7")) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_MENU7); |
||||
} |
||||
} |
@ -0,0 +1,6 @@ |
||||
#ifndef _KEY_H__ |
||||
#define _KEY_H__ 1 |
||||
|
||||
void key_handle(Evas_Object *win, Evas_Event_Key_Down *ev); |
||||
|
||||
#endif |
@ -1,963 +1,7 @@ |
||||
#include <Elementary.h> |
||||
#include "main.h" |
||||
#include "video.h" |
||||
|
||||
typedef struct _Inf Inf; |
||||
|
||||
struct _Inf |
||||
{ |
||||
Evas_Object *vid, *lay, *event; |
||||
Eina_List *file_list, *file_cur; |
||||
Ecore_Job *next_job; |
||||
Ecore_Timer *show_timeout; |
||||
double last_action; |
||||
double jump; |
||||
int zoom_mode; |
||||
Eina_Bool sized : 1; |
||||
Eina_Bool last_action_rwind : 1; |
||||
Eina_Bool playing : 1; |
||||
}; |
||||
|
||||
static void win_video_next(Evas_Object *win); |
||||
static void win_video_insert(Evas_Object *win, const char *file); |
||||
static Eina_Bool win_video_have_next(Evas_Object *win); |
||||
static Eina_Bool win_video_have_prev(Evas_Object *win); |
||||
static void win_video_prev(Evas_Object *win); |
||||
|
||||
static void |
||||
_cb_fullscreen(void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED) |
||||
{ |
||||
Inf *inf = evas_object_data_get(obj, "inf"); |
||||
elm_layout_signal_emit(inf->lay, "state,win,fullscreen", "rage"); |
||||
} |
||||
|
||||
static void |
||||
_cb_unfullscreen(void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED) |
||||
{ |
||||
Inf *inf = evas_object_data_get(obj, "inf"); |
||||
elm_layout_signal_emit(inf->lay, "state,win,normal", "rage"); |
||||
} |
||||
|
||||
static void |
||||
_cb_drag_enter(void *data EINA_UNUSED, Evas_Object *o EINA_UNUSED) |
||||
{ |
||||
printf("dnd enter\n"); |
||||
} |
||||
|
||||
static void |
||||
_cb_drag_leave(void *data EINA_UNUSED, Evas_Object *o EINA_UNUSED) |
||||
{ |
||||
printf("dnd leave\n"); |
||||
} |
||||
|
||||
static void |
||||
_cb_drag_pos(void *data EINA_UNUSED, Evas_Object *o EINA_UNUSED, Evas_Coord x, Evas_Coord y, Elm_Xdnd_Action action) |
||||
{ |
||||
printf("dnd at %i %i act:%i\n", x, y, action); |
||||
} |
||||
|
||||
static Eina_Bool |
||||
_cb_drop(void *data, Evas_Object *o EINA_UNUSED, Elm_Selection_Data *ev) |
||||
{ |
||||
Evas_Object *win = data; |
||||
Eina_Bool inserted = EINA_FALSE; |
||||
|
||||
if (!ev->data) return EINA_TRUE; |
||||
if (strchr(ev->data, '\n')) |
||||
{ |
||||
char *p, *p2, *p3, *tb; |
||||
|
||||
tb = malloc(strlen(ev->data) + 1); |
||||
if (tb) |
||||
{ |
||||
for (p = ev->data; p;) |
||||
{ |
||||
p2 = strchr(p, '\n'); |
||||
p3 = strchr(p, '\r'); |
||||
if (p2 && p3) |
||||
{ |
||||
if (p3 < p2) p2 = p3; |
||||
} |
||||
else if (!p2) p3 = p2; |
||||
if (p2) |
||||
{ |
||||
strncpy(tb, p, p2 - p); |
||||
tb[p2 - p] = 0; |
||||
p = p2; |
||||
while ((*p) && (isspace(*p))) p++; |
||||
if (strlen(tb) > 0) |
||||
{ |
||||
win_video_insert(win, tb); |
||||
inserted = EINA_TRUE; |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
strcpy(tb, p); |
||||
if (strlen(tb) > 0) |
||||
{ |
||||
win_video_insert(win, tb); |
||||
inserted = EINA_TRUE; |
||||
} |
||||
break; |
||||
} |
||||
} |
||||
free(tb); |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
win_video_insert(win, ev->data); |
||||
inserted = EINA_TRUE; |
||||
} |
||||
if (inserted) win_video_next(win); |
||||
return EINA_TRUE; |
||||
} |
||||
|
||||
static void |
||||
_cb_win_del(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *ev EINA_UNUSED) |
||||
{ |
||||
Inf *inf = evas_object_data_get(obj, "inf"); |
||||
const char *f; |
||||
|
||||
if (inf->next_job) ecore_job_del(inf->next_job); |
||||
if (inf->show_timeout) ecore_timer_del(inf->show_timeout); |
||||
EINA_LIST_FREE(inf->file_list, f) eina_stringshare_del(f); |
||||
free(inf); |
||||
evas_object_data_del(obj, "inf"); |
||||
} |
||||
|
||||
static void |
||||
win_do_play(Evas_Object *win) |
||||
{ |
||||
Inf *inf = evas_object_data_get(win, "inf"); |
||||
|
||||
video_play_set(inf->vid, EINA_TRUE); |
||||
elm_layout_signal_emit(inf->lay, "action,play", "rage"); |
||||
} |
||||
|
||||
static void |
||||
win_do_pause(Evas_Object *win) |
||||
{ |
||||
Inf *inf = evas_object_data_get(win, "inf"); |
||||
|
||||
video_play_set(inf->vid, EINA_FALSE); |
||||
elm_layout_signal_emit(inf->lay, "action,pause", "rage"); |
||||
} |
||||
|
||||
static void |
||||
win_do_play_pause(Evas_Object *win) |
||||
{ |
||||
Inf *inf = evas_object_data_get(win, "inf"); |
||||
|
||||
video_play_set(inf->vid, !video_play_get(inf->vid)); |
||||
if (video_play_get(inf->vid)) |
||||
elm_layout_signal_emit(inf->lay, "action,play", "rage"); |
||||
else |
||||
elm_layout_signal_emit(inf->lay, "action,pause", "rage"); |
||||
} |
||||
|
||||
static void |
||||
win_do_prev(Evas_Object *win) |
||||
{ |
||||
Inf *inf = evas_object_data_get(win, "inf"); |
||||
|
||||
if (video_spu_button_count(inf->vid) > 0) |
||||
video_event_send(inf->vid, EMOTION_EVENT_PREV); |
||||
else |
||||
{ |
||||
// if we have chapters - send prev event to jump chapters
|
||||
if (video_chapter_count(inf->vid) > 0) |
||||
video_event_send(inf->vid, EMOTION_EVENT_PREV); |
||||
else |
||||
{ |
||||
double pos = video_position_get(inf->vid); |
||||
|
||||
if ((pos < 5.0) && win_video_have_prev(win)) win_video_prev(win); |
||||
else video_position_set(inf->vid, 0.0); |
||||
elm_layout_signal_emit(inf->lay, "action,prev", "rage"); |
||||
} |
||||
} |
||||
} |
||||
|
||||
static void |
||||
win_do_next(Evas_Object *win) |
||||
{ |
||||
Inf *inf = evas_object_data_get(win, "inf"); |
||||
|
||||
if (video_spu_button_count(inf->vid) > 0) |
||||
video_event_send(inf->vid, EMOTION_EVENT_NEXT); |
||||
else |
||||
{ |
||||
// if we have chapters - send next event to jump chapters
|
||||
if (video_chapter_count(inf->vid) > 0) |
||||
video_event_send(inf->vid, EMOTION_EVENT_NEXT); |
||||
else |
||||
{ |
||||
if (!win_video_have_next(win)) |
||||
{ |
||||
double pos = video_position_get(inf->vid); |
||||
double len = video_length_get(inf->vid); |
||||
|
||||
if ((len - pos) > 5.0) |
||||
{ |
||||
video_position_set(inf->vid, len - 5.0); |
||||
elm_layout_signal_emit(inf->lay, "action,next", "rage"); |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
win_video_next(win); |
||||
elm_layout_signal_emit(inf->lay, "action,next", "rage"); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
static void |
||||
_cb_drag(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) |
||||
{ |
||||
Inf *inf = evas_object_data_get(data, "inf"); |
||||
double pos = 0.0; |
||||
|
||||
edje_object_part_drag_value_get(elm_layout_edje_get(inf->lay), |
||||
"rage.dragable.pos", &pos, NULL); |
||||
video_position_set(inf->vid, pos * video_length_get(inf->vid)); |
||||
} |
||||
|
||||
static void |
||||
_cb_pos_prev(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) |
||||
{ |
||||
win_do_prev(data); |
||||
} |
||||
|
||||
static void |
||||
_cb_pos_next(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) |
||||
{ |
||||
win_do_next(data); |
||||
} |
||||
|
||||
static void |
||||
_cb_pos_play(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) |
||||
{ |
||||
win_do_play(data); |
||||
} |
||||
|
||||
static void |
||||
_cb_pos_pause(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) |
||||
{ |
||||
win_do_pause(data); |
||||
} |
||||
|
||||
static void |
||||
_cb_options(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) |
||||
{ |
||||
// win_do_options(data);
|
||||
} |
||||
|
||||
static Evas_Object * |
||||
win_add(void) |
||||
{ |
||||
Evas_Object *win, *o; |
||||
char buf[4096]; |
||||
Evas_Coord sz; |
||||
Inf *inf = calloc(1, sizeof(Inf)); |
||||
|
||||
win = elm_win_add(NULL, "Rage", ELM_WIN_BASIC); |
||||
elm_win_title_set(win, "Rage"); |
||||
elm_win_autodel_set(win, EINA_TRUE); |
||||
|
||||
evas_object_data_set(win, "inf", inf); |
||||
evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _cb_win_del, NULL); |
||||
|
||||
evas_object_smart_callback_add(win, "fullscreen", _cb_fullscreen, NULL); |
||||
evas_object_smart_callback_add(win, "unfullscreen", _cb_unfullscreen, NULL); |
||||
evas_object_smart_callback_add(win, "normal", _cb_unfullscreen, NULL); |
||||
|
||||
o = evas_object_image_add(evas_object_evas_get(win)); |
||||
snprintf(buf, sizeof(buf), "%s/images/rage.png", elm_app_data_dir_get()); |
||||
evas_object_image_file_set(o, buf, NULL); |
||||
elm_win_icon_object_set(win, o); |
||||
|
||||
o = elm_layout_add(win); |
||||
snprintf(buf, sizeof(buf), "%s/themes/default.edj", elm_app_data_dir_get()); |
||||
elm_layout_file_set(o, buf, "rage/core"); |
||||
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); |
||||
elm_win_resize_object_add(win, o); |
||||
evas_object_show(o); |
||||
inf->lay = o; |
||||
|
||||
elm_layout_signal_callback_add(o, "drag", "rage.dragable.pos", |
||||
_cb_drag, win); |
||||
elm_layout_signal_callback_add(o, "pos,action,prev", "rage", |
||||
_cb_pos_prev, win); |
||||
elm_layout_signal_callback_add(o, "pos,action,next", "rage", |
||||
_cb_pos_next, win); |
||||
elm_layout_signal_callback_add(o, "pos,action,play", "rage", |
||||
_cb_pos_play, win); |
||||
elm_layout_signal_callback_add(o, "pos,action,pause", "rage", |
||||
_cb_pos_pause, win); |
||||
elm_layout_signal_callback_add(o, "pos,action,options", "rage", |
||||
_cb_options, win); |
||||
|
||||
sz = 0; |
||||
elm_coords_finger_size_adjust(1, &sz, 1, &sz); |
||||
|
||||
#define FINGER_SIZE(_nam) \ |
||||
o = evas_object_rectangle_add(evas_object_evas_get(win)); \
|
||||
evas_object_color_set(o, 0, 0, 0, 0); \
|
||||
evas_object_pass_events_set(o, EINA_TRUE); \
|
||||
evas_object_size_hint_min_set(o, sz, sz); \
|
||||
elm_object_part_content_set(inf->lay, _nam, o) |
||||
|
||||
FINGER_SIZE("rage.pos.swallow"); |
||||
FINGER_SIZE("rage.vol.swallow"); |
||||
FINGER_SIZE("rage.options.swallow"); |
||||
FINGER_SIZE("rage.pos.prev.swallow"); |
||||
FINGER_SIZE("rage.pos.play.swallow"); |
||||
FINGER_SIZE("rage.pos.next.swallow"); |
||||
|
||||
o = evas_object_rectangle_add(evas_object_evas_get(win)); |
||||
elm_win_resize_object_add(win, o); |
||||
evas_object_color_set(o, 0, 0, 0, 0); |
||||
evas_object_repeat_events_set(o, EINA_TRUE); |
||||
evas_object_show(o); |
||||
inf->event = o; |
||||
|
||||
elm_drop_target_add(o, ELM_SEL_FORMAT_TEXT | ELM_SEL_FORMAT_IMAGE, |
||||
_cb_drag_enter, win, |
||||
_cb_drag_leave, win, |
||||
_cb_drag_pos, win, |
||||
_cb_drop, win); |
||||
return win; |
||||
} |
||||
|
||||
static void |
||||
win_title_update(Evas_Object *win) |
||||
{ |
||||
Inf *inf = evas_object_data_get(win, "inf"); |
||||
const char *file; |
||||
|
||||
if (!inf->file_cur) |
||||
{ |
||||
elm_win_title_set(win, "Rage"); |
||||
return; |
||||
} |
||||
file = inf->file_cur->data; |
||||
if (!file) |
||||
{ |
||||
elm_win_title_set(win, "Rage"); |
||||
return; |
||||
} |
||||
if (video_title_get(inf->vid)) |
||||
elm_win_title_set(win, video_title_get(inf->vid)); |
||||
else |
||||
elm_win_title_set(win, ecore_file_file_get(file)); |
||||
} |
||||
|
||||
static void |
||||
win_show(Evas_Object *win, int w, int h) |
||||
{ |
||||
Inf *inf = evas_object_data_get(win, "inf"); |
||||
if (!inf->sized) |
||||
{ |
||||
inf->sized = EINA_TRUE; |
||||
evas_object_resize(win, w, h); |
||||
if (inf->show_timeout) |
||||
{ |
||||
ecore_timer_del(inf->show_timeout); |
||||
inf->show_timeout = NULL; |
||||
} |
||||
evas_object_show(win); |
||||
} |
||||
if (!video_has_video_get(inf->vid)) |
||||
elm_layout_signal_emit(inf->lay, "state,novideo", "rage"); |
||||
else |
||||
elm_layout_signal_emit(inf->lay, "state,video", "rage"); |
||||
if (!video_has_audio_get(inf->vid)) |
||||
elm_layout_signal_emit(inf->lay, "state,noaudio", "rage"); |
||||
else |
||||
elm_layout_signal_emit(inf->lay, "state,audio", "rage"); |
||||
} |
||||
|
||||
static void |
||||
win_aspect_adjust(Evas_Object *win) |
||||
{ |
||||
Inf *inf = evas_object_data_get(win, "inf"); |
||||
int w = 1, h = 1; |
||||
|
||||
video_ratio_size_get(inf->vid, &w, &h); |
||||
if (inf->zoom_mode == 1) |
||||
evas_object_size_hint_aspect_set(inf->vid, EVAS_ASPECT_CONTROL_NEITHER, w, h); |
||||
else |
||||
evas_object_size_hint_aspect_set(inf->vid, EVAS_ASPECT_CONTROL_BOTH, w, h); |
||||
if (((w > 1) && (h > 1)) || |
||||
((!video_has_video_get(inf->vid)) && (video_has_audio_get(inf->vid)))) |
||||
{ |
||||
if ((!video_has_video_get(inf->vid)) && (video_has_audio_get(inf->vid))) |
||||
w = h = 160; |
||||
win_show(win, w, h); |
||||
} |
||||
} |
||||
|
||||
static void |
||||
_time_print(double t, double max, int size, char *buf, Eina_Bool subsec) |
||||
{ |
||||
double tsf; |
||||
long long tl; |
||||
int ts, tm, th; |
||||
|
||||
tl = t; |
||||
ts = tl % 60; |
||||
tm = (tl / 60) % 60; |
||||
th = (tl / (60 * 60)); |
||||
tsf = fmod(t, 60.0); |
||||
if (subsec) |
||||
{ |
||||
if (tsf < 10.0) |
||||
{ |
||||
if (max >= (60 * 60)) |
||||
snprintf(buf, size, "%i:%02i:0%1.02f", th, tm, tsf); |
||||
else if (max >= 60) |
||||
snprintf(buf, size, "%i:0%1.02f", tm, tsf); |
||||
else |
||||
snprintf(buf, size, "%1.02f", tsf); |
||||
} |
||||
else |
||||
{ |
||||
if (max >= (60 * 60)) |
||||
snprintf(buf, size, "%i:%02i:%2.02f", th, tm, tsf); |
||||
else if (max >= 60) |
||||
snprintf(buf, size, "%i:%2.02f", tm, tsf); |
||||
else |
||||
snprintf(buf, size, "%2.02f", tsf); |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
if (max >= (60 * 60)) |
||||
snprintf(buf, size, "%i:%02i:%02i", th, tm, ts); |
||||
else if (max >= 60) |
||||
snprintf(buf, size, "%i:%02i", tm, ts); |
||||
else |
||||
snprintf(buf, size, "%i", ts); |
||||
} |
||||
} |
||||
|
||||
static void |
||||
win_frame_decode(Evas_Object *win) |
||||
{ |
||||
Inf *inf = evas_object_data_get(win, "inf"); |
||||
char buf[256]; |
||||
double p; |
||||
|
||||
_time_print(video_position_get(inf->vid), video_length_get(inf->vid), |
||||
sizeof(buf), buf, EINA_TRUE); |
||||
elm_object_part_text_set(inf->lay, "rage.pos", buf); |
||||
_time_print(video_length_get(inf->vid), video_length_get(inf->vid), |
||||
sizeof(buf), buf, EINA_FALSE); |
||||
elm_object_part_text_set(inf->lay, "rage.length", buf); |
||||
elm_layout_signal_emit(inf->lay, "action,frame", "rage"); |
||||
if (video_length_get(inf->vid) > 0.0) |
||||
p = video_position_get(inf->vid) / video_length_get(inf->vid); |
||||
else p = 0.0; |
||||
edje_object_part_drag_value_set(elm_layout_edje_get(inf->lay), |
||||
"rage.dragable.pos", p, 0.0); |
||||
} |
||||
|
||||
static void |
||||
_cb_resize(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) |
||||
{ |
||||
win_aspect_adjust(data); |
||||
win_title_update(data); |
||||
} |
||||
|
||||
static void |
||||
_cb_decode(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) |
||||
{ |
||||
win_frame_decode(data); |
||||
} |
||||
|
||||
static void |
||||
win_video_next(Evas_Object *win) |
||||
{ |
||||
Inf *inf = evas_object_data_get(win, "inf"); |
||||
Eina_List *l; |
||||
const char *file; |
||||
|
||||
if (!inf->file_list) return; |
||||
if (!inf->file_cur) l = inf->file_list; |
||||
else l = inf->file_cur->next; |
||||
if (!l) |
||||
{ |
||||
elm_exit(); |
||||
return; |
||||
} |
||||
file = l->data; |
||||
inf->file_cur = l; |
||||
video_position_set(inf->vid, 0.0); |
||||
video_play_set(inf->vid, EINA_FALSE); |
||||
video_file_set(inf->vid, file); |
||||
video_position_set(inf->vid, 0.0); |
||||
video_play_set(inf->vid, EINA_TRUE); |
||||
elm_layout_signal_emit(inf->lay, "action,newvid", "rage"); |
||||
win_aspect_adjust(win); |
||||
win_title_update(win); |
||||
} |
||||
|
||||
static void |
||||
win_video_prev(Evas_Object *win) |
||||
{ |
||||
Inf *inf = evas_object_data_get(win, "inf"); |
||||
Eina_List *l; |
||||
const char *file; |
||||
|
||||
if (!inf->file_list) return; |
||||
if (!inf->file_cur) l = eina_list_last(inf->file_list); |
||||
else l = inf->file_cur->prev; |
||||
if (!l) return; |
||||
file = l->data; |
||||
inf->file_cur = l; |
||||
video_position_set(inf->vid, 0.0); |
||||
video_play_set(inf->vid, EINA_FALSE); |
||||
video_file_set(inf->vid, file); |
||||
video_position_set(inf->vid, 0.0); |
||||
video_play_set(inf->vid, EINA_TRUE); |
||||
elm_layout_signal_emit(inf->lay, "action,newvid", "rage"); |
||||
win_aspect_adjust(win); |
||||
win_title_update(win); |
||||
} |
||||
|
||||
static Eina_Bool |
||||
win_video_have_next(Evas_Object *win) |
||||
{ |
||||
Inf *inf = evas_object_data_get(win, "inf"); |
||||
Eina_List *l; |
||||
|
||||
if (!inf->file_list) return EINA_FALSE; |
||||
if (!inf->file_cur) return EINA_FALSE; |
||||
else l = inf->file_cur->next; |
||||
if (!l) return EINA_FALSE; |
||||
return EINA_TRUE; |
||||
} |
||||
|
||||
static Eina_Bool |
||||
win_video_have_prev(Evas_Object *win) |
||||
{ |
||||
Inf *inf = evas_object_data_get(win, "inf"); |
||||
Eina_List *l; |
||||
|
||||
if (!inf->file_list) return EINA_FALSE; |
||||
if (!inf->file_cur) return EINA_FALSE; |
||||
else l = inf->file_cur->prev; |
||||
if (!l) return EINA_FALSE; |
||||
return EINA_TRUE; |
||||
} |
||||
|
||||
static void |
||||
win_video_insert(Evas_Object *win, const char *file) |
||||
{ |
||||
Inf *inf = evas_object_data_get(win, "inf"); |
||||
|
||||
inf->file_list = eina_list_append_relative_list |
||||
(inf->file_list, eina_stringshare_add(file), inf->file_cur); |
||||
evas_object_data_set(win, "file_list", inf->file_list); |
||||
} |
||||
|
||||
static void |
||||
_cb_key_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) |
||||
{ |
||||
Evas_Event_Key_Down *ev = event_info; |
||||
Evas_Object *win = data; |
||||
Inf *inf = evas_object_data_get(win, "inf"); |
||||
|
||||
printf("%s | %s\n", ev->key, ev->keyname); |
||||
if ((!strcmp(ev->key, "Left")) || |
||||
(!strcmp(ev->key, "bracketleft"))) |
||||
{ |
||||
if ((video_spu_button_count(inf->vid) > 0) && |
||||
(!strcmp(ev->key, "Left"))) |
||||
video_event_send(inf->vid, EMOTION_EVENT_LEFT); |
||||
else |
||||
{ |
||||
double pos = video_position_get(inf->vid); |
||||
|
||||
if (!inf->last_action_rwind) |
||||
{ |
||||
double t = ecore_time_get(); |
||||
if ((t - inf->last_action) < 1.0) inf->jump *= 1.2; |
||||
else inf->jump = -5.0; |
||||
inf->last_action = t; |
||||
} |
||||
else inf->jump = -5.0; |
||||
if (inf->jump < -300.0) inf->jump = -300.0; |
||||
inf->last_action_rwind = EINA_FALSE; |
||||
pos += inf->jump; |
||||
if (pos < 0.0) pos = 0.0; |
||||
video_position_set(inf->vid, pos); |
||||
elm_layout_signal_emit(inf->lay, "action,rewind", "rage"); |
||||
} |
||||
} |
||||
else if ((!strcmp(ev->key, "Right")) || |
||||
(!strcmp(ev->key, "bracketright"))) |
||||
{ |
||||
double pos = video_position_get(inf->vid); |
||||
double len = video_length_get(inf->vid); |
||||
|
||||
if ((video_spu_button_count(inf->vid) > 0) && |
||||
(!strcmp(ev->key, "Right"))) |
||||
video_event_send(inf->vid, EMOTION_EVENT_RIGHT); |
||||
else |
||||
{ |
||||
if (inf->last_action_rwind) |
||||
{ |
||||
double t = ecore_time_get(); |
||||
if ((t - inf->last_action) < 1.0) inf->jump *= 1.2; |
||||
else inf->jump = 5.0; |
||||
inf->last_action = t; |
||||
} |
||||
else inf->jump = 5.0; |
||||
if (inf->jump > 300.0) inf->jump = 300.0; |
||||
inf->last_action_rwind = EINA_TRUE; |
||||
pos += inf->jump; |
||||
if (pos < (len - 1.0)) video_position_set(inf->vid, pos); |
||||
elm_layout_signal_emit(inf->lay, "action,forward", "rage"); |
||||
} |
||||
} |
||||
else if ((!strcmp(ev->key, "Up")) || |
||||
(!strcmp(ev->key, "plus")) || |
||||
(!strcmp(ev->key, "equal"))) |
||||
{ |
||||
if ((video_spu_button_count(inf->vid) > 0) && |
||||
(!strcmp(ev->key, "Up"))) |
||||
video_event_send(inf->vid, EMOTION_EVENT_UP); |
||||
else |
||||
{ |
||||
double vol = video_volume_get(inf->vid) + 0.05; |
||||
if (vol > 1.0) vol = 1.0; |
||||
video_volume_set(inf->vid, vol); |
||||
elm_layout_signal_emit(inf->lay, "action,volume_up", "rage"); |
||||
} |
||||
} |
||||
else if ((!strcmp(ev->key, "Down")) || |
||||
(!strcmp(ev->key, "minus"))) |
||||
{ |
||||
if ((video_spu_button_count(inf->vid) > 0) && |
||||
(!strcmp(ev->key, "Down"))) |
||||
video_event_send(inf->vid, EMOTION_EVENT_DOWN); |
||||
else |
||||
{ |
||||
double vol = video_volume_get(inf->vid) - 0.05; |
||||
if (vol < 0.0) vol = 0.0; |
||||
video_volume_set(inf->vid, vol); |
||||
elm_layout_signal_emit(inf->lay, "action,volume_down", "rage"); |
||||
} |
||||
} |
||||
else if ((!strcmp(ev->key, "space")) || |
||||
(!strcmp(ev->keyname, "p")) || |
||||
(!strcmp(ev->key, "XF86AudioPlay"))) |
||||
{ |
||||
printf("ch: %i/%i [%s]\n", video_chapter_get(inf->vid), video_chapter_count(inf->vid), video_chapter_name_get(inf->vid, video_chapter_get(inf->vid))); |
||||
printf("ti: %s\n", video_title_get(inf->vid)); |
||||
printf("au: %i/%i [%s]\n", video_audio_channel_get(inf->vid), video_audio_channel_count(inf->vid), video_audio_channel_name_get(inf->vid, video_audio_channel_get(inf->vid))); |
||||
printf("vi: %i/%i [%s]\n", video_video_channel_get(inf->vid), video_video_channel_count(inf->vid), video_video_channel_name_get(inf->vid, video_video_channel_get(inf->vid))); |
||||
printf("sp: %i/%i [%s]\n", video_spu_channel_get(inf->vid), video_spu_channel_count(inf->vid), video_spu_channel_name_get(inf->vid, video_spu_channel_get(inf->vid))); |
||||
|
||||
win_do_play_pause(win); |
||||
} |
||||
else if ((!strcmp(ev->keyname, "s")) || |
||||
(!strcmp(ev->key, "XF86AudioStop"))) |
||||
{ |
||||
video_stop(inf->vid); |
||||
elm_layout_signal_emit(inf->lay, "action,stop", "rage"); |
||||
} |
||||
else if ((!strcmp(ev->key, "Prior")) || |
||||
(!strcmp(ev->key, "XF86AudioPrev"))) |
||||
{ |
||||
win_do_prev(win); |
||||
} |
||||
else if ((!strcmp(ev->key, "Next")) || |
||||
(!strcmp(ev->key, "XF86AudioNext"))) |
||||
{ |
||||
win_do_next(win); |
||||
} |
||||
else if ((!strcmp(ev->keyname, "m")) || |
||||
(!strcmp(ev->key, "XF86AudioMute"))) |
||||
{ |
||||
video_mute_set(inf->vid, !video_mute_get(inf->vid)); |
||||
if (video_mute_get(inf->vid)) |
||||
elm_layout_signal_emit(inf->lay, "action,mute", "rage"); |
||||
else |
||||
elm_layout_signal_emit(inf->lay, "action,unmute", "rage"); |
||||
} |
||||
else if (!strcmp(ev->keyname, "l")) |
||||
{ |
||||
video_loop_set(inf->vid, !video_loop_get(inf->vid)); |
||||
if (video_loop_get(inf->vid)) |
||||
elm_layout_signal_emit(inf->lay, "action,loop", "rage"); |
||||
else |
||||
elm_layout_signal_emit(inf->lay, "action,sequential", "rage"); |
||||
} |
||||
else if ((!strcmp(ev->keyname, "q")) || |
||||
(!strcmp(ev->key, "Escape"))) |
||||
{ |
||||
elm_exit(); |
||||
} |
||||
else if ((!strcmp(ev->keyname, "f")) || |
||||
(!strcmp(ev->key, "F11"))) |
||||
{ |
||||
elm_win_fullscreen_set(win, !elm_win_fullscreen_get(win)); |
||||
} |
||||
else if (!strcmp(ev->keyname, "n")) |
||||
{ |
||||
int w, h; |
||||
|
||||
video_ratio_size_get(inf->vid, &w, &h); |
||||
if ((w > 1) && (h > 1)) evas_object_resize(win, w, h); |
||||
} |
||||
else if (!strcmp(ev->keyname, "z")) |
||||
{ |
||||
if (inf->zoom_mode == 0) inf->zoom_mode = 1; |
||||
else inf->zoom_mode = 0; |
||||
win_aspect_adjust(win); |
||||
if (inf->zoom_mode == 1) |
||||
elm_layout_signal_emit(inf->lay, "action,zoom_fill", "rage"); |
||||
else |
||||
elm_layout_signal_emit(inf->lay, "action,zoom_fit", "rage"); |
||||
} |
||||
else if (!strcmp(ev->keyname, "e")) |
||||
{ |
||||
video_eject(inf->vid); |
||||
elm_layout_signal_emit(inf->lay, "action,eject", "rage"); |
||||
} |
||||
else if ((!strcmp(ev->key, "Return")) || |
||||
(!strcmp(ev->key, "KP_Enter"))) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_SELECT); |
||||
} |
||||
else if ((!strcmp(ev->key, "comman")) || |
||||
(!strcmp(ev->key, "less"))) |
||||
{ |
||||
video_event_send(inf->vid, EMOTION_EVENT_ANGLE_PREV); |
||||
} |
||||