|
@@ -11,7 +11,7 @@
|
|
|
#include "obs-app.hpp"
|
|
|
#include "platform.hpp"
|
|
|
|
|
|
-#define HANDLE_RADIUS 4.0f
|
|
|
+#define HANDLE_RADIUS 4.0f
|
|
|
#define HANDLE_SEL_RADIUS (HANDLE_RADIUS * 1.5f)
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
|
|
|
#define SUPPORTS_FRACTIONAL_SCALING
|
|
@@ -37,7 +37,7 @@ OBSBasicPreview::~OBSBasicPreview()
|
|
|
|
|
|
vec2 OBSBasicPreview::GetMouseEventPos(QMouseEvent *event)
|
|
|
{
|
|
|
- OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
|
|
|
+ OBSBasic *main = reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
|
|
|
#ifdef SUPPORTS_FRACTIONAL_SCALING
|
|
|
float pixelRatio = main->devicePixelRatioF();
|
|
|
#else
|
|
@@ -46,28 +46,28 @@ vec2 OBSBasicPreview::GetMouseEventPos(QMouseEvent *event)
|
|
|
float scale = pixelRatio / main->previewScale;
|
|
|
vec2 pos;
|
|
|
vec2_set(&pos,
|
|
|
- (float(event->x()) - main->previewX / pixelRatio) * scale,
|
|
|
- (float(event->y()) - main->previewY / pixelRatio) * scale);
|
|
|
+ (float(event->x()) - main->previewX / pixelRatio) * scale,
|
|
|
+ (float(event->y()) - main->previewY / pixelRatio) * scale);
|
|
|
|
|
|
return pos;
|
|
|
}
|
|
|
|
|
|
struct SceneFindData {
|
|
|
- const vec2 &pos;
|
|
|
+ const vec2 &pos;
|
|
|
OBSSceneItem item;
|
|
|
- bool selectBelow;
|
|
|
+ bool selectBelow;
|
|
|
|
|
|
obs_sceneitem_t *group = nullptr;
|
|
|
|
|
|
SceneFindData(const SceneFindData &) = delete;
|
|
|
SceneFindData(SceneFindData &&) = delete;
|
|
|
- SceneFindData& operator=(const SceneFindData &) = delete;
|
|
|
- SceneFindData& operator=(SceneFindData &&) = delete;
|
|
|
+ SceneFindData &operator=(const SceneFindData &) = delete;
|
|
|
+ SceneFindData &operator=(SceneFindData &&) = delete;
|
|
|
|
|
|
inline SceneFindData(const vec2 &pos_, bool selectBelow_)
|
|
|
- : pos (pos_),
|
|
|
- selectBelow (selectBelow_)
|
|
|
- {}
|
|
|
+ : pos(pos_), selectBelow(selectBelow_)
|
|
|
+ {
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
static bool SceneItemHasVideo(obs_sceneitem_t *item)
|
|
@@ -77,21 +77,21 @@ static bool SceneItemHasVideo(obs_sceneitem_t *item)
|
|
|
return (flags & OBS_SOURCE_VIDEO) != 0;
|
|
|
}
|
|
|
|
|
|
-static bool CloseFloat(float a, float b, float epsilon=0.01)
|
|
|
+static bool CloseFloat(float a, float b, float epsilon = 0.01)
|
|
|
{
|
|
|
using std::abs;
|
|
|
- return abs(a-b) <= epsilon;
|
|
|
+ return abs(a - b) <= epsilon;
|
|
|
}
|
|
|
|
|
|
static bool FindItemAtPos(obs_scene_t *scene, obs_sceneitem_t *item,
|
|
|
- void *param)
|
|
|
+ void *param)
|
|
|
{
|
|
|
- SceneFindData *data = reinterpret_cast<SceneFindData*>(param);
|
|
|
- matrix4 transform;
|
|
|
- matrix4 invTransform;
|
|
|
- vec3 transformedPos;
|
|
|
- vec3 pos3;
|
|
|
- vec3 pos3_;
|
|
|
+ SceneFindData *data = reinterpret_cast<SceneFindData *>(param);
|
|
|
+ matrix4 transform;
|
|
|
+ matrix4 invTransform;
|
|
|
+ vec3 transformedPos;
|
|
|
+ vec3 pos3;
|
|
|
+ vec3 pos3_;
|
|
|
|
|
|
if (!SceneItemHasVideo(item))
|
|
|
return true;
|
|
@@ -147,54 +147,50 @@ static inline vec2 GetOBSScreenSize()
|
|
|
|
|
|
vec3 OBSBasicPreview::GetSnapOffset(const vec3 &tl, const vec3 &br)
|
|
|
{
|
|
|
- OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
|
|
|
+ OBSBasic *main = reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
|
|
|
vec2 screenSize = GetOBSScreenSize();
|
|
|
vec3 clampOffset;
|
|
|
|
|
|
vec3_zero(&clampOffset);
|
|
|
|
|
|
- const bool snap = config_get_bool(GetGlobalConfig(),
|
|
|
- "BasicWindow", "SnappingEnabled");
|
|
|
+ const bool snap = config_get_bool(GetGlobalConfig(), "BasicWindow",
|
|
|
+ "SnappingEnabled");
|
|
|
if (snap == false)
|
|
|
return clampOffset;
|
|
|
|
|
|
- const bool screenSnap = config_get_bool(GetGlobalConfig(),
|
|
|
- "BasicWindow", "ScreenSnapping");
|
|
|
- const bool centerSnap = config_get_bool(GetGlobalConfig(),
|
|
|
- "BasicWindow", "CenterSnapping");
|
|
|
+ const bool screenSnap = config_get_bool(
|
|
|
+ GetGlobalConfig(), "BasicWindow", "ScreenSnapping");
|
|
|
+ const bool centerSnap = config_get_bool(
|
|
|
+ GetGlobalConfig(), "BasicWindow", "CenterSnapping");
|
|
|
|
|
|
const float clampDist = config_get_double(GetGlobalConfig(),
|
|
|
- "BasicWindow", "SnapDistance") / main->previewScale;
|
|
|
+ "BasicWindow",
|
|
|
+ "SnapDistance") /
|
|
|
+ main->previewScale;
|
|
|
const float centerX = br.x - (br.x - tl.x) / 2.0f;
|
|
|
const float centerY = br.y - (br.y - tl.y) / 2.0f;
|
|
|
|
|
|
// Left screen edge.
|
|
|
- if (screenSnap &&
|
|
|
- fabsf(tl.x) < clampDist)
|
|
|
+ if (screenSnap && fabsf(tl.x) < clampDist)
|
|
|
clampOffset.x = -tl.x;
|
|
|
// Right screen edge.
|
|
|
- if (screenSnap &&
|
|
|
- fabsf(clampOffset.x) < EPSILON &&
|
|
|
+ if (screenSnap && fabsf(clampOffset.x) < EPSILON &&
|
|
|
fabsf(screenSize.x - br.x) < clampDist)
|
|
|
clampOffset.x = screenSize.x - br.x;
|
|
|
// Horizontal center.
|
|
|
- if (centerSnap &&
|
|
|
- fabsf(screenSize.x - (br.x - tl.x)) > clampDist &&
|
|
|
+ if (centerSnap && fabsf(screenSize.x - (br.x - tl.x)) > clampDist &&
|
|
|
fabsf(screenSize.x / 2.0f - centerX) < clampDist)
|
|
|
clampOffset.x = screenSize.x / 2.0f - centerX;
|
|
|
|
|
|
// Top screen edge.
|
|
|
- if (screenSnap &&
|
|
|
- fabsf(tl.y) < clampDist)
|
|
|
+ if (screenSnap && fabsf(tl.y) < clampDist)
|
|
|
clampOffset.y = -tl.y;
|
|
|
// Bottom screen edge.
|
|
|
- if (screenSnap &&
|
|
|
- fabsf(clampOffset.y) < EPSILON &&
|
|
|
+ if (screenSnap && fabsf(clampOffset.y) < EPSILON &&
|
|
|
fabsf(screenSize.y - br.y) < clampDist)
|
|
|
clampOffset.y = screenSize.y - br.y;
|
|
|
// Vertical center.
|
|
|
- if (centerSnap &&
|
|
|
- fabsf(screenSize.y - (br.y - tl.y)) > clampDist &&
|
|
|
+ if (centerSnap && fabsf(screenSize.y - (br.y - tl.y)) > clampDist &&
|
|
|
fabsf(screenSize.y / 2.0f - centerY) < clampDist)
|
|
|
clampOffset.y = screenSize.y / 2.0f - centerY;
|
|
|
|
|
@@ -203,7 +199,7 @@ vec3 OBSBasicPreview::GetSnapOffset(const vec3 &tl, const vec3 &br)
|
|
|
|
|
|
OBSSceneItem OBSBasicPreview::GetItemAtPos(const vec2 &pos, bool selectBelow)
|
|
|
{
|
|
|
- OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
|
|
|
+ OBSBasic *main = reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
|
|
|
|
|
|
OBSScene scene = main->GetCurrentScene();
|
|
|
if (!scene)
|
|
@@ -215,12 +211,12 @@ OBSSceneItem OBSBasicPreview::GetItemAtPos(const vec2 &pos, bool selectBelow)
|
|
|
}
|
|
|
|
|
|
static bool CheckItemSelected(obs_scene_t *scene, obs_sceneitem_t *item,
|
|
|
- void *param)
|
|
|
+ void *param)
|
|
|
{
|
|
|
- SceneFindData *data = reinterpret_cast<SceneFindData*>(param);
|
|
|
- matrix4 transform;
|
|
|
- vec3 transformedPos;
|
|
|
- vec3 pos3;
|
|
|
+ SceneFindData *data = reinterpret_cast<SceneFindData *>(param);
|
|
|
+ matrix4 transform;
|
|
|
+ vec3 transformedPos;
|
|
|
+ vec3 pos3;
|
|
|
|
|
|
if (!SceneItemHasVideo(item))
|
|
|
return true;
|
|
@@ -240,7 +236,8 @@ static bool CheckItemSelected(obs_scene_t *scene, obs_sceneitem_t *item,
|
|
|
|
|
|
if (data->group) {
|
|
|
matrix4 parent_transform;
|
|
|
- obs_sceneitem_get_draw_transform(data->group, &parent_transform);
|
|
|
+ obs_sceneitem_get_draw_transform(data->group,
|
|
|
+ &parent_transform);
|
|
|
matrix4_mul(&transform, &transform, &parent_transform);
|
|
|
}
|
|
|
|
|
@@ -261,7 +258,7 @@ static bool CheckItemSelected(obs_scene_t *scene, obs_sceneitem_t *item,
|
|
|
|
|
|
bool OBSBasicPreview::SelectedAtPos(const vec2 &pos)
|
|
|
{
|
|
|
- OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
|
|
|
+ OBSBasic *main = reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
|
|
|
|
|
|
OBSScene scene = main->GetCurrentScene();
|
|
|
if (!scene)
|
|
@@ -273,46 +270,45 @@ bool OBSBasicPreview::SelectedAtPos(const vec2 &pos)
|
|
|
}
|
|
|
|
|
|
struct HandleFindData {
|
|
|
- const vec2 &pos;
|
|
|
- const float radius;
|
|
|
- matrix4 parent_xform;
|
|
|
+ const vec2 &pos;
|
|
|
+ const float radius;
|
|
|
+ matrix4 parent_xform;
|
|
|
|
|
|
OBSSceneItem item;
|
|
|
- ItemHandle handle = ItemHandle::None;
|
|
|
+ ItemHandle handle = ItemHandle::None;
|
|
|
|
|
|
HandleFindData(const HandleFindData &) = delete;
|
|
|
HandleFindData(HandleFindData &&) = delete;
|
|
|
- HandleFindData& operator=(const HandleFindData &) = delete;
|
|
|
- HandleFindData& operator=(HandleFindData &&) = delete;
|
|
|
+ HandleFindData &operator=(const HandleFindData &) = delete;
|
|
|
+ HandleFindData &operator=(HandleFindData &&) = delete;
|
|
|
|
|
|
inline HandleFindData(const vec2 &pos_, float scale)
|
|
|
- : pos (pos_),
|
|
|
- radius (HANDLE_SEL_RADIUS / scale)
|
|
|
+ : pos(pos_), radius(HANDLE_SEL_RADIUS / scale)
|
|
|
{
|
|
|
matrix4_identity(&parent_xform);
|
|
|
}
|
|
|
|
|
|
inline HandleFindData(const HandleFindData &hfd,
|
|
|
- obs_sceneitem_t *parent)
|
|
|
- : pos (hfd.pos),
|
|
|
- radius (hfd.radius),
|
|
|
- item (hfd.item),
|
|
|
- handle (hfd.handle)
|
|
|
+ obs_sceneitem_t *parent)
|
|
|
+ : pos(hfd.pos),
|
|
|
+ radius(hfd.radius),
|
|
|
+ item(hfd.item),
|
|
|
+ handle(hfd.handle)
|
|
|
{
|
|
|
obs_sceneitem_get_draw_transform(parent, &parent_xform);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
static bool FindHandleAtPos(obs_scene_t *scene, obs_sceneitem_t *item,
|
|
|
- void *param)
|
|
|
+ void *param)
|
|
|
{
|
|
|
- HandleFindData &data = *reinterpret_cast<HandleFindData*>(param);
|
|
|
+ HandleFindData &data = *reinterpret_cast<HandleFindData *>(param);
|
|
|
|
|
|
if (!obs_sceneitem_selected(item)) {
|
|
|
if (obs_sceneitem_is_group(item)) {
|
|
|
HandleFindData newData(data, item);
|
|
|
obs_sceneitem_group_enum_items(item, FindHandleAtPos,
|
|
|
- &newData);
|
|
|
+ &newData);
|
|
|
data.item = newData.item;
|
|
|
data.handle = newData.handle;
|
|
|
}
|
|
@@ -320,16 +316,15 @@ static bool FindHandleAtPos(obs_scene_t *scene, obs_sceneitem_t *item,
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- matrix4 transform;
|
|
|
- vec3 pos3;
|
|
|
- float closestHandle = data.radius;
|
|
|
+ matrix4 transform;
|
|
|
+ vec3 pos3;
|
|
|
+ float closestHandle = data.radius;
|
|
|
|
|
|
vec3_set(&pos3, data.pos.x, data.pos.y, 0.0f);
|
|
|
|
|
|
obs_sceneitem_get_box_transform(item, &transform);
|
|
|
|
|
|
- auto TestHandle = [&] (float x, float y, ItemHandle handle)
|
|
|
- {
|
|
|
+ auto TestHandle = [&](float x, float y, ItemHandle handle) {
|
|
|
vec3 handlePos = GetTransformedPos(x, y, transform);
|
|
|
vec3_transform(&handlePos, &handlePos, &data.parent_xform);
|
|
|
|
|
@@ -337,8 +332,8 @@ static bool FindHandleAtPos(obs_scene_t *scene, obs_sceneitem_t *item,
|
|
|
if (dist < data.radius) {
|
|
|
if (dist < closestHandle) {
|
|
|
closestHandle = dist;
|
|
|
- data.handle = handle;
|
|
|
- data.item = item;
|
|
|
+ data.handle = handle;
|
|
|
+ data.item = item;
|
|
|
}
|
|
|
}
|
|
|
};
|
|
@@ -370,10 +365,12 @@ static vec2 GetItemSize(obs_sceneitem_t *item)
|
|
|
|
|
|
obs_sceneitem_get_scale(item, &scale);
|
|
|
obs_sceneitem_get_crop(item, &crop);
|
|
|
- size.x = float(obs_source_get_width(source) -
|
|
|
- crop.left - crop.right) * scale.x;
|
|
|
- size.y = float(obs_source_get_height(source) -
|
|
|
- crop.top - crop.bottom) * scale.y;
|
|
|
+ size.x = float(obs_source_get_width(source) - crop.left -
|
|
|
+ crop.right) *
|
|
|
+ scale.x;
|
|
|
+ size.y = float(obs_source_get_height(source) - crop.top -
|
|
|
+ crop.bottom) *
|
|
|
+ scale.y;
|
|
|
}
|
|
|
|
|
|
return size;
|
|
@@ -381,7 +378,7 @@ static vec2 GetItemSize(obs_sceneitem_t *item)
|
|
|
|
|
|
void OBSBasicPreview::GetStretchHandleData(const vec2 &pos)
|
|
|
{
|
|
|
- OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
|
|
|
+ OBSBasic *main = reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
|
|
|
|
|
|
OBSScene scene = main->GetCurrentScene();
|
|
|
if (!scene)
|
|
@@ -397,13 +394,13 @@ void OBSBasicPreview::GetStretchHandleData(const vec2 &pos)
|
|
|
HandleFindData data(scaled_pos, scale);
|
|
|
obs_scene_enum_items(scene, FindHandleAtPos, &data);
|
|
|
|
|
|
- stretchItem = std::move(data.item);
|
|
|
- stretchHandle = data.handle;
|
|
|
+ stretchItem = std::move(data.item);
|
|
|
+ stretchHandle = data.handle;
|
|
|
|
|
|
if (stretchHandle != ItemHandle::None) {
|
|
|
matrix4 boxTransform;
|
|
|
- vec3 itemUL;
|
|
|
- float itemRot;
|
|
|
+ vec3 itemUL;
|
|
|
+ float itemRot;
|
|
|
|
|
|
stretchItemSize = GetItemSize(stretchItem);
|
|
|
|
|
@@ -413,32 +410,31 @@ void OBSBasicPreview::GetStretchHandleData(const vec2 &pos)
|
|
|
|
|
|
/* build the item space conversion matrices */
|
|
|
matrix4_identity(&itemToScreen);
|
|
|
- matrix4_rotate_aa4f(&itemToScreen, &itemToScreen,
|
|
|
- 0.0f, 0.0f, 1.0f, RAD(itemRot));
|
|
|
- matrix4_translate3f(&itemToScreen, &itemToScreen,
|
|
|
- itemUL.x, itemUL.y, 0.0f);
|
|
|
+ matrix4_rotate_aa4f(&itemToScreen, &itemToScreen, 0.0f, 0.0f,
|
|
|
+ 1.0f, RAD(itemRot));
|
|
|
+ matrix4_translate3f(&itemToScreen, &itemToScreen, itemUL.x,
|
|
|
+ itemUL.y, 0.0f);
|
|
|
|
|
|
matrix4_identity(&screenToItem);
|
|
|
- matrix4_translate3f(&screenToItem, &screenToItem,
|
|
|
- -itemUL.x, -itemUL.y, 0.0f);
|
|
|
- matrix4_rotate_aa4f(&screenToItem, &screenToItem,
|
|
|
- 0.0f, 0.0f, 1.0f, RAD(-itemRot));
|
|
|
+ matrix4_translate3f(&screenToItem, &screenToItem, -itemUL.x,
|
|
|
+ -itemUL.y, 0.0f);
|
|
|
+ matrix4_rotate_aa4f(&screenToItem, &screenToItem, 0.0f, 0.0f,
|
|
|
+ 1.0f, RAD(-itemRot));
|
|
|
|
|
|
obs_sceneitem_get_crop(stretchItem, &startCrop);
|
|
|
obs_sceneitem_get_pos(stretchItem, &startItemPos);
|
|
|
|
|
|
obs_source_t *source = obs_sceneitem_get_source(stretchItem);
|
|
|
cropSize.x = float(obs_source_get_width(source) -
|
|
|
- startCrop.left - startCrop.right);
|
|
|
+ startCrop.left - startCrop.right);
|
|
|
cropSize.y = float(obs_source_get_height(source) -
|
|
|
- startCrop.top - startCrop.bottom);
|
|
|
+ startCrop.top - startCrop.bottom);
|
|
|
|
|
|
stretchGroup = obs_sceneitem_get_group(scene, stretchItem);
|
|
|
if (stretchGroup) {
|
|
|
obs_sceneitem_get_draw_transform(stretchGroup,
|
|
|
- &invGroupTransform);
|
|
|
- matrix4_inv(&invGroupTransform,
|
|
|
- &invGroupTransform);
|
|
|
+ &invGroupTransform);
|
|
|
+ matrix4_inv(&invGroupTransform, &invGroupTransform);
|
|
|
obs_sceneitem_defer_group_resize_begin(stretchGroup);
|
|
|
}
|
|
|
}
|
|
@@ -480,8 +476,8 @@ void OBSBasicPreview::keyReleaseEvent(QKeyEvent *event)
|
|
|
|
|
|
void OBSBasicPreview::wheelEvent(QWheelEvent *event)
|
|
|
{
|
|
|
- if (scrollMode && IsFixedScaling()
|
|
|
- && event->orientation() == Qt::Vertical) {
|
|
|
+ if (scrollMode && IsFixedScaling() &&
|
|
|
+ event->orientation() == Qt::Vertical) {
|
|
|
if (event->delta() > 0)
|
|
|
SetScalingLevel(scalingLevel + 1);
|
|
|
else if (event->delta() < 0)
|
|
@@ -512,7 +508,7 @@ void OBSBasicPreview::mousePressEvent(QMouseEvent *event)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
|
|
|
+ OBSBasic *main = reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
|
|
|
#ifdef SUPPORTS_FRACTIONAL_SCALING
|
|
|
float pixelRatio = main->devicePixelRatioF();
|
|
|
#else
|
|
@@ -549,7 +545,7 @@ void OBSBasicPreview::mousePressEvent(QMouseEvent *event)
|
|
|
static bool select_one(obs_scene_t *scene, obs_sceneitem_t *item, void *param)
|
|
|
{
|
|
|
obs_sceneitem_t *selectedItem =
|
|
|
- reinterpret_cast<obs_sceneitem_t*>(param);
|
|
|
+ reinterpret_cast<obs_sceneitem_t *>(param);
|
|
|
if (obs_sceneitem_is_group(item))
|
|
|
obs_sceneitem_group_enum_items(item, select_one, param);
|
|
|
|
|
@@ -561,12 +557,12 @@ static bool select_one(obs_scene_t *scene, obs_sceneitem_t *item, void *param)
|
|
|
|
|
|
void OBSBasicPreview::DoSelect(const vec2 &pos)
|
|
|
{
|
|
|
- OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
|
|
|
+ OBSBasic *main = reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
|
|
|
|
|
|
- OBSScene scene = main->GetCurrentScene();
|
|
|
- OBSSceneItem item = GetItemAtPos(pos, true);
|
|
|
+ OBSScene scene = main->GetCurrentScene();
|
|
|
+ OBSSceneItem item = GetItemAtPos(pos, true);
|
|
|
|
|
|
- obs_scene_enum_items(scene, select_one, (obs_sceneitem_t*)item);
|
|
|
+ obs_scene_enum_items(scene, select_one, (obs_sceneitem_t *)item);
|
|
|
}
|
|
|
|
|
|
void OBSBasicPreview::DoCtrlSelect(const vec2 &pos)
|
|
@@ -609,11 +605,11 @@ void OBSBasicPreview::mouseReleaseEvent(QMouseEvent *event)
|
|
|
obs_sceneitem_defer_group_resize_end(stretchGroup);
|
|
|
}
|
|
|
|
|
|
- stretchItem = nullptr;
|
|
|
+ stretchItem = nullptr;
|
|
|
stretchGroup = nullptr;
|
|
|
- mouseDown = false;
|
|
|
- mouseMoved = false;
|
|
|
- cropping = false;
|
|
|
+ mouseDown = false;
|
|
|
+ mouseMoved = false;
|
|
|
+ cropping = false;
|
|
|
|
|
|
OBSSceneItem item = GetItemAtPos(pos, true);
|
|
|
hoveredPreviewItem = item;
|
|
@@ -626,13 +622,13 @@ struct SelectedItemBounds {
|
|
|
};
|
|
|
|
|
|
static bool AddItemBounds(obs_scene_t *scene, obs_sceneitem_t *item,
|
|
|
- void *param)
|
|
|
+ void *param)
|
|
|
{
|
|
|
- SelectedItemBounds *data = reinterpret_cast<SelectedItemBounds*>(param);
|
|
|
+ SelectedItemBounds *data =
|
|
|
+ reinterpret_cast<SelectedItemBounds *>(param);
|
|
|
vec3 t[4];
|
|
|
|
|
|
- auto add_bounds = [data, &t] ()
|
|
|
- {
|
|
|
+ auto add_bounds = [data, &t]() {
|
|
|
for (const vec3 &v : t) {
|
|
|
if (data->first) {
|
|
|
vec3_copy(&data->tl, &v);
|
|
@@ -686,9 +682,9 @@ struct OffsetData {
|
|
|
};
|
|
|
|
|
|
static bool GetSourceSnapOffset(obs_scene_t *scene, obs_sceneitem_t *item,
|
|
|
- void *param)
|
|
|
+ void *param)
|
|
|
{
|
|
|
- OffsetData *data = reinterpret_cast<OffsetData*>(param);
|
|
|
+ OffsetData *data = reinterpret_cast<OffsetData *>(param);
|
|
|
|
|
|
if (obs_sceneitem_selected(item))
|
|
|
return true;
|
|
@@ -696,12 +692,10 @@ static bool GetSourceSnapOffset(obs_scene_t *scene, obs_sceneitem_t *item,
|
|
|
matrix4 boxTransform;
|
|
|
obs_sceneitem_get_box_transform(item, &boxTransform);
|
|
|
|
|
|
- vec3 t[4] = {
|
|
|
- GetTransformedPos(0.0f, 0.0f, boxTransform),
|
|
|
- GetTransformedPos(1.0f, 0.0f, boxTransform),
|
|
|
- GetTransformedPos(0.0f, 1.0f, boxTransform),
|
|
|
- GetTransformedPos(1.0f, 1.0f, boxTransform)
|
|
|
- };
|
|
|
+ vec3 t[4] = {GetTransformedPos(0.0f, 0.0f, boxTransform),
|
|
|
+ GetTransformedPos(1.0f, 0.0f, boxTransform),
|
|
|
+ GetTransformedPos(0.0f, 1.0f, boxTransform),
|
|
|
+ GetTransformedPos(1.0f, 1.0f, boxTransform)};
|
|
|
|
|
|
bool first = true;
|
|
|
vec3 tl, br;
|
|
@@ -719,15 +713,15 @@ static bool GetSourceSnapOffset(obs_scene_t *scene, obs_sceneitem_t *item,
|
|
|
}
|
|
|
|
|
|
// Snap to other source edges
|
|
|
-#define EDGE_SNAP(l, r, x, y) \
|
|
|
- do { \
|
|
|
- double dist = fabsf(l.x - data->r.x); \
|
|
|
- if (dist < data->clampDist && \
|
|
|
- fabsf(data->offset.x) < EPSILON && \
|
|
|
- data->tl.y < br.y && \
|
|
|
- data->br.y > tl.y && \
|
|
|
- (fabsf(data->offset.x) > dist || data->offset.x < EPSILON)) \
|
|
|
- data->offset.x = l.x - data->r.x; \
|
|
|
+#define EDGE_SNAP(l, r, x, y) \
|
|
|
+ do { \
|
|
|
+ double dist = fabsf(l.x - data->r.x); \
|
|
|
+ if (dist < data->clampDist && \
|
|
|
+ fabsf(data->offset.x) < EPSILON && data->tl.y < br.y && \
|
|
|
+ data->br.y > tl.y && \
|
|
|
+ (fabsf(data->offset.x) > dist || \
|
|
|
+ data->offset.x < EPSILON)) \
|
|
|
+ data->offset.x = l.x - data->r.x; \
|
|
|
} while (false)
|
|
|
|
|
|
EDGE_SNAP(tl, br, x, y);
|
|
@@ -742,7 +736,7 @@ static bool GetSourceSnapOffset(obs_scene_t *scene, obs_sceneitem_t *item,
|
|
|
|
|
|
void OBSBasicPreview::SnapItemMovement(vec2 &offset)
|
|
|
{
|
|
|
- OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
|
|
|
+ OBSBasic *main = reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
|
|
|
OBSScene scene = main->GetCurrentScene();
|
|
|
|
|
|
SelectedItemBounds data;
|
|
@@ -755,10 +749,10 @@ void OBSBasicPreview::SnapItemMovement(vec2 &offset)
|
|
|
|
|
|
vec3 snapOffset = GetSnapOffset(data.tl, data.br);
|
|
|
|
|
|
- const bool snap = config_get_bool(GetGlobalConfig(),
|
|
|
- "BasicWindow", "SnappingEnabled");
|
|
|
- const bool sourcesSnap = config_get_bool(GetGlobalConfig(),
|
|
|
- "BasicWindow", "SourceSnapping");
|
|
|
+ const bool snap = config_get_bool(GetGlobalConfig(), "BasicWindow",
|
|
|
+ "SnappingEnabled");
|
|
|
+ const bool sourcesSnap = config_get_bool(
|
|
|
+ GetGlobalConfig(), "BasicWindow", "SourceSnapping");
|
|
|
if (snap == false)
|
|
|
return;
|
|
|
if (sourcesSnap == false) {
|
|
@@ -768,7 +762,9 @@ void OBSBasicPreview::SnapItemMovement(vec2 &offset)
|
|
|
}
|
|
|
|
|
|
const float clampDist = config_get_double(GetGlobalConfig(),
|
|
|
- "BasicWindow", "SnapDistance") / main->previewScale;
|
|
|
+ "BasicWindow",
|
|
|
+ "SnapDistance") /
|
|
|
+ main->previewScale;
|
|
|
|
|
|
OffsetData offsetData;
|
|
|
offsetData.clampDist = clampDist;
|
|
@@ -794,7 +790,7 @@ static bool move_items(obs_scene_t *scene, obs_sceneitem_t *item, void *param)
|
|
|
return true;
|
|
|
|
|
|
bool selected = obs_sceneitem_selected(item);
|
|
|
- vec2 *offset = reinterpret_cast<vec2*>(param);
|
|
|
+ vec2 *offset = reinterpret_cast<vec2 *>(param);
|
|
|
|
|
|
if (obs_sceneitem_is_group(item) && !selected) {
|
|
|
matrix4 transform;
|
|
@@ -822,7 +818,7 @@ static bool move_items(obs_scene_t *scene, obs_sceneitem_t *item, void *param)
|
|
|
void OBSBasicPreview::MoveItems(const vec2 &pos)
|
|
|
{
|
|
|
Qt::KeyboardModifiers modifiers = QGuiApplication::keyboardModifiers();
|
|
|
- OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
|
|
|
+ OBSBasic *main = reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
|
|
|
OBSScene scene = main->GetCurrentScene();
|
|
|
|
|
|
vec2 offset, moveOffset;
|
|
@@ -862,14 +858,14 @@ vec3 OBSBasicPreview::CalculateStretchPos(const vec3 &tl, const vec3 &br)
|
|
|
}
|
|
|
|
|
|
void OBSBasicPreview::ClampAspect(vec3 &tl, vec3 &br, vec2 &size,
|
|
|
- const vec2 &baseSize)
|
|
|
+ const vec2 &baseSize)
|
|
|
{
|
|
|
- float baseAspect = baseSize.x / baseSize.y;
|
|
|
- float aspect = size.x / size.y;
|
|
|
+ float baseAspect = baseSize.x / baseSize.y;
|
|
|
+ float aspect = size.x / size.y;
|
|
|
uint32_t stretchFlags = (uint32_t)stretchHandle;
|
|
|
|
|
|
- if (stretchHandle == ItemHandle::TopLeft ||
|
|
|
- stretchHandle == ItemHandle::TopRight ||
|
|
|
+ if (stretchHandle == ItemHandle::TopLeft ||
|
|
|
+ stretchHandle == ItemHandle::TopRight ||
|
|
|
stretchHandle == ItemHandle::BottomLeft ||
|
|
|
stretchHandle == ItemHandle::BottomRight) {
|
|
|
if (aspect < baseAspect) {
|
|
@@ -887,7 +883,7 @@ void OBSBasicPreview::ClampAspect(vec3 &tl, vec3 &br, vec2 &size,
|
|
|
}
|
|
|
|
|
|
} else if (stretchHandle == ItemHandle::TopCenter ||
|
|
|
- stretchHandle == ItemHandle::BottomCenter) {
|
|
|
+ stretchHandle == ItemHandle::BottomCenter) {
|
|
|
if ((size.y >= 0.0f && size.x >= 0.0f) ||
|
|
|
(size.y <= 0.0f && size.x <= 0.0f))
|
|
|
size.x = size.y * baseAspect;
|
|
@@ -895,7 +891,7 @@ void OBSBasicPreview::ClampAspect(vec3 &tl, vec3 &br, vec2 &size,
|
|
|
size.x = size.y * baseAspect * -1.0f;
|
|
|
|
|
|
} else if (stretchHandle == ItemHandle::CenterLeft ||
|
|
|
- stretchHandle == ItemHandle::CenterRight) {
|
|
|
+ stretchHandle == ItemHandle::CenterRight) {
|
|
|
if ((size.y >= 0.0f && size.x >= 0.0f) ||
|
|
|
(size.y <= 0.0f && size.x <= 0.0f))
|
|
|
size.y = size.x / baseAspect;
|
|
@@ -920,12 +916,12 @@ void OBSBasicPreview::ClampAspect(vec3 &tl, vec3 &br, vec2 &size,
|
|
|
void OBSBasicPreview::SnapStretchingToScreen(vec3 &tl, vec3 &br)
|
|
|
{
|
|
|
uint32_t stretchFlags = (uint32_t)stretchHandle;
|
|
|
- vec3 newTL = GetTransformedPos(tl.x, tl.y, itemToScreen);
|
|
|
- vec3 newTR = GetTransformedPos(br.x, tl.y, itemToScreen);
|
|
|
- vec3 newBL = GetTransformedPos(tl.x, br.y, itemToScreen);
|
|
|
- vec3 newBR = GetTransformedPos(br.x, br.y, itemToScreen);
|
|
|
- vec3 boundingTL;
|
|
|
- vec3 boundingBR;
|
|
|
+ vec3 newTL = GetTransformedPos(tl.x, tl.y, itemToScreen);
|
|
|
+ vec3 newTR = GetTransformedPos(br.x, tl.y, itemToScreen);
|
|
|
+ vec3 newBL = GetTransformedPos(tl.x, br.y, itemToScreen);
|
|
|
+ vec3 newBR = GetTransformedPos(br.x, br.y, itemToScreen);
|
|
|
+ vec3 boundingTL;
|
|
|
+ vec3 boundingBR;
|
|
|
|
|
|
vec3_copy(&boundingTL, &newTL);
|
|
|
vec3_min(&boundingTL, &boundingTL, &newTR);
|
|
@@ -984,14 +980,12 @@ void OBSBasicPreview::CropItem(const vec2 &pos)
|
|
|
vec2 max_tl;
|
|
|
vec2 max_br;
|
|
|
|
|
|
- vec2_set(&max_tl,
|
|
|
- float(-crop.left) * scale.x,
|
|
|
- float(-crop.top) * scale.y);
|
|
|
- vec2_set(&max_br,
|
|
|
- stretchItemSize.x + crop.right * scale.x,
|
|
|
- stretchItemSize.y + crop.bottom * scale.y);
|
|
|
+ vec2_set(&max_tl, float(-crop.left) * scale.x,
|
|
|
+ float(-crop.top) * scale.y);
|
|
|
+ vec2_set(&max_br, stretchItemSize.x + crop.right * scale.x,
|
|
|
+ stretchItemSize.y + crop.bottom * scale.y);
|
|
|
|
|
|
- typedef std::function<float (float, float)> minmax_func_t;
|
|
|
+ typedef std::function<float(float, float)> minmax_func_t;
|
|
|
|
|
|
minmax_func_t min_x = scale.x < 0.0f ? maxfunc : minfunc;
|
|
|
minmax_func_t min_y = scale.y < 0.0f ? maxfunc : minfunc;
|
|
@@ -1021,8 +1015,8 @@ void OBSBasicPreview::CropItem(const vec2 &pos)
|
|
|
pos3.y = br.y = max_y(pos3.y, minY);
|
|
|
}
|
|
|
|
|
|
-#define ALIGN_X (ITEM_LEFT|ITEM_RIGHT)
|
|
|
-#define ALIGN_Y (ITEM_TOP|ITEM_BOTTOM)
|
|
|
+#define ALIGN_X (ITEM_LEFT | ITEM_RIGHT)
|
|
|
+#define ALIGN_Y (ITEM_TOP | ITEM_BOTTOM)
|
|
|
vec3 newPos;
|
|
|
vec3_zero(&newPos);
|
|
|
|
|
@@ -1049,12 +1043,14 @@ void OBSBasicPreview::CropItem(const vec2 &pos)
|
|
|
if (stretchFlags & ITEM_LEFT)
|
|
|
crop.left += int(std::round(tl.x / scale.x));
|
|
|
else if (stretchFlags & ITEM_RIGHT)
|
|
|
- crop.right += int(std::round((stretchItemSize.x - br.x) / scale.x));
|
|
|
+ crop.right +=
|
|
|
+ int(std::round((stretchItemSize.x - br.x) / scale.x));
|
|
|
|
|
|
if (stretchFlags & ITEM_TOP)
|
|
|
crop.top += int(std::round(tl.y / scale.y));
|
|
|
else if (stretchFlags & ITEM_BOTTOM)
|
|
|
- crop.bottom += int(std::round((stretchItemSize.y - br.y) / scale.y));
|
|
|
+ crop.bottom +=
|
|
|
+ int(std::round((stretchItemSize.y - br.y) / scale.y));
|
|
|
|
|
|
vec3_transform(&newPos, &newPos, &itemToScreen);
|
|
|
newPos.x = std::round(newPos.x);
|
|
@@ -1075,7 +1071,7 @@ void OBSBasicPreview::CropItem(const vec2 &pos)
|
|
|
obs_sceneitem_defer_update_begin(stretchItem);
|
|
|
obs_sceneitem_set_crop(stretchItem, &crop);
|
|
|
if (boundsType == OBS_BOUNDS_NONE)
|
|
|
- obs_sceneitem_set_pos(stretchItem, (vec2*)&newPos);
|
|
|
+ obs_sceneitem_set_pos(stretchItem, (vec2 *)&newPos);
|
|
|
obs_sceneitem_defer_update_end(stretchItem);
|
|
|
}
|
|
|
|
|
@@ -1109,19 +1105,20 @@ void OBSBasicPreview::StretchItem(const vec2 &pos)
|
|
|
obs_source_t *source = obs_sceneitem_get_source(stretchItem);
|
|
|
|
|
|
vec2 baseSize;
|
|
|
- vec2_set(&baseSize,
|
|
|
- float(obs_source_get_width(source)),
|
|
|
- float(obs_source_get_height(source)));
|
|
|
+ vec2_set(&baseSize, float(obs_source_get_width(source)),
|
|
|
+ float(obs_source_get_height(source)));
|
|
|
|
|
|
vec2 size;
|
|
|
- vec2_set(&size,br. x - tl.x, br.y - tl.y);
|
|
|
+ vec2_set(&size, br.x - tl.x, br.y - tl.y);
|
|
|
|
|
|
if (boundsType != OBS_BOUNDS_NONE) {
|
|
|
if (shiftDown)
|
|
|
ClampAspect(tl, br, size, baseSize);
|
|
|
|
|
|
- if (tl.x > br.x) std::swap(tl.x, br.x);
|
|
|
- if (tl.y > br.y) std::swap(tl.y, br.y);
|
|
|
+ if (tl.x > br.x)
|
|
|
+ std::swap(tl.x, br.x);
|
|
|
+ if (tl.y > br.y)
|
|
|
+ std::swap(tl.y, br.y);
|
|
|
|
|
|
vec2_abs(&size, &size);
|
|
|
|
|
@@ -1177,16 +1174,16 @@ void OBSBasicPreview::mouseMoveEvent(QMouseEvent *event)
|
|
|
pos.y = std::round(pos.y);
|
|
|
|
|
|
if (stretchHandle != ItemHandle::None) {
|
|
|
- OBSBasic *main = reinterpret_cast<OBSBasic*>(
|
|
|
- App()->GetMainWindow());
|
|
|
+ OBSBasic *main = reinterpret_cast<OBSBasic *>(
|
|
|
+ App()->GetMainWindow());
|
|
|
OBSScene scene = main->GetCurrentScene();
|
|
|
- obs_sceneitem_t *group = obs_sceneitem_get_group(
|
|
|
- scene, stretchItem);
|
|
|
+ obs_sceneitem_t *group =
|
|
|
+ obs_sceneitem_get_group(scene, stretchItem);
|
|
|
if (group) {
|
|
|
vec3 group_pos;
|
|
|
vec3_set(&group_pos, pos.x, pos.y, 0.0f);
|
|
|
vec3_transform(&group_pos, &group_pos,
|
|
|
- &invGroupTransform);
|
|
|
+ &invGroupTransform);
|
|
|
pos.x = group_pos.x;
|
|
|
pos.y = group_pos.y;
|
|
|
}
|
|
@@ -1230,13 +1227,13 @@ static void DrawSquareAtPos(float x, float y)
|
|
|
gs_matrix_translate(&pos);
|
|
|
|
|
|
gs_matrix_translate3f(-HANDLE_RADIUS, -HANDLE_RADIUS, 0.0f);
|
|
|
- gs_matrix_scale3f(HANDLE_RADIUS*2, HANDLE_RADIUS*2, 1.0f);
|
|
|
+ gs_matrix_scale3f(HANDLE_RADIUS * 2, HANDLE_RADIUS * 2, 1.0f);
|
|
|
gs_draw(GS_TRISTRIP, 0, 0);
|
|
|
gs_matrix_pop();
|
|
|
}
|
|
|
|
|
|
static void DrawLine(float x1, float y1, float x2, float y2, float thickness,
|
|
|
- vec2 scale)
|
|
|
+ vec2 scale)
|
|
|
{
|
|
|
float ySide = (y1 == y2) ? (y1 < 0.5f ? 1.0f : -1.0f) : 0.0f;
|
|
|
float xSide = (x1 == x2) ? (x1 < 0.5f ? 1.0f : -1.0f) : 0.0f;
|
|
@@ -1245,9 +1242,9 @@ static void DrawLine(float x1, float y1, float x2, float y2, float thickness,
|
|
|
|
|
|
gs_vertex2f(x1, y1);
|
|
|
gs_vertex2f(x1 + (xSide * (thickness / scale.x)),
|
|
|
- y1 + (ySide * (thickness / scale.y)));
|
|
|
+ y1 + (ySide * (thickness / scale.y)));
|
|
|
gs_vertex2f(x2 + (xSide * (thickness / scale.x)),
|
|
|
- y2 + (ySide * (thickness / scale.y)));
|
|
|
+ y2 + (ySide * (thickness / scale.y)));
|
|
|
gs_vertex2f(x2, y2);
|
|
|
gs_vertex2f(x1, y1);
|
|
|
|
|
@@ -1292,14 +1289,12 @@ static void DrawRect(float thickness, vec2 scale)
|
|
|
|
|
|
static inline bool crop_enabled(const obs_sceneitem_crop *crop)
|
|
|
{
|
|
|
- return crop->left > 0 ||
|
|
|
- crop->top > 0 ||
|
|
|
- crop->right > 0 ||
|
|
|
+ return crop->left > 0 || crop->top > 0 || crop->right > 0 ||
|
|
|
crop->bottom > 0;
|
|
|
}
|
|
|
|
|
|
bool OBSBasicPreview::DrawSelectedOverflow(obs_scene_t *scene,
|
|
|
- obs_sceneitem_t *item, void *param)
|
|
|
+ obs_sceneitem_t *item, void *param)
|
|
|
{
|
|
|
if (obs_sceneitem_locked(item))
|
|
|
return true;
|
|
@@ -1308,7 +1303,7 @@ bool OBSBasicPreview::DrawSelectedOverflow(obs_scene_t *scene,
|
|
|
return true;
|
|
|
|
|
|
bool select = config_get_bool(GetGlobalConfig(), "BasicWindow",
|
|
|
- "OverflowSelectionHidden");
|
|
|
+ "OverflowSelectionHidden");
|
|
|
|
|
|
if (!select && !obs_sceneitem_visible(item))
|
|
|
return true;
|
|
@@ -1319,17 +1314,18 @@ bool OBSBasicPreview::DrawSelectedOverflow(obs_scene_t *scene,
|
|
|
|
|
|
gs_matrix_push();
|
|
|
gs_matrix_mul(&mat);
|
|
|
- obs_sceneitem_group_enum_items(item, DrawSelectedOverflow, param);
|
|
|
+ obs_sceneitem_group_enum_items(item, DrawSelectedOverflow,
|
|
|
+ param);
|
|
|
gs_matrix_pop();
|
|
|
}
|
|
|
|
|
|
bool always = config_get_bool(GetGlobalConfig(), "BasicWindow",
|
|
|
- "OverflowAlwaysVisible");
|
|
|
+ "OverflowAlwaysVisible");
|
|
|
|
|
|
if (!always && !obs_sceneitem_selected(item))
|
|
|
return true;
|
|
|
|
|
|
- OBSBasicPreview *prev = reinterpret_cast<OBSBasicPreview*>(param);
|
|
|
+ OBSBasicPreview *prev = reinterpret_cast<OBSBasicPreview *>(param);
|
|
|
|
|
|
matrix4 boxTransform;
|
|
|
matrix4 invBoxTransform;
|
|
@@ -1343,14 +1339,13 @@ bool OBSBasicPreview::DrawSelectedOverflow(obs_scene_t *scene,
|
|
|
{{{1.f, 1.f, 0.f}}},
|
|
|
};
|
|
|
|
|
|
- bool visible = std::all_of(std::begin(bounds), std::end(bounds),
|
|
|
- [&](const vec3 &b)
|
|
|
- {
|
|
|
- vec3 pos;
|
|
|
- vec3_transform(&pos, &b, &boxTransform);
|
|
|
- vec3_transform(&pos, &pos, &invBoxTransform);
|
|
|
- return CloseFloat(pos.x, b.x) && CloseFloat(pos.y, b.y);
|
|
|
- });
|
|
|
+ bool visible = std::all_of(
|
|
|
+ std::begin(bounds), std::end(bounds), [&](const vec3 &b) {
|
|
|
+ vec3 pos;
|
|
|
+ vec3_transform(&pos, &b, &boxTransform);
|
|
|
+ vec3_transform(&pos, &pos, &invBoxTransform);
|
|
|
+ return CloseFloat(pos.x, b.x) && CloseFloat(pos.y, b.y);
|
|
|
+ });
|
|
|
|
|
|
if (!visible)
|
|
|
return true;
|
|
@@ -1360,9 +1355,9 @@ bool OBSBasicPreview::DrawSelectedOverflow(obs_scene_t *scene,
|
|
|
obs_transform_info info;
|
|
|
obs_sceneitem_get_info(item, &info);
|
|
|
|
|
|
- gs_effect_t *solid = obs_get_base_effect(OBS_EFFECT_REPEAT);
|
|
|
- gs_eparam_t *image = gs_effect_get_param_by_name(solid, "image");
|
|
|
- gs_eparam_t *scale = gs_effect_get_param_by_name(solid, "scale");
|
|
|
+ gs_effect_t *solid = obs_get_base_effect(OBS_EFFECT_REPEAT);
|
|
|
+ gs_eparam_t *image = gs_effect_get_param_by_name(solid, "image");
|
|
|
+ gs_eparam_t *scale = gs_effect_get_param_by_name(solid, "scale");
|
|
|
|
|
|
vec2 s;
|
|
|
vec2_set(&s, boxTransform.x.x / 96, boxTransform.y.y / 96);
|
|
@@ -1389,7 +1384,7 @@ bool OBSBasicPreview::DrawSelectedOverflow(obs_scene_t *scene,
|
|
|
}
|
|
|
|
|
|
bool OBSBasicPreview::DrawSelectedItem(obs_scene_t *scene,
|
|
|
- obs_sceneitem_t *item, void *param)
|
|
|
+ obs_sceneitem_t *item, void *param)
|
|
|
{
|
|
|
if (obs_sceneitem_locked(item))
|
|
|
return true;
|
|
@@ -1407,11 +1402,11 @@ bool OBSBasicPreview::DrawSelectedItem(obs_scene_t *scene,
|
|
|
gs_matrix_pop();
|
|
|
}
|
|
|
|
|
|
- OBSBasicPreview *prev = reinterpret_cast<OBSBasicPreview*>(param);
|
|
|
+ OBSBasicPreview *prev = reinterpret_cast<OBSBasicPreview *>(param);
|
|
|
OBSBasic *main = OBSBasic::Get();
|
|
|
|
|
|
bool hovered = prev->hoveredPreviewItem == item ||
|
|
|
- prev->hoveredListItem == item;
|
|
|
+ prev->hoveredListItem == item;
|
|
|
bool selected = obs_sceneitem_selected(item);
|
|
|
|
|
|
if (!selected && !hovered)
|
|
@@ -1437,14 +1432,13 @@ bool OBSBasicPreview::DrawSelectedItem(obs_scene_t *scene,
|
|
|
vec4_set(&green, 0.0f, 1.0f, 0.0f, 1.0f);
|
|
|
vec4_set(&blue, 0.0f, 0.5f, 1.0f, 1.0f);
|
|
|
|
|
|
- bool visible = std::all_of(std::begin(bounds), std::end(bounds),
|
|
|
- [&](const vec3 &b)
|
|
|
- {
|
|
|
- vec3 pos;
|
|
|
- vec3_transform(&pos, &b, &boxTransform);
|
|
|
- vec3_transform(&pos, &pos, &invBoxTransform);
|
|
|
- return CloseFloat(pos.x, b.x) && CloseFloat(pos.y, b.y);
|
|
|
- });
|
|
|
+ bool visible = std::all_of(
|
|
|
+ std::begin(bounds), std::end(bounds), [&](const vec3 &b) {
|
|
|
+ vec3 pos;
|
|
|
+ vec3_transform(&pos, &b, &boxTransform);
|
|
|
+ vec3_transform(&pos, &pos, &invBoxTransform);
|
|
|
+ return CloseFloat(pos.x, b.x) && CloseFloat(pos.y, b.y);
|
|
|
+ });
|
|
|
|
|
|
if (!visible)
|
|
|
return true;
|
|
@@ -1471,17 +1465,17 @@ bool OBSBasicPreview::DrawSelectedItem(obs_scene_t *scene,
|
|
|
gs_eparam_t *colParam = gs_effect_get_param_by_name(eff, "color");
|
|
|
|
|
|
if (info.bounds_type == OBS_BOUNDS_NONE && crop_enabled(&crop)) {
|
|
|
-#define DRAW_SIDE(side, x1, y1, x2, y2) \
|
|
|
- if (hovered && !selected) \
|
|
|
- gs_effect_set_vec4(colParam, &blue); \
|
|
|
- else if (crop.side > 0) \
|
|
|
- gs_effect_set_vec4(colParam, &green); \
|
|
|
- DrawLine(x1, y1, x2, y2, HANDLE_RADIUS / 2, boxScale); \
|
|
|
- gs_effect_set_vec4(colParam, &red);
|
|
|
-
|
|
|
- DRAW_SIDE(left, 0.0f, 0.0f, 0.0f, 1.0f);
|
|
|
- DRAW_SIDE(top, 0.0f, 0.0f, 1.0f, 0.0f);
|
|
|
- DRAW_SIDE(right, 1.0f, 0.0f, 1.0f, 1.0f);
|
|
|
+#define DRAW_SIDE(side, x1, y1, x2, y2) \
|
|
|
+ if (hovered && !selected) \
|
|
|
+ gs_effect_set_vec4(colParam, &blue); \
|
|
|
+ else if (crop.side > 0) \
|
|
|
+ gs_effect_set_vec4(colParam, &green); \
|
|
|
+ DrawLine(x1, y1, x2, y2, HANDLE_RADIUS / 2, boxScale); \
|
|
|
+ gs_effect_set_vec4(colParam, &red);
|
|
|
+
|
|
|
+ DRAW_SIDE(left, 0.0f, 0.0f, 0.0f, 1.0f);
|
|
|
+ DRAW_SIDE(top, 0.0f, 0.0f, 1.0f, 0.0f);
|
|
|
+ DRAW_SIDE(right, 1.0f, 0.0f, 1.0f, 1.0f);
|
|
|
DRAW_SIDE(bottom, 0.0f, 1.0f, 1.0f, 1.0f);
|
|
|
#undef DRAW_SIDE
|
|
|
} else {
|
|
@@ -1522,7 +1516,7 @@ void OBSBasicPreview::DrawOverflow()
|
|
|
return;
|
|
|
|
|
|
bool hidden = config_get_bool(GetGlobalConfig(), "BasicWindow",
|
|
|
- "OverflowHidden");
|
|
|
+ "OverflowHidden");
|
|
|
|
|
|
if (hidden)
|
|
|
return;
|
|
@@ -1535,7 +1529,7 @@ void OBSBasicPreview::DrawOverflow()
|
|
|
overflow = gs_texture_create_from_file(path.c_str());
|
|
|
}
|
|
|
|
|
|
- OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
|
|
|
+ OBSBasic *main = reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
|
|
|
|
|
|
OBSScene scene = main->GetCurrentScene();
|
|
|
|
|
@@ -1558,10 +1552,10 @@ void OBSBasicPreview::DrawSceneEditing()
|
|
|
|
|
|
GS_DEBUG_MARKER_BEGIN(GS_DEBUG_COLOR_DEFAULT, "DrawSceneEditing");
|
|
|
|
|
|
- OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
|
|
|
+ OBSBasic *main = reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
|
|
|
|
|
|
- gs_effect_t *solid = obs_get_base_effect(OBS_EFFECT_SOLID);
|
|
|
- gs_technique_t *tech = gs_effect_get_technique(solid, "Solid");
|
|
|
+ gs_effect_t *solid = obs_get_base_effect(OBS_EFFECT_SOLID);
|
|
|
+ gs_technique_t *tech = gs_effect_get_technique(solid, "Solid");
|
|
|
|
|
|
vec4 color;
|
|
|
vec4_set(&color, 1.0f, 0.0f, 0.0f, 1.0f);
|
|
@@ -1592,13 +1586,16 @@ void OBSBasicPreview::ResetScrollingOffset()
|
|
|
vec2_zero(&scrollingOffset);
|
|
|
}
|
|
|
|
|
|
-void OBSBasicPreview::SetScalingLevel(int32_t newScalingLevelVal) {
|
|
|
- float newScalingAmountVal = pow(ZOOM_SENSITIVITY, float(newScalingLevelVal));
|
|
|
+void OBSBasicPreview::SetScalingLevel(int32_t newScalingLevelVal)
|
|
|
+{
|
|
|
+ float newScalingAmountVal =
|
|
|
+ pow(ZOOM_SENSITIVITY, float(newScalingLevelVal));
|
|
|
scalingLevel = newScalingLevelVal;
|
|
|
SetScalingAmount(newScalingAmountVal);
|
|
|
}
|
|
|
|
|
|
-void OBSBasicPreview::SetScalingAmount(float newScalingAmountVal) {
|
|
|
+void OBSBasicPreview::SetScalingAmount(float newScalingAmountVal)
|
|
|
+{
|
|
|
scrollingOffset.x *= newScalingAmountVal / scalingAmount;
|
|
|
scrollingOffset.y *= newScalingAmountVal / scalingAmount;
|
|
|
scalingAmount = newScalingAmountVal;
|