mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-07-19 17:49:14 +00:00
UI: Change "main preview" to use OBSQTDisplay
(Non-compiling commit: windowless-context branch) Gets rid of all functions/data related to setting up the main preview to be associated with obs_reset_video and instead uses OBSQTDisplay for the main window display (thus associating it with an obs_display object).
This commit is contained in:
parent
3422631152
commit
f0b903435c
|
@ -841,10 +841,6 @@ void OBSBasic::OBSInit()
|
|||
if (ret <= 0)
|
||||
throw "Failed to get scene collection json file path";
|
||||
|
||||
/* make sure it's fully displayed before doing any initialization */
|
||||
show();
|
||||
App()->processEvents();
|
||||
|
||||
if (!obs_startup(App()->GetLocale()))
|
||||
throw "Failed to initialize libobs";
|
||||
if (!InitBasicConfig())
|
||||
|
@ -909,6 +905,20 @@ void OBSBasic::OBSInit()
|
|||
RefreshSceneCollections();
|
||||
RefreshProfiles();
|
||||
disableSaving--;
|
||||
|
||||
auto addDisplay = [this] (OBSQTDisplay *window)
|
||||
{
|
||||
obs_display_add_draw_callback(window->GetDisplay(),
|
||||
OBSBasic::RenderMain, this);
|
||||
|
||||
struct obs_video_info ovi;
|
||||
if (obs_get_video_info(&ovi))
|
||||
ResizePreview(ovi.base_width, ovi.base_height);
|
||||
};
|
||||
|
||||
connect(ui->preview, &OBSQTDisplay::DisplayCreated, addDisplay);
|
||||
|
||||
show();
|
||||
}
|
||||
|
||||
void OBSBasic::InitHotkeys()
|
||||
|
@ -1055,7 +1065,7 @@ void OBSBasic::ClearHotkeys()
|
|||
|
||||
OBSBasic::~OBSBasic()
|
||||
{
|
||||
bool previewEnabled = obs_preview_enabled();
|
||||
bool previewEnabled = obs_display_enabled(ui->preview->GetDisplay());
|
||||
|
||||
/* XXX: any obs data must be released before calling obs_shutdown.
|
||||
* currently, we can't automate this with C++ RAII because of the
|
||||
|
@ -1087,6 +1097,9 @@ OBSBasic::~OBSBasic()
|
|||
if (advAudioWindow)
|
||||
delete advAudioWindow;
|
||||
|
||||
obs_display_remove_draw_callback(ui->preview->GetDisplay(),
|
||||
OBSBasic::RenderMain, this);
|
||||
|
||||
obs_enter_graphics();
|
||||
gs_vertexbuffer_destroy(box);
|
||||
gs_vertexbuffer_destroy(circle);
|
||||
|
@ -1954,23 +1967,7 @@ bool OBSBasic::StreamingActive()
|
|||
|
||||
static inline int AttemptToResetVideo(struct obs_video_info *ovi)
|
||||
{
|
||||
int ret = obs_reset_video(ovi);
|
||||
if (ret == OBS_VIDEO_INVALID_PARAM) {
|
||||
struct obs_video_info new_params = *ovi;
|
||||
|
||||
if (new_params.window_width == 0)
|
||||
new_params.window_width = 512;
|
||||
if (new_params.window_height == 0)
|
||||
new_params.window_height = 512;
|
||||
|
||||
new_params.output_width = new_params.window_width;
|
||||
new_params.output_height = new_params.window_height;
|
||||
new_params.base_width = new_params.window_width;
|
||||
new_params.base_height = new_params.window_height;
|
||||
ret = obs_reset_video(&new_params);
|
||||
}
|
||||
|
||||
return ret;
|
||||
return obs_reset_video(ovi);
|
||||
}
|
||||
|
||||
static inline enum obs_scale_type GetScaleType(ConfigFile &basicConfig)
|
||||
|
@ -2038,15 +2035,6 @@ int OBSBasic::ResetVideo()
|
|||
ovi.gpu_conversion = true;
|
||||
ovi.scale_type = GetScaleType(basicConfig);
|
||||
|
||||
QTToGSWindow(ui->preview->winId(), ovi.window);
|
||||
|
||||
//required to make opengl display stuff on osx(?)
|
||||
ResizePreview(ovi.base_width, ovi.base_height);
|
||||
|
||||
QSize size = GetPixelSize(ui->preview);
|
||||
ovi.window_width = size.width();
|
||||
ovi.window_height = size.height();
|
||||
|
||||
ret = AttemptToResetVideo(&ovi);
|
||||
if (IS_WIN32 && ret != OBS_VIDEO_SUCCESS) {
|
||||
/* Try OpenGL if DirectX fails on windows */
|
||||
|
@ -2061,9 +2049,6 @@ int OBSBasic::ResetVideo()
|
|||
}
|
||||
}
|
||||
|
||||
if (ret == OBS_VIDEO_SUCCESS)
|
||||
obs_add_draw_callback(OBSBasic::RenderMain, this);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -2132,11 +2117,6 @@ void OBSBasic::ResizePreview(uint32_t cx, uint32_t cy)
|
|||
|
||||
previewX += float(PREVIEW_EDGE_SIZE);
|
||||
previewY += float(PREVIEW_EDGE_SIZE);
|
||||
|
||||
if (isVisible()) {
|
||||
QSize size = GetPixelSize(ui->preview);
|
||||
obs_resize(size.width(), size.height());
|
||||
}
|
||||
}
|
||||
|
||||
void OBSBasic::CloseDialogs()
|
||||
|
@ -2212,10 +2192,6 @@ void OBSBasic::closeEvent(QCloseEvent *event)
|
|||
|
||||
signalHandlers.clear();
|
||||
|
||||
// remove draw callback in case our drawable surfaces go away before
|
||||
// the destructor gets called
|
||||
obs_remove_draw_callback(OBSBasic::RenderMain, this);
|
||||
|
||||
SaveProjectNow();
|
||||
disableSaving++;
|
||||
|
||||
|
@ -2550,7 +2526,8 @@ void OBSBasic::CreateSourcePopupMenu(QListWidgetItem *item, bool preview)
|
|||
QTStr("Basic.Main.PreviewConextMenu.Enable"),
|
||||
this, SLOT(TogglePreview()));
|
||||
action->setCheckable(true);
|
||||
action->setChecked(obs_preview_enabled());
|
||||
action->setChecked(
|
||||
obs_display_enabled(ui->preview->GetDisplay()));
|
||||
|
||||
previewProjector = new QMenu(QTStr("PreviewProjector"));
|
||||
AddProjectorMenuMonitors(previewProjector, this,
|
||||
|
@ -3163,7 +3140,7 @@ void OBSBasic::on_previewDisabledLabel_customContextMenuRequested(
|
|||
QTStr("Basic.Main.PreviewConextMenu.Enable"),
|
||||
this, SLOT(TogglePreview()));
|
||||
action->setCheckable(true);
|
||||
action->setChecked(obs_preview_enabled());
|
||||
action->setChecked(obs_display_enabled(ui->preview->GetDisplay()));
|
||||
|
||||
previewProjector = new QMenu(QTStr("PreviewProjector"));
|
||||
AddProjectorMenuMonitors(previewProjector, this,
|
||||
|
@ -3476,8 +3453,8 @@ void OBSBasic::on_actionCenterToScreen_triggered()
|
|||
|
||||
void OBSBasic::TogglePreview()
|
||||
{
|
||||
bool enabled = !obs_preview_enabled();
|
||||
obs_preview_set_enabled(enabled);
|
||||
bool enabled = !obs_display_enabled(ui->preview->GetDisplay());
|
||||
obs_display_set_enabled(ui->preview->GetDisplay(), enabled);
|
||||
ui->preview->setVisible(enabled);
|
||||
ui->previewDisabledLabel->setVisible(!enabled);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue