--- nono/wx/wxmainview.h 2026/04/29 17:04:28 1.1.1.1 +++ nono/wx/wxmainview.h 2026/04/29 17:04:39 1.1.1.5 @@ -1,16 +1,18 @@ // // nono -// Copyright (C) 2018 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #pragma once +#include "wxheader.h" #include class WXMainView : public wxPanel { - typedef wxPanel inherited; + using inherited = wxPanel; public: WXMainView(wxWindow *); virtual ~WXMainView(); @@ -23,17 +25,23 @@ class WXMainView // 現在のスケール (wxapp が初期値を指定するため static 変数にしてある) static double screen_scale; + // マウスモードを設定 + void SetMouseMode(bool enable); + // マウスモードを取得 (キャプチャされているなら true) + bool GetMouseMode() const { return mousemode; } + // アクティベートイベント + void OnActivate(wxActivateEvent& event); + private: + void OnTimer(wxTimerEvent& event); void OnPaint(wxPaintEvent& event); - - void DoPaint(wxDC &dc); - void OnKeyDown(wxKeyEvent& event); void OnKeyUp(wxKeyEvent& event); + void OnMouse(wxMouseEvent& event); // 裏バッファ。 // VM がレンダリングするバッファ。 - uint8_t *ImageBuf = NULL; + std::unique_ptr ImageBuf {}; // 仮想画面サイズ (ピクセル) int rendwidth = 0; @@ -52,9 +60,22 @@ class WXMainView static const int keycode_table[0x80]; #endif - wxTimer paintTimer; - std::atomic paintRequested {}; - void OnTimer(wxTimerEvent& event); + // マウスモード (キャプチャしていれば true) + bool mousemode = false; + // 前回のマウス座標とボタン + wxPoint prevpos {}; + bool prevlb {}; + bool prevmb {}; + bool prevrb {}; + + // WarpPointer() による移動検出用 + bool motion_by_warp_pointer = false; + // マウスカーソルを移動させる + void MyWarpPointer(wxSize pos); + + // 再描画を律速する + wxTimer timer {}; + std::atomic paint_request {}; wxDECLARE_EVENT_TABLE(); };