#ifdef HAVE_CONFIG_H # include #endif #include #include "callbacks.h" #include "interface.h" #include "support.h" #define GET_A(tg) (!!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(tg))) #define GET() (!!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(togglebutton))) #define SET(a) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),a) #define FETCH cfgStore(); if (!needResize) needResize=1; GtkWidget *cfgWin=NULL; GtkWidget *cfgAbt=NULL; extern int needResize; GtkWidget *cfgAR=NULL; GtkWidget *cfgDS=NULL; GtkWidget *cfgLMB=NULL; GtkWidget *cfgFSR=NULL; GtkWidget *cfgTRK=NULL; GtkWidget *cfgSync=NULL; GtkWidget *cfgAH=NULL; int getSelection(GtkWidget *widget) { GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(widget) ) ); int count = 0; GList *child = menu_shell->children; while (child) { GtkBin *bin = GTK_BIN( child->data ); if (!bin->child) return count; child = child->next; count++; } return -1; } int getResCount(GtkWidget *widget) { GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(widget) ) ); int count = 0; GList *child = menu_shell->children; while (child) { GtkBin *bin = GTK_BIN( child->data ); child = child->next; count++; } return count; } int updateResIndex() { avmode_t *z=avmodes; GtkWidget *m_i; char buf[256]; while(z) { sprintf(buf,"%dx%d %s",z->w,z->h, ( (z->bpp==8)?"Indexed color": (z->bpp==15)?"High color": (z->bpp==16)?"High color": (z->bpp==24)?"True color (24 bit)": (z->bpp==32)?"True color (32 bit)": "Non-standard bpp" )); m_i = gtk_menu_item_new_with_label (buf); gtk_widget_show (m_i); gtk_menu_append (GTK_MENU(GTK_OPTION_MENU(cfgFSR)->menu), m_i); z=z->next; } return 1; } int getResIndex(int x,int y) { avmode_t *z=avmodes; int idx=2; while(z) { if ((z->w==x)&&(z->h==y)) return idx; z=z->next; idx++; } return 0; } int getAtIndex(int idx,int coord) { avmode_t *z=avmodes; int t=2; while(z) { if (idx==t) { if (coord==0) return (z->w); else return (z->h); } z=z->next; t++; } return 0; } #define getXatIndex(a) getAtIndex(a,0) #define getYatIndex(a) getAtIndex(a,1) void on_btnCenter_realize (GtkWidget *widget, gpointer user_data) { SET(avicfg.doPosition); } void on_btnAspect_realize (GtkWidget *widget, gpointer user_data) { SET(avicfg.doAspect); } void on_btnCenter_toggled (GtkToggleButton *togglebutton, gpointer user_data) { avicfg.doPosition=GET(); FETCH } void on_btnAspect_toggled (GtkToggleButton *togglebutton, gpointer user_data) { avicfg.doAspect=GET(); FETCH } void on_btnResize_realize (GtkWidget *widget, gpointer user_data) { SET(avicfg.doEnableResize); } void on_btnResize_toggled (GtkToggleButton *togglebutton, gpointer user_data) { avicfg.doEnableResize=GET(); FETCH } void on_btnFullscreen_realize (GtkWidget *widget, gpointer user_data) { SET(avicfg.doFullscreen); } void on_btnFullscreen_toggled (GtkToggleButton *togglebutton, gpointer user_data) { avicfg.doFullscreen=GET(); FETCH } void on_btnFSAspect_realize (GtkWidget *widget, gpointer user_data) { SET(avicfg.doFullscreenAspect); } void on_btnFSAspect_toggled (GtkToggleButton *togglebutton, gpointer user_data) { avicfg.doFullscreenAspect=GET(); FETCH } void on_btnVideoMode_realize (GtkWidget *widget, gpointer user_data) { SET(avicfg.doFullscreenMode); } void on_btnVideoMode_toggled (GtkToggleButton *togglebutton, gpointer user_data) { avicfg.doFullscreenMode=GET(); FETCH } void on_BtnYUV_realize (GtkWidget *widget, gpointer user_data) { SET(avicfg.doYUV); } void on_BtnYUV_toggled (GtkToggleButton *togglebutton, gpointer user_data) { avicfg.doYUV=GET(); FETCH } void on_btnSoft_realize (GtkWidget *widget, gpointer user_data) { SET(avicfg.doSoftYUV); } void on_btnSoft_toggled (GtkToggleButton *togglebutton, gpointer user_data) { avicfg.doSoftYUV=GET(); FETCH } gboolean on_btnSyncLeft_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { return FALSE; } void on_slSync_changed (GtkWidget *widget, gpointer user_data) { avicfg.doSyncAudio=(int)(gtk_range_get_adjustment(GTK_RANGE(cfgSync))->value*1000); FETCH } void on_slSync_realize (GtkWidget *widget, gpointer user_data) { GtkAdjustment *adj=gtk_range_get_adjustment(GTK_RANGE(widget)); cfgSync=widget; gtk_adjustment_set_value(GTK_ADJUSTMENT(adj), avicfg.doSyncAudio*1.0/1000.0); gtk_signal_connect_object (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC (on_slSync_changed),NULL); } gboolean on_btnSyncRight_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { return FALSE; } void on_cfgwin_destroy (GtkObject *object, gpointer user_data) { gtk_widget_destroy((GtkWidget *)object); cfgWin=0; cfgStore(); } void on_btnAdvanced_clicked (GtkButton *button, gpointer user_data) { gtk_widget_show(create_cfgadv()); } void on_cfgadv_destroy (GtkObject *object, gpointer user_data) { avicfg.typeAR=getSelection(cfgAR); avicfg.typeDS=getSelection(cfgDS); avicfg.typeLMB=getSelection(cfgLMB); avicfg.trackBar=getSelection(cfgTRK); avicfg.typeFSR=getSelection(cfgFSR); if (avicfg.typeFSR>=2) { avicfg.fsW=getXatIndex(avicfg.typeFSR); avicfg.fsH=getYatIndex(avicfg.typeFSR); avicfg.typeFSR=FSR_SPECIFY; } gtk_widget_destroy((GtkWidget *)object); avicfg.doAutoHide=GET_A(cfgAH); cfgStore(); } void on_cfgabt_destroy (GtkObject *object, gpointer user_data) { gtk_widget_destroy((GtkWidget *)object); cfgAbt=0; } void on_RA_realize (GtkWidget *widget, gpointer user_data) { cfgAR=widget; gtk_option_menu_set_history(GTK_OPTION_MENU(cfgAR),avicfg.typeAR); } void on_DS_realize (GtkWidget *widget, gpointer user_data) { cfgDS=widget; gtk_option_menu_set_history(GTK_OPTION_MENU(cfgDS),avicfg.typeDS); } void on_LMB_realize (GtkWidget *widget, gpointer user_data) { cfgLMB=widget; gtk_option_menu_set_history(GTK_OPTION_MENU(cfgLMB),avicfg.typeLMB); } void on_FSR_realize (GtkWidget *widget, gpointer user_data) { int idx; if (getResCount(widget)>2) return; cfgFSR=widget; updateResIndex(); idx = (avicfg.typeFSR==FSR_DESKTOP) ? 0: (avicfg.typeFSR==FSR_LEAST) ? 1: getResIndex(avicfg.fsW,avicfg.fsH); gtk_option_menu_set_history(GTK_OPTION_MENU(cfgFSR),idx); gtk_widget_realize(cfgFSR); } void on_TRK_realize (GtkWidget *widget, gpointer user_data) { cfgTRK=widget; gtk_option_menu_set_history(GTK_OPTION_MENU(cfgTRK),avicfg.trackBar); } void on_ah_check_realize (GtkWidget *widget, gpointer user_data) { cfgAH=widget; SET(avicfg.doAutoHide); }