X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fskins%2Fsrc%2Fskin_main.cpp;h=1c9868357032a84cc06776d398d6d3bd5438336e;hb=c6edf8d8127367e2a4be94bb6214edf519361216;hp=c18235c8f6d6660a6a958418109e35fa3f69d01a;hpb=f0ca77dd0ea1c3d01e4c3065998193c66915f75d;p=vlc diff --git a/modules/gui/skins/src/skin_main.cpp b/modules/gui/skins/src/skin_main.cpp index c18235c8f6..1c98683570 100644 --- a/modules/gui/skins/src/skin_main.cpp +++ b/modules/gui/skins/src/skin_main.cpp @@ -2,7 +2,7 @@ * skin-main.cpp: skins plugin for VLC ***************************************************************************** * Copyright (C) 2003 VideoLAN - * $Id: skin_main.cpp,v 1.41 2003/06/22 17:52:12 gbazin Exp $ + * $Id$ * * Authors: Olivier Teulière * Emmanuel Puig @@ -28,17 +28,6 @@ #include #include -//--- GENERAL --------------------------------------------------------------- -#if !defined(MODULE_NAME_IS_basic_skins) -#ifdef WIN32 /* mingw32 hack */ -# undef Yield -# undef CreateDialog -#endif -/* Let vlc take care of the i18n stuff */ -#define WXINTL_NO_GETTEXT_MACRO -#include -#endif - //--- SKIN ------------------------------------------------------------------ #include "../os_api.h" #include "event.h" @@ -51,10 +40,6 @@ #include "skin_common.h" #include "dialogs.h" -#if !defined(MODULE_NAME_IS_basic_skins) -#include "../../wxwindows/wxwindows.h" -#endif - #ifdef X11_SKINS #include #include @@ -67,14 +52,6 @@ //--------------------------------------------------------------------------- intf_thread_t *g_pIntf; -//--------------------------------------------------------------------------- -// Exported interface functions. -//--------------------------------------------------------------------------- -#ifdef WIN32 -extern "C" __declspec( dllexport ) - int __VLC_SYMBOL( vlc_entry ) ( module_t *p_module ); -#endif - //--------------------------------------------------------------------------- // Local prototypes. //--------------------------------------------------------------------------- @@ -93,6 +70,12 @@ static int Open ( vlc_object_t *p_this ) intf_thread_t *p_intf = (intf_thread_t *)p_this; g_pIntf = p_intf; +#if defined X11_SKINS + // Open/Test for an X11 display + Display *display = XOpenDisplay( NULL ); + if( !display ) return VLC_EGENERIC; +#endif + // Allocate instance and initialize some members p_intf->p_sys = (intf_sys_t *) malloc( sizeof( intf_sys_t ) ); if( p_intf->p_sys == NULL ) @@ -103,7 +86,6 @@ static int Open ( vlc_object_t *p_this ) p_intf->pf_run = Run; - // Suscribe to messages bank p_intf->p_sys->p_sub = msg_Subscribe( p_intf ); @@ -114,28 +96,21 @@ static int Open ( vlc_object_t *p_this ) p_intf->p_sys->i_index = -1; p_intf->p_sys->i_size = 0; + p_intf->p_sys->b_on_top = false; + p_intf->p_sys->i_close_status = VLC_NOTHING; p_intf->p_sys->p_input = NULL; p_intf->p_sys->p_playlist = (playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); -#ifdef GTK2_SKINS - // Initialize GDK - int i_args = 3; - char *p_args[] = { "", "", "--sync", NULL }; - char **pp_args = p_args; - - gdk_init( &i_args, &pp_args ); - -#elif defined X11_SKINS +#if defined X11_SKINS // Initialize X11 - Display *display = XOpenDisplay( NULL ); p_intf->p_sys->display = display; vlc_mutex_init( p_intf, &p_intf->p_sys->xlock ); // Fake window to receive broadcast events Window root = DefaultRootWindow( display ); - p_intf->p_sys->mainWin = XCreateSimpleWindow( display, root, 0, 0, + p_intf->p_sys->mainWin = XCreateSimpleWindow( display, root, 0, 0, 1, 1, 0, 0, 0 ); XStoreName( display, p_intf->p_sys->mainWin, "VLC Media Player" ); @@ -228,7 +203,10 @@ static void Close ( vlc_object_t *p_this ) #if defined X11_SKINS XDestroyWindow( p_intf->p_sys->display, p_intf->p_sys->mainWin ); - XCloseDisplay( p_intf->p_sys->display ); + + // There is a bug in imlib2 which prevents us from closing the display + // (__imlib_RenderImage() can free old GC with already closed display) + //XCloseDisplay( p_intf->p_sys->display ); #endif // Unsuscribe to messages bank @@ -257,12 +235,9 @@ static void Run( intf_thread_t *p_intf ) int a = OSAPI_GetTime(); -#if !defined(MODULE_NAME_IS_basic_skins) // Initialize the dialog boxes p_intf->p_sys->p_dialogs = new Dialogs( p_intf ); - if( !p_intf->p_sys->p_dialogs || - !p_intf->p_sys->p_dialogs->OpenDlg ) return; -#endif + if( !p_intf->p_sys->p_dialogs ) return; // Load a theme char *skin_last = config_GetPsz( p_intf, "skin_last" ); @@ -294,32 +269,16 @@ static void Run( intf_thread_t *p_intf ) if( !Loader->Load( user_skin ) && !Loader->Load( default_skin ) ) { #endif -#if !defined(MODULE_NAME_IS_basic_skins) - wxMutexGuiEnter(); - wxFileDialog dialog( NULL, - wxU(_("Open a skin file")), wxT(""), wxT(""), - wxT("Skin files (*.vlt)|*.vlt|Skin files (*.xml)|*.xml|" - "All files|*.*"), wxOPEN ); - - if( dialog.ShowModal() == wxID_OK ) - { - // try to load selected file - if( ! Loader->Load( (string)dialog.GetPath().mb_str() ) ) - { - // He, he, what the hell is he doing ? - delete Loader; - wxMutexGuiLeave(); - return; - } - wxMutexGuiLeave(); - } - else -#endif + p_intf->p_sys->p_dialogs->ShowOpenSkin( 1 /* block */ ); + + // try to load selected file + if( !p_intf->p_sys->p_new_theme_file || + !Loader->Load( (string)p_intf->p_sys->p_new_theme_file ) ) { + // He, he, what the hell is he doing ? delete Loader; -#if !defined(MODULE_NAME_IS_basic_skins) - wxMutexGuiLeave(); -#endif + delete p_intf->p_sys->p_dialogs; + if( skin_last ) free( skin_last ); return; } } @@ -329,19 +288,17 @@ static void Run( intf_thread_t *p_intf ) p_intf->p_sys->p_theme->InitTheme(); p_intf->p_sys->p_theme->ShowTheme(); + if( skin_last ) free( skin_last ); delete Loader; msg_Dbg( p_intf, "Load theme time : %i ms", OSAPI_GetTime() - a ); - // Refresh the whole interface OSAPI_PostMessage( NULL, VLC_INTF_REFRESH, 0, (int)true ); OSRun( p_intf ); -#if !defined(MODULE_NAME_IS_basic_skins) // clean up the dialog boxes delete p_intf->p_sys->p_dialogs; -#endif } //--------------------------------------------------------------------------- @@ -365,9 +322,10 @@ vlc_module_begin(); VLC_FALSE ); add_bool( "show_in_taskbar", VLC_TRUE, NULL, SKIN_TASKBAR, SKIN_TASKBAR_LONG, VLC_FALSE ); - set_description( _("Skinnable Interface") ); + set_description( _("Skinnable interface") ); set_capability( "interface", 30 ); set_callbacks( Open, Close ); + set_program( "svlc" ); vlc_module_end(); @@ -390,16 +348,6 @@ int SkinManage( intf_thread_t *p_intf ) p_intf->p_sys->p_input = NULL; } - OSAPI_PostMessage( NULL, VLC_INTF_REFRESH, 0, (long)false ); - -#if !defined(MODULE_NAME_IS_basic_skins) //FIXME - // Update the log window - p_intf->p_sys->p_dialogs->MessagesDlg->UpdateLog(); - - // Update the file info window - p_intf->p_sys->p_dialogs->FileInfoDlg->UpdateFileInfo(); -#endif - //------------------------------------------------------------------------- if( p_intf->p_sys->p_input != NULL && !p_intf->p_sys->p_input->b_die ) { @@ -417,41 +365,44 @@ int SkinManage( intf_thread_t *p_intf ) OSAPI_PostMessage( NULL, CTRL_SET_SLIDER, (unsigned int) p_intf->p_sys->p_theme->EvtBank->Get( "volume_refresh" ), - (long)( volume * SLIDER_RANGE / AOUT_VOLUME_MAX ) ); - + (long)( volume * SLIDER_RANGE / (AOUT_VOLUME_DEFAULT * 2) ) ); // Refresh slider // if( p_input->stream.b_seekable && p_intf->p_sys->b_playing ) - if( p_input->stream.b_seekable ) - { #define p_area p_input->stream.p_selected_area + if( p_input->stream.b_seekable && p_area->i_size ) + { // Set value of sliders - long Value = SLIDER_RANGE * - p_input->stream.p_selected_area->i_tell / - p_input->stream.p_selected_area->i_size; + long Value = SLIDER_RANGE * p_area->i_tell / p_area->i_size; // Update sliders OSAPI_PostMessage( NULL, CTRL_SET_SLIDER, (unsigned int) p_intf->p_sys->p_theme->EvtBank->Get( "time" ), (long)Value ); // Text char * for updating text controls - char *text = new char[OFFSETTOTIME_MAX_SIZE]; + char *text = new char[MSTRTIME_MAX_SIZE]; + + int64_t i_seconds, i_length; + + i_seconds = var_GetTime( p_intf->p_sys->p_input, "time" ) / I64C(1000000 ); + i_length = var_GetTime( p_intf->p_sys->p_input, "length" ) / I64C(1000000 ); + + secstotimestr( psz_time, i_seconds ); // Create end time text - input_OffsetToTime( p_intf->p_sys->p_input, &text[1], - p_area->i_size - p_area->i_tell ); + secstotimestr( &text[1], i_length - i_seconds ); text[0] = '-'; p_intf->p_sys->p_theme->EvtBank->Get( "left_time" ) ->PostTextMessage( text ); // Create time text and update - input_OffsetToTime( p_intf->p_sys->p_input, text, p_area->i_tell ); + secstotimestr( text, i_seconds ); p_intf->p_sys->p_theme->EvtBank->Get( "time" ) ->PostTextMessage( text ); // Create total time text - input_OffsetToTime( p_intf->p_sys->p_input, text, p_area->i_size ); + secstotimestr( text, i_length ); p_intf->p_sys->p_theme->EvtBank->Get( "total_time" ) ->PostTextMessage( text );