浏览代码

create a sizing callback for the preview panel specifically, apparently on macos the window size isn't guaranteed to be the size it's set to in the main window size handler

jp9000 11 年之前
父节点
当前提交
1302e65ee6
共有 6 个文件被更改,包括 18 次插入5 次删除
  1. 1 1
      libobs/obs.c
  2. 2 0
      obs/forms/OBSWindows.cpp
  3. 1 1
      obs/forms/OBSWindows.fbp
  4. 1 0
      obs/forms/OBSWindows.h
  5. 12 3
      obs/window-basic-main.cpp
  6. 1 0
      obs/window-basic-main.hpp

+ 1 - 1
libobs/obs.c

@@ -425,7 +425,7 @@ bool obs_enum_output_types(size_t idx, const char **id)
 
 
 graphics_t obs_graphics(void)
 graphics_t obs_graphics(void)
 {
 {
-	return obs->video.graphics;
+	return (obs != NULL) ? obs->video.graphics : NULL;
 }
 }
 
 
 media_t obs_media(void)
 media_t obs_media(void)

+ 2 - 0
obs/forms/OBSWindows.cpp

@@ -240,6 +240,7 @@ OBSBasicBase::OBSBasicBase( wxWindow* parent, wxWindowID id, const wxString& tit
 	this->Connect( fileOpenMenu->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( OBSBasicBase::fileOpenClicked ) );
 	this->Connect( fileOpenMenu->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( OBSBasicBase::fileOpenClicked ) );
 	this->Connect( fileSaveMenu->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( OBSBasicBase::fileSaveClicked ) );
 	this->Connect( fileSaveMenu->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( OBSBasicBase::fileSaveClicked ) );
 	this->Connect( fileExitMenu->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( OBSBasicBase::fileExitClicked ) );
 	this->Connect( fileExitMenu->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( OBSBasicBase::fileExitClicked ) );
+	previewPanel->Connect( wxEVT_SIZE, wxSizeEventHandler( OBSBasicBase::OnResizePreview ), NULL, this );
 	scenes->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( OBSBasicBase::scenesClicked ), NULL, this );
 	scenes->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( OBSBasicBase::scenesClicked ), NULL, this );
 	scenes->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( OBSBasicBase::scenesRDown ), NULL, this );
 	scenes->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( OBSBasicBase::scenesRDown ), NULL, this );
 	this->Connect( ID_SCENE_ADD, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler( OBSBasicBase::sceneAddClicked ) );
 	this->Connect( ID_SCENE_ADD, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler( OBSBasicBase::sceneAddClicked ) );
@@ -271,6 +272,7 @@ OBSBasicBase::~OBSBasicBase()
 	this->Disconnect( IF_FILE_OPEN, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( OBSBasicBase::fileOpenClicked ) );
 	this->Disconnect( IF_FILE_OPEN, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( OBSBasicBase::fileOpenClicked ) );
 	this->Disconnect( IF_FILE_SAVE, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( OBSBasicBase::fileSaveClicked ) );
 	this->Disconnect( IF_FILE_SAVE, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( OBSBasicBase::fileSaveClicked ) );
 	this->Disconnect( ID_FILE_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( OBSBasicBase::fileExitClicked ) );
 	this->Disconnect( ID_FILE_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( OBSBasicBase::fileExitClicked ) );
+	previewPanel->Disconnect( wxEVT_SIZE, wxSizeEventHandler( OBSBasicBase::OnResizePreview ), NULL, this );
 	scenes->Disconnect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( OBSBasicBase::scenesClicked ), NULL, this );
 	scenes->Disconnect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( OBSBasicBase::scenesClicked ), NULL, this );
 	scenes->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( OBSBasicBase::scenesRDown ), NULL, this );
 	scenes->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( OBSBasicBase::scenesRDown ), NULL, this );
 	this->Disconnect( ID_SCENE_ADD, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler( OBSBasicBase::sceneAddClicked ) );
 	this->Disconnect( ID_SCENE_ADD, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler( OBSBasicBase::sceneAddClicked ) );

