Enlightenment CVS committal Author : moom16 Project : e17 Module : apps/eclair
Dir : e17/apps/eclair/src Modified Files: Makefile.am eclair.c eclair_args.c eclair_callbacks.c eclair_callbacks.h eclair_playlist_container.c eclair_playlist_container.h eclair_private.h eclair_window.c eclair_window.h Added Files: eclair_video.c eclair_video.h Log Message: * Change the video window class from "eclair" to "Eclair" * Fix the minimize bug. But it seems to be a bug from ecore: When a window is iconfied and de-iconified, we couldn't iconify it anymore; I need to do: ecore_evas_iconified_set(window->ecore_window, 0); ecore_evas_iconified_set(window->ecore_window, 1); to make ecore know that the window has been de-iconified?! But maybe I'm doing something wrong. * eclair_window: "shaded"->"shaped" * Restructure the code: add eclair_video.c for video code, and move window callbacks to eclair_window.c, playlis_container callbacks to eclair_playlist_container.c and video callbacks to eclair_video.c * Code cleanup =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/Makefile.am,v retrieving revision 1.10 retrieving revision 1.11 diff -u -3 -r1.10 -r1.11 --- Makefile.am 19 Jun 2005 10:52:28 -0000 1.10 +++ Makefile.am 9 Jul 2005 12:27:31 -0000 1.11 @@ -36,7 +36,8 @@ eclair_config.c eclair_config.h \ eclair_dialogs.c eclair_dialogs.h \ eclair_window.c eclair_window.h \ -eclair_database.c eclair_database.h +eclair_database.c eclair_database.h \ +eclair_video.c eclair_video.h eclair_LDADD = \ @GTHREAD_LIBS@ \ =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -3 -r1.26 -r1.27 --- eclair.c 4 Jul 2005 18:33:57 -0000 1.26 +++ eclair.c 9 Jul 2005 12:27:31 -0000 1.27 @@ -7,7 +7,6 @@ #include <Edje.h> #include <Emotion.h> #include <Esmart/Esmart_Draggies.h> -#include <pthread.h> #include "eclair_playlist.h" #include "eclair_playlist_container.h" #include "eclair_media_file.h" @@ -21,8 +20,8 @@ #include "eclair_dialogs.h" #include "eclair_window.h" #include "eclair_database.h" +#include "eclair_video.h" -static void *_eclair_create_video_object_thread(void *param); static Evas_Bool _eclair_create_gui_window(Eclair *eclair); static Evas_Bool _eclair_create_playlist_window(Eclair *eclair); static Evas_Bool _eclair_create_equalizer_window(Eclair *eclair); @@ -30,7 +29,6 @@ static Evas_Bool _eclair_create_playlist_container_object(Eclair *eclair, Eclair_Window *window); static Evas_Bool _eclair_create_cover_object(Eclair *eclair, Eclair_Window *window); static void _eclair_add_inter_windows_callbacks(Eclair *eclair); -static void _eclair_create_video_window(Eclair *eclair); static void _eclair_sig_pregest(); static void _eclair_on_segv(int num); @@ -50,23 +48,16 @@ eclair->argc = argc; eclair->argv = argv; - eclair->video_window = NULL; - eclair->video_object = NULL; - eclair->black_background = NULL; - eclair->subtitles_object = NULL; - eclair->previous_video_width = 0; - eclair->previous_video_height = 0; - eclair->previous_video_ratio = 0.0; eclair->gui_window = NULL; - eclair->cover = NULL; - eclair->previous_cover = NULL; eclair->equalizer_window = NULL; eclair->playlist_window = NULL; eclair->playlist_container = NULL; eclair->playlist_container_owner = NULL; eclair->playlist_entry_height = -1; eclair->cover_window = NULL; - eclair->cover_owner = NULL; + eclair->cover = NULL; + eclair->previous_cover = NULL; + eclair->cover_owner = NULL; eclair->state = ECLAIR_STOP; eclair->seek_to_pos = -1.0; eclair->use_progress_bar_drag_for_time = 0; @@ -79,10 +70,14 @@ eclair->start_playing = 0; if (!eclair_args_parse(eclair, &filenames)) + { + free(eclair->gui_theme_file); return 0; + } eclair_config_init(&eclair->config); eclair_utils_init(); + eclair_video_init(&eclair->video, eclair); if (!_eclair_create_gui_window(eclair)) { eclair_config_shutdown(&eclair->config); @@ -92,7 +87,7 @@ _eclair_create_playlist_window(eclair); _eclair_create_equalizer_window(eclair); _eclair_create_cover_window(eclair); - _eclair_create_video_window(eclair); + eclair_create_video_window(&eclair->video, eclair->video_engine); _eclair_add_inter_windows_callbacks(eclair); eclair_database_init(&eclair->database, eclair); eclair_dialogs_init(&eclair->dialogs_manager, eclair); @@ -132,9 +127,7 @@ eclair_window_del(eclair->equalizer_window); eclair_window_del(eclair->cover_window); - fprintf(stderr, "Eclair: Debug: Destroying create video object thread\n"); - pthread_join(eclair->video_create_thread, NULL); - fprintf(stderr, "Eclair: Debug: Create video object thread destroyed\n"); + eclair_video_shutdown(&eclair->video); eclair_dialogs_shutdown(&eclair->dialogs_manager); eclair_subtitles_free(&eclair->subtitles); eclair_meta_tag_shutdown(&eclair->meta_tag_manager); @@ -161,13 +154,13 @@ position = eclair_position_get(eclair); //Display subtitles - eclair_subtitles_display_current_subtitle(&eclair->subtitles, eclair_position_get(eclair), eclair->subtitles_object); + eclair_subtitles_display_current_subtitle(&eclair->subtitles, eclair_position_get(eclair), eclair->video.subtitles_object); - if (!eclair->video_object || !eclair->gui_window) + if (!eclair->video.video_object || !eclair->gui_window) return; //Update time text - length = emotion_object_play_length_get(eclair->video_object); + length = emotion_object_play_length_get(eclair->video.video_object); if (eclair->use_progress_bar_drag_for_time) { edje_object_part_drag_value_get(eclair->gui_window->edje_object, "progress_bar_drag", &position, NULL); @@ -199,7 +192,7 @@ current_file = eclair_playlist_current_media_file(&eclair->playlist); //Update the name of the current file only if video is created - if (eclair->video_object) + if (eclair->video.video_object) { if (current_file) { @@ -245,17 +238,17 @@ //Update the title of the video window - if (eclair->video_window) + if (eclair->video.video_window) { if (current_file && current_file->path) { window_title = malloc(strlen(current_file->path) + strlen("eclair: ") + 1); sprintf(window_title, "eclair: %s", current_file->path); - ecore_evas_title_set(eclair->video_window, window_title); + ecore_evas_title_set(eclair->video.video_window, window_title); free(window_title); } else - ecore_evas_title_set(eclair->video_window, "eclair"); + ecore_evas_title_set(eclair->video.video_window, "eclair"); } //Update the current cover @@ -354,7 +347,7 @@ if (!eclair) return; - if (!eclair->video_object) + if (!eclair->video.video_object) { eclair->start_playing = 1; return; @@ -362,20 +355,20 @@ if (path) { - emotion_object_file_set(eclair->video_object, path); - emotion_object_play_set(eclair->video_object, 0); + emotion_object_file_set(eclair->video.video_object, path); + emotion_object_play_set(eclair->video.video_object, 0); eclair_progress_rate_set(eclair, 0.0); eclair->state = ECLAIR_PAUSE; eclair_play(eclair); eclair_subtitles_load_from_media_file(&eclair->subtitles, path); - if (eclair->video_window) + if (eclair->video.video_window) { - if (emotion_object_video_handled_get(eclair->video_object)) - ecore_evas_show(eclair->video_window); + if (emotion_object_video_handled_get(eclair->video.video_object)) + ecore_evas_show(eclair->video.video_window); else - ecore_evas_hide(eclair->video_window); + ecore_evas_hide(eclair->video.video_window); } } else @@ -419,10 +412,10 @@ //Pause the playback void eclair_pause(Eclair *eclair) { - if (!eclair || (eclair->state != ECLAIR_PLAYING)) + if (!eclair || (eclair->state != ECLAIR_PLAYING) || !eclair->video.video_object) return; - emotion_object_play_set(eclair->video_object, 0); + emotion_object_play_set(eclair->video.video_object, 0); eclair_send_signal_to_all_windows(eclair, "signal_pause"); eclair->state = ECLAIR_PAUSE; } @@ -434,7 +427,7 @@ if (!eclair) return; - if (!eclair->video_object) + if (!eclair->video.video_object) { eclair->start_playing = 1; return; @@ -442,7 +435,7 @@ if (eclair->state == ECLAIR_PAUSE) { - emotion_object_play_set(eclair->video_object, 1); + emotion_object_play_set(eclair->video.video_object, 1); eclair_send_signal_to_all_windows(eclair, "signal_play"); eclair->state = ECLAIR_PLAYING; } @@ -456,17 +449,17 @@ if (!eclair) return; - if (eclair->video_object) + if (eclair->video.video_object) { - emotion_object_play_set(eclair->video_object, 0); + emotion_object_play_set(eclair->video.video_object, 0); eclair_progress_rate_set(eclair, 0.0); } eclair_all_windows_text_set(eclair, "time_elapsed", "0:00"); eclair_send_signal_to_all_windows(eclair, "signal_stop"); - if (eclair->video_window) - ecore_evas_hide(eclair->video_window); + if (eclair->video.video_window) + ecore_evas_hide(eclair->video.video_window); eclair->state = ECLAIR_STOP; } @@ -482,8 +475,8 @@ else if (audio_level > 1.0) audio_level = 1.0; - if (eclair->video_object) - emotion_object_audio_volume_set(eclair->video_object, audio_level); + if (eclair->video.video_object) + emotion_object_audio_volume_set(eclair->video.video_object, audio_level); if (eclair->gui_window) edje_object_part_drag_value_set(eclair->gui_window->edje_object, "volume_bar_drag", audio_level, 0); } @@ -491,29 +484,29 @@ //Get the media progress rate double eclair_progress_rate_get(Eclair *eclair) { - if (!eclair || !eclair->video_object) + if (!eclair || !eclair->video.video_object) return 0.0; - return (eclair_position_get(eclair) / emotion_object_play_length_get(eclair->video_object)); + return (eclair_position_get(eclair) / emotion_object_play_length_get(eclair->video.video_object)); } //Set the media progress rate void eclair_progress_rate_set(Eclair *eclair, double progress_rate) { - if (!eclair || !eclair->video_object) + if (!eclair || !eclair->video.video_object) return; - eclair_position_set(eclair, progress_rate * emotion_object_play_length_get(eclair->video_object)); + eclair_position_set(eclair, progress_rate * emotion_object_play_length_get(eclair->video.video_object)); } //Get the media position in seconds double eclair_position_get(Eclair *eclair) { - if (!eclair || !eclair->video_object) + if (!eclair || !eclair->video.video_object) return 0.0; if (eclair->seek_to_pos < 0.0) - return emotion_object_position_get(eclair->video_object); + return emotion_object_position_get(eclair->video.video_object); else return eclair->seek_to_pos; } @@ -523,17 +516,17 @@ { double media_length; - if (!eclair || !eclair->video_object) + if (!eclair || !eclair->video.video_object) return; - media_length = emotion_object_play_length_get(eclair->video_object); + media_length = emotion_object_play_length_get(eclair->video.video_object); if (position < 0.0) position = 0.0; else if (position > media_length) position = media_length; eclair->dont_update_progressbar = 1; eclair->seek_to_pos = position; - emotion_object_position_set(eclair->video_object, eclair->seek_to_pos); + emotion_object_position_set(eclair->video.video_object, eclair->seek_to_pos); } //Create the gui window and load the edje theme @@ -606,75 +599,6 @@ return 0; } -//Create the video window and object -static void _eclair_create_video_window(Eclair *eclair) -{ - Evas *evas; - - if (!eclair) - return; - - if (eclair->video_engine == ECLAIR_GL) - eclair->video_window = ecore_evas_gl_x11_new(NULL, 0, 0, 0, 0, 0); - else - eclair->video_window = ecore_evas_software_x11_new(NULL, 0, 0, 0, 0, 0); - ecore_evas_title_set(eclair->video_window, "eclair"); - ecore_evas_name_class_set(eclair->video_window, "eclair", "eclair"); - ecore_evas_data_set(eclair->video_window, "eclair", eclair); - ecore_evas_callback_resize_set(eclair->video_window, eclair_video_window_resize_cb); - ecore_evas_callback_delete_request_set(eclair->video_window, eclair_video_window_close_cb); - ecore_evas_hide(eclair->video_window); - - evas = ecore_evas_get(eclair->video_window); - eclair->black_background = evas_object_rectangle_add(evas); - evas_object_color_set(eclair->black_background, 0, 0, 0, 255); - evas_object_show(eclair->black_background); - evas_object_layer_set(eclair->black_background, 0); - - eclair->subtitles_object = evas_object_textblock_add(evas); - evas_font_path_append(evas, PACKAGE_DATA_DIR "/fonts/"); - evas_object_layer_set(eclair->subtitles_object, 2); - evas_object_show(eclair->subtitles_object); - - pthread_create(&eclair->video_create_thread, NULL, _eclair_create_video_object_thread, eclair); -} - -//Initialize the video object -static void *_eclair_create_video_object_thread(void *param) -{ - Eclair *eclair; - Evas *evas; - Evas_Object *new_video_object; - - if (!(eclair = param)) - return NULL; - - if (eclair->gui_window) - edje_object_part_text_set(eclair->gui_window->edje_object, "current_media_name", "Initializing - Please wait..."); - - evas = ecore_evas_get(eclair->video_window); - new_video_object = emotion_object_add(evas); - evas_object_show(new_video_object); - evas_object_layer_set(new_video_object, 1); - emotion_object_init(new_video_object); - - evas_object_focus_set(new_video_object, 1); - evas_object_event_callback_add(new_video_object, EVAS_CALLBACK_KEY_DOWN, eclair_key_press_cb, eclair); - evas_object_smart_callback_add(new_video_object, "frame_decode", eclair_video_frame_decode_cb, eclair); - evas_object_smart_callback_add(new_video_object, "playback_finished", eclair_video_playback_finished_cb, eclair); - evas_object_smart_callback_add(new_video_object, "audio_level_change", eclair_video_audio_level_change_cb, eclair); - evas_object_smart_callback_add(new_video_object, "frame_resize", eclair_video_frame_resize_change_cb, eclair); - - eclair_audio_level_set(eclair, emotion_object_audio_volume_get(new_video_object)); - eclair->video_object = new_video_object; - eclair_update_current_file_info(eclair, 0); - - if (eclair->start_playing) - eclair_play_current(eclair); - - return NULL; -} - //Create the playlist container and swallow it into the window //Return 0 if failed static Evas_Bool _eclair_create_playlist_container_object(Eclair *eclair, Eclair_Window *window) @@ -689,8 +613,6 @@ eclair->playlist_container = eclair_playlist_container_object_add(window->evas, eclair); eclair_playlist_container_set_entry_theme_path(eclair->playlist_container, eclair->gui_theme_file); edje_object_part_swallow(window->edje_object, "playlist_container", eclair->playlist_container); - evas_object_event_callback_add(eclair->playlist_container, EVAS_CALLBACK_MOUSE_WHEEL, eclair_playlist_container_wheel_cb, eclair); - evas_object_smart_callback_add(eclair->playlist_container, "eclair_playlist_container_scroll_percent_changed", eclair_playlist_container_scroll_percent_changed, eclair); evas_object_show(eclair->playlist_container); eclair->playlist_container_owner = window; return 1; =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_args.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- eclair_args.c 20 May 2005 13:50:32 -0000 1.6 +++ eclair_args.c 9 Jul 2005 12:27:31 -0000 1.7 @@ -41,7 +41,7 @@ eclair->video_engine = ECLAIR_SOFTWARE; else if (strcmp(optarg, "gl") == 0) eclair->gui_engine = ECLAIR_GL; - else + else { _eclair_args_print_usage(); return 0; @@ -61,6 +61,7 @@ default: _eclair_args_print_usage(); return 0; + break; } } if (optind < argc) =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_callbacks.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -3 -r1.20 -r1.21 --- eclair_callbacks.c 5 Jul 2005 21:14:22 -0000 1.20 +++ eclair_callbacks.c 9 Jul 2005 12:27:31 -0000 1.21 @@ -46,8 +46,8 @@ return; ev = event_info; - if (strcmp(ev->key, "f") == 0 && eclair->video_window) - ecore_evas_fullscreen_set(eclair->video_window, !ecore_evas_fullscreen_get(eclair->video_window)); + if (strcmp(ev->key, "f") == 0 && eclair->video.video_window) + ecore_evas_fullscreen_set(eclair->video.video_window, !ecore_evas_fullscreen_get(eclair->video.video_window)); else if (strcmp(ev->key, "space") == 0 || strcmp(ev->key, "p") == 0) { if (eclair->state == ECLAIR_PLAYING) @@ -60,7 +60,7 @@ eclair_shutdown(eclair); return; } - else if (eclair->video_object && (strcmp(ev->key, "Left") == 0 || + else if (eclair->video.video_object && (strcmp(ev->key, "Left") == 0 || strcmp(ev->key, "Right") == 0 || strcmp(ev->key, "Down") == 0 || strcmp(ev->key, "Up") == 0 || strcmp(ev->key, "Prior") == 0 || strcmp(ev->key, "Next") == 0 || strcmp(ev->key, "Home") == 0)) @@ -118,109 +118,6 @@ } } -//Called when a new frame is decoded -void eclair_video_frame_decode_cb(void *data, Evas_Object *obj, void *event_info) -{ - eclair_update(data); -} - -//Called when the current media playback is finished -void eclair_video_playback_finished_cb(void *data, Evas_Object *obj, void *event_info) -{ - eclair_play_next(data); -} - -//Called when the audio volume is changed by an external application -void eclair_video_audio_level_change_cb(void *data, Evas_Object *obj, void *event_info) -{ - Eclair *eclair; - - if (!(eclair = data) || !eclair->gui_window || !eclair->video_object) - return; - - edje_object_part_drag_value_set(eclair->gui_window->edje_object, "volume_bar_drag", emotion_object_audio_volume_get(eclair->video_object), 0); -} - -//Called when the video has to be resized -void eclair_video_frame_resize_change_cb(void *data, Evas_Object *obj, void *event_info) -{ - Eclair *eclair; - int w, h; - double ratio; - - if (!(eclair = data) || !eclair->video_window || !eclair->video_object) - return; - - emotion_object_size_get(eclair->video_object, &w, &h); - ratio = emotion_object_ratio_get(eclair->video_object); - - if (eclair->previous_video_width == w && eclair->previous_video_height == h && eclair->previous_video_ratio == ratio) - return; - - if (ratio > 0.0) - ecore_evas_resize(eclair->video_window, h * ratio, h); - else - ecore_evas_resize(eclair->video_window, w, h); - - eclair->previous_video_width = w; - eclair->previous_video_height = h; - eclair->previous_video_ratio = ratio; -} - -//Called when the video window is resized: -//Resize the video object and the black background object -void eclair_video_window_resize_cb(Ecore_Evas *window) -{ - Eclair *eclair; - Evas_Coord window_width, window_height, video_width, video_height, X, Y; - double ratio; - - if (!(eclair = ecore_evas_data_get(window, "eclair"))) - return; - - evas_output_viewport_get(ecore_evas_get(window), NULL, NULL, &window_width, &window_height); - - if (eclair->video_object) - { - ratio = emotion_object_ratio_get(eclair->video_object); - if (ratio > 0.0) - { - if (window_width / ratio > window_height) - { - video_height = window_height; - video_width = video_height * ratio; - } - else - { - video_width = window_width; - video_height = video_width / ratio; - } - - X = (window_width - video_width) / 2.0; - Y = (window_height - video_height) / 2.0; - } - else - { - video_width = window_width; - video_height = window_height; - X = Y = 0; - } - evas_object_move(eclair->video_object, X, Y); - evas_object_resize(eclair->video_object, video_width, video_height); - } - if (eclair->black_background) - { - evas_object_move(eclair->black_background, 0, 0); - evas_object_resize(eclair->black_background, window_width, window_height); - } -} - -//Called when the video window is closed -void eclair_video_window_close_cb(Ecore_Evas *window) -{ - eclair_stop(ecore_evas_data_get(window, "eclair")); -} - //Called when an object is dragged over the gui int eclair_dnd_position_cb(void *data, int type, void *event) { @@ -472,160 +369,3 @@ edje_object_part_drag_value_get(eclair->gui_window->edje_object, "volume_bar_drag", &volume, NULL); eclair_audio_level_set(eclair, volume); } - -//Called when the user clicks on an entry in the playlist -void eclair_playlist_container_entry_down_cb(void *data, Evas *evas, Evas_Object *entry, void *event_info) -{ - Eclair *eclair; - Eclair_Media_File *media_file; - Evas_Event_Mouse_Down *event; - - event = event_info; - if (!(eclair = data) || !(media_file = evas_object_data_get(entry, "media_file")) || event->button != 1) - return; - - if (event->flags == EVAS_BUTTON_NONE) - eclair_playlist_container_select_file(eclair->playlist_container, media_file, event->modifiers); - else if (event->flags == EVAS_BUTTON_DOUBLE_CLICK) - { - eclair_playlist_current_set(&eclair->playlist, media_file); - eclair_play_current(eclair); - } -} - -//Called when the user drags the scrollbar button of the playlist -void eclair_playlist_container_scrollbar_drag_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source) -{ - Eclair *eclair; - double y; - - if (!(eclair = data) || !eclair->playlist_container_owner) - return; - - edje_object_part_drag_value_get(eclair->playlist_container_owner->edje_object, "playlist_scrollbar_drag", NULL, &y); - eclair_playlist_container_scroll_percent_set(eclair->playlist_container, y); -} - -//Called when the scroll percent of the playlist container is changed -void eclair_playlist_container_scroll_percent_changed(void *data, Evas_Object *obj, void *event_info) -{ - Eclair *eclair; - - if (!(eclair = data) || !eclair->playlist_container_owner) - return; - - edje_object_part_drag_value_set(eclair->playlist_container_owner->edje_object, "playlist_scrollbar_drag", 0, eclair_playlist_container_scroll_percent_get(obj)); -} - -//Called when the user wants to scroll the playlist -void eclair_playlist_container_scroll_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source) -{ - Eclair *eclair; - - if (!(eclair = data) || !eclair->playlist_container) - return; - - if (strcmp(emission, "eclair_playlist_scroll_down_start") == 0) - eclair_playlist_container_scroll_start(eclair->playlist_container, 2.0); - else if (strcmp(emission, "eclair_playlist_scroll_up_start") == 0) - eclair_playlist_container_scroll_start(eclair->playlist_container, -2.0); - else - eclair_playlist_container_scroll_stop(eclair->playlist_container); -} - -//Called when user uses wheel mouse over playlist container -void eclair_playlist_container_wheel_cb(void *data, Evas *evas, Evas_Object *playlist_container, void *event_info) -{ - Eclair *eclair; - Evas_Event_Mouse_Wheel *event; - - if (!(eclair = data)) - return; - - event = event_info; - eclair_playlist_container_scroll(eclair->playlist_container, event->z); -} - -//Called when the window object sends the "signal_resize_start" signal -void eclair_window_resize_start_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source) -{ - Eclair_Window *window; - - if ((window = data)) - window->should_resize = 1; -} - -//Called when the window object sends the "signal_resize_stop" signal -void eclair_window_resize_stop_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source) -{ - Eclair_Window *window; - - if ((window = data)) - window->should_resize = 0; -} - -//Called when the mouse moves over the window. If should_resize == 1, the window is then resized -void eclair_window_mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info) -{ - Eclair_Window *window; - Evas_Event_Mouse_Move *event; - Evas_Coord dx, dy; - Evas_Coord w, h; - - if (!(window = data) || !window->should_resize) - return; - - event = event_info; - dx = event->cur.canvas.x - event->prev.canvas.x; - dy = event->cur.canvas.y - event->prev.canvas.y; - evas_object_geometry_get(window->edje_object, NULL, NULL, &w, &h); - w += dx; - h += dy; - eclair_window_resize(window, w, h, 1); -} - -//Called when the window is resized -void eclair_window_resize_cb(Ecore_Evas *ecore_window) -{ - Eclair_Window *window; - Evas_Coord window_width, window_height; - - if (!(window = ecore_evas_data_get(ecore_window, "eclair_window"))) - return; - - if (!window->should_resize) - { - ecore_evas_geometry_get(ecore_window, NULL, NULL, &window_width, &window_height); - eclair_window_resize(window, window_width, window_height, 0); - } -} - -//Called when the user clicks on the button to open the window -void eclair_window_open_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source) -{ - eclair_window_open(data); -} - -//Called when the user clicks on the close button of the window -void eclair_window_close_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source) -{ - eclair_window_close(data); -} - -//Called when the wm wants to close the window -void eclair_window_close_request_cb(Ecore_Evas *ecore_window) -{ - Eclair_Window *window; - - if ((window = ecore_evas_data_get(ecore_window, "eclair_window"))) - eclair_window_close(window); -} - -//Called when the user clicks on the minimize button of the window -void eclair_window_minimize_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source) -{ - Eclair_Window *window; - - if ((window = data)) - ecore_evas_iconified_set(window->ecore_window, 1); -} =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_callbacks.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- eclair_callbacks.h 5 Jul 2005 21:14:22 -0000 1.11 +++ eclair_callbacks.h 9 Jul 2005 12:27:31 -0000 1.12 @@ -12,13 +12,6 @@ int eclair_dnd_drop_cb(void *data, int type, void *event); int eclair_dnd_selection_cb(void *data, int type, void *event); -void eclair_video_window_resize_cb(Ecore_Evas *window); -void eclair_video_window_close_cb(Ecore_Evas *window); -void eclair_video_frame_decode_cb(void *data, Evas_Object *obj, void *event_info); -void eclair_video_playback_finished_cb(void *data, Evas_Object *obj, void *event_info); -void eclair_video_audio_level_change_cb(void *data, Evas_Object *obj, void *event_info); -void eclair_video_frame_resize_change_cb(void *data, Evas_Object *obj, void *event_info); - void eclair_open_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source); void eclair_play_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source); void eclair_pause_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source); @@ -38,19 +31,4 @@ void eclair_progress_bar_drag_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source); void eclair_volume_bar_drag_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source); -void eclair_playlist_container_entry_down_cb(void *data, Evas *evas, Evas_Object *entry, void *event_info); -void eclair_playlist_container_scrollbar_drag_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source); -void eclair_playlist_container_wheel_cb(void *data, Evas *evas, Evas_Object *playlist_container, void *event_info); -void eclair_playlist_container_scroll_percent_changed(void *data, Evas_Object *obj, void *event_info); -void eclair_playlist_container_scroll_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source); - -void eclair_window_resize_start_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source); -void eclair_window_resize_stop_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source); -void eclair_window_mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info); -void eclair_window_resize_cb(Ecore_Evas *ecore_window); -void eclair_window_open_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source); -void eclair_window_close_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source); -void eclair_window_close_request_cb(Ecore_Evas *ecore_window); -void eclair_window_minimize_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source); - #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_playlist_container.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- eclair_playlist_container.c 10 Jun 2005 18:30:46 -0000 1.4 +++ eclair_playlist_container.c 9 Jul 2005 12:27:31 -0000 1.5 @@ -4,8 +4,8 @@ #include <Ecore_File.h> #include <math.h> #include "eclair.h" -#include "eclair_callbacks.h" #include "eclair_media_file.h" +#include "eclair_playlist.h" static Evas_Smart *playlist_container_smart; void eclair_playlist_container_update(Evas_Object *obj); @@ -25,6 +25,9 @@ static void _eclair_playlist_container_smart_color_set(Evas_Object *obj, int r, int g, int b, int a); static void _eclair_playlist_container_smart_clip_set(Evas_Object *obj, Evas_Object *clip); static void _eclair_playlist_container_smart_clip_unset(Evas_Object *obj); +static void _eclair_playlist_container_entry_down_cb(void *data, Evas *evas, Evas_Object *entry, void *event_info); +static void _eclair_playlist_container_wheel_cb(void *data, Evas *evas, Evas_Object *playlist_container, void *event_info); +static void _eclair_playlist_container_scroll_percent_changed_cb(void *data, Evas_Object *obj, void *event_info); //Create a new playlist container object Evas_Object *eclair_playlist_container_object_add(Evas *evas, Eclair *eclair) @@ -613,6 +616,9 @@ evas_object_clip_set(playlist_container->grabber, playlist_container->clip); evas_object_smart_member_add(playlist_container->grabber, obj); + evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_WHEEL, _eclair_playlist_container_wheel_cb, NULL); + evas_object_smart_callback_add(obj, "eclair_playlist_container_scroll_percent_changed", _eclair_playlist_container_scroll_percent_changed_cb, playlist_container->eclair); + evas_object_smart_data_set(obj, playlist_container); } @@ -797,7 +803,7 @@ entry = malloc(sizeof(Eclair_Playlist_Container_Object)); entry->rect = evas_object_rectangle_add(evas); evas_object_clip_set(entry->rect, playlist_container->clip); - evas_object_event_callback_add(entry->rect, EVAS_CALLBACK_MOUSE_DOWN, eclair_playlist_container_entry_down_cb, playlist_container->eclair); + evas_object_event_callback_add(entry->rect, EVAS_CALLBACK_MOUSE_DOWN, _eclair_playlist_container_entry_down_cb, playlist_container->eclair); evas_object_repeat_events_set(entry->rect, 1); evas_object_smart_member_add(entry->rect, obj); evas_object_stack_above(entry->rect, obj); @@ -806,7 +812,7 @@ edje_object_file_set(entry->text, playlist_container->entry_theme_path, "eclair_playlist_entry"); evas_object_clip_set(entry->text, playlist_container->clip); evas_object_repeat_events_set(entry->text, 1); - evas_object_event_callback_add(entry->text, EVAS_CALLBACK_MOUSE_DOWN, eclair_playlist_container_entry_down_cb, playlist_container->eclair); + evas_object_event_callback_add(entry->text, EVAS_CALLBACK_MOUSE_DOWN, _eclair_playlist_container_entry_down_cb, playlist_container->eclair); evas_object_smart_member_add(entry->text, obj); evas_object_stack_above(entry->text, entry->rect); playlist_container->entry_objects = evas_list_append(playlist_container->entry_objects, entry); @@ -880,3 +886,74 @@ evas_object_clip_unset(playlist_container->clip); } + +//------------------------------ +// Callbacks +//------------------------------ + +//Called when the user drags the scrollbar button of the playlist +void eclair_playlist_container_scrollbar_drag_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source) +{ + Eclair *eclair; + double y; + + if (!(eclair = data) || !eclair->playlist_container_owner) + return; + + edje_object_part_drag_value_get(eclair->playlist_container_owner->edje_object, "playlist_scrollbar_drag", NULL, &y); + eclair_playlist_container_scroll_percent_set(eclair->playlist_container, y); +} + +//Called when the user wants to scroll the playlist +void eclair_playlist_container_scroll_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source) +{ + Eclair *eclair; + + if (!(eclair = data) || !eclair->playlist_container) + return; + + if (strcmp(emission, "eclair_playlist_scroll_down_start") == 0) + eclair_playlist_container_scroll_start(eclair->playlist_container, 2.0); + else if (strcmp(emission, "eclair_playlist_scroll_up_start") == 0) + eclair_playlist_container_scroll_start(eclair->playlist_container, -2.0); + else + eclair_playlist_container_scroll_stop(eclair->playlist_container); +} + +//Called when the user clicks on an entry in the playlist +static void _eclair_playlist_container_entry_down_cb(void *data, Evas *evas, Evas_Object *entry, void *event_info) +{ + Eclair *eclair; + Eclair_Media_File *media_file; + Evas_Event_Mouse_Down *event; + + event = event_info; + if (!(eclair = data) || !(media_file = evas_object_data_get(entry, "media_file")) || event->button != 1) + return; + + if (event->flags == EVAS_BUTTON_NONE) + eclair_playlist_container_select_file(eclair->playlist_container, media_file, event->modifiers); + else if (event->flags == EVAS_BUTTON_DOUBLE_CLICK) + { + eclair_playlist_current_set(&eclair->playlist, media_file); + eclair_play_current(eclair); + } +} + +//Called when the scroll percent of the playlist container is changed +static void _eclair_playlist_container_scroll_percent_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + Eclair *eclair; + + if ((eclair = data) && eclair->playlist_container_owner) + edje_object_part_drag_value_set(eclair->playlist_container_owner->edje_object, "playlist_scrollbar_drag", 0, eclair_playlist_container_scroll_percent_get(obj)); +} + +//Called when user uses wheel mouse over playlist container +static void _eclair_playlist_container_wheel_cb(void *data, Evas *evas, Evas_Object *playlist_container, void *event_info) +{ + Evas_Event_Mouse_Wheel *event; + + event = event_info; + eclair_playlist_container_scroll(playlist_container, event->z); +} =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_playlist_container.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- eclair_playlist_container.h 27 May 2005 20:28:22 -0000 1.3 +++ eclair_playlist_container.h 9 Jul 2005 12:27:32 -0000 1.4 @@ -25,4 +25,7 @@ void eclair_playlist_container_select_none(Evas_Object *obj); void eclair_playlist_container_invert_selection(Evas_Object *obj); +void eclair_playlist_container_scrollbar_drag_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source); +void eclair_playlist_container_scroll_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source); + #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_private.h,v retrieving revision 1.22 retrieving revision 1.23 diff -u -3 -r1.22 -r1.23 --- eclair_private.h 3 Jul 2005 15:51:06 -0000 1.22 +++ eclair_private.h 9 Jul 2005 12:27:32 -0000 1.23 @@ -31,6 +31,7 @@ typedef struct _Eclair_Playlist_Container_Object Eclair_Playlist_Container_Object; typedef struct _Eclair_Color Eclair_Color; typedef struct _Eclair_Window Eclair_Window; +typedef struct _Eclair_Video Eclair_Video; typedef struct _Eclair_Database Eclair_Database; struct _Eclair_Database @@ -255,22 +256,28 @@ unsigned char should_resize : 1; unsigned char borderless : 1; - unsigned char shaded : 1; + unsigned char shaped : 1; unsigned char resizable : 1; unsigned char main_window : 1; }; -struct _Eclair +struct _Eclair_Video { - //Video related vars Ecore_Evas *video_window; Evas_Object *video_object; Evas_Object *black_background; Evas_Object *subtitles_object; - Eclair_Engine video_engine; pthread_t video_create_thread; int previous_video_width, previous_video_height; double previous_video_ratio; + Eclair *eclair; +}; + +struct _Eclair +{ + //Video related vars + Eclair_Video video; + Eclair_Engine video_engine; //Gui related vars Eclair_Window *gui_window; =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_window.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- eclair_window.c 7 Jul 2005 03:49:09 -0000 1.5 +++ eclair_window.c 9 Jul 2005 12:27:32 -0000 1.6 @@ -3,8 +3,15 @@ #include <Esmart/Esmart_Draggies.h> #include "eclair.h" #include "eclair_callbacks.h" +#include "eclair_playlist_container.h" #include "eclair_config.h" +static void _eclair_window_resize_start_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source); +static void _eclair_window_resize_stop_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source); +static void _eclair_window_mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info); +static void _eclair_window_resize_cb(Ecore_Evas *ecore_window); +static void _eclair_window_close_request_cb(Ecore_Evas *ecore_window); + //Create a new window from the group "eclair_"window_name"_body" of the file "edje_file" with the engine "engine" and the title "title" //"window_name" is also used to find some props of the window in the edje file ("data" section) //Return NULL if failed. A created window has to be deleted by eclair_window_del() @@ -21,7 +28,7 @@ new_window->eclair = eclair; new_window->should_resize = 0; new_window->borderless = 1; - new_window->shaded = 1; + new_window->shaped = 1; new_window->resizable = 1; new_window->main_window = main_window; new_window->window_name = strdup(window_name); @@ -60,6 +67,7 @@ free(edje_group); evas_object_move(new_window->edje_object, 0, 0); evas_object_show(new_window->edje_object); + //Read window props if (new_window->window_name) { @@ -72,11 +80,11 @@ } free(prop_name); - prop_name = malloc(strlen(new_window->window_name) + strlen("_shaded") + 1); - sprintf(prop_name, "%s_shaded", new_window->window_name); + prop_name = malloc(strlen(new_window->window_name) + strlen("_shaped") + 1); + sprintf(prop_name, "%s_shaped", new_window->window_name); if ((prop_value = edje_file_data_get(edje_file, prop_name)) && strcmp(prop_value, "0") == 0) { - new_window->shaded = 0; + new_window->shaped = 0; free(prop_value); } free(prop_name); @@ -91,7 +99,7 @@ free(prop_name); } ecore_evas_borderless_set(new_window->ecore_window, new_window->borderless); - ecore_evas_shaped_set(new_window->ecore_window, new_window->shaded); + ecore_evas_shaped_set(new_window->ecore_window, new_window->shaped); new_window->draggies = esmart_draggies_new(new_window->ecore_window); esmart_draggies_button_set(new_window->draggies, 1); @@ -167,7 +175,7 @@ evas_object_focus_set(window->edje_object, 1); evas_object_event_callback_add(window->edje_object, EVAS_CALLBACK_KEY_DOWN, eclair_key_press_cb, eclair); - ecore_evas_callback_delete_request_set(window->ecore_window, eclair_window_close_request_cb); + ecore_evas_callback_delete_request_set(window->ecore_window, _eclair_window_close_request_cb); edje_object_signal_callback_add(window->edje_object, "eclair_open", "*", eclair_open_cb, &eclair->dialogs_manager); edje_object_signal_callback_add(window->edje_object, "eclair_add_file", "*", eclair_open_cb, &eclair->dialogs_manager); edje_object_signal_callback_add(window->edje_object, "eclair_play", "*", eclair_play_cb, eclair); @@ -208,17 +216,17 @@ { signal_name = malloc(strlen("eclair_") + strlen(window->window_name) + strlen("_resize_start") + 1); sprintf(signal_name, "eclair_%s_resize_start", window->window_name); - edje_object_signal_callback_add(window->edje_object, signal_name, "", eclair_window_resize_start_cb, window); + edje_object_signal_callback_add(window->edje_object, signal_name, "", _eclair_window_resize_start_cb, window); free(signal_name); signal_name = malloc(strlen("eclair_") + strlen(window->window_name) + strlen("_resize_stop") + 1); sprintf(signal_name, "eclair_%s_resize_stop", window->window_name); - edje_object_signal_callback_add(window->edje_object, signal_name, "", eclair_window_resize_stop_cb, window); + edje_object_signal_callback_add(window->edje_object, signal_name, "", _eclair_window_resize_stop_cb, window); free(signal_name); - evas_object_event_callback_add(window->edje_object, EVAS_CALLBACK_MOUSE_MOVE, eclair_window_mouse_move_cb, window); + evas_object_event_callback_add(window->edje_object, EVAS_CALLBACK_MOUSE_MOVE, _eclair_window_mouse_move_cb, window); } } ecore_evas_data_set(window->ecore_window, "eclair_window", window); - ecore_evas_callback_resize_set(window->ecore_window, eclair_window_resize_cb); + ecore_evas_callback_resize_set(window->ecore_window, _eclair_window_resize_cb); edje_object_message_handler_set(window->edje_object, eclair_message_cb, eclair); } @@ -280,3 +288,96 @@ free(signal_name); } } + + +//------------------------------ +// Callbacks +//------------------------------ + +//Called when the user clicks on the button to open the window +void eclair_window_open_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source) +{ + eclair_window_open(data); +} + +//Called when the user clicks on the close button of the window +void eclair_window_close_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source) +{ + eclair_window_close(data); +} + +//Called when the user clicks on the minimize button of the window +void eclair_window_minimize_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source) +{ + Eclair_Window *window; + + if ((window = data)) + { + //TODO: ecore bug?? ecore doesn't seem to notice that the window has been de-iconified + ecore_evas_iconified_set(window->ecore_window, 0); + ecore_evas_iconified_set(window->ecore_window, 1); + } +} + +//Called when the window object sends the "signal_resize_start" signal +static void _eclair_window_resize_start_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source) +{ + Eclair_Window *window; + + if ((window = data)) + window->should_resize = 1; +} + +//Called when the window object sends the "signal_resize_stop" signal +static void _eclair_window_resize_stop_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source) +{ + Eclair_Window *window; + + if ((window = data)) + window->should_resize = 0; +} + +//Called when the mouse moves over the window. If should_resize == 1, the window is then resized +static void _eclair_window_mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info) +{ + Eclair_Window *window; + Evas_Event_Mouse_Move *event; + Evas_Coord dx, dy; + Evas_Coord w, h; + + if (!(window = data) || !window->should_resize) + return; + + event = event_info; + dx = event->cur.canvas.x - event->prev.canvas.x; + dy = event->cur.canvas.y - event->prev.canvas.y; + evas_object_geometry_get(window->edje_object, NULL, NULL, &w, &h); + w += dx; + h += dy; + eclair_window_resize(window, w, h, 1); +} + +//Called when the window is resized +static void _eclair_window_resize_cb(Ecore_Evas *ecore_window) +{ + Eclair_Window *window; + Evas_Coord window_width, window_height; + + if (!(window = ecore_evas_data_get(ecore_window, "eclair_window"))) + return; + + if (!window->should_resize) + { + ecore_evas_geometry_get(ecore_window, NULL, NULL, &window_width, &window_height); + eclair_window_resize(window, window_width, window_height, 0); + } +} + +//Called when the wm wants to close the window +static void _eclair_window_close_request_cb(Ecore_Evas *ecore_window) +{ + Eclair_Window *window; + + if ((window = ecore_evas_data_get(ecore_window, "eclair_window"))) + eclair_window_close(window); +} =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_window.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- eclair_window.h 10 Jun 2005 18:30:46 -0000 1.1 +++ eclair_window.h 9 Jul 2005 12:27:32 -0000 1.2 @@ -9,5 +9,8 @@ void eclair_window_resize(Eclair_Window *window, Evas_Coord w, Evas_Coord h, Evas_Bool force); void eclair_window_open(Eclair_Window *window); void eclair_window_close(Eclair_Window *window); +void eclair_window_minimize_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source); +void eclair_window_open_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source); +void eclair_window_close_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source); #endif ------------------------------------------------------- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs