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:
Jeremiah Senkpiel
2016-04-06 18:03:29 -07:00
committed by jp9000
parent 0c8a3ec41a
commit ad70d023c4
6 changed files with 200 additions and 12 deletions

View File

@@ -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);