📄 extrapanel.cpp
字号:
/***************************************************************************** * extrapanel.cpp : wxWindows plugin for vlc ***************************************************************************** * Copyright (C) 2000-2004, 2003 VideoLAN * $Id: extrapanel.cpp 10974 2005-05-11 15:34:24Z gbazin $ * * Authors: Cl閙ent Stenac <zorglub@videolan.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License 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, USA. *****************************************************************************//***************************************************************************** * Preamble *****************************************************************************/#include <vlc/vlc.h>#include <vlc/aout.h>#include <aout_internal.h>#include <vlc/vout.h>#include <vlc/intf.h>#include <math.h>#include "wxwindows.h"/***************************************************************************** * Local class declarations. *****************************************************************************//* FIXME */#define SMOOTH_TIP N_( "If this setting is not zero, the bands will move " \ "together when you move one. The higher the value is, the " \ "more correlated their movement will be." )static int IntfBandsCallback( vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void * );static int IntfPreampCallback( vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void * );static void ChangeFiltersString( intf_thread_t *, aout_instance_t *, char *, vlc_bool_t );static void ChangeVFiltersString( intf_thread_t *, char *, vlc_bool_t );/* IDs for the controls and the menu commands */enum{ Notebook_Event, Adjust_Event, RestoreDefaults_Event, Hue_Event, Contrast_Event, Brightness_Event, Saturation_Event, Gamma_Event, Ratio_Event, FiltersInfo_Event, Filter0_Event, Filter1_Event, Filter2_Event, Filter3_Event, Filter4_Event, Filter5_Event, Filter6_Event, Filter7_Event, Filter8_Event, Filter9_Event, EqEnable_Event, Eq2Pass_Event, EqRestore_Event, Smooth_Event, Preamp_Event, Band0_Event,Band1_Event,Band2_Event,Band3_Event,Band4_Event, Band5_Event,Band6_Event,Band7_Event,Band8_Event,Band9_Event, NormVol_Event, NVSlider_Event, HeadPhone_Event};BEGIN_EVENT_TABLE( ExtraPanel, wxPanel ) EVT_IDLE( ExtraPanel::OnIdle ) /* Equalizer */ EVT_CHECKBOX( EqEnable_Event, ExtraPanel::OnEnableEqualizer ) EVT_CHECKBOX( Eq2Pass_Event, ExtraPanel::OnEq2Pass ) EVT_BUTTON( EqRestore_Event, ExtraPanel::OnEqRestore ) EVT_COMMAND_SCROLL( Preamp_Event, ExtraPanel::OnPreamp ) EVT_COMMAND_SCROLL( Smooth_Event, ExtraPanel::OnEqSmooth ) EVT_COMMAND_SCROLL(Band0_Event, ExtraPanel::OnChangeEqualizer) EVT_COMMAND_SCROLL(Band1_Event, ExtraPanel::OnChangeEqualizer) EVT_COMMAND_SCROLL(Band2_Event, ExtraPanel::OnChangeEqualizer) EVT_COMMAND_SCROLL(Band3_Event, ExtraPanel::OnChangeEqualizer) EVT_COMMAND_SCROLL(Band4_Event, ExtraPanel::OnChangeEqualizer) EVT_COMMAND_SCROLL(Band5_Event, ExtraPanel::OnChangeEqualizer) EVT_COMMAND_SCROLL(Band6_Event, ExtraPanel::OnChangeEqualizer) EVT_COMMAND_SCROLL(Band7_Event, ExtraPanel::OnChangeEqualizer) EVT_COMMAND_SCROLL(Band8_Event, ExtraPanel::OnChangeEqualizer) EVT_COMMAND_SCROLL(Band9_Event, ExtraPanel::OnChangeEqualizer) /* Video */ EVT_CHECKBOX( Adjust_Event, ExtraPanel::OnEnableAdjust ) EVT_BUTTON( RestoreDefaults_Event, ExtraPanel::OnRestoreDefaults ) EVT_COMMAND_SCROLL(Hue_Event, ExtraPanel::OnAdjustUpdate) EVT_COMMAND_SCROLL(Contrast_Event, ExtraPanel::OnAdjustUpdate) EVT_COMMAND_SCROLL(Brightness_Event, ExtraPanel::OnAdjustUpdate) EVT_COMMAND_SCROLL(Saturation_Event, ExtraPanel::OnAdjustUpdate) EVT_COMMAND_SCROLL(Gamma_Event, ExtraPanel::OnAdjustUpdate) EVT_BUTTON( FiltersInfo_Event, ExtraPanel::OnFiltersInfo ) EVT_CHECKBOX( Filter0_Event, ExtraPanel::OnSelectFilter ) EVT_CHECKBOX( Filter1_Event, ExtraPanel::OnSelectFilter ) EVT_CHECKBOX( Filter2_Event, ExtraPanel::OnSelectFilter ) EVT_CHECKBOX( Filter3_Event, ExtraPanel::OnSelectFilter ) EVT_CHECKBOX( Filter4_Event, ExtraPanel::OnSelectFilter ) EVT_CHECKBOX( Filter5_Event, ExtraPanel::OnSelectFilter ) EVT_CHECKBOX( Filter6_Event, ExtraPanel::OnSelectFilter ) EVT_CHECKBOX( Filter7_Event, ExtraPanel::OnSelectFilter ) EVT_CHECKBOX( Filter8_Event, ExtraPanel::OnSelectFilter ) EVT_CHECKBOX( Filter9_Event, ExtraPanel::OnSelectFilter ) /* Audio */ EVT_CHECKBOX( NormVol_Event, ExtraPanel::OnNormvol ) EVT_CHECKBOX( HeadPhone_Event, ExtraPanel::OnHeadphone ) EVT_COMMAND_SCROLL( NVSlider_Event, ExtraPanel::OnNormvolSlider )END_EVENT_TABLE()struct filter { char *psz_filter; char *psz_name; char *psz_help;};static const struct filter vfilters[] ={ { "clone", N_("Image clone"), N_("Creates several clones of the image") }, { "distort", N_("Distortion"), N_("Adds distorsion effects") }, { "invert", N_("Image inversion") , N_("Inverts the image colors") }, { "crop", N_("Image cropping"), N_("Crops the image") }, { "motionblur", N_("Blurring"), N_("Creates a motion blurring on the image") }, { "transform", N_("Transformation"), N_("Rotates or flips the image") }, { NULL, NULL, NULL } /* Do not remove this line */};/***************************************************************************** * Constructor. *****************************************************************************/ExtraPanel::ExtraPanel( intf_thread_t *_p_intf, wxWindow *_p_parent ): wxPanel( _p_parent , -1, wxDefaultPosition, wxDefaultSize ){ p_intf = _p_intf; p_parent = _p_parent; SetAutoLayout( TRUE ); wxBoxSizer *extra_sizer = new wxBoxSizer( wxHORIZONTAL ); notebook = new wxNotebook( this, Notebook_Event );#if (!wxCHECK_VERSION(2,5,0)) wxNotebookSizer *notebook_sizer = new wxNotebookSizer( notebook );#endif notebook->AddPage( VideoPanel( notebook ), wxU(_("Video")) ); notebook->AddPage( EqzPanel( notebook ), wxU(_("Equalizer")) ); notebook->AddPage( AudioPanel( notebook ), wxU(_("Audio")) );#if (!wxCHECK_VERSION(2,5,0)) extra_sizer->Add( notebook_sizer, 1, wxEXPAND, 0 );#else extra_sizer->Add( notebook, 1, wxEXPAND, 0 );#endif SetSizerAndFit( extra_sizer ); extra_sizer->Layout();}ExtraPanel::~ExtraPanel(){}/* Video Panel constructor */wxPanel *ExtraPanel::VideoPanel( wxWindow *parent ){ char *psz_filters; wxPanel *panel = new wxPanel( parent, -1 ); wxBoxSizer *panel_sizer = new wxBoxSizer( wxHORIZONTAL ); /* Create static box to surround the adjust controls */ wxStaticBox *adjust_box = new wxStaticBox( panel, -1, wxU(_("Adjust Image")) ); wxStaticBoxSizer *adjust_sizer = new wxStaticBoxSizer( adjust_box, wxVERTICAL ); adjust_sizer->SetMinSize( -1, 50 ); /* Create flex grid */ wxFlexGridSizer *adjust_gridsizer = new wxFlexGridSizer( 6, 2, 0, 0); adjust_gridsizer->AddGrowableCol(1); /* Create the adjust button */ wxCheckBox * adjust_check = new wxCheckBox( panel, Adjust_Event, wxU(_("Enable"))); /* Create the restore to defaults button */ restoredefaults_button = new wxButton( panel, RestoreDefaults_Event, wxU(_("Restore Defaults")), wxDefaultPosition); wxStaticText *hue_text = new wxStaticText( panel, -1, wxU(_("Hue")) ); hue_slider = new wxSlider ( panel, Hue_Event, 0, 0, 360, wxDefaultPosition, wxDefaultSize ); wxStaticText *contrast_text = new wxStaticText( panel, -1, wxU(_("Contrast")) ); contrast_slider = new wxSlider ( panel, Contrast_Event, 0, 0, 200, wxDefaultPosition, wxDefaultSize); wxStaticText *brightness_text = new wxStaticText( panel, -1, wxU(_("Brightness")) ); brightness_slider = new wxSlider ( panel, Brightness_Event, 0, 0, 200, wxDefaultPosition, wxDefaultSize) ; wxStaticText *saturation_text = new wxStaticText( panel, -1, wxU(_("Saturation")) ); saturation_slider = new wxSlider ( panel, Saturation_Event, 0, 0, 300, wxDefaultPosition, wxDefaultSize ); wxStaticText *gamma_text = new wxStaticText( panel, -1, wxU(_("Gamma")) ); gamma_slider = new wxSlider ( panel, Gamma_Event, 0, 0, 100, wxDefaultPosition, wxDefaultSize ); adjust_gridsizer->Add( adjust_check, 1, wxEXPAND|wxALL, 2 ); adjust_gridsizer->Add( restoredefaults_button, 1, wxEXPAND|wxALL, 2 ); adjust_gridsizer->Add( hue_text, 1, wxEXPAND|wxALL, 2 ); adjust_gridsizer->Add( hue_slider, 1, wxEXPAND|wxALL, 2 ); adjust_gridsizer->Add( contrast_text, 1, wxEXPAND|wxALL, 2 ); adjust_gridsizer->Add( contrast_slider, 1, wxEXPAND|wxALL, 2 ); adjust_gridsizer->Add( brightness_text, 1, wxEXPAND|wxALL, 2 ); adjust_gridsizer->Add( brightness_slider, 1, wxEXPAND|wxALL, 2 ); adjust_gridsizer->Add( saturation_text, 1, wxEXPAND|wxALL, 2 ); adjust_gridsizer->Add( saturation_slider, 1, wxEXPAND|wxALL, 2 ); adjust_gridsizer->Add( gamma_text, 1, wxEXPAND|wxALL, 2 ); adjust_gridsizer->Add( gamma_slider, 1, wxEXPAND|wxALL, 2 ); adjust_sizer->Add( adjust_gridsizer, 1, wxEXPAND|wxALL, 2); panel_sizer->Add( adjust_sizer , 1, wxTOP, 2 );#if 0 /* Create sizer to surround the other controls */ wxBoxSizer *other_sizer = new wxBoxSizer( wxVERTICAL ); wxStaticBox *video_box = new wxStaticBox( panel, -1, wxU(_("Video Options")) ); /* Create the sizer for the frame */ wxStaticBoxSizer *video_sizer = new wxStaticBoxSizer( video_box, wxVERTICAL ); video_sizer->SetMinSize( -1, 50 ); static const wxString ratio_array[] = { wxT("4:3"), wxT("16:9"), }; wxBoxSizer *ratio_sizer = new wxBoxSizer( wxHORIZONTAL ); wxStaticText *ratio_text = new wxStaticText( panel, -1, wxU(_("Aspect Ratio")) ); ratio_combo = new wxComboBox( panel, Ratio_Event, wxT(""), wxDefaultPosition, wxSize( 80 , -1), WXSIZEOF(ratio_array), ratio_array, 0 ); ratio_sizer->Add( ratio_text, 0, wxALL, 2 ); ratio_sizer->Add( ratio_combo, 0, wxALL, 2 ); ratio_sizer->Layout(); video_sizer->Add( ratio_sizer , 0 , wxALL , 2 ); video_sizer->Layout();#endif wxStaticBox *filter_box = new wxStaticBox( panel, -1, wxU(_("Video Filters")) ); wxStaticBoxSizer *filter_sizer = new wxStaticBoxSizer( filter_box, wxHORIZONTAL ); wxBoxSizer *t_col_sizer = new wxBoxSizer( wxVERTICAL ); for( int i = 0 ; vfilters[i].psz_filter != NULL ; i++ ) { wxCheckBox *box = new wxCheckBox( panel, Filter0_Event + i, wxU( _( vfilters[i].psz_name ) ) ); t_col_sizer->Add( box, 0, wxALL, 4 ); box->SetToolTip( wxU( _( vfilters[i].psz_help ) ) ); } filter_sizer->Add( t_col_sizer ); filter_sizer->Add( new wxButton( panel, FiltersInfo_Event, wxU(_("More info" ) ) ), 0, wxALL, 4 );#if 0 other_sizer->Add( video_sizer, 0, wxALL | wxEXPAND , 0); other_sizer->Add( filter_sizer, 0, wxALL | wxEXPAND , 0); other_sizer->Layout(); panel_sizer->Add(other_sizer , 1 );#endif panel_sizer->Add( filter_sizer, 1, wxTOP|wxLEFT, 2 ); panel->SetSizerAndFit( panel_sizer ); /* Layout the whole panel */ panel_sizer->Layout(); panel_sizer->SetSizeHints( panel ); /* Write down initial values */ psz_filters = config_GetPsz( p_intf, "vout-filter" ); if( psz_filters && strstr( psz_filters, "adjust" ) ) { adjust_check->SetValue( 1 ); restoredefaults_button->Enable(); saturation_slider->Enable(); contrast_slider->Enable(); brightness_slider->Enable(); hue_slider->Enable(); gamma_slider->Enable(); } else { adjust_check->SetValue( 0 ); restoredefaults_button->Disable(); saturation_slider->Disable(); contrast_slider->Disable(); brightness_slider->Disable(); hue_slider->Disable(); gamma_slider->Disable(); } if( psz_filters ) free( psz_filters ); int i_value = config_GetInt( p_intf, "hue" ); if( i_value > 0 && i_value < 360 ) hue_slider->SetValue( i_value ); float f_value; f_value = config_GetFloat( p_intf, "saturation" ); if( f_value > 0 && f_value < 5 ) saturation_slider->SetValue( (int)(100 * f_value) ); f_value = config_GetFloat( p_intf, "contrast" ); if( f_value > 0 && f_value < 4 ) contrast_slider->SetValue( (int)(100 * f_value) ); f_value = config_GetFloat( p_intf, "brightness" ); if( f_value > 0 && f_value < 2 ) brightness_slider->SetValue( (int)(100 * f_value) ); f_value = config_GetFloat( p_intf, "gamma" ); if( f_value > 0 && f_value < 10 ) gamma_slider->SetValue( (int)(10 * f_value) ); b_update = VLC_FALSE; return panel;}/* Audio panel constructor */wxPanel *ExtraPanel::AudioPanel( wxWindow *parent ){ char *psz_filters; wxPanel *panel = new wxPanel( parent, -1 ); wxBoxSizer *panel_sizer = new wxBoxSizer( wxHORIZONTAL ); /* Create static box to surround the adjust controls */ wxStaticBox *filter_box = new wxStaticBox( panel, -1, wxU(_("Audio filters")) ); wxStaticBoxSizer *filter_sizer = new wxStaticBoxSizer( filter_box, wxVERTICAL ); filter_sizer->SetMinSize( -1, 50 ); wxCheckBox * headphone_check = new wxCheckBox( panel, HeadPhone_Event, wxU(_("Headphone virtualization"))); headphone_check->SetToolTip( wxU(_("This filter gives the feeling of a " "5.1 speaker set when using a headphone." ) ) ); wxCheckBox * normvol_check = new wxCheckBox( panel, NormVol_Event, wxU(_("Volume normalization"))); normvol_check->SetToolTip( wxU(_("This filter prevents the audio output " "power from going over a defined value." ) ) ); wxStaticText *normvol_label = new wxStaticText( panel, -1, wxU( _("Maximum level") ) ); wxSlider *normvol_slider = new wxSlider ( panel, NVSlider_Event, 20, 5, 100, wxDefaultPosition, wxSize( 100, -1 ) ); filter_sizer->Add( headphone_check, 0, wxALL, 4 );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -