UI: Prune obs_display code from secondary windows
(Non-compiling commit: windowless-context branch) Now that all obs_display related code has been moved to OBSQTDisplay, we can prune a whole bunch of boilerplate code that had to be repeated for the displays of each window. Affects: - Properties - Filters - Interact - Projectormaster
parent
f0b903435c
commit
e93ca4cd10
|
@ -72,9 +72,6 @@ OBSBasicFilters::OBSBasicFilters(QWidget *parent, OBSSource source_)
|
|||
|
||||
installEventFilter(CreateShortcutFilter());
|
||||
|
||||
connect(ui->preview, SIGNAL(DisplayResized()),
|
||||
this, SLOT(OnPreviewResized()));
|
||||
|
||||
connect(ui->asyncFilters->itemDelegate(),
|
||||
SIGNAL(closeEditor(QWidget*,
|
||||
QAbstractItemDelegate::EndEditHint)),
|
||||
|
@ -105,6 +102,14 @@ OBSBasicFilters::OBSBasicFilters(QWidget *parent, OBSSource source_)
|
|||
|
||||
if (audioOnly || (audio && !async))
|
||||
ui->asyncLabel->setText(QTStr("Basic.Filters.AudioFilters"));
|
||||
|
||||
auto addDrawCallback = [this] ()
|
||||
{
|
||||
obs_display_add_draw_callback(ui->preview->GetDisplay(),
|
||||
OBSBasicFilters::DrawPreview, this);
|
||||
};
|
||||
|
||||
connect(ui->preview, &OBSQTDisplay::DisplayCreated, addDrawCallback);
|
||||
}
|
||||
|
||||
OBSBasicFilters::~OBSBasicFilters()
|
||||
|
@ -115,21 +120,7 @@ OBSBasicFilters::~OBSBasicFilters()
|
|||
|
||||
void OBSBasicFilters::Init()
|
||||
{
|
||||
gs_init_data init_data = {};
|
||||
|
||||
show();
|
||||
|
||||
QSize previewSize = GetPixelSize(ui->preview);
|
||||
init_data.cx = uint32_t(previewSize.width());
|
||||
init_data.cy = uint32_t(previewSize.height());
|
||||
init_data.format = GS_RGBA;
|
||||
QTToGSWindow(ui->preview->winId(), init_data.window);
|
||||
|
||||
display = obs_display_create(&init_data);
|
||||
|
||||
if (display)
|
||||
obs_display_add_draw_callback(display,
|
||||
OBSBasicFilters::DrawPreview, this);
|
||||
}
|
||||
|
||||
inline OBSSource OBSBasicFilters::GetFilter(int row, bool async)
|
||||
|
@ -393,24 +384,12 @@ void OBSBasicFilters::AddFilterFromAction()
|
|||
AddNewFilter(QT_TO_UTF8(action->data().toString()));
|
||||
}
|
||||
|
||||
void OBSBasicFilters::OnPreviewResized()
|
||||
{
|
||||
QSize size = GetPixelSize(ui->preview);
|
||||
obs_display_resize(display, size.width(), size.height());
|
||||
}
|
||||
|
||||
void OBSBasicFilters::closeEvent(QCloseEvent *event)
|
||||
{
|
||||
QDialog::closeEvent(event);
|
||||
if (!event->isAccepted())
|
||||
return;
|
||||
|
||||
// remove draw callback and release display in case our drawable
|
||||
// surfaces go away before the destructor gets called
|
||||
obs_display_remove_draw_callback(display,
|
||||
OBSBasicFilters::DrawPreview, this);
|
||||
display = nullptr;
|
||||
|
||||
main->SaveProject();
|
||||
}
|
||||
|
||||
|
|
|
@ -39,7 +39,6 @@ private:
|
|||
OBSSource source;
|
||||
OBSPropertiesView *view = nullptr;
|
||||
|
||||
OBSDisplay display;
|
||||
OBSSignal addSignal;
|
||||
OBSSignal removeSignal;
|
||||
OBSSignal reorderSignal;
|
||||
|
@ -78,8 +77,6 @@ private slots:
|
|||
|
||||
void AddFilterFromAction();
|
||||
|
||||
void OnPreviewResized();
|
||||
|
||||
void on_addAsyncFilter_clicked();
|
||||
void on_removeAsyncFilter_clicked();
|
||||
void on_moveAsyncFilterUp_clicked();
|
||||
|
|
|
@ -56,13 +56,16 @@ OBSBasicInteraction::OBSBasicInteraction(QWidget *parent, OBSSource source_)
|
|||
OBSData settings = obs_source_get_settings(source);
|
||||
obs_data_release(settings);
|
||||
|
||||
connect(windowHandle(), &QWindow::screenChanged, [this]() {
|
||||
QSize size = GetPixelSize(ui->preview);
|
||||
obs_display_resize(display, size.width(), size.height());
|
||||
});
|
||||
|
||||
const char *name = obs_source_get_name(source);
|
||||
setWindowTitle(QTStr("Basic.InteractionWindow").arg(QT_UTF8(name)));
|
||||
|
||||
auto addDrawCallback = [this] ()
|
||||
{
|
||||
obs_display_add_draw_callback(ui->preview->GetDisplay(),
|
||||
OBSBasicInteraction::DrawPreview, this);
|
||||
};
|
||||
|
||||
connect(ui->preview, &OBSQTDisplay::DisplayCreated, addDrawCallback);
|
||||
}
|
||||
|
||||
OBSBasicInteraction::~OBSBasicInteraction()
|
||||
|
@ -155,34 +158,12 @@ void OBSBasicInteraction::DrawPreview(void *data, uint32_t cx, uint32_t cy)
|
|||
gs_viewport_pop();
|
||||
}
|
||||
|
||||
void OBSBasicInteraction::OnInteractionResized()
|
||||
{
|
||||
QSize size = GetPixelSize(ui->preview);
|
||||
obs_display_resize(display, size.width(), size.height());
|
||||
}
|
||||
|
||||
void OBSBasicInteraction::resizeEvent(QResizeEvent *event)
|
||||
{
|
||||
if (isVisible()) {
|
||||
QSize size = GetPixelSize(ui->preview);
|
||||
obs_display_resize(display, size.width(), size.height());
|
||||
}
|
||||
|
||||
QDialog::resizeEvent(event);
|
||||
}
|
||||
|
||||
void OBSBasicInteraction::closeEvent(QCloseEvent *event)
|
||||
{
|
||||
QDialog::closeEvent(event);
|
||||
if (!event->isAccepted())
|
||||
return;
|
||||
|
||||
// remove draw callback and release display in case our drawable
|
||||
// surfaces go away before the destructor gets called
|
||||
obs_display_remove_draw_callback(display,
|
||||
OBSBasicInteraction::DrawPreview, this);
|
||||
display = nullptr;
|
||||
|
||||
config_set_int(App()->GlobalConfig(), "InteractionWindow", "cx",
|
||||
width());
|
||||
config_set_int(App()->GlobalConfig(), "InteractionWindow", "cy",
|
||||
|
@ -381,19 +362,5 @@ bool OBSBasicInteraction::HandleKeyEvent(QKeyEvent *event)
|
|||
|
||||
void OBSBasicInteraction::Init()
|
||||
{
|
||||
gs_init_data init_data = {};
|
||||
|
||||
show();
|
||||
|
||||
QSize previewSize = GetPixelSize(ui->preview);
|
||||
init_data.cx = uint32_t(previewSize.width());
|
||||
init_data.cy = uint32_t(previewSize.height());
|
||||
init_data.format = GS_RGBA;
|
||||
QTToGSWindow(ui->preview->winId(), init_data.window);
|
||||
|
||||
display = obs_display_create(&init_data);
|
||||
|
||||
if (display)
|
||||
obs_display_add_draw_callback(display,
|
||||
OBSBasicInteraction::DrawPreview, this);
|
||||
}
|
||||
|
|
|
@ -39,7 +39,6 @@ private:
|
|||
|
||||
std::unique_ptr<Ui::OBSBasicInteraction> ui;
|
||||
OBSSource source;
|
||||
OBSDisplay display;
|
||||
OBSSignal removedSignal;
|
||||
OBSSignal renamedSignal;
|
||||
std::unique_ptr<OBSEventFilter> eventFilter;
|
||||
|
@ -58,9 +57,6 @@ private:
|
|||
|
||||
OBSEventFilter *BuildEventFilter();
|
||||
|
||||
private slots:
|
||||
void OnInteractionResized();
|
||||
|
||||
public:
|
||||
OBSBasicInteraction(QWidget *parent, OBSSource source_);
|
||||
~OBSBasicInteraction();
|
||||
|
@ -68,7 +64,6 @@ public:
|
|||
void Init();
|
||||
|
||||
protected:
|
||||
virtual void resizeEvent(QResizeEvent *event) override;
|
||||
virtual void closeEvent(QCloseEvent *event) override;
|
||||
};
|
||||
|
||||
|
|
|
@ -85,14 +85,6 @@ OBSBasicProperties::OBSBasicProperties(QWidget *parent, OBSSource source_)
|
|||
|
||||
installEventFilter(CreateShortcutFilter());
|
||||
|
||||
connect(view, SIGNAL(PropertiesResized()),
|
||||
this, SLOT(OnPropertiesResized()));
|
||||
|
||||
connect(windowHandle(), &QWindow::screenChanged, [this]() {
|
||||
QSize size = GetPixelSize(preview);
|
||||
obs_display_resize(display, size.width(), size.height());
|
||||
});
|
||||
|
||||
const char *name = obs_source_get_name(source);
|
||||
setWindowTitle(QTStr("Basic.PropertiesWindow").arg(QT_UTF8(name)));
|
||||
|
||||
|
@ -102,6 +94,14 @@ OBSBasicProperties::OBSBasicProperties(QWidget *parent, OBSSource source_)
|
|||
"update_properties",
|
||||
OBSBasicProperties::UpdateProperties,
|
||||
this);
|
||||
|
||||
auto addDrawCallback = [this] ()
|
||||
{
|
||||
obs_display_add_draw_callback(preview->GetDisplay(),
|
||||
OBSBasicProperties::DrawPreview, this);
|
||||
};
|
||||
|
||||
connect(preview, &OBSQTDisplay::DisplayCreated, addDrawCallback);
|
||||
}
|
||||
|
||||
OBSBasicProperties::~OBSBasicProperties()
|
||||
|
@ -190,30 +190,8 @@ void OBSBasicProperties::DrawPreview(void *data, uint32_t cx, uint32_t cy)
|
|||
gs_viewport_pop();
|
||||
}
|
||||
|
||||
void OBSBasicProperties::OnPropertiesResized()
|
||||
{
|
||||
QSize size = GetPixelSize(preview);
|
||||
obs_display_resize(display, size.width(), size.height());
|
||||
}
|
||||
|
||||
void OBSBasicProperties::resizeEvent(QResizeEvent *event)
|
||||
{
|
||||
if (isVisible()) {
|
||||
QSize size = GetPixelSize(preview);
|
||||
obs_display_resize(display, size.width(), size.height());
|
||||
}
|
||||
|
||||
QDialog::resizeEvent(event);
|
||||
}
|
||||
|
||||
void OBSBasicProperties::Cleanup()
|
||||
{
|
||||
// remove draw callback and release display in case our drawable
|
||||
// surfaces go away before the destructor gets called
|
||||
obs_display_remove_draw_callback(display,
|
||||
OBSBasicProperties::DrawPreview, this);
|
||||
display = nullptr;
|
||||
|
||||
config_set_int(App()->GlobalConfig(), "PropertiesWindow", "cx",
|
||||
width());
|
||||
config_set_int(App()->GlobalConfig(), "PropertiesWindow", "cy",
|
||||
|
@ -250,21 +228,7 @@ void OBSBasicProperties::closeEvent(QCloseEvent *event)
|
|||
|
||||
void OBSBasicProperties::Init()
|
||||
{
|
||||
gs_init_data init_data = {};
|
||||
|
||||
show();
|
||||
|
||||
QSize previewSize = GetPixelSize(preview);
|
||||
init_data.cx = uint32_t(previewSize.width());
|
||||
init_data.cy = uint32_t(previewSize.height());
|
||||
init_data.format = GS_RGBA;
|
||||
QTToGSWindow(preview->winId(), init_data.window);
|
||||
|
||||
display = obs_display_create(&init_data);
|
||||
|
||||
if (display)
|
||||
obs_display_add_draw_callback(display,
|
||||
OBSBasicProperties::DrawPreview, this);
|
||||
}
|
||||
|
||||
int OBSBasicProperties::CheckSettings()
|
||||
|
|
|
@ -36,7 +36,6 @@ private:
|
|||
bool acceptClicked;
|
||||
|
||||
OBSSource source;
|
||||
OBSDisplay display;
|
||||
OBSSignal removedSignal;
|
||||
OBSSignal renamedSignal;
|
||||
OBSSignal updatePropertiesSignal;
|
||||
|
@ -53,7 +52,6 @@ private:
|
|||
void Cleanup();
|
||||
|
||||
private slots:
|
||||
void OnPropertiesResized();
|
||||
void on_buttonBox_clicked(QAbstractButton *button);
|
||||
|
||||
public:
|
||||
|
@ -63,7 +61,6 @@ public:
|
|||
void Init();
|
||||
|
||||
protected:
|
||||
virtual void resizeEvent(QResizeEvent *event) override;
|
||||
virtual void closeEvent(QCloseEvent *event) override;
|
||||
virtual void reject() override;
|
||||
};
|
||||
|
|
|
@ -17,6 +17,14 @@ OBSProjector::OBSProjector(QWidget *widget, obs_source_t *source_)
|
|||
setAttribute(Qt::WA_DeleteOnClose, true);
|
||||
|
||||
installEventFilter(CreateShortcutFilter());
|
||||
|
||||
auto addDrawCallback = [this] ()
|
||||
{
|
||||
obs_display_add_draw_callback(GetDisplay(), OBSRender, this);
|
||||
obs_display_set_background_color(GetDisplay(), 0x000000);
|
||||
};
|
||||
|
||||
connect(this, &OBSQTDisplay::DisplayCreated, addDrawCallback);
|
||||
}
|
||||
|
||||
OBSProjector::~OBSProjector()
|
||||
|
@ -38,16 +46,6 @@ void OBSProjector::Init(int monitor)
|
|||
if (source)
|
||||
obs_source_inc_showing(source);
|
||||
|
||||
struct gs_init_data gid = {};
|
||||
gid.cx = mi.cx;
|
||||
gid.cy = mi.cy;
|
||||
gid.format = GS_RGBA;
|
||||
QTToGSWindow(winId(), gid.window);
|
||||
|
||||
display = obs_display_create(&gid);
|
||||
obs_display_set_background_color(display, 0x000000);
|
||||
obs_display_add_draw_callback(display, OBSRender, this);
|
||||
|
||||
QAction *action = new QAction(this);
|
||||
action->setShortcut(Qt::Key_Escape);
|
||||
addAction(action);
|
||||
|
|
|
@ -9,7 +9,6 @@ class OBSProjector : public OBSQTDisplay {
|
|||
Q_OBJECT
|
||||
|
||||
private:
|
||||
OBSDisplay display;
|
||||
OBSSource source;
|
||||
OBSSignal removedSignal;
|
||||
|
||||
|
|
Loading…
Reference in New Issue