Add isGuiWindow check for mouse and keyboard callbacks

Fix interaction problems when hovering/clicking with the mouse in a non-GUI window, when having a setup with more than one window (e.g. the single_gui.json setup)

Previously, clicking with the mouse in the rendering window without the GUI also triggered mouse clicks in all the other windows, including the GUI windows. This was disturbing for interaction in the single_gui setup

Now, the GUI modules check to see if the clicked window is actually an interaction window
This commit is contained in:
Emma Broman
2022-06-08 19:49:09 +02:00
committed by Emma Broman
parent 0161d514b7
commit 0cc5704b6a
9 changed files with 170 additions and 103 deletions

View File

@@ -28,11 +28,23 @@
#include <openspace/util/keys.h>
#include <openspace/util/mouse.h>
#include <openspace/util/touch.h>
#include <ghoul/misc/boolean.h>
#include <functional>
#include <vector>
namespace openspace {
BooleanType(IsGuiWindow);
} // namespace openspace
namespace openspace::global::callback {
using KeyboardCallback = std::function<bool(Key, KeyModifier, KeyAction, IsGuiWindow)>;
using CharacterCallback = std::function<bool(unsigned int, KeyModifier, IsGuiWindow)>;
using MouseButtonCallback =
std::function<bool(MouseButton, MouseAction, KeyModifier, IsGuiWindow)>;
using MousePositionCallback = std::function<void(double, double, IsGuiWindow)>;
using MouseScrollWheelCallback = std::function<bool(double, double, IsGuiWindow)>;
inline std::vector<std::function<void()>>* initialize;
inline std::vector<std::function<void()>>* deinitialize;
inline std::vector<std::function<void()>>* initializeGL;
@@ -42,12 +54,11 @@ inline std::vector<std::function<void()>>* postSyncPreDraw;
inline std::vector<std::function<void()>>* render;
inline std::vector<std::function<void()>>* draw2D;
inline std::vector<std::function<void()>>* postDraw;
inline std::vector<std::function<bool(Key, KeyModifier, KeyAction)>>* keyboard;
inline std::vector<std::function<bool(unsigned int, KeyModifier)>>* character;
inline std::vector<std::function<bool(MouseButton, MouseAction, KeyModifier)>>*
mouseButton;
inline std::vector<std::function<void(double, double)>>* mousePosition;
inline std::vector<std::function<bool(double, double)>>* mouseScrollWheel;
inline std::vector<KeyboardCallback>* keyboard;
inline std::vector<CharacterCallback>* character;
inline std::vector<MouseButtonCallback>* mouseButton;
inline std::vector<MousePositionCallback>* mousePosition;
inline std::vector<MouseScrollWheelCallback>* mouseScrollWheel;
inline std::vector<std::function<bool(TouchInput)>>* touchDetected;
inline std::vector<std::function<bool(TouchInput)>>* touchUpdated;
inline std::vector<std::function<void(TouchInput)>>* touchExit;

View File

@@ -25,6 +25,7 @@
#ifndef __OPENSPACE_CORE___OPENSPACEENGINE___H__
#define __OPENSPACE_CORE___OPENSPACEENGINE___H__
#include <openspace/engine/globalscallbacks.h>
#include <openspace/properties/optionproperty.h>
#include <openspace/properties/propertyowner.h>
#include <openspace/properties/property.h>
@@ -92,11 +93,14 @@ public:
void drawOverlays();
void postDraw();
void resetPropertyChangeFlags();
void keyboardCallback(Key key, KeyModifier mod, KeyAction action);
void charCallback(unsigned int codepoint, KeyModifier modifier);
void mouseButtonCallback(MouseButton button, MouseAction action, KeyModifier mods);
void mousePositionCallback(double x, double y);
void mouseScrollWheelCallback(double posX, double posY);
void keyboardCallback(Key key, KeyModifier mod, KeyAction action,
IsGuiWindow isGuiWindow);
void charCallback(unsigned int codepoint, KeyModifier modifier,
IsGuiWindow isGuiWindow);
void mouseButtonCallback(MouseButton button, MouseAction action,
KeyModifier mods, IsGuiWindow isGuiWindow);
void mousePositionCallback(double x, double y, IsGuiWindow isGuiWindow);
void mouseScrollWheelCallback(double posX, double posY, IsGuiWindow isGuiWindow);
void touchDetectionCallback(TouchInput input);
void touchUpdateCallback(TouchInput input);
void touchExitCallback(TouchInput input);