提交 f41bb4b7 编写于 作者: J jp9000

add support for texture_rect texture type in shaders, add new form, clear up a...

add support for texture_rect texture type in shaders, add new form, clear up a few things in the API
上级 eb8c2923
...@@ -211,6 +211,8 @@ void ShaderProcessor::BuildString(string &outputString) ...@@ -211,6 +211,8 @@ void ShaderProcessor::BuildString(string &outputString)
output << "Texture3D"; output << "Texture3D";
else if (strref_cmp(&token->str, "texture_cube") == 0) else if (strref_cmp(&token->str, "texture_cube") == 0)
output << "TextureCube"; output << "TextureCube";
else if (strref_cmp(&token->str, "texture_rect") == 0)
throw "texture_rect is not supported in D3D";
else if (strref_cmp(&token->str, "sampler_state") == 0) else if (strref_cmp(&token->str, "sampler_state") == 0)
output << "SamplerState"; output << "SamplerState";
else else
......
...@@ -75,6 +75,8 @@ static bool gl_write_type_n(struct gl_shader_parser *glsp, ...@@ -75,6 +75,8 @@ static bool gl_write_type_n(struct gl_shader_parser *glsp,
dstr_cat(&glsp->gl_string, "sampler3D"); dstr_cat(&glsp->gl_string, "sampler3D");
else if (cmp_type(type, len, "texture_cube", 12) == 0) else if (cmp_type(type, len, "texture_cube", 12) == 0)
dstr_cat(&glsp->gl_string, "samplerCube"); dstr_cat(&glsp->gl_string, "samplerCube");
else if (cmp_type(type, len, "texture_rect", 12) == 0)
dstr_cat(&glsp->gl_string, "sampler2DRect");
else else
return false; return false;
......
...@@ -85,6 +85,7 @@ static inline const struct source_info *find_source(struct darray *list, ...@@ -85,6 +85,7 @@ static inline const struct source_info *find_source(struct darray *list,
return NULL; return NULL;
} }
/* internal initialization */
bool obs_source_init(struct obs_source *source, const char *settings, bool obs_source_init(struct obs_source *source, const char *settings,
const struct source_info *info) const struct source_info *info)
{ {
...@@ -129,12 +130,13 @@ obs_source_t obs_source_create(enum obs_source_type type, const char *name, ...@@ -129,12 +130,13 @@ obs_source_t obs_source_create(enum obs_source_type type, const char *name,
case SOURCE_TRANSITION: list = &obs->transition_types.da; break; case SOURCE_TRANSITION: list = &obs->transition_types.da; break;
case SOURCE_SCENE: case SOURCE_SCENE:
default: default:
blog(LOG_WARNING, "Tried to create invalid source type");
return NULL; return NULL;
} }
info = find_source(list, name); info = find_source(list, name);
if (!info) { if (!info) {
blog(LOG_WARNING, "Source '%s' not found", name); blog(LOG_WARNING, "Source type '%s' not found", name);
return NULL; return NULL;
} }
...@@ -189,6 +191,7 @@ static void obs_source_destroy(obs_source_t source) ...@@ -189,6 +191,7 @@ static void obs_source_destroy(obs_source_t source)
pthread_mutex_destroy(&source->audio_mutex); pthread_mutex_destroy(&source->audio_mutex);
pthread_mutex_destroy(&source->video_mutex); pthread_mutex_destroy(&source->video_mutex);
dstr_free(&source->settings); dstr_free(&source->settings);
bfree(source->name);
bfree(source); bfree(source);
} }
...@@ -273,6 +276,7 @@ void obs_source_video_tick(obs_source_t source, float seconds) ...@@ -273,6 +276,7 @@ void obs_source_video_tick(obs_source_t source, float seconds)
source->callbacks.video_tick(source->data, seconds); source->callbacks.video_tick(source->data, seconds);
} }
/* maximum "direct" timestamp variance in nanoseconds */
#define MAX_VARIANCE 2000000000ULL #define MAX_VARIANCE 2000000000ULL
static void source_output_audio_line(obs_source_t source, static void source_output_audio_line(obs_source_t source,
...@@ -293,7 +297,7 @@ static void source_output_audio_line(obs_source_t source, ...@@ -293,7 +297,7 @@ static void source_output_audio_line(obs_source_t source,
source->timing_adjust = in.timestamp - os_gettime_ns(); source->timing_adjust = in.timestamp - os_gettime_ns();
/* detects 'directly' set timestamps as long as they're within /* detects 'directly' set timestamps as long as they're within
* a certain threashold */ * a certain threshold */
if ((source->timing_adjust+MAX_VARIANCE) < MAX_VARIANCE*2) if ((source->timing_adjust+MAX_VARIANCE) < MAX_VARIANCE*2)
source->timing_adjust = 0; source->timing_adjust = 0;
} }
...@@ -605,7 +609,7 @@ void obs_source_filter_setorder(obs_source_t source, obs_source_t filter, ...@@ -605,7 +609,7 @@ void obs_source_filter_setorder(obs_source_t source, obs_source_t filter,
da_move_item(source->filters, idx, 0); da_move_item(source->filters, idx, 0);
} }
/* reorder filter targets */ /* reorder filter targets, not the nicest way of dealing with things */
for (i = 0; i < source->filters.num; i++) { for (i = 0; i < source->filters.num; i++) {
obs_source_t next_filter = (i == source->filters.num-1) ? obs_source_t next_filter = (i == source->filters.num-1) ?
source : source->filters.array[idx+1]; source : source->filters.array[idx+1];
...@@ -774,6 +778,8 @@ void obs_source_output_audio(obs_source_t source, ...@@ -774,6 +778,8 @@ void obs_source_output_audio(obs_source_t source,
if (output) { if (output) {
pthread_mutex_lock(&source->audio_mutex); pthread_mutex_lock(&source->audio_mutex);
/* wait for video to start before outputting any audio so we
* have a base for sync */
if (!source->timing_set && flags & SOURCE_ASYNC_VIDEO) { if (!source->timing_set && flags & SOURCE_ASYNC_VIDEO) {
struct audiobuf newbuf; struct audiobuf newbuf;
size_t audio_size = blocksize * output->frames; size_t audio_size = blocksize * output->frames;
...@@ -802,7 +808,7 @@ void obs_source_output_audio(obs_source_t source, ...@@ -802,7 +808,7 @@ void obs_source_output_audio(obs_source_t source,
/* /*
* Ensures that cached frames are displayed on time. If multiple frames * Ensures that cached frames are displayed on time. If multiple frames
* were cached between renders, then releases the unnecessary frames and uses * were cached between renders, then releases the unnecessary frames and uses
* the frame with the closest timing. * the frame with the closest timing to ensure sync.
*/ */
struct source_frame *obs_source_getframe(obs_source_t source) struct source_frame *obs_source_getframe(obs_source_t source)
{ {
......
...@@ -204,33 +204,37 @@ struct obs_source { ...@@ -204,33 +204,37 @@ struct obs_source {
volatile int refs; volatile int refs;
/* source-specific data */ /* source-specific data */
char *name;
struct dstr settings;
void *data; void *data;
struct source_info callbacks; struct source_info callbacks;
struct dstr settings;
/* used to indicate that the source has been removed and all /* used to indicate that the source has been removed and all
* references to it should be released (not exactly how I would prefer * references to it should be released (not exactly how I would prefer
* to handle things but it's the best option) */ * to handle things but it's the best option) */
bool removed; bool removed;
/* async video and audio */ /* timing (if video is present, is based upon video) */
bool timing_set; bool timing_set;
uint64_t timing_adjust; uint64_t timing_adjust;
uint64_t last_frame_timestamp; uint64_t last_frame_timestamp;
uint64_t last_sys_timestamp; uint64_t last_sys_timestamp;
texture_t output_texture;
/* audio */
bool audio_failed; bool audio_failed;
struct resample_info sample_info; struct resample_info sample_info;
audio_resampler_t resampler; audio_resampler_t resampler;
audio_line_t audio_line; audio_line_t audio_line;
DARRAY(struct audiobuf) audio_wait_buffer; DARRAY(struct audiobuf) audio_wait_buffer; /* pending data */
DARRAY(struct source_frame*) video_frames;
pthread_mutex_t audio_mutex; pthread_mutex_t audio_mutex;
pthread_mutex_t video_mutex;
struct filtered_audio audio_data; struct filtered_audio audio_data;
size_t audio_storage_size; size_t audio_storage_size;
/* async video data */
texture_t output_texture;
DARRAY(struct source_frame*) video_frames;
pthread_mutex_t video_mutex;
/* filters */ /* filters */
struct obs_source *filter_parent; struct obs_source *filter_parent;
struct obs_source *filter_target; struct obs_source *filter_target;
......
...@@ -738,3 +738,52 @@ OBSBasicSettingsBase::~OBSBasicSettingsBase() ...@@ -738,3 +738,52 @@ OBSBasicSettingsBase::~OBSBasicSettingsBase()
applyButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OBSBasicSettingsBase::ApplyClicked ), NULL, this ); applyButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OBSBasicSettingsBase::ApplyClicked ), NULL, this );
} }
ProjectChooserBase::ProjectChooserBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
wxBoxSizer* bSizer40;
bSizer40 = new wxBoxSizer( wxVERTICAL );
m_staticText22 = new wxStaticText( this, wxID_ANY, _("ProjectChooser.SelectType"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText22->Wrap( -1 );
bSizer40->Add( m_staticText22, 0, wxALL, 5 );
wxBoxSizer* bSizer41;
bSizer41 = new wxBoxSizer( wxVERTICAL );
basicButton = new wxButton( this, wxID_ANY, _("ProjectChooser.Basic"), wxDefaultPosition, wxDefaultSize, 0 );
bSizer41->Add( basicButton, 0, wxALL|wxEXPAND, 5 );
studioButton = new wxButton( this, wxID_ANY, _("ProjectChooser.Studio"), wxDefaultPosition, wxDefaultSize, 0 );
bSizer41->Add( studioButton, 0, wxALL|wxEXPAND, 5 );
exitButton = new wxButton( this, wxID_ANY, _("MainWindow.Exit"), wxDefaultPosition, wxDefaultSize, 0 );
bSizer41->Add( exitButton, 0, wxALL|wxEXPAND, 5 );
bSizer40->Add( bSizer41, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
this->SetSizer( bSizer40 );
this->Layout();
this->Centre( wxBOTH );
// Connect Events
this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( ProjectChooserBase::OnClose ) );
basicButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ProjectChooserBase::BasicClicked ), NULL, this );
studioButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ProjectChooserBase::StudioClicked ), NULL, this );
exitButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ProjectChooserBase::ExitClicked ), NULL, this );
}
ProjectChooserBase::~ProjectChooserBase()
{
// Disconnect Events
this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( ProjectChooserBase::OnClose ) );
basicButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ProjectChooserBase::BasicClicked ), NULL, this );
studioButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ProjectChooserBase::StudioClicked ), NULL, this );
exitButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ProjectChooserBase::ExitClicked ), NULL, this );
}
...@@ -6966,5 +6966,432 @@ ...@@ -6966,5 +6966,432 @@
</object> </object>
</object> </object>
</object> </object>
<object class="Dialog" expanded="0">
<property name="aui_managed">0</property>
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
<property name="bg"></property>
<property name="center">wxBOTH</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property>
<property name="event_handler">impl_virtual</property>
<property name="extra_style"></property>
<property name="fg"></property>
<property name="font"></property>
<property name="hidden">0</property>
<property name="id">ID_PROJECT_CHOOSER</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="name">ProjectChooserBase</property>
<property name="pos"></property>
<property name="size">445,159</property>
<property name="style">wxDEFAULT_DIALOG_STYLE</property>
<property name="subclass"></property>
<property name="title">ProjectChooser</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnActivate"></event>
<event name="OnActivateApp"></event>
<event name="OnAuiFindManager"></event>
<event name="OnAuiPaneButton"></event>
<event name="OnAuiPaneClose"></event>
<event name="OnAuiPaneMaximize"></event>
<event name="OnAuiPaneRestore"></event>
<event name="OnAuiRender"></event>
<event name="OnChar"></event>
<event name="OnClose">OnClose</event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnHibernate"></event>
<event name="OnIconize"></event>
<event name="OnIdle"></event>
<event name="OnInitDialog"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
<object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property>
<property name="name">bSizer40</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">ProjectChooser.SelectType</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_staticText22</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_HORIZONTAL</property>
<property name="proportion">0</property>
<object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property>
<property name="name">bSizer41</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default">0</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">ProjectChooser.Basic</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">basicButton</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnButtonClick">BasicClicked</event>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default">0</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">ProjectChooser.Studio</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">studioButton</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnButtonClick">StudioClicked</event>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default">0</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">MainWindow.Exit</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">exitButton</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnButtonClick">ExitClicked</event>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
</object>
</object>
</object>
</object> </object>
</wxFormBuilder_Project> </wxFormBuilder_Project>
...@@ -97,6 +97,7 @@ class WindowSubclass; ...@@ -97,6 +97,7 @@ class WindowSubclass;
#define ID_OK 1050 #define ID_OK 1050
#define ID_CANCEL 1051 #define ID_CANCEL 1051
#define ID_APPLY 1052 #define ID_APPLY 1052
#define ID_PROJECT_CHOOSER 1053
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
/// Class OBSBasicBase /// Class OBSBasicBase
...@@ -262,4 +263,31 @@ class OBSBasicSettingsBase : public DialogSubclass ...@@ -262,4 +263,31 @@ class OBSBasicSettingsBase : public DialogSubclass
}; };
///////////////////////////////////////////////////////////////////////////////
/// Class ProjectChooserBase
///////////////////////////////////////////////////////////////////////////////
class ProjectChooserBase : public wxDialog
{
private:
protected:
wxStaticText* m_staticText22;
wxButton* basicButton;
wxButton* studioButton;
wxButton* exitButton;
// Virtual event handlers, overide them in your derived class
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
virtual void BasicClicked( wxCommandEvent& event ) { event.Skip(); }
virtual void StudioClicked( wxCommandEvent& event ) { event.Skip(); }
virtual void ExitClicked( wxCommandEvent& event ) { event.Skip(); }
public:
ProjectChooserBase( wxWindow* parent, wxWindowID id = ID_PROJECT_CHOOSER, const wxString& title = _("ProjectChooser"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 445,159 ), long style = wxDEFAULT_DIALOG_STYLE );
~ProjectChooserBase();
};
#endif //__OBSWINDOWS_H__ #endif //__OBSWINDOWS_H__
...@@ -20,6 +20,10 @@ ...@@ -20,6 +20,10 @@
#include "forms/OBSWindows.h" #include "forms/OBSWindows.h"
class OBSBasic : public OBSBasicBase { class OBSBasic : public OBSBasicBase {
void NewProject();
void SaveProject();
void LoadProject();
protected: protected:
virtual void OnClose(wxCloseEvent &event); virtual void OnClose(wxCloseEvent &event);
virtual void OnMinimize(wxIconizeEvent &event); virtual void OnMinimize(wxIconizeEvent &event);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册