--- nono/wx/wxtextscreen.h 2026/04/29 17:05:08 1.1.1.7 +++ nono/wx/wxtextscreen.h 2026/04/29 17:05:48 1.1.1.13 @@ -17,12 +17,13 @@ #pragma once #include "wxtextpanel.h" -#include "monitor.h" +#include "geometric.h" class WXTextScreen : public WXTextPanel { using inherited = WXTextPanel; + public: // テキストスクリーンは本来単純なキャラクタビットマップ構造のため、 // クライアント領域の端の1ピクセルまでふんだんに使用している。 // ウィンドウマネージャ側でこのウィンドウに枠などをつけてくれる場合は @@ -33,17 +34,16 @@ class WXTextScreen : public WXTextPanel static const int DefaultPadding = 3; public: - WXTextScreen(wxWindow *parent, Monitor& monitor); - virtual ~WXTextScreen() override; - - // 画面を更新して再描画する。 - void DoRefresh(); + WXTextScreen(wxWindow *parent, const nnSize& screensize); + ~WXTextScreen() override; // フォントサイズ変更 void FontChanged() override; - // 更新頻度設定 - void SetRate(int hz); + void Fit() override; + + // テキストスクリーンを取得 (WXTextScreen を継承せずに更新する人のため) + TextScreen& GetScreen() { return screen; } // パディングサイズ変更 void SetPadding(int l, int t, int r, int b); @@ -52,48 +52,53 @@ class WXTextScreen : public WXTextPanel int GetPaddingTop() const { return pad_top; } int GetPaddingRight() const { return pad_right; } int GetPaddingBottom() const { return pad_bottom; } + int GetPaddingX() const { return GetPaddingLeft() + GetPaddingRight(); } + int GetPaddingY() const { return GetPaddingTop() + GetPaddingBottom(); } // 桁数、行数を取得する - int GetCol() const { return ts.GetCol(); } - int GetRow() const { return ts.GetRow(); } + int GetCol() const { return screen.GetCol(); } + int GetRow() const { return screen.GetRow(); } + + // 指定の桁数行数の時のピクセル数を取得する + int GetScreenWidth(int col_) const; + int GetScreenHeight(int row_) const; // クライアント座標 pos をテキスト座標(桁、行)に変換して返す // (パディング領域では戻り値が負数になることに注意) wxPoint GetTextPosition(const wxPoint& pos) const; // TextScreen のユーザデータ取得、設定 - uint64 GetUserData() const { return ts.userdata; } - void SetUserData(uint64 value) { ts.userdata = value; } + uint64 GetUserData() const { return screen.userdata; } + void SetUserData(uint64 value) { screen.userdata = value; } // コンテキストメニューイベントを解除 // (ここのコンテキストメニューを使いたくない人が呼ぶ) void DisconnectContextMenu(); + protected: + TextScreen screen {}; + std::vector prevbuf {}; + private: void OnSize(wxSizeEvent&); - void OnTimer(wxTimerEvent&); void OnContextMenu(wxContextMenuEvent&); void OnCopy(wxCommandEvent&); void Init(int col, int row); - void DoSize(); + void ResetFit(); void InvalidateText(); void Draw() override; // コンテキストメニューを接続 void ConnectContextMenu(); - std::vector prevbuf {}; - - Monitor& monitor; - TextScreen ts {}; - int pad_left {}; int pad_top {}; int pad_right {}; int pad_bottom {}; - wxTimer timer {}; + // 余白を塗りつぶす場合は true + bool draw_padding {}; wxDECLARE_EVENT_TABLE(); };