📄 opts.c
字号:
#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <string.h>#include <gdk/gdkkeysyms.h>#include <gtk/gtk.h>#include "../../config.h"#include "../../help_mp.h"#include "../../mixer.h"#include "../../libao2/audio_out.h"#include "../../libvo/video_out.h"#include "../app.h"#include "../cfg.h"#include "../interface.h"#include "../widgets.h"#include "opts.h"#include "fs.h"#include "common.h"typedef struct sh_video_t sh_video_t;typedef struct sh_audio_t sh_audio_t;// for mpcodecs_[av]d_drivers:#include "../../libmpcodecs/vd.h"#include "../../libmpcodecs/ad.h" GtkWidget * Preferences = NULL;static GtkWidget * AConfig;static GtkWidget * VConfig;//static GtkWidget * BLoadSubtitle;static GtkWidget * BLoadFont;static GtkWidget * BOk;static GtkWidget * BCancel;static GtkWidget * CLADrivers;static GtkWidget * CLVDrivers;//static GtkWidget * ESubtitleName; GtkWidget * prEFontName; GtkWidget * prEDVDDevice; GtkWidget * prECDRomDevice;static GtkWidget * EVFM;static GtkWidget * EAFM;static GtkWidget * CBVFM;static GtkWidget * CBAFM;static GtkWidget * CBAudioEqualizer;//static GtkWidget * CBSurround;static GtkWidget * CBExtraStereo;static GtkWidget * CBNormalize;static GtkWidget * CBSoftwareMixer;static GtkWidget * CBDoubleBuffer;static GtkWidget * CBDR;static GtkWidget * CBFramedrop;static GtkWidget * CBHFramedrop;//static GtkWidget * CBFullScreen;static GtkWidget * CBShowVideoWindow;static GtkWidget * CBNonInterlaved;static GtkWidget * CBIndex;static GtkWidget * CBFlip;static GtkWidget * CBNoAutoSub;static GtkWidget * CBSubUnicode;static GtkWidget * CBSubOverlap;static GtkWidget * CBDumpMPSub;static GtkWidget * CBDumpSrt;static GtkWidget * CBPostprocess;static GtkWidget * CBCache;static GtkWidget * CBLoadFullscreen;static GtkWidget * CBSaveWinPos;static GtkWidget * CBStopXScreenSaver;static GtkWidget * CBPlayBar;static GtkWidget * SBCache;static GtkAdjustment * SBCacheadj;static GtkWidget * CBAutoSync;static GtkWidget * SBAutoSync;static GtkAdjustment * SBAutoSyncadj;static GtkWidget * RBOSDNone;static GtkWidget * RBOSDTandP;static GtkWidget * RBOSDIndicator;static GtkWidget * RBOSDTPTT;static GtkWidget * HSAudioDelay;static GtkWidget * HSExtraStereoMul;static GtkWidget * HSPanscan;static GtkWidget * HSSubDelay;static GtkWidget * HSSubPosition;static GtkWidget * HSSubFPS;static GtkWidget * HSPPQuality;static GtkWidget * HSFPS;static GtkAdjustment * HSExtraStereoMuladj, * HSAudioDelayadj, * HSPanscanadj, * HSSubDelayadj;static GtkAdjustment * HSSubPositionadj, * HSSubFPSadj, * HSPPQualityadj, * HSFPSadj;#ifndef HAVE_FREETYPEstatic GtkWidget * HSFontFactor;static GtkAdjustment * HSFontFactoradj;#elsestatic GtkWidget * HSFontBlur, * HSFontOutLine, * HSFontTextScale, * HSFontOSDScale;static GtkAdjustment * HSFontBluradj, * HSFontOutLineadj, * HSFontTextScaleadj, * HSFontOSDScaleadj;static GtkWidget * CBFontEncoding, * EFontEncoding;static GtkWidget * RBFontNoAutoScale, * RBFontAutoScaleWidth, * RBFontAutoScaleHeight, * RBFontAutoScaleDiagonal;//static GtkWidget * AutoScale;#endif#ifdef USE_ICONVstatic GtkWidget * CBSubEncoding, * ESubEncoding;#endif#if defined( HAVE_FREETYPE ) || defined( USE_ICONV )static struct { char * name; char * comment;} lEncoding[] = { { "unicode", MSGTR_PREFERENCES_FontEncoding1 }, { "iso-8859-1", MSGTR_PREFERENCES_FontEncoding2 }, { "iso-8859-15", MSGTR_PREFERENCES_FontEncoding3 }, { "iso-8859-2", MSGTR_PREFERENCES_FontEncoding4 }, { "cp1250", MSGTR_PREFERENCES_FontEncoding22}, { "iso-8859-3", MSGTR_PREFERENCES_FontEncoding5 }, { "iso-8859-4", MSGTR_PREFERENCES_FontEncoding6 }, { "iso-8859-5", MSGTR_PREFERENCES_FontEncoding7 }, { "cp1251", MSGTR_PREFERENCES_FontEncoding21}, { "iso-8859-6", MSGTR_PREFERENCES_FontEncoding8 }, { "iso-8859-7", MSGTR_PREFERENCES_FontEncoding9 }, { "iso-8859-9", MSGTR_PREFERENCES_FontEncoding10 }, { "iso-8859-13", MSGTR_PREFERENCES_FontEncoding11 }, { "iso-8859-14", MSGTR_PREFERENCES_FontEncoding12 }, { "iso-8859-8", MSGTR_PREFERENCES_FontEncoding13 }, { "koi8-r", MSGTR_PREFERENCES_FontEncoding14 }, { "koi8-u/ru", MSGTR_PREFERENCES_FontEncoding15 }, { "cp936", MSGTR_PREFERENCES_FontEncoding16 }, { "big5", MSGTR_PREFERENCES_FontEncoding17 }, { "shift-jis", MSGTR_PREFERENCES_FontEncoding18 }, { "cp949", MSGTR_PREFERENCES_FontEncoding19 }, { "cp874", MSGTR_PREFERENCES_FontEncoding20 }, { NULL,NULL } };char * lCEncoding = NULL;char * lSEncoding = NULL;#endif static int old_audio_driver = 0;static char * ao_driver[3];static char * vo_driver[3];static int old_video_driver = 0;#ifdef HAVE_DXR3 void ShowDXR3Config( void ); void HideDXR3Config( void );#endif void ShowAudioConfig(); void HideAudioConfig();static gboolean prHScaler( GtkWidget * widget,GdkEventMotion * event,gpointer user_data );static void prToggled( GtkToggleButton * togglebutton,gpointer user_data );static void prCListRow( GtkCList * clist,gint row,gint column,GdkEvent * event,gpointer user_data );#if defined( HAVE_FREETYPE ) || defined( USE_ICONV )static void prEntry( GtkContainer * container,gpointer user_data );#endifextern int stop_xscreensaver;void ShowPreferences( void ){ if ( Preferences ) gtkActive( Preferences ); else Preferences=create_Preferences();// -- 1. page gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBAudioEqualizer ),gtkEnableAudioEqualizer );#if 0 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBSurround ),gtkAOSurround );#endif gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBExtraStereo ),gtkAOExtraStereo ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBNormalize ),gtkAONorm ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBSoftwareMixer ),soft_vol ); gtk_adjustment_set_value( HSExtraStereoMuladj,gtkAOExtraStereoMul ); { int i = 0; char * tmp[3]; tmp[2]=""; old_audio_driver=-1; if ( CLADrivers ) gtk_clist_clear( GTK_CLIST( CLADrivers ) ); while ( audio_out_drivers[i] ) { const ao_info_t *info = audio_out_drivers[i++]->info; if ( !strcmp( info->short_name,"plugin" ) ) continue; if ( audio_driver_list ) { char * name = gstrdup( audio_driver_list[0] ); char * sep = gstrchr( audio_driver_list[0],':' ); if ( sep ) *sep=0; if ( !gstrcmp( name,(char *)info->short_name ) ) old_audio_driver=i - 1; free( name ); } tmp[0]=(char *)info->short_name; tmp[1]=(char *)info->name; gtk_clist_append( GTK_CLIST( CLADrivers ),tmp ); } if ( old_audio_driver > -1 ) { gtk_clist_select_row( GTK_CLIST( CLADrivers ),old_audio_driver,0 ); gtk_clist_get_text( GTK_CLIST( CLADrivers ),old_audio_driver,0,(char **)&ao_driver ); gtk_widget_set_sensitive( AConfig,FALSE ); if ( !strncmp( ao_driver[0],"oss",3 ) || !strncmp( ao_driver[0],"alsa",4 ) || !strncmp( ao_driver[0],"esd",3 ) || !strncmp( ao_driver[0],"sdl",3 ) ) gtk_widget_set_sensitive( AConfig,TRUE ); } }// -- 2. page gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBDoubleBuffer ),vo_doublebuffering ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBDR ),vo_directrendering ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBFramedrop ),FALSE ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBHFramedrop ),FALSE ); switch ( frame_dropping ) { case 2: gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBHFramedrop ),TRUE ); case 1: gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBFramedrop ),TRUE ); } if (flip != -1) gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBFlip ),flip ); gtk_adjustment_set_value( HSPanscanadj,vo_panscan ); { int i = 0, c = 0; char * tmp[3]; tmp[2]=""; old_video_driver=0; if ( CLVDrivers ) gtk_clist_clear( GTK_CLIST( CLVDrivers ) ); while ( video_out_drivers[i] ) if ( video_out_drivers[i++]->control( VOCTRL_GUISUPPORT,NULL ) == VO_TRUE ) { if ( video_driver_list && !gstrcmp( video_driver_list[0],(char *)video_out_drivers[i - 1]->info->short_name ) ) old_video_driver=c; c++; tmp[0]=(char *)video_out_drivers[i - 1]->info->short_name; tmp[1]=(char *)video_out_drivers[i - 1]->info->name; gtk_clist_append( GTK_CLIST( CLVDrivers ),tmp ); } gtk_clist_select_row( GTK_CLIST( CLVDrivers ),old_video_driver,0 ); gtk_clist_get_text( GTK_CLIST( CLVDrivers ),old_video_driver,0,(char **)&vo_driver ); gtk_widget_set_sensitive( VConfig,FALSE );#ifdef HAVE_DXR3 if ( !gstrcmp( vo_driver[0],"dxr3" ) ) gtk_widget_set_sensitive( VConfig,TRUE );#endif } gtk_adjustment_set_value( HSFPSadj,force_fps );// -- 3. page gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBSubOverlap ),suboverlap_enabled ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBNoAutoSub ),!sub_auto ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBDumpMPSub ),gtkSubDumpMPSub ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBDumpSrt ),gtkSubDumpSrt ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBSubUnicode ),sub_unicode ); gtk_adjustment_set_value( HSSubDelayadj,sub_delay ); gtk_adjustment_set_value( HSSubFPSadj,sub_fps ); gtk_adjustment_set_value( HSSubPositionadj,sub_pos ); switch ( osd_level ) { case 0: gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( RBOSDNone ),TRUE ); break; case 1: gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( RBOSDIndicator ),TRUE ); break; case 2: gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( RBOSDTandP ),TRUE ); break; case 3: gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( RBOSDTPTT ),TRUE ); break; }#if 0 if ( guiIntfStruct.Subtitlename ) gtk_entry_set_text( GTK_ENTRY( ESubtitleName ),guiIntfStruct.Subtitlename );#endif#ifdef USE_ICONV if ( sub_cp ) { int i; for ( i=0;lEncoding[i].name;i++ ) if ( !gstrcmp( sub_cp,lEncoding[i].name ) ) break; if ( lEncoding[i].name ) lSEncoding=lEncoding[i].comment; gtk_entry_set_text( GTK_ENTRY( ESubEncoding ),lSEncoding ); }#endif// --- 4. page // font ... if ( font_name ) gtk_entry_set_text( GTK_ENTRY( prEFontName ),font_name );#ifndef HAVE_FREETYPE gtk_adjustment_set_value( HSFontFactoradj,font_factor );#else gtk_adjustment_set_value( HSFontBluradj,( subtitle_font_radius / 8.0f ) * 100.0f ); gtk_adjustment_set_value( HSFontOutLineadj,( subtitle_font_thickness / 8.0f ) * 100.0f ); gtk_adjustment_set_value( HSFontTextScaleadj,text_font_scale_factor ); gtk_adjustment_set_value( HSFontOSDScaleadj,osd_font_scale_factor ); if ( subtitle_font_encoding ) { int i; for ( i=0;lEncoding[i].name;i++ ) if ( !gstrcmp( subtitle_font_encoding,lEncoding[i].name ) ) break; if ( lEncoding[i].name ) lCEncoding=lEncoding[i].comment; gtk_entry_set_text( GTK_ENTRY( EFontEncoding ),lCEncoding ); } switch ( subtitle_autoscale ) { case 0: gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( RBFontNoAutoScale ),TRUE ); break; case 1: gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( RBFontAutoScaleHeight ),TRUE ); break; case 2: gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( RBFontAutoScaleWidth ),TRUE ); break; case 3: gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( RBFontAutoScaleDiagonal ),TRUE ); break; }#endif// -- 5. page gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBNonInterlaved ),force_ni ); if ( index_mode == 1 ) gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBIndex ),1 ); { int i; GList * Items = NULL; char * name = NULL; Items=g_list_append( Items,MSGTR_PREFERENCES_None ); for( i=0;mpcodecs_vd_drivers[i];i++ ) { Items=g_list_append( Items,(char *)mpcodecs_vd_drivers[i]->info->name ); if ( video_fm_list && !gstrcmp( video_fm_list[0],(char *)mpcodecs_vd_drivers[i]->info->short_name ) ) name=(char *)mpcodecs_vd_drivers[i]->info->name; } gtk_combo_set_popdown_strings( GTK_COMBO( CBVFM ),Items );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -