| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #ifndef CONSOLEINPUT_H |
| | #define CONSOLEINPUT_H |
| |
|
| | #include <windows.h> |
| | #include <stdint.h> |
| |
|
| | #include <memory> |
| | #include <string> |
| | #include <vector> |
| |
|
| | #include "Coord.h" |
| | #include "InputMap.h" |
| | #include "SmallRect.h" |
| |
|
| | class Win32Console; |
| | class DsrSender; |
| |
|
| | class ConsoleInput |
| | { |
| | public: |
| | ConsoleInput(HANDLE conin, int mouseMode, DsrSender &dsrSender, |
| | Win32Console &console); |
| | void writeInput(const std::string &input); |
| | void flushIncompleteEscapeCode(); |
| | void setMouseWindowRect(SmallRect val) { m_mouseWindowRect = val; } |
| | void updateInputFlags(bool forceTrace=false); |
| | bool shouldActivateTerminalMouse(); |
| |
|
| | private: |
| | void doWrite(bool isEof); |
| | void flushInputRecords(std::vector<INPUT_RECORD> &records); |
| | int scanInput(std::vector<INPUT_RECORD> &records, |
| | const char *input, |
| | int inputSize, |
| | bool isEof); |
| | int scanMouseInput(std::vector<INPUT_RECORD> &records, |
| | const char *input, |
| | int inputSize); |
| | void appendUtf8Char(std::vector<INPUT_RECORD> &records, |
| | const char *charBuffer, |
| | int charLen, |
| | bool terminalAltEscape); |
| | void appendKeyPress(std::vector<INPUT_RECORD> &records, |
| | uint16_t virtualKey, |
| | uint32_t winCodePointDn, |
| | uint32_t winCodePointUp, |
| | uint16_t winKeyState, |
| | uint32_t vtCodePoint, |
| | uint16_t vtKeyState); |
| |
|
| | public: |
| | static void appendCPInputRecords(std::vector<INPUT_RECORD> &records, |
| | BOOL keyDown, |
| | uint16_t virtualKey, |
| | uint32_t codePoint, |
| | uint16_t keyState); |
| | static void appendInputRecord(std::vector<INPUT_RECORD> &records, |
| | BOOL keyDown, |
| | uint16_t virtualKey, |
| | wchar_t utf16Char, |
| | uint16_t keyState); |
| |
|
| | private: |
| | DWORD inputConsoleMode(); |
| |
|
| | private: |
| | Win32Console &m_console; |
| | HANDLE m_conin = nullptr; |
| | int m_mouseMode = 0; |
| | DsrSender &m_dsrSender; |
| | bool m_dsrSent = false; |
| | std::string m_byteQueue; |
| | InputMap m_inputMap; |
| | DWORD m_lastWriteTick = 0; |
| | DWORD m_mouseButtonState = 0; |
| | struct DoubleClickDetection { |
| | DWORD button = 0; |
| | Coord pos; |
| | DWORD tick = 0; |
| | bool released = false; |
| | } m_doubleClick; |
| | bool m_enableExtendedEnabled = false; |
| | bool m_mouseInputEnabled = false; |
| | bool m_quickEditEnabled = false; |
| | bool m_escapeInputEnabled = false; |
| | SmallRect m_mouseWindowRect; |
| | }; |
| |
|
| | #endif |
| |
|