From 5bbe6201882e628c915503927a3ed6608da9fea7 Mon Sep 17 00:00:00 2001 From: Palana Date: Tue, 14 Oct 2014 01:52:26 +0200 Subject: [PATCH] Fix wrong selection of items near origin in the preview window If you have an item with width = 0 and height = 0 close to (0, 0) clicking anywhere in the preview window would select them --- obs/window-basic-preview.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/obs/window-basic-preview.cpp b/obs/window-basic-preview.cpp index 669a0c939..201b147ab 100644 --- a/obs/window-basic-preview.cpp +++ b/obs/window-basic-preview.cpp @@ -56,13 +56,20 @@ static bool SceneItemHasVideo(obs_sceneitem_t *item) return (flags & OBS_SOURCE_VIDEO) != 0; } +static bool CloseFloat(float a, float b, float epsilon=0.01) +{ + return abs(a-b) <= epsilon; +} + static bool FindItemAtPos(obs_scene_t *scene, obs_sceneitem_t *item, void *param) { SceneFindData *data = reinterpret_cast(param); matrix4 transform; + matrix4 invTransform; vec3 transformedPos; vec3 pos3; + vec3 pos3_; if (!SceneItemHasVideo(item)) return true; @@ -71,10 +78,12 @@ static bool FindItemAtPos(obs_scene_t *scene, obs_sceneitem_t *item, obs_sceneitem_get_box_transform(item, &transform); - matrix4_inv(&transform, &transform); - vec3_transform(&transformedPos, &pos3, &transform); + matrix4_inv(&invTransform, &transform); + vec3_transform(&transformedPos, &pos3, &invTransform); + vec3_transform(&pos3_, &transformedPos, &transform); - if (transformedPos.x >= 0.0f && transformedPos.x <= 1.0f && + if (CloseFloat(pos3.x, pos3_.x) && CloseFloat(pos3.y, pos3_.y) && + transformedPos.x >= 0.0f && transformedPos.x <= 1.0f && transformedPos.y >= 0.0f && transformedPos.y <= 1.0f) { if (data->selectBelow && obs_sceneitem_selected(item)) { if (data->item)