213 lines
8.1 KiB
C++
213 lines
8.1 KiB
C++
//========= 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/KeyCode.h"
|
|
#include "vgui/MouseCode.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(ButtonCode_t 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(ButtonCode_t code) = 0;
|
|
virtual bool IsKeyDown(ButtonCode_t code) = 0;
|
|
virtual bool WasKeyTyped(ButtonCode_t code) = 0;
|
|
virtual bool WasKeyReleased(ButtonCode_t 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 ButtonCode_t 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 ButtonCode_t) = 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
|