📄 main.c
字号:
/* XMMS - Cross-platform multimedia player * Copyright (C) 1998-2003 Peter Alm, Mikael Alm, Olle Hallnas, * Thomas Nilsson and 4Front Technologies * Copyright (C) 1999-2004 Haavard Kvaalen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public Licensse as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */#include "xmms.h"#include <gdk/gdkx.h>#include <gdk/gdk.h>#include <X11/Xlib.h>#include <X11/Xatom.h>#include <getopt.h>#include <signal.h>#include <ctype.h>#ifdef HAVE_SCHED_H# include <sched.h>#elif defined HAVE_SYS_SCHED_H# include <sys/sched.h>#endif#include "libxmms/configfile.h"#include "libxmms/xmmsctrl.h"#include "libxmms/util.h"#include "libxmms/dirbrowser.h"#include "xmms_mini.xpm"GtkWidget *mainwin, *mainwin_url_window = NULL, *mainwin_dir_browser = NULL;GtkWidget *mainwin_jtt = NULL, *mainwin_jtf = NULL;GtkItemFactory *mainwin_options_menu, *mainwin_songname_menu, *mainwin_vis_menu;GtkItemFactory *mainwin_general_menu;GdkPixmap *mainwin_bg = NULL, *mainwin_bg_dblsize;GdkGC *mainwin_gc;GtkAccelGroup *mainwin_accel;gboolean mainwin_focus = FALSE;gboolean setting_volume = FALSE;gint mainwin_timeout_tag;PButton *mainwin_menubtn, *mainwin_minimize, *mainwin_shade, *mainwin_close;PButton *mainwin_rew, *mainwin_play, *mainwin_pause, *mainwin_stop, *mainwin_fwd, *mainwin_eject;SButton *mainwin_srew, *mainwin_splay, *mainwin_spause, *mainwin_sstop, *mainwin_sfwd, *mainwin_seject, *mainwin_about;TButton *mainwin_shuffle, *mainwin_repeat, *mainwin_eq, *mainwin_pl;TextBox *mainwin_info, *mainwin_rate_text, *mainwin_freq_text, *mainwin_stime_min, *mainwin_stime_sec;MenuRow *mainwin_menurow;HSlider *mainwin_volume, *mainwin_balance, *mainwin_position, *mainwin_sposition = NULL;MonoStereo *mainwin_monostereo;PlayStatus *mainwin_playstatus;Number *mainwin_minus_num, *mainwin_10min_num, *mainwin_min_num, *mainwin_10sec_num, *mainwin_sec_num;Vis *mainwin_vis;SVis *mainwin_svis;GList *mainwin_wlist = NULL;GList *disabled_iplugins = NULL;GList *dock_window_list = NULL;static int bitrate = 0, frequency = 0, numchannels = 0;Config cfg;static gboolean mainwin_force_redraw = FALSE;static gchar *mainwin_title_text = NULL;static gboolean mainwin_info_text_locked = FALSE;/* For x11r5 session management */static char **restart_argv;static int restart_argc;Vis *active_vis;static GdkBitmap *nullmask;static gint balance;gboolean pposition_broken = FALSE;static pthread_mutex_t title_mutex = PTHREAD_MUTEX_INITIALIZER;extern gchar *plugin_dir_list[];enum{ VOLSET_STARTUP, VOLSET_UPDATE, VOLUME_ADJUSTED, VOLUME_SET};void read_volume(gint when);const GtkTargetEntry _xmms_drop_types[] ={ {"text/plain", 0, XMMS_DROP_PLAINTEXT}, {"text/uri-list", 0, XMMS_DROP_URLENCODED}, {"STRING", 0, XMMS_DROP_STRING}};void mainwin_options_menu_callback(gpointer cb_data, guint action, GtkWidget * w);void mainwin_volume_motioncb(gint pos);static void set_timer_mode_menu_cb(TimerMode mode);enum{ MAINWIN_OPT_PREFS, MAINWIN_OPT_SKIN, MAINWIN_OPT_RELOADSKIN, MAINWIN_OPT_REPEAT, MAINWIN_OPT_SHUFFLE, MAINWIN_OPT_NPA, MAINWIN_OPT_TELAPSED, MAINWIN_OPT_TREMAINING, MAINWIN_OPT_ALWAYS, MAINWIN_OPT_STICKY, MAINWIN_OPT_WS, MAINWIN_OPT_PWS, MAINWIN_OPT_EQWS, MAINWIN_OPT_DOUBLESIZE, MAINWIN_OPT_EASY_MOVE};GtkItemFactoryEntry mainwin_options_menu_entries[] ={ {N_("/Preferences"), "<control>P", mainwin_options_menu_callback, MAINWIN_OPT_PREFS, "<Item>"}, {N_("/Skin Browser"), "<alt>S", mainwin_options_menu_callback, MAINWIN_OPT_SKIN, "<Item>"}, {N_("/Reload skin"), "F5", mainwin_options_menu_callback, MAINWIN_OPT_RELOADSKIN, "<Item>"}, {N_("/-"), NULL, NULL, 0, "<Separator>"}, {N_("/Repeat"), "R", mainwin_options_menu_callback, MAINWIN_OPT_REPEAT, "<ToggleItem>"}, {N_("/Shuffle"), "S", mainwin_options_menu_callback, MAINWIN_OPT_SHUFFLE, "<ToggleItem>"}, {N_("/No Playlist Advance"), "<control>N", mainwin_options_menu_callback, MAINWIN_OPT_NPA, "<ToggleItem>"}, {N_("/-"), NULL, NULL, 0, "<Separator>"}, {N_("/Time Elapsed"), "<control>E", mainwin_options_menu_callback, MAINWIN_OPT_TELAPSED, "<RadioItem>"}, {N_("/Time Remaining"), "<control>R", mainwin_options_menu_callback, MAINWIN_OPT_TREMAINING, "/Time Elapsed"}, {N_("/-"), NULL, NULL, 0, "<Separator>"}, {N_("/Always On Top"), "<control>A", mainwin_options_menu_callback, MAINWIN_OPT_ALWAYS, "<ToggleItem>"}, {N_("/Show on all desktops"), "<control>S", mainwin_options_menu_callback, MAINWIN_OPT_STICKY, "<ToggleItem>"}, {N_("/WindowShade Mode"), "<control>W", mainwin_options_menu_callback, MAINWIN_OPT_WS, "<ToggleItem>"}, {N_("/Playlist WindowShade Mode"), "<control><shift>W", mainwin_options_menu_callback, MAINWIN_OPT_PWS, "<ToggleItem>"}, {N_("/Equalizer WindowShade Mode"), "<control><alt>W", mainwin_options_menu_callback, MAINWIN_OPT_EQWS, "<ToggleItem>"}, {N_("/DoubleSize"), "<control>D", mainwin_options_menu_callback, MAINWIN_OPT_DOUBLESIZE, "<ToggleItem>"}, {N_("/Easy Move"), "<control>E", mainwin_options_menu_callback, MAINWIN_OPT_EASY_MOVE, "<ToggleItem>"},};static gint mainwin_options_menu_entries_num = sizeof(mainwin_options_menu_entries) / sizeof(mainwin_options_menu_entries[0]);void mainwin_songname_menu_callback(gpointer cb_data, guint action, GtkWidget * w);enum{ MAINWIN_SONGNAME_FILEINFO, MAINWIN_SONGNAME_JTF, MAINWIN_SONGNAME_JTT, MAINWIN_SONGNAME_SCROLL};GtkItemFactoryEntry mainwin_songname_menu_entries[] ={ {N_("/File Info"), NULL, mainwin_songname_menu_callback, MAINWIN_SONGNAME_FILEINFO, "<Item>"}, {N_("/Jump To File"), "J", mainwin_songname_menu_callback, MAINWIN_SONGNAME_JTF, "<Item>"}, {N_("/Jump To Time"), "<control>J", mainwin_songname_menu_callback, MAINWIN_SONGNAME_JTT, "<Item>"}, {N_("/Autoscroll Song Name"), NULL, mainwin_songname_menu_callback, MAINWIN_SONGNAME_SCROLL, "<ToggleItem>"},};static gint mainwin_songname_menu_entries_num = sizeof(mainwin_songname_menu_entries) / sizeof(mainwin_songname_menu_entries[0]);void mainwin_vis_menu_callback(gpointer cb_data, guint action, GtkWidget * w);enum{ MAINWIN_VIS_ANALYZER, MAINWIN_VIS_SCOPE, MAINWIN_VIS_OFF, MAINWIN_VIS_ANALYZER_NORMAL, MAINWIN_VIS_ANALYZER_FIRE, MAINWIN_VIS_ANALYZER_VLINES, MAINWIN_VIS_ANALYZER_LINES, MAINWIN_VIS_ANALYZER_BARS, MAINWIN_VIS_ANALYZER_PEAKS, MAINWIN_VIS_SCOPE_DOT, MAINWIN_VIS_SCOPE_LINE, MAINWIN_VIS_SCOPE_SOLID, MAINWIN_VIS_VU_NORMAL, MAINWIN_VIS_VU_SMOOTH, MAINWIN_VIS_REFRESH_FULL, MAINWIN_VIS_REFRESH_HALF, MAINWIN_VIS_REFRESH_QUARTER, MAINWIN_VIS_REFRESH_EIGHTH, MAINWIN_VIS_AFALLOFF_SLOWEST, MAINWIN_VIS_AFALLOFF_SLOW, MAINWIN_VIS_AFALLOFF_MEDIUM, MAINWIN_VIS_AFALLOFF_FAST, MAINWIN_VIS_AFALLOFF_FASTEST, MAINWIN_VIS_PFALLOFF_SLOWEST, MAINWIN_VIS_PFALLOFF_SLOW, MAINWIN_VIS_PFALLOFF_MEDIUM, MAINWIN_VIS_PFALLOFF_FAST, MAINWIN_VIS_PFALLOFF_FASTEST, MAINWIN_VIS_PLUGINS};GtkItemFactoryEntry mainwin_vis_menu_entries[] ={ {N_("/Visualization Mode"), NULL, NULL, 0, "<Branch>"}, {N_("/Visualization Mode/Analyzer"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_ANALYZER, "<RadioItem>"}, {N_("/Visualization Mode/Scope"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_SCOPE, "/Visualization Mode/Analyzer"}, {N_("/Visualization Mode/Off"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_OFF, "/Visualization Mode/Analyzer"}, {N_("/Analyzer Mode"), NULL, NULL, 0, "<Branch>"}, {N_("/Analyzer Mode/Normal"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_ANALYZER_NORMAL, "<RadioItem>"}, {N_("/Analyzer Mode/Fire"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_ANALYZER_FIRE, "/Analyzer Mode/Normal"}, {N_("/Analyzer Mode/Vertical Lines"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_ANALYZER_VLINES, "/Analyzer Mode/Normal"}, {N_("/Analyzer Mode/-"), NULL, NULL, 0, "<Separator>"}, {N_("/Analyzer Mode/Lines"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_ANALYZER_LINES, "<RadioItem>"}, {N_("/Analyzer Mode/Bars"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_ANALYZER_BARS, "/Analyzer Mode/Lines"}, {N_("/Analyzer Mode/-"), NULL, NULL, 0, "<Separator>"}, {N_("/Analyzer Mode/Peaks"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_ANALYZER_PEAKS, "<ToggleItem>"}, {N_("/Scope Mode"), NULL, NULL, 0, "<Branch>"}, {N_("/Scope Mode/Dot Scope"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_SCOPE_DOT, "<RadioItem>"}, {N_("/Scope Mode/Line Scope"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_SCOPE_LINE, "/Scope Mode/Dot Scope"}, {N_("/Scope Mode/Solid Scope"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_SCOPE_SOLID, "/Scope Mode/Dot Scope"}, {N_("/WindowShade VU Mode"), NULL, NULL, 0, "<Branch>"}, {N_("/WindowShade VU Mode/Normal"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_VU_NORMAL, "<RadioItem>"}, {N_("/WindowShade VU Mode/Smooth"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_VU_SMOOTH, "/WindowShade VU Mode/Normal"}, {N_("/Refresh Rate"), NULL, NULL, 0, "<Branch>"}, {N_("/Refresh Rate/Full (~50 fps)"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_REFRESH_FULL, "<RadioItem>"}, {N_("/Refresh Rate/Half (~25 fps)"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_REFRESH_HALF, "/Refresh Rate/Full (~50 fps)"}, {N_("/Refresh Rate/Quarter (~13 fps)"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_REFRESH_QUARTER, "/Refresh Rate/Full (~50 fps)"}, {N_("/Refresh Rate/Eighth (~6 fps)"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_REFRESH_EIGHTH, "/Refresh Rate/Full (~50 fps)"}, {N_("/Analyzer Falloff"), NULL, NULL, 0, "<Branch>"}, {N_("/Analyzer Falloff/Slowest"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_AFALLOFF_SLOWEST, "<RadioItem>"}, {N_("/Analyzer Falloff/Slow"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_AFALLOFF_SLOW, "/Analyzer Falloff/Slowest"}, {N_("/Analyzer Falloff/Medium"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_AFALLOFF_MEDIUM, "/Analyzer Falloff/Slowest"}, {N_("/Analyzer Falloff/Fast"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_AFALLOFF_FAST, "/Analyzer Falloff/Slowest"}, {N_("/Analyzer Falloff/Fastest"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_AFALLOFF_FASTEST, "/Analyzer Falloff/Slowest"}, {N_("/Peaks Falloff"), NULL, NULL, 0, "<Branch>"}, {N_("/Peaks Falloff/Slowest"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_PFALLOFF_SLOWEST, "<RadioItem>"}, {N_("/Peaks Falloff/Slow"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_PFALLOFF_SLOW, "/Peaks Falloff/Slowest"}, {N_("/Peaks Falloff/Medium"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_PFALLOFF_MEDIUM, "/Peaks Falloff/Slowest"}, {N_("/Peaks Falloff/Fast"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_PFALLOFF_FAST, "/Peaks Falloff/Slowest"}, {N_("/Peaks Falloff/Fastest"), NULL, mainwin_vis_menu_callback, MAINWIN_VIS_PFALLOFF_FASTEST, "/Peaks Falloff/Slowest"}, {N_("/Visualization plugins"), "<control>V", mainwin_vis_menu_callback, MAINWIN_VIS_PLUGINS, "<Item>"}};static gint mainwin_vis_menu_entries_num = sizeof(mainwin_vis_menu_entries) / sizeof(mainwin_vis_menu_entries[0]);/* * If you change the menu above change these defines also */#define MAINWIN_VIS_MENU_VIS_MODE 1#define MAINWIN_VIS_MENU_NUM_VIS_MODE 3#define MAINWIN_VIS_MENU_ANALYZER_MODE 5#define MAINWIN_VIS_MENU_NUM_ANALYZER_MODE 3#define MAINWIN_VIS_MENU_ANALYZER_TYPE 9#define MAINWIN_VIS_MENU_NUM_ANALYZER_TYPE 2#define MAINWIN_VIS_MENU_ANALYZER_PEAKS 12#define MAINWIN_VIS_MENU_SCOPE_MODE 14#define MAINWIN_VIS_MENU_NUM_SCOPE_MODE 3#define MAINWIN_VIS_MENU_WSHADEVU_MODE 18#define MAINWIN_VIS_MENU_NUM_WSHADEVU_MODE 2#define MAINWIN_VIS_MENU_REFRESH_RATE 21#define MAINWIN_VIS_MENU_NUM_REFRESH_RATE 4#define MAINWIN_VIS_MENU_AFALLOFF 26#define MAINWIN_VIS_MENU_NUM_AFALLOFF 5#define MAINWIN_VIS_MENU_PFALLOFF 32#define MAINWIN_VIS_MENU_NUM_PFALLOFF 5enum{ MAINWIN_GENERAL_ABOUT, MAINWIN_GENERAL_PLAYFILE, MAINWIN_GENERAL_PLAYDIRECTORY, MAINWIN_GENERAL_PLAYLOCATION, MAINWIN_GENERAL_FILEINFO, MAINWIN_GENERAL_SHOWMWIN, MAINWIN_GENERAL_SHOWPLWIN, MAINWIN_GENERAL_SHOWEQWIN, MAINWIN_GENERAL_PREV, MAINWIN_GENERAL_PLAY, MAINWIN_GENERAL_PAUSE, MAINWIN_GENERAL_STOP, MAINWIN_GENERAL_NEXT, MAINWIN_GENERAL_STOPFADE, MAINWIN_GENERAL_BACK5SEC, MAINWIN_GENERAL_FWD5SEC, MAINWIN_GENERAL_START, MAINWIN_GENERAL_BACK10, MAINWIN_GENERAL_FWD10, MAINWIN_GENERAL_JTT, MAINWIN_GENERAL_JTF, MAINWIN_GENERAL_CQUEUE, MAINWIN_GENERAL_EXIT};void mainwin_general_menu_callback(gpointer cb_data, guint action, GtkWidget * w);GtkItemFactoryEntry mainwin_general_menu_entries[] ={ {N_("/About XMMS"), NULL, mainwin_general_menu_callback, MAINWIN_GENERAL_ABOUT, "<Item>"}, {N_("/-"), NULL, NULL, 0, "<Separator>"}, {N_("/Play File"), "L", mainwin_general_menu_callback, MAINWIN_GENERAL_PLAYFILE, "<Item>"}, {N_("/Play Directory"), "<shift>L", mainwin_general_menu_callback, MAINWIN_GENERAL_PLAYDIRECTORY, "<Item>"}, {N_("/Play Location"), "<control>L", mainwin_general_menu_callback, MAINWIN_GENERAL_PLAYLOCATION, "<Item>"}, {N_("/View File Info"), "<control>3" , mainwin_general_menu_callback, MAINWIN_GENERAL_FILEINFO, "<Item>"}, {N_("/-"), NULL, NULL, 0, "<Separator>"}, {N_("/Main Window"), "<alt>W", mainwin_general_menu_callback, MAINWIN_GENERAL_SHOWMWIN, "<ToggleItem>"}, {N_("/Playlist Editor"), "<alt>E", mainwin_general_menu_callback, MAINWIN_GENERAL_SHOWPLWIN, "<ToggleItem>"}, {N_("/Graphical EQ"), "<alt>G", mainwin_general_menu_callback, MAINWIN_GENERAL_SHOWEQWIN, "<ToggleItem>"}, {N_("/-"), NULL, NULL, 0, "<Separator>"}, {N_("/Options"), NULL, NULL, 0, "<Item>"}, {N_("/Playback"), NULL, NULL, 0, "<Branch>"}, {N_("/Playback/Previous"), "Z", mainwin_general_menu_callback, MAINWIN_GENERAL_PREV, "<Item>"}, {N_("/Playback/Play"), "X", mainwin_general_menu_callback, MAINWIN_GENERAL_PLAY, "<Item>"}, {N_("/Playback/Pause"), "C", mainwin_general_menu_callback, MAINWIN_GENERAL_PAUSE, "<Item>"}, {N_("/Playback/Stop"), "V", mainwin_general_menu_callback, MAINWIN_GENERAL_STOP, "<Item>"}, {N_("/Playback/Next"), "B", mainwin_general_menu_callback, MAINWIN_GENERAL_NEXT, "<Item>"}, {N_("/Playback/-"), NULL, NULL, 0, "<Separator>"},/* {N_("/Playback/Stop with Fadeout"),"<Shift>V",mainwin_general_menu_callback,MAINWIN_GENERAL_STOPFADE,"<Item>"}, */ {N_("/Playback/Back 5 Seconds"), NULL, mainwin_general_menu_callback, MAINWIN_GENERAL_BACK5SEC, "<Item>"}, {N_("/Playback/Fwd 5 Seconds"), NULL, mainwin_general_menu_callback, MAINWIN_GENERAL_FWD5SEC, "<Item>"}, {N_("/Playback/Start of List"), "<control>Z", mainwin_general_menu_callback, MAINWIN_GENERAL_START, "<Item>"}, {N_("/Playback/10 Tracks Back"), NULL, mainwin_general_menu_callback, MAINWIN_GENERAL_BACK10, "<Item>"}, {N_("/Playback/10 Tracks Fwd"), NULL, mainwin_general_menu_callback, MAINWIN_GENERAL_FWD10, "<Item>"}, {N_("/Playback/-"), NULL, NULL, 0, "<Separator>"}, {N_("/Playback/Jump to Time"), "<control>J", mainwin_general_menu_callback, MAINWIN_GENERAL_JTT, "<Item>"}, {N_("/Playback/Jump to File"), "J", mainwin_general_menu_callback, MAINWIN_GENERAL_JTF, "<Item>"}, {N_("/Playback/Clear Queue"), "<shift>Q", mainwin_general_menu_callback, MAINWIN_GENERAL_CQUEUE, "<Item>"}, {N_("/Visualization"), NULL, NULL, 0, "<Item>"}, {N_("/-"), NULL, NULL, 0, "<Separator>"}, {N_("/Exit"), NULL, mainwin_general_menu_callback, MAINWIN_GENERAL_EXIT, "<Item>"}};static const int mainwin_general_menu_entries_num = sizeof(mainwin_general_menu_entries) / sizeof(mainwin_general_menu_entries[0]);static void make_xmms_dir(void){ gchar *filename; filename = g_strconcat(g_get_home_dir(), "/.xmms", NULL); mkdir(filename, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH); g_free(filename); filename = g_strconcat(g_get_home_dir(), "/.xmms/Skins", NULL); mkdir(filename, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH); g_free(filename); filename = g_strconcat(g_get_home_dir(), "/.xmms/Plugins", NULL); mkdir(filename, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH); g_free(filename);}static void read_config(void){ ConfigFile *cfgfile; gchar *filename; gint i, length; memset(&cfg, 0, sizeof (Config)); cfg.autoscroll = TRUE; cfg.player_x = 20; cfg.player_y = 20; cfg.always_on_top = FALSE; cfg.sticky = FALSE; cfg.always_show_cb = TRUE; cfg.convert_underscore = TRUE; cfg.convert_twenty = TRUE; cfg.show_numbers_in_pl = TRUE; cfg.snap_windows = TRUE; cfg.save_window_position = TRUE; cfg.dim_titlebar = TRUE; cfg.get_info_on_load = FALSE; cfg.get_info_on_demand = TRUE; cfg.eq_doublesize_linked = TRUE; cfg.player_visible = TRUE; cfg.no_playlist_advance = FALSE; cfg.smooth_title_scroll = TRUE; cfg.random_skin_on_play = FALSE; cfg.mainwin_use_xfont = FALSE; cfg.use_pl_metadata = TRUE; cfg.playlist_x = 295; cfg.playlist_y = 20; cfg.playlist_width = 300; cfg.playlist_height = 232; cfg.playlist_transparent = FALSE; cfg.filesel_path = NULL; cfg.playlist_path = NULL; cfg.equalizer_x = 20; cfg.equalizer_y = 136; cfg.snap_distance = 10; cfg.pause_between_songs_time = 2; cfg.vis_type = VIS_ANALYZER; cfg.analyzer_mode = ANALYZER_NORMAL; cfg.analyzer_type = ANALYZER_BARS; cfg.analyzer_peaks = TRUE; cfg.scope_mode = SCOPE_DOT; cfg.vu_mode = VU_SMOOTH; cfg.vis_refresh = REFRESH_FULL; cfg.analyzer_falloff = FALLOFF_FAST; cfg.peaks_falloff = FALLOFF_SLOW; cfg.disabled_iplugins = NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -