|
@@ -464,6 +464,7 @@ OBSBasic::OBSBasic(QWidget *parent)
|
|
|
ResizePreview(ovi.base_width, ovi.base_height);
|
|
|
|
|
|
UpdateContextBarVisibility();
|
|
|
+ UpdatePreviewScrollbars();
|
|
|
dpi = devicePixelRatioF();
|
|
|
};
|
|
|
dpi = devicePixelRatioF();
|
|
@@ -471,6 +472,30 @@ OBSBasic::OBSBasic(QWidget *parent)
|
|
|
connect(windowHandle(), &QWindow::screenChanged, displayResize);
|
|
|
connect(ui->preview, &OBSQTDisplay::DisplayResized, displayResize);
|
|
|
|
|
|
+ /* TODO: Move these into window-basic-preview */
|
|
|
+ /* Preview Scaling label */
|
|
|
+ connect(ui->preview, &OBSBasicPreview::scalingChanged,
|
|
|
+ ui->previewScalePercent,
|
|
|
+ &OBSPreviewScalingLabel::PreviewScaleChanged);
|
|
|
+
|
|
|
+ /* Preview Scaling dropdown */
|
|
|
+ connect(ui->preview, &OBSBasicPreview::scalingChanged,
|
|
|
+ ui->previewScalingMode,
|
|
|
+ &OBSPreviewScalingComboBox::PreviewScaleChanged);
|
|
|
+
|
|
|
+ connect(ui->preview, &OBSBasicPreview::fixedScalingChanged,
|
|
|
+ ui->previewScalingMode,
|
|
|
+ &OBSPreviewScalingComboBox::PreviewFixedScalingChanged);
|
|
|
+
|
|
|
+ connect(ui->previewScalingMode,
|
|
|
+ &OBSPreviewScalingComboBox::currentIndexChanged, this,
|
|
|
+ &OBSBasic::PreviewScalingModeChanged);
|
|
|
+
|
|
|
+ connect(this, &OBSBasic::CanvasResized, ui->previewScalingMode,
|
|
|
+ &OBSPreviewScalingComboBox::CanvasResized);
|
|
|
+ connect(this, &OBSBasic::OutputResized, ui->previewScalingMode,
|
|
|
+ &OBSPreviewScalingComboBox::OutputResized);
|
|
|
+
|
|
|
delete shortcutFilter;
|
|
|
shortcutFilter = CreateShortcutFilter();
|
|
|
installEventFilter(shortcutFilter);
|
|
@@ -1386,6 +1411,7 @@ retryScene:
|
|
|
ui->preview->SetScrollingOffset(scrollOffX, scrollOffY);
|
|
|
}
|
|
|
ui->preview->SetFixedScaling(fixedScaling);
|
|
|
+
|
|
|
emit ui->preview->DisplayResized();
|
|
|
|
|
|
if (vcamEnabled) {
|
|
@@ -2176,6 +2202,7 @@ void OBSBasic::OBSInit()
|
|
|
|
|
|
InitOBSCallbacks();
|
|
|
InitHotkeys();
|
|
|
+ ui->preview->Init();
|
|
|
|
|
|
/* hack to prevent elgato from loading its own QtNetwork that it tries
|
|
|
* to ship with */
|
|
@@ -4924,6 +4951,9 @@ int OBSBasic::ResetVideo()
|
|
|
obs_set_video_levels(sdr_white_level, hdr_nominal_peak_level);
|
|
|
OBSBasicStats::InitializeValues();
|
|
|
OBSProjector::UpdateMultiviewProjectors();
|
|
|
+
|
|
|
+ emit CanvasResized(ovi.base_width, ovi.base_height);
|
|
|
+ emit OutputResized(ovi.output_width, ovi.output_height);
|
|
|
}
|
|
|
|
|
|
return ret;
|
|
@@ -5013,8 +5043,10 @@ void OBSBasic::ResizePreview(uint32_t cx, uint32_t cy)
|
|
|
obs_get_video_info(&ovi);
|
|
|
|
|
|
if (isFixedScaling) {
|
|
|
- ui->preview->ClampScrollingOffsets();
|
|
|
previewScale = ui->preview->GetScalingAmount();
|
|
|
+
|
|
|
+ ui->preview->ClampScrollingOffsets();
|
|
|
+
|
|
|
GetCenterPosFromFixedScale(
|
|
|
int(cx), int(cy),
|
|
|
targetSize.width() - PREVIEW_EDGE_SIZE * 2,
|
|
@@ -5031,6 +5063,8 @@ void OBSBasic::ResizePreview(uint32_t cx, uint32_t cy)
|
|
|
previewX, previewY, previewScale);
|
|
|
}
|
|
|
|
|
|
+ ui->preview->SetScalingAmount(previewScale);
|
|
|
+
|
|
|
previewX += float(PREVIEW_EDGE_SIZE);
|
|
|
previewY += float(PREVIEW_EDGE_SIZE);
|
|
|
}
|
|
@@ -9169,7 +9203,7 @@ void OBSBasic::on_actionHorizontalCenter_triggered()
|
|
|
void OBSBasic::EnablePreviewDisplay(bool enable)
|
|
|
{
|
|
|
obs_display_set_enabled(ui->preview->GetDisplay(), enable);
|
|
|
- ui->preview->setVisible(enable);
|
|
|
+ ui->previewContainer->setVisible(enable);
|
|
|
ui->previewDisabledWidget->setVisible(!enable);
|
|
|
}
|
|
|
|
|
@@ -9765,6 +9799,7 @@ void OBSBasic::on_actionScaleWindow_triggered()
|
|
|
{
|
|
|
ui->preview->SetFixedScaling(false);
|
|
|
ui->preview->ResetScrollingOffset();
|
|
|
+
|
|
|
emit ui->preview->DisplayResized();
|
|
|
}
|
|
|
|
|
@@ -9772,6 +9807,7 @@ void OBSBasic::on_actionScaleCanvas_triggered()
|
|
|
{
|
|
|
ui->preview->SetFixedScaling(true);
|
|
|
ui->preview->SetScalingLevel(0);
|
|
|
+
|
|
|
emit ui->preview->DisplayResized();
|
|
|
}
|
|
|
|
|
@@ -9785,8 +9821,8 @@ void OBSBasic::on_actionScaleOutput_triggered()
|
|
|
// log base ZOOM_SENSITIVITY of x = log(x) / log(ZOOM_SENSITIVITY)
|
|
|
int32_t approxScalingLevel =
|
|
|
int32_t(round(log(scalingAmount) / log(ZOOM_SENSITIVITY)));
|
|
|
- ui->preview->SetScalingLevel(approxScalingLevel);
|
|
|
- ui->preview->SetScalingAmount(scalingAmount);
|
|
|
+ ui->preview->SetScalingLevelAndAmount(approxScalingLevel,
|
|
|
+ scalingAmount);
|
|
|
emit ui->preview->DisplayResized();
|
|
|
}
|
|
|
|
|
@@ -11093,3 +11129,36 @@ void OBSBasic::OnEvent(enum obs_frontend_event event)
|
|
|
if (api)
|
|
|
api->on_event(event);
|
|
|
}
|
|
|
+
|
|
|
+void OBSBasic::UpdatePreviewScrollbars()
|
|
|
+{
|
|
|
+ if (!ui->preview->IsFixedScaling()) {
|
|
|
+ ui->previewXScrollBar->setRange(0, 0);
|
|
|
+ ui->previewYScrollBar->setRange(0, 0);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void OBSBasic::on_previewXScrollBar_valueChanged(int value)
|
|
|
+{
|
|
|
+ emit PreviewXScrollBarMoved(value);
|
|
|
+}
|
|
|
+
|
|
|
+void OBSBasic::on_previewYScrollBar_valueChanged(int value)
|
|
|
+{
|
|
|
+ emit PreviewYScrollBarMoved(value);
|
|
|
+}
|
|
|
+
|
|
|
+void OBSBasic::PreviewScalingModeChanged(int value)
|
|
|
+{
|
|
|
+ switch (value) {
|
|
|
+ case 0:
|
|
|
+ on_actionScaleWindow_triggered();
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ on_actionScaleCanvas_triggered();
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ on_actionScaleOutput_triggered();
|
|
|
+ break;
|
|
|
+ };
|
|
|
+}
|