mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-05-18 21:38:29 -04:00
UI: Add snap options to general settings section
Allows the user to disable snapping all together or control the snap threshold.
This commit is contained in:
committed by
jp9000
parent
0c8a3ec41a
commit
ad70d023c4
@@ -11,7 +11,6 @@
|
||||
|
||||
#define HANDLE_RADIUS 4.0f
|
||||
#define HANDLE_SEL_RADIUS (HANDLE_RADIUS * 1.5f)
|
||||
#define CLAMP_DISTANCE 10.0f
|
||||
|
||||
/* TODO: make C++ math classes and clean up code here later */
|
||||
|
||||
@@ -133,7 +132,7 @@ static inline vec2 GetOBSScreenSize()
|
||||
return size;
|
||||
}
|
||||
|
||||
vec3 OBSBasicPreview::GetScreenSnapOffset(const vec3 &tl, const vec3 &br)
|
||||
vec3 OBSBasicPreview::GetSnapOffset(const vec3 &tl, const vec3 &br)
|
||||
{
|
||||
OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
|
||||
vec2 screenSize = GetOBSScreenSize();
|
||||
@@ -141,17 +140,34 @@ vec3 OBSBasicPreview::GetScreenSnapOffset(const vec3 &tl, const vec3 &br)
|
||||
|
||||
vec3_zero(&clampOffset);
|
||||
|
||||
const float clampDist = CLAMP_DISTANCE / main->previewScale;
|
||||
const bool snap = config_get_bool(GetGlobalConfig(),
|
||||
"BasicWindow", "SnappingEnabled");
|
||||
if (snap == false)
|
||||
return clampOffset;
|
||||
|
||||
if (fabsf(tl.x) < clampDist)
|
||||
const bool screenSnap = config_get_bool(GetGlobalConfig(),
|
||||
"BasicWindow", "ScreenSnapping");
|
||||
|
||||
const float clampDist = config_get_double(GetGlobalConfig(),
|
||||
"BasicWindow", "SnapDistance") / main->previewScale;
|
||||
|
||||
// Left screen edge.
|
||||
if (screenSnap &&
|
||||
fabsf(tl.x) < clampDist)
|
||||
clampOffset.x = -tl.x;
|
||||
if (fabsf(clampOffset.x) < EPSILON &&
|
||||
// Right screen edge.
|
||||
if (screenSnap &&
|
||||
fabsf(clampOffset.x) < EPSILON &&
|
||||
fabsf(screenSize.x - br.x) < clampDist)
|
||||
clampOffset.x = screenSize.x - br.x;
|
||||
|
||||
if (fabsf(tl.y) < clampDist)
|
||||
// Top screen edge.
|
||||
if (screenSnap &&
|
||||
fabsf(tl.y) < clampDist)
|
||||
clampOffset.y = -tl.y;
|
||||
if (fabsf(clampOffset.y) < EPSILON &&
|
||||
// Bottom screen edge.
|
||||
if (screenSnap &&
|
||||
fabsf(clampOffset.y) < EPSILON &&
|
||||
fabsf(screenSize.y - br.y) < clampDist)
|
||||
clampOffset.y = screenSize.y - br.y;
|
||||
|
||||
@@ -485,7 +501,13 @@ void OBSBasicPreview::SnapItemMovement(vec2 &offset)
|
||||
data.br.x += offset.x;
|
||||
data.br.y += offset.y;
|
||||
|
||||
vec3 snapOffset = GetScreenSnapOffset(data.tl, data.br);
|
||||
vec3 snapOffset = GetSnapOffset(data.tl, data.br);
|
||||
|
||||
const bool snap = config_get_bool(GetGlobalConfig(),
|
||||
"BasicWindow", "SnappingEnabled");
|
||||
if (snap == false)
|
||||
return;
|
||||
|
||||
offset.x += snapOffset.x;
|
||||
offset.y += snapOffset.y;
|
||||
}
|
||||
@@ -606,7 +628,7 @@ void OBSBasicPreview::SnapStretchingToScreen(vec3 &tl, vec3 &br)
|
||||
vec3_max(&boundingBR, &boundingBR, &newBL);
|
||||
vec3_max(&boundingBR, &boundingBR, &newBR);
|
||||
|
||||
vec3 offset = GetScreenSnapOffset(boundingTL, boundingBR);
|
||||
vec3 offset = GetSnapOffset(boundingTL, boundingBR);
|
||||
vec3_add(&offset, &offset, &newTL);
|
||||
vec3_transform(&offset, &offset, &screenToItem);
|
||||
vec3_sub(&offset, &offset, &tl);
|
||||
|
||||
Reference in New Issue
Block a user