mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-01-06 11:39:49 -06:00
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:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user