--- nono/wx/wxmainview.h 2026/04/29 17:04:56 1.1.1.9 +++ nono/wx/wxmainview.h 2026/04/29 17:05:48 1.1.1.16 @@ -4,19 +4,30 @@ // Licensed under nono-license.txt // +// +// メイン画面パネル +// + #pragma once #include "wxnono.h" -#include + +wxDECLARE_EVENT(NONO_EVT_MOUSEMODE, wxCommandEvent); + +class DumbKeyboard; +class Keyboard; +class Renderer; class WXMainView : public wxPanel { using inherited = wxPanel; public: - WXMainView(wxWindow *); - virtual ~WXMainView() override; + explicit WXMainView(wxWindow *); + ~WXMainView() override; - void DoRefresh(); + bool Init(); + + void Close(); void DoResize(double scale); // 現在のスケールを返す @@ -24,6 +35,10 @@ class WXMainView : public wxPanel // 現在のスケール (wxapp が初期値を指定するため static 変数にしてある) static double screen_scale; + // 文字入力モードを取得・設定 + bool GetCharInputMode() const { return is_charinput; } + void SetCharInputMode(bool enable); + // マウスモードを設定 void SetMouseMode(bool enable); // マウスモードを取得 (キャプチャされているなら true) @@ -34,19 +49,15 @@ class WXMainView : public wxPanel // キー入力イベント (WXSoftKeyPanel からも呼ばれる) void OnKeyDown(wxKeyEvent& event); void OnKeyUp(wxKeyEvent& event); + void OnChar(wxKeyEvent& event); private: void OnTimer(wxTimerEvent& event); void OnPaint(wxPaintEvent& event); void OnMouse(wxMouseEvent& event); - - // 裏バッファ。 - // VM がレンダリングするバッファ。 - std::unique_ptr ImageBuf {}; - - // 仮想画面サイズ (ピクセル) - int rendwidth {}; - int rendheight {}; + void OnMouseCaptureLost(wxMouseCaptureLostEvent& event); + void OnRender(wxCommandEvent& event); + void OnMouseMode(wxCommandEvent& event); // 実画面サイズ (ピクセル) int viewwidth {}; @@ -57,6 +68,9 @@ class WXMainView : public wxPanel static const int keycode_table[0x190]; + // 文字入力モードなら true + bool is_charinput {}; + // マウスモード (キャプチャしていれば true) bool mousemode {}; // 前回のマウス座標とボタン @@ -70,11 +84,9 @@ class WXMainView : public wxPanel // マウスカーソルを移動させる void MyWarpPointer(wxSize pos); - // 再描画を律速する - wxTimer timer {}; - std::atomic paint_request {}; + DumbKeyboard *dumbkbd {}; + Keyboard *richkbd {}; + Renderer *renderer {}; wxDECLARE_EVENT_TABLE(); }; - -extern WXMainView *gMainView;