mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-01-22 05:08:37 -05:00
UI: Add preview scrollbars
This adds scrollbars to the preview, so users can move around the preview without using the spacebar + clicking. Co-Authored-By: Clayton Groeneveld <19962531+cg2121@users.noreply.github.com>
This commit is contained in:
committed by
Sebastian Beckmann
parent
71509ad00c
commit
81fa608cde
@@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user