--- nono/vm/keyboard.h 2026/04/29 17:04:28 1.1 +++ nono/vm/keyboard.h 2026/04/29 17:04:35 1.1.1.4 @@ -1,38 +1,55 @@ // // nono -// Copyright (C) 2018 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #pragma once #include "device.h" -#include "scheduler.h" class Keyboard : public Device { - typedef Device inherited; + using inherited = Device; protected: Keyboard(); public: - virtual ~Keyboard(); + ~Keyboard() override; // キーを押した virtual void MakeKey(uint) = 0; // キーを離した virtual void BreakKey(uint) = 0; + // マウス入力 + // x, y は X, Y の前回からの移動量。 + // X は画面右に動く方向をプラス、Y は画面下に動く方向をプラスとする。 + // 移動量が VM で扱える範囲内か、それを越えていたらどうするかは + // 継承クラスが処理する。 + // rb, lb, mb はボタンの状態。true なら押下中。 + virtual void MouseInput(int x, int y, bool rb, bool lb, bool mb) = 0; + + // ホストからの制御コマンド + virtual void Command(uint32 data) = 0; + + // LED 状態取得 (ソフトウェアキーボードなどから) + const std::vector& GetLED() const { return led; } + // キー名を返す (主にデバッグ表示用) static const std::string GetName(uint code); protected: - // キー入力イベント - Event event {}; + // LED (true で点灯)。 + // GetLED() あたりが同じ形式で済むのでここにあるけど、機種によって + // LED 数が違うので、何番がどのキーに対応するかの取り決めや、初期化も + // 含めたコードはすべて派生クラス側で用意すること。 + std::vector led {}; private: static std::vector keyname; }; -extern Keyboard *gKeyboard; +extern std::unique_ptr gKeyboard; // 抽象化キーボードレイヤーでのキーコード。 // wxWidgets で受け取ったキーコードをこれに変換して VM に入力する。