diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /public/vgui/IInput.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'public/vgui/IInput.h')
| -rw-r--r-- | public/vgui/IInput.h | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/public/vgui/IInput.h b/public/vgui/IInput.h new file mode 100644 index 0000000..26077e4 --- /dev/null +++ b/public/vgui/IInput.h @@ -0,0 +1,193 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//===========================================================================// + +#ifndef VGUI_IINPUT_H +#define VGUI_IINPUT_H + +#ifdef _WIN32 +#pragma once +#endif + +#include <vgui/VGUI.h> +#include "tier1/interface.h" +#include "vgui/MouseCode.h" +#include "vgui/KeyCode.h" + +namespace vgui +{ + +class Cursor; +typedef unsigned long HCursor; + +#define VGUI_GCS_COMPREADSTR 0x0001 +#define VGUI_GCS_COMPREADATTR 0x0002 +#define VGUI_GCS_COMPREADCLAUSE 0x0004 +#define VGUI_GCS_COMPSTR 0x0008 +#define VGUI_GCS_COMPATTR 0x0010 +#define VGUI_GCS_COMPCLAUSE 0x0020 +#define VGUI_GCS_CURSORPOS 0x0080 +#define VGUI_GCS_DELTASTART 0x0100 +#define VGUI_GCS_RESULTREADSTR 0x0200 +#define VGUI_GCS_RESULTREADCLAUSE 0x0400 +#define VGUI_GCS_RESULTSTR 0x0800 +#define VGUI_GCS_RESULTCLAUSE 0x1000 +// style bit flags for WM_IME_COMPOSITION +#define VGUI_CS_INSERTCHAR 0x2000 +#define VGUI_CS_NOMOVECARET 0x4000 + +#define MESSAGE_CURSOR_POS -1 +#define MESSAGE_CURRENT_KEYFOCUS -2 + + +class IInput : public IBaseInterface +{ +public: + virtual void SetMouseFocus(VPANEL newMouseFocus) = 0; + virtual void SetMouseCapture(VPANEL panel) = 0; + + // returns the string name of a scan code + virtual void GetKeyCodeText(KeyCode code, OUT_Z_BYTECAP(buflen) char *buf, int buflen) = 0; + + // focus + virtual VPANEL GetFocus() = 0; + virtual VPANEL GetCalculatedFocus() = 0;// to handle cases where the focus changes inside a frame. + virtual VPANEL GetMouseOver() = 0; // returns the panel the mouse is currently over, ignoring mouse capture + + // mouse state + virtual void SetCursorPos(int x, int y) = 0; + virtual void GetCursorPos(int &x, int &y) = 0; + virtual bool WasMousePressed(MouseCode code) = 0; + virtual bool WasMouseDoublePressed(MouseCode code) = 0; + virtual bool IsMouseDown(MouseCode code) = 0; + + // cursor override + virtual void SetCursorOveride(HCursor cursor) = 0; + virtual HCursor GetCursorOveride() = 0; + + // key state + virtual bool WasMouseReleased(MouseCode code) = 0; + virtual bool WasKeyPressed(KeyCode code) = 0; + virtual bool IsKeyDown(KeyCode code) = 0; + virtual bool WasKeyTyped(KeyCode code) = 0; + virtual bool WasKeyReleased(KeyCode code) = 0; + + virtual VPANEL GetAppModalSurface() = 0; + // set the modal dialog panel. + // all events will go only to this panel and its children. + virtual void SetAppModalSurface(VPANEL panel) = 0; + // release the modal dialog panel + // do this when your modal dialog finishes. + virtual void ReleaseAppModalSurface() = 0; + + virtual void GetCursorPosition( int &x, int &y ) = 0; + + virtual void SetIMEWindow( void *hwnd ) = 0; + virtual void *GetIMEWindow() = 0; + + virtual void OnChangeIME( bool forward ) = 0; + virtual int GetCurrentIMEHandle() = 0; + virtual int GetEnglishIMEHandle() = 0; + + // Returns the Language Bar label (Chinese, Korean, Japanese, Russion, Thai, etc.) + virtual void GetIMELanguageName( OUT_Z_BYTECAP(unicodeBufferSizeInBytes) wchar_t *buf, int unicodeBufferSizeInBytes ) = 0; + // Returns the short code for the language (EN, CH, KO, JP, RU, TH, etc. ). + virtual void GetIMELanguageShortCode( OUT_Z_BYTECAP(unicodeBufferSizeInBytes) wchar_t *buf, int unicodeBufferSizeInBytes ) = 0; + + struct LanguageItem + { + wchar_t shortname[ 4 ]; + wchar_t menuname[ 128 ]; + int handleValue; + bool active; // true if this is the active language + }; + + struct ConversionModeItem + { + wchar_t menuname[ 128 ]; + int handleValue; + bool active; // true if this is the active conversion mode + }; + + struct SentenceModeItem + { + wchar_t menuname[ 128 ]; + int handleValue; + bool active; // true if this is the active sentence mode + }; + + // Call with NULL dest to get item count + virtual int GetIMELanguageList( LanguageItem *dest, int destcount ) = 0; + virtual int GetIMEConversionModes( ConversionModeItem *dest, int destcount ) = 0; + virtual int GetIMESentenceModes( SentenceModeItem *dest, int destcount ) = 0; + + virtual void OnChangeIMEByHandle( int handleValue ) = 0; + virtual void OnChangeIMEConversionModeByHandle( int handleValue ) = 0; + virtual void OnChangeIMESentenceModeByHandle( int handleValue ) = 0; + + virtual void OnInputLanguageChanged() = 0; + virtual void OnIMEStartComposition() = 0; + virtual void OnIMEComposition( int flags ) = 0; + virtual void OnIMEEndComposition() = 0; + + virtual void OnIMEShowCandidates() = 0; + virtual void OnIMEChangeCandidates() = 0; + virtual void OnIMECloseCandidates() = 0; + virtual void OnIMERecomputeModes() = 0; + + virtual int GetCandidateListCount() = 0; + virtual void GetCandidate( int num, OUT_Z_BYTECAP(destSizeBytes) wchar_t *dest, int destSizeBytes ) = 0; + virtual int GetCandidateListSelectedItem() = 0; + virtual int GetCandidateListPageSize() = 0; + virtual int GetCandidateListPageStart() = 0; + + //NOTE: We render our own candidate lists most of the time... + virtual void SetCandidateWindowPos( int x, int y ) = 0; + + virtual bool GetShouldInvertCompositionString() = 0; + virtual bool CandidateListStartsAtOne() = 0; + + virtual void SetCandidateListPageStart( int start ) = 0; + + // Passes in a keycode which allows hitting other mouse buttons w/o cancelling capture mode + virtual void SetMouseCaptureEx(VPANEL panel, MouseCode captureStartMouseCode ) = 0; + + // Because OnKeyCodeTyped uses CallParentFunction and is therefore message based, there's no way + // to know if handler actually swallowed the specified keycode. To get around this, I set a global before calling the + // kb focus OnKeyCodeTyped function and if we ever get to a Panel::OnKeyCodeTypes we know that nobody handled the message + // and in that case we can post a message to any "unhandled keycode" listeners + // This will generate an MESSAGE_FUNC_INT( "KeyCodeUnhandled" "code" code ) message to each such listener + virtual void RegisterKeyCodeUnhandledListener( VPANEL panel ) = 0; + virtual void UnregisterKeyCodeUnhandledListener( VPANEL panel ) = 0; + + // Posts unhandled message to all interested panels + virtual void OnKeyCodeUnhandled( int keyCode ) = 0; + + // Assumes subTree is a child panel of the root panel for the vgui contect + // if restrictMessagesToSubTree is true, then mouse and kb messages are only routed to the subTree and it's children and mouse/kb focus + // can only be on one of the subTree children, if a mouse click occurs outside of the subtree, and "UnhandledMouseClick" message is sent to unhandledMouseClickListener panel + // if it's set + // if restrictMessagesToSubTree is false, then mouse and kb messages are routed as normal except that they are not routed down into the subtree + // however, if a mouse click occurs outside of the subtree, and "UnhandleMouseClick" message is sent to unhandledMouseClickListener panel + // if it's set + virtual void SetModalSubTree( VPANEL subTree, VPANEL unhandledMouseClickListener, bool restrictMessagesToSubTree = true ) = 0; + virtual void ReleaseModalSubTree() = 0; + virtual VPANEL GetModalSubTree() = 0; + + // These toggle whether the modal subtree is exclusively receiving messages or conversely whether it's being excluded from receiving messages + // Sends a "ModalSubTree", state message + virtual void SetModalSubTreeReceiveMessages( bool state ) = 0; + virtual bool ShouldModalSubTreeReceiveMessages() const = 0; + + virtual VPANEL GetMouseCapture() = 0; +}; + +#define VGUI_INPUT_INTERFACE_VERSION "VGUI_Input005" + +} // namespace vgui + + +#endif // VGUI_IINPUT_H |