diff options
| author | Andrey Lihatskiy <alihatskiy@productengine.com> | 2024-05-22 20:51:58 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-22 20:51:58 +0300 |
| commit | 6cc7dd09d5e69cf57e6de7fb568a0ad2693f9c9a (patch) | |
| tree | fab23811a5cedc1ebf01479c852ee92ff62b636c /indra/newview/llviewerinput.h | |
| parent | ef8f4819822288e044ea719feb6af7a1f4df4c4e (diff) | |
| parent | 7bb5afc11ee5a6af78302a8d76a9a619e2baaab2 (diff) | |
Merge pull request #1545 from Ansariel/DRTVWR-600-maint-A
Merge main into DRTVWR-600-maint-a
Diffstat (limited to 'indra/newview/llviewerinput.h')
| -rw-r--r-- | indra/newview/llviewerinput.h | 396 |
1 files changed, 198 insertions, 198 deletions
diff --git a/indra/newview/llviewerinput.h b/indra/newview/llviewerinput.h index 68afa33a6a..abd50fdbc6 100644 --- a/indra/newview/llviewerinput.h +++ b/indra/newview/llviewerinput.h @@ -1,198 +1,198 @@ -/** - * @file llviewerinput.h - * @brief LLViewerInput class header file - * - * $LicenseInfo:firstyear=2005&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#ifndef LL_LLVIEWERINPUT_H -#define LL_LLVIEWERINPUT_H - -#include "llkeyboard.h" // For EKeystate - -const S32 MAX_KEY_BINDINGS = 128; // was 60 -const S32 keybindings_xml_version = 1; -const std::string script_mouse_handler_name = "script_trigger_lbutton"; - -class LLWindow; - -class LLNamedFunction -{ -public: - LLNamedFunction() : mFunction(NULL) { }; - ~LLNamedFunction() { }; - - std::string mName; - LLKeyFunc mFunction; -}; - -class LLKeyboardBinding -{ -public: - KEY mKey; - MASK mMask; - - LLKeyFunc mFunction; - std::string mFunctionName; -}; - -class LLMouseBinding -{ -public: - EMouseClickType mMouse; - MASK mMask; - - LLKeyFunc mFunction; - std::string mFunctionName; -}; - - -typedef enum e_keyboard_mode -{ - MODE_FIRST_PERSON, - MODE_THIRD_PERSON, - MODE_EDIT_AVATAR, - MODE_SITTING, - MODE_COUNT -} EKeyboardMode; - -class LLViewerInput : public LLKeyBindingToStringHandler -{ -public: - struct KeyBinding : public LLInitParam::Block<KeyBinding> - { - Mandatory<std::string> key, - mask, - command; - Optional<std::string> mouse; // Note, not mandatory for the sake of backward campatibility with keys.xml - - KeyBinding(); - }; - - struct KeyMode : public LLInitParam::Block<KeyMode> - { - Multiple<KeyBinding> bindings; - - KeyMode(); - }; - - struct Keys : public LLInitParam::Block<Keys> - { - Optional<KeyMode> first_person, - third_person, - sitting, - edit_avatar; - Optional<S32> xml_version; // 'xml', because 'version' appears to be reserved - Keys(); - }; - - LLViewerInput(); - virtual ~LLViewerInput(); - - bool handleKey(KEY key, MASK mask, bool repeated); - bool handleKeyUp(KEY key, MASK mask); - - // Handle 'global' keybindings that do not consume event, - // yet need to be processed early - // Example: we want voice to toggle even if some floater is focused - bool handleGlobalBindsKeyDown(KEY key, MASK mask); - bool handleGlobalBindsKeyUp(KEY key, MASK mask); - bool handleGlobalBindsMouse(EMouseClickType clicktype, MASK mask, bool down); - - S32 loadBindingsXML(const std::string& filename); // returns number bound, 0 on error - EKeyboardMode getMode() const; - - static bool modeFromString(const std::string& string, S32 *mode); // False on failure - static bool mouseFromString(const std::string& string, EMouseClickType *mode);// False on failure - - bool scanKey(KEY key, - bool key_down, - bool key_up, - bool key_level) const; - - // handleMouse() records state, scanMouse() goes through states, scanMouse(click) processes individual saved states after UI is done with them - bool handleMouse(LLWindow *window_impl, LLCoordGL pos, MASK mask, EMouseClickType clicktype, bool down); - void scanMouse(); - - bool isMouseBindUsed(const EMouseClickType mouse, const MASK mask, const S32 mode) const; - bool isLMouseHandlingDefault(const S32 mode) const { return mLMouseDefaultHandling[mode]; } - - // inherited from LLKeyBindingToStringHandler - virtual std::string getKeyBindingAsString(const std::string& mode, const std::string& control) const override; - -private: - bool scanKey(const std::vector<LLKeyboardBinding> &binding, - S32 binding_count, - KEY key, - MASK mask, - bool key_down, - bool key_up, - bool key_level, - bool repeat) const; - - enum EMouseState - { - MOUSE_STATE_DOWN, // key down this frame - MOUSE_STATE_CLICK, // key went up and down in scope of same frame - MOUSE_STATE_LEVEL, // clicked again fast, or never released - MOUSE_STATE_UP, // went up this frame - MOUSE_STATE_SILENT // notified about 'up', do not notify again - }; - bool scanMouse(EMouseClickType click, EMouseState state) const; - bool scanMouse(const std::vector<LLMouseBinding> &binding, - S32 binding_count, - EMouseClickType mouse, - MASK mask, - EMouseState state, - bool ignore_additional_masks) const; - - S32 loadBindingMode(const LLViewerInput::KeyMode& keymode, S32 mode); - bool bindKey(const S32 mode, const KEY key, const MASK mask, const std::string& function_name); - bool bindMouse(const S32 mode, const EMouseClickType mouse, const MASK mask, const std::string& function_name); - void resetBindings(); - - // Hold all the ugly stuff torn out to make LLKeyboard non-viewer-specific here - - // TODO: at some point it is better to remake this, especially keyaboard part - // would be much better to send to functions actual state of the button than - // to send what we think function wants based on collection of bools (mKeyRepeated, mKeyLevel, mKeyDown) - std::vector<LLKeyboardBinding> mKeyBindings[MODE_COUNT]; - std::vector<LLMouseBinding> mMouseBindings[MODE_COUNT]; - bool mLMouseDefaultHandling[MODE_COUNT]; // Due to having special priority - - // keybindings that do not consume event and are handled earlier, before floaters - std::vector<LLKeyboardBinding> mGlobalKeyBindings[MODE_COUNT]; - std::vector<LLMouseBinding> mGlobalMouseBindings[MODE_COUNT]; - - typedef std::map<U32, U32> key_remap_t; - key_remap_t mRemapKeys[MODE_COUNT]; - std::set<KEY> mKeysSkippedByUI; - bool mKeyHandledByUI[KEY_COUNT]; // key processed successfully by UI - - // This is indentical to what llkeyboard does (mKeyRepeated, mKeyLevel, mKeyDown e t c), - // just instead of remembering individually as bools, we record state as enum - EMouseState mMouseLevel[CLICK_COUNT]; // records of key state -}; - -extern LLViewerInput gViewerInput; - -#endif // LL_LLVIEWERINPUT_H +/**
+ * @file llviewerinput.h
+ * @brief LLViewerInput class header file
+ *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLVIEWERINPUT_H
+#define LL_LLVIEWERINPUT_H
+
+#include "llkeyboard.h" // For EKeystate
+
+const S32 MAX_KEY_BINDINGS = 128; // was 60
+const S32 keybindings_xml_version = 1;
+const std::string script_mouse_handler_name = "script_trigger_lbutton";
+
+class LLWindow;
+
+class LLNamedFunction
+{
+public:
+ LLNamedFunction() : mFunction(NULL) { };
+ ~LLNamedFunction() { };
+
+ std::string mName;
+ LLKeyFunc mFunction;
+};
+
+class LLKeyboardBinding
+{
+public:
+ KEY mKey;
+ MASK mMask;
+
+ LLKeyFunc mFunction;
+ std::string mFunctionName;
+};
+
+class LLMouseBinding
+{
+public:
+ EMouseClickType mMouse;
+ MASK mMask;
+
+ LLKeyFunc mFunction;
+ std::string mFunctionName;
+};
+
+
+typedef enum e_keyboard_mode
+{
+ MODE_FIRST_PERSON,
+ MODE_THIRD_PERSON,
+ MODE_EDIT_AVATAR,
+ MODE_SITTING,
+ MODE_COUNT
+} EKeyboardMode;
+
+class LLViewerInput : public LLKeyBindingToStringHandler
+{
+public:
+ struct KeyBinding : public LLInitParam::Block<KeyBinding>
+ {
+ Mandatory<std::string> key,
+ mask,
+ command;
+ Optional<std::string> mouse; // Note, not mandatory for the sake of backward campatibility with keys.xml
+
+ KeyBinding();
+ };
+
+ struct KeyMode : public LLInitParam::Block<KeyMode>
+ {
+ Multiple<KeyBinding> bindings;
+
+ KeyMode();
+ };
+
+ struct Keys : public LLInitParam::Block<Keys>
+ {
+ Optional<KeyMode> first_person,
+ third_person,
+ sitting,
+ edit_avatar;
+ Optional<S32> xml_version; // 'xml', because 'version' appears to be reserved
+ Keys();
+ };
+
+ LLViewerInput();
+ virtual ~LLViewerInput();
+
+ bool handleKey(KEY key, MASK mask, bool repeated);
+ bool handleKeyUp(KEY key, MASK mask);
+
+ // Handle 'global' keybindings that do not consume event,
+ // yet need to be processed early
+ // Example: we want voice to toggle even if some floater is focused
+ bool handleGlobalBindsKeyDown(KEY key, MASK mask);
+ bool handleGlobalBindsKeyUp(KEY key, MASK mask);
+ bool handleGlobalBindsMouse(EMouseClickType clicktype, MASK mask, bool down);
+
+ S32 loadBindingsXML(const std::string& filename); // returns number bound, 0 on error
+ EKeyboardMode getMode() const;
+
+ static bool modeFromString(const std::string& string, S32 *mode); // False on failure
+ static bool mouseFromString(const std::string& string, EMouseClickType *mode);// False on failure
+
+ bool scanKey(KEY key,
+ bool key_down,
+ bool key_up,
+ bool key_level) const;
+
+ // handleMouse() records state, scanMouse() goes through states, scanMouse(click) processes individual saved states after UI is done with them
+ bool handleMouse(LLWindow *window_impl, LLCoordGL pos, MASK mask, EMouseClickType clicktype, bool down);
+ void scanMouse();
+
+ bool isMouseBindUsed(const EMouseClickType mouse, const MASK mask, const S32 mode) const;
+ bool isLMouseHandlingDefault(const S32 mode) const { return mLMouseDefaultHandling[mode]; }
+
+ // inherited from LLKeyBindingToStringHandler
+ virtual std::string getKeyBindingAsString(const std::string& mode, const std::string& control) const override;
+
+private:
+ bool scanKey(const std::vector<LLKeyboardBinding> &binding,
+ S32 binding_count,
+ KEY key,
+ MASK mask,
+ bool key_down,
+ bool key_up,
+ bool key_level,
+ bool repeat) const;
+
+ enum EMouseState
+ {
+ MOUSE_STATE_DOWN, // key down this frame
+ MOUSE_STATE_CLICK, // key went up and down in scope of same frame
+ MOUSE_STATE_LEVEL, // clicked again fast, or never released
+ MOUSE_STATE_UP, // went up this frame
+ MOUSE_STATE_SILENT // notified about 'up', do not notify again
+ };
+ bool scanMouse(EMouseClickType click, EMouseState state) const;
+ bool scanMouse(const std::vector<LLMouseBinding> &binding,
+ S32 binding_count,
+ EMouseClickType mouse,
+ MASK mask,
+ EMouseState state,
+ bool ignore_additional_masks) const;
+
+ S32 loadBindingMode(const LLViewerInput::KeyMode& keymode, S32 mode);
+ bool bindKey(const S32 mode, const KEY key, const MASK mask, const std::string& function_name);
+ bool bindMouse(const S32 mode, const EMouseClickType mouse, const MASK mask, const std::string& function_name);
+ void resetBindings();
+
+ // Hold all the ugly stuff torn out to make LLKeyboard non-viewer-specific here
+
+ // TODO: at some point it is better to remake this, especially keyaboard part
+ // would be much better to send to functions actual state of the button than
+ // to send what we think function wants based on collection of bools (mKeyRepeated, mKeyLevel, mKeyDown)
+ std::vector<LLKeyboardBinding> mKeyBindings[MODE_COUNT];
+ std::vector<LLMouseBinding> mMouseBindings[MODE_COUNT];
+ bool mLMouseDefaultHandling[MODE_COUNT]; // Due to having special priority
+
+ // keybindings that do not consume event and are handled earlier, before floaters
+ std::vector<LLKeyboardBinding> mGlobalKeyBindings[MODE_COUNT];
+ std::vector<LLMouseBinding> mGlobalMouseBindings[MODE_COUNT];
+
+ typedef std::map<U32, U32> key_remap_t;
+ key_remap_t mRemapKeys[MODE_COUNT];
+ std::set<KEY> mKeysSkippedByUI;
+ bool mKeyHandledByUI[KEY_COUNT]; // key processed successfully by UI
+
+ // This is indentical to what llkeyboard does (mKeyRepeated, mKeyLevel, mKeyDown e t c),
+ // just instead of remembering individually as bools, we record state as enum
+ EMouseState mMouseLevel[CLICK_COUNT]; // records of key state
+};
+
+extern LLViewerInput gViewerInput;
+
+#endif // LL_LLVIEWERINPUT_H
|
