go back to image widget for video filepreviews

this still has some funkiness related to initial geometry but it looks
better and doesn't have weird resolution bugs

fix T4293
This commit is contained in:
Mike Blumenkrantz 2017-08-25 14:47:04 -04:00
parent 28783cfc23
commit e93f67e74a
1 changed files with 37 additions and 36 deletions

View File

@ -55,6 +55,7 @@ struct _E_Widget_Data
Eina_Bool clamp_video : 1;
Eina_Bool delete_me : 1;
Eina_Bool preview_text_file_next : 1;
Eina_Bool vid_sized : 1;
};
static void _e_wid_fprev_preview_update(void *data, Evas_Object *obj, void *event_info);
@ -225,6 +226,36 @@ _e_wid_fprev_clear_widgets(E_Widget_Data *wd)
if (wd->preview_text_file_thread) eio_file_cancel(wd->preview_text_file_thread);
}
static void
_fprev_video_size(E_Widget_Data *wd, Evas_Object *obj)
{
double ratio;
int iw, ih;
Evas_Coord w, h, mw, mh, ow, oh;
if (wd->vid_sized) return;
evas_object_geometry_get(wd->o_preview_properties_table, NULL, NULL, &w, &h);
if (w < 10) return;
evas_object_geometry_get(wd->o_preview_preview, NULL, NULL, &ow, &oh);
wd->vid_sized = 1;
w -= 4;
emotion_object_size_get(obj, &iw, &ih);
ratio = emotion_object_ratio_get(obj);
if (ratio > 0.0) iw = (ih * ratio) + 0.5;
if (iw < 1) iw = 1;
if (ih < 1) ih = 1;
h = (w * ih) / iw;
e_widget_size_min_set(wd->o_preview_preview, w, h);
e_widget_table_object_repack(wd->o_preview_properties_table,
wd->o_preview_preview, 0, 0, 2, 2, 1, 1, 1, 1);
e_widget_list_object_repack(wd->o_preview_list,
wd->o_preview_properties_table,
1, 1, 0.5);
e_widget_size_min_get(wd->o_preview_list, &mw, &mh);
e_widget_size_min_set(wd->obj, mw, mh);
}
static void
_e_wid_fprev_preview_video_position(E_Widget_Data *wd, Evas_Object *obj, void *event_info EINA_UNUSED)
{
@ -235,43 +266,14 @@ _e_wid_fprev_preview_video_position(E_Widget_Data *wd, Evas_Object *obj, void *e
if (!EINA_DBL_NONZERO(tot)) return;
wd->vid_pct = t = (emotion_object_position_get(obj) * 100.0) / emotion_object_play_length_get(obj);
e_widget_slider_value_double_set(wd->o_preview_time, t);
_fprev_video_size(wd, obj);
}
static void
_e_wid_fprev_preview_video_opened(E_Widget_Data *wd, Evas_Object *obj, void *event_info EINA_UNUSED)
{
double ratio;
int iw, ih;
Evas_Coord w, h, mw, mh, ow, oh;
evas_object_geometry_get(wd->o_preview_preview, NULL, NULL, &ow, &oh);
evas_object_geometry_get(wd->o_preview_properties_table, NULL, NULL, &w, &h);
e_widget_entry_text_set(wd->o_preview_extra_entry, e_util_time_str_get(emotion_object_play_length_get(obj)));
if (w < 10) return;
w -= 4;
emotion_object_size_get(obj, &iw, &ih);
ratio = emotion_object_ratio_get(obj);
if (ratio > 0.0) iw = (ih * ratio) + 0.5;
if (iw < 1) iw = 1;
if (ih < 1) ih = 1;
h = (w * ih) / iw;
e_widget_preview_vsize_set(wd->o_preview_preview, w, h);
if (h > oh)
{
w = (w * oh) / h;
h = oh;
}
e_widget_size_min_set(wd->o_preview_preview, w, h);
e_widget_table_object_repack(wd->o_preview_properties_table,
wd->o_preview_preview, 0, 0, 2, 2, 0, 0, 1, 1);
e_widget_list_object_repack(wd->o_preview_list,
wd->o_preview_properties_table,
1, 1, 0.5);
e_widget_size_min_get(wd->o_preview_list, &mw, &mh);
e_widget_size_min_set(wd->obj, mw, mh);
_fprev_video_size(wd, obj);
}
static void
@ -280,6 +282,7 @@ _e_wid_fprev_preview_video_resize(E_Widget_Data *wd, Evas_Object *obj, void *eve
int w, h;
char buf[128];
_fprev_video_size(wd, obj);
emotion_object_size_get(obj, &w, &h);
snprintf(buf, sizeof(buf), "%dx%d", w, h);
@ -343,13 +346,11 @@ _e_wid_fprev_preview_video_widgets(E_Widget_Data *wd)
e_widget_table_object_append(wd->o_preview_properties_table,
o, 0, 0, 2, 2, 1, 1, 1, 1);
wd->o_preview_preview = e_widget_preview_add(evas, 4, 4);
em = o = emotion_object_add(e_widget_preview_evas_get(wd->o_preview_preview));
emotion_object_init(o, "gstreamer1");
em = o = emotion_object_add(evas);
emotion_object_file_set(o, wd->path);
emotion_object_play_set(o, EINA_TRUE);
evas_object_size_hint_aspect_set(o, EVAS_ASPECT_CONTROL_BOTH, wd->w, wd->h);
e_widget_preview_extern_object_set(wd->o_preview_preview, o);
emotion_object_init(o, "gstreamer1");
wd->o_preview_preview = e_widget_image_add_from_object(evas, o, 4, 4);
e_widget_table_object_append(wd->o_preview_properties_table,
wd->o_preview_preview, 0, 0, 2, 2, 1, 1, 1, 1);