+ 1 - 1
obs/forms/OBSWindows.fbp

@@ -394,7 +394,7 @@
                                                             <event name="OnRightDown"></event>
                                                             <event name="OnRightDown"></event>
                                                             <event name="OnRightUp"></event>
                                                             <event name="OnRightUp"></event>
                                                             <event name="OnSetFocus"></event>
                                                             <event name="OnSetFocus"></event>
-                                                            <event name="OnSize"></event>
+                                                            <event name="OnSize">OnResizePreview</event>
                                                             <event name="OnUpdateUI"></event>
                                                             <event name="OnUpdateUI"></event>
                                                         </object>
                                                         </object>
                                                     </object>
                                                     </object>

+ 1 - 0
obs/forms/OBSWindows.h

@@ -139,6 +139,7 @@ class OBSBasicBase : public WindowSubclass
 		virtual void fileOpenClicked( wxCommandEvent& event ) { event.Skip(); }
 		virtual void fileOpenClicked( wxCommandEvent& event ) { event.Skip(); }
 		virtual void fileSaveClicked( wxCommandEvent& event ) { event.Skip(); }
 		virtual void fileSaveClicked( wxCommandEvent& event ) { event.Skip(); }
 		virtual void fileExitClicked( wxCommandEvent& event ) { event.Skip(); }
 		virtual void fileExitClicked( wxCommandEvent& event ) { event.Skip(); }
+		virtual void OnResizePreview( wxSizeEvent& event ) { event.Skip(); }
 		virtual void scenesClicked( wxCommandEvent& event ) { event.Skip(); }
 		virtual void scenesClicked( wxCommandEvent& event ) { event.Skip(); }
 		virtual void scenesRDown( wxMouseEvent& event ) { event.Skip(); }
 		virtual void scenesRDown( wxMouseEvent& event ) { event.Skip(); }
 		virtual void sceneAddClicked( wxCommandEvent& event ) { event.Skip(); }
 		virtual void sceneAddClicked( wxCommandEvent& event ) { event.Skip(); }

+ 12 - 3
obs/window-basic-main.cpp

@@ -185,11 +185,20 @@ void OBSBasic::OnSize(wxSizeEvent &event)
 		return;
 		return;
 
 
 	ResizePreview(ovi.base_width, ovi.base_height);
 	ResizePreview(ovi.base_width, ovi.base_height);
+}
+
+void OBSBasic::OnResizePreview(wxSizeEvent &event)
+{
+	event.Skip();
+
 	wxSize newSize = previewPanel->GetMinSize();
 	wxSize newSize = previewPanel->GetMinSize();
 
 
-	gs_entercontext(obs_graphics());
-	gs_resize(newSize.x, newSize.y);
-	gs_leavecontext();
+	graphics_t graphics = obs_graphics();
+	if (graphics) {
+		gs_entercontext(graphics);
+		gs_resize(newSize.x, newSize.y);
+		gs_leavecontext();
+	}
 }
 }
 
 
 void OBSBasic::fileNewClicked(wxCommandEvent &event)
 void OBSBasic::fileNewClicked(wxCommandEvent &event)

+ 1 - 0
obs/window-basic-main.hpp

@@ -43,6 +43,7 @@ protected:
 	virtual void OnClose(wxCloseEvent &event);
 	virtual void OnClose(wxCloseEvent &event);
 	virtual void OnMinimize(wxIconizeEvent &event);
 	virtual void OnMinimize(wxIconizeEvent &event);
 	virtual void OnSize(wxSizeEvent &event);
 	virtual void OnSize(wxSizeEvent &event);
+	virtual void OnResizePreview(wxSizeEvent &event);
 	virtual void fileNewClicked(wxCommandEvent &event);
 	virtual void fileNewClicked(wxCommandEvent &event);
 	virtual void fileOpenClicked(wxCommandEvent &event);
 	virtual void fileOpenClicked(wxCommandEvent &event);
 	virtual void fileSaveClicked(wxCommandEvent &event);
 	virtual void fileSaveClicked(wxCommandEvent &event);