diff --git a/build/data/obs-studio/locale/en.txt b/build/data/obs-studio/locale/en.txt
index fb1d3d05f..3bf3b72b4 100644
--- a/build/data/obs-studio/locale/en.txt
+++ b/build/data/obs-studio/locale/en.txt
@@ -73,7 +73,7 @@ Basic.PropertiesWindow.AutoSelectFormat="%1 (unsupported; autoselect: %2)"
Basic.TransformWindow="Scene Item Transform"
Basic.TransformWindow.Position="Position"
Basic.TransformWindow.Rotation="Rotation"
-Basic.TransformWindow.Scale="Scale"
+Basic.TransformWindow.Size="Size"
Basic.TransformWindow.Alignment="Positional Alignment"
Basic.TransformWindow.BoundsType="Bounding Box Type"
Basic.TransformWindow.BoundsAlignment="Alignment in Bounding Box"
diff --git a/obs/forms/OBSBasicTransform.ui b/obs/forms/OBSBasicTransform.ui
index a242bf97a..f48d3e13d 100644
--- a/obs/forms/OBSBasicTransform.ui
+++ b/obs/forms/OBSBasicTransform.ui
@@ -76,11 +76,14 @@
0
+
+ 4
+
- -9001.000000000000000
+ -90001.000000000000000
- 9001.000000000000000
+ 90001.000000000000000
@@ -92,11 +95,14 @@
0
+
+ 4
+
- -9001.000000000000000
+ -90001.000000000000000
- 9001.000000000000000
+ 90001.000000000000000
@@ -138,7 +144,7 @@
-
- Basic.TransformWindow.Scale
+ Basic.TransformWindow.Size
@@ -164,40 +170,46 @@
0
-
-
+
100
0
+
+ 4
+
- -9001.000000000000000
+ -90001.000000000000000
- 9001.000000000000000
+ 90001.000000000000000
- 0.010000000000000
+ 1.000000000000000
-
-
+
100
0
+
+ 4
+
- -9001.000000000000000
+ -90001.000000000000000
- 9001.000000000000000
+ 90001.000000000000000
- 0.010000000000000
+ 1.000000000000000
@@ -368,11 +380,14 @@
0
+
+ 4
+
1.000000000000000
- 9001.000000000000000
+ 90001.000000000000000
@@ -387,11 +402,14 @@
0
+
+ 4
+
1.000000000000000
- 9001.000000000000000
+ 90001.000000000000000
diff --git a/obs/window-basic-transform.cpp b/obs/window-basic-transform.cpp
index 998d2fe2a..f68ce24b1 100644
--- a/obs/window-basic-transform.cpp
+++ b/obs/window-basic-transform.cpp
@@ -44,8 +44,8 @@ OBSBasicTransform::OBSBasicTransform(OBSBasic *parent)
HookWidget(ui->positionX, DSCROLL_CHANGED, SLOT(OnControlChanged()));
HookWidget(ui->positionY, DSCROLL_CHANGED, SLOT(OnControlChanged()));
HookWidget(ui->rotation, DSCROLL_CHANGED, SLOT(OnControlChanged()));
- HookWidget(ui->scaleX, DSCROLL_CHANGED, SLOT(OnControlChanged()));
- HookWidget(ui->scaleY, DSCROLL_CHANGED, SLOT(OnControlChanged()));
+ HookWidget(ui->sizeX, DSCROLL_CHANGED, SLOT(OnControlChanged()));
+ HookWidget(ui->sizeY, DSCROLL_CHANGED, SLOT(OnControlChanged()));
HookWidget(ui->align, COMBO_CHANGED, SLOT(OnControlChanged()));
HookWidget(ui->boundsType, COMBO_CHANGED, SLOT(OnBoundsType(int)));
HookWidget(ui->boundsAlign, COMBO_CHANGED, SLOT(OnControlChanged()));
@@ -185,6 +185,10 @@ void OBSBasicTransform::RefreshControls()
obs_sceneitem_info osi;
obs_sceneitem_get_info(item, &osi);
+ obs_source_t source = obs_sceneitem_getsource(item);
+ float width = float(obs_source_getwidth(source));
+ float height = float(obs_source_getheight(source));
+
int alignIndex = AlignToList(osi.alignment);
int boundsAlignIndex = AlignToList(osi.bounds_alignment);
@@ -192,8 +196,8 @@ void OBSBasicTransform::RefreshControls()
ui->positionX->setValue(osi.pos.x);
ui->positionY->setValue(osi.pos.y);
ui->rotation->setValue(osi.rot);
- ui->scaleX->setValue(osi.scale.x);
- ui->scaleY->setValue(osi.scale.y);
+ ui->sizeX->setValue(osi.scale.x * width);
+ ui->sizeY->setValue(osi.scale.y * height);
ui->align->setCurrentIndex(alignIndex);
ui->boundsType->setCurrentIndex(int(osi.bounds_type));
@@ -235,12 +239,16 @@ void OBSBasicTransform::OnControlChanged()
if (ignoreItemChange)
return;
+ obs_source_t source = obs_sceneitem_getsource(item);
+ double width = double(obs_source_getwidth(source));
+ double height = double(obs_source_getheight(source));
+
obs_sceneitem_info osi;
osi.pos.x = float(ui->positionX->value());
osi.pos.y = float(ui->positionY->value());
osi.rot = float(ui->rotation->value());
- osi.scale.x = float(ui->scaleX->value());
- osi.scale.y = float(ui->scaleY->value());
+ osi.scale.x = float(ui->sizeX->value() / width);
+ osi.scale.y = float(ui->sizeY->value() / height);
osi.alignment = listToAlign[ui->align->currentIndex()];
osi.bounds_type = (obs_bounds_type)ui->boundsType->currentIndex();