--- nono/vm/keyboard.h 2026/04/29 17:05:25 1.1.1.13 +++ nono/vm/keyboard.h 2026/04/29 17:05:42 1.1.1.15 @@ -16,9 +16,22 @@ class Syncer; -class Keyboard : public Device +// 文字入力しか持たないキーボードの下位クラス。 +class DumbKeyboard : public Device { using inherited = Device; + public: + DumbKeyboard(); + ~DumbKeyboard() override; + + // 文字入力によるキーエミュレーション (外部から呼ばれる) + virtual void CharInput(uint charcode) = 0; +}; + +// 通常のキーボード +class Keyboard : public DumbKeyboard +{ + using inherited = DumbKeyboard; protected: Keyboard(); public: @@ -33,7 +46,7 @@ class Keyboard : public Device // キーを離した (外部から呼ばれる) void BreakKey(uint keycode); // 文字入力によるキーエミュレーション (外部から呼ばれる) - void CharInput(uint charcode); + void CharInput(uint charcode) override; // マウス入力。 // x, y は X, Y の前回からの移動量。 @@ -55,9 +68,6 @@ class Keyboard : public Device return pressed[keycode]; } - // 全てのキーの押し下げ状態取得 (ソフトウェアキーボードなどから) - const std::vector& GetPressed() const { return pressed; } - // LED 状態取得 (ソフトウェアキーボードなどから) const std::vector& GetLED() const { return led; } @@ -98,6 +108,9 @@ class Keyboard : public Device // キーを1つ処理する virtual void KeyInput(uint keystat) = 0; + // キーの押し下げ状態を設定する + void SetPressed(uint keycode, bool ismake); + // キーを処理する (共通部分) bool KeyInputCommon(uint keystat); @@ -141,6 +154,7 @@ class Keyboard : public Device static std::vector char_key; }; +// フルキーボードの取得 (シリアルキーボードは含まない) static inline Keyboard *GetKeyboard() { return Object::GetObject(OBJ_KEYBOARD); }