|
|
1.1 root 1: //
2: // nono
1.1.1.2 root 3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
1.1 root 5: //
6:
7: //
1.1.1.7 root 8: // テキストスクリーンを描画するパネル
1.1 root 9: //
1.1.1.7 root 10:
1.1 root 11: // wxPanel
12: // ↓
1.1.1.7 root 13: // WXTextPanel テキストフォントを描画するクラス
1.1 root 14: // ↓
1.1.1.3 root 15: // WXTextScreen テキストスクリーンを表示するパネル
1.1.1.7 root 16:
17: #pragma once
18:
19: #include "wxtextpanel.h"
1.1.1.8 ! root 20: #include "geometric.h"
1.1.1.7 root 21:
1.1 root 22: class WXTextScreen : public WXTextPanel
23: {
1.1.1.2 root 24: using inherited = WXTextPanel;
1.1 root 25:
1.1.1.7 root 26: // テキストスクリーンは本来単純なキャラクタビットマップ構造のため、
27: // クライアント領域の端の1ピクセルまでふんだんに使用している。
28: // ウィンドウマネージャ側でこのウィンドウに枠などをつけてくれる場合は
29: // あまり問題にならないが、枠などを一切つけないタイプのウィンドウ
30: // マネージャでこのウィンドウを表示するとウィンドウの縁に接する文字の
31: // 視認性が(文字とウィンドウ外の背景の組み合わせによっては)すこぶる
32: // 悪くなる。そのため、テキストスクリーンの周囲に余白をもたせる。
33: static const int DefaultPadding = 3;
34:
1.1 root 35: public:
1.1.1.8 ! root 36: WXTextScreen(wxWindow *parent, const nnSize& screensize);
1.1.1.3 root 37: virtual ~WXTextScreen() override;
1.1 root 38:
39: // フォントサイズ変更
1.1.1.7 root 40: void FontChanged() override;
1.1.1.3 root 41:
1.1.1.8 ! root 42: // テキストスクリーンを取得 (WXTextScreen を継承せずに更新する人のため)
! 43: TextScreen& GetScreen() { return screen; }
1.1.1.3 root 44:
1.1.1.7 root 45: // パディングサイズ変更
46: void SetPadding(int l, int t, int r, int b);
47: // パディングサイズ取得
48: int GetPaddingLeft() const { return pad_left; }
49: int GetPaddingTop() const { return pad_top; }
50: int GetPaddingRight() const { return pad_right; }
51: int GetPaddingBottom() const { return pad_bottom; }
52:
1.1.1.6 root 53: // 桁数、行数を取得する
1.1.1.8 ! root 54: int GetCol() const { return screen.GetCol(); }
! 55: int GetRow() const { return screen.GetRow(); }
1.1.1.3 root 56:
1.1.1.7 root 57: // クライアント座標 pos をテキスト座標(桁、行)に変換して返す
58: // (パディング領域では戻り値が負数になることに注意)
59: wxPoint GetTextPosition(const wxPoint& pos) const;
60:
1.1.1.3 root 61: // TextScreen のユーザデータ取得、設定
1.1.1.8 ! root 62: uint64 GetUserData() const { return screen.userdata; }
! 63: void SetUserData(uint64 value) { screen.userdata = value; }
1.1 root 64:
1.1.1.7 root 65: // コンテキストメニューイベントを解除
66: // (ここのコンテキストメニューを使いたくない人が呼ぶ)
67: void DisconnectContextMenu();
68:
1.1.1.8 ! root 69: protected:
! 70: TextScreen screen {};
! 71: std::vector<uint16> prevbuf {};
! 72:
1.1 root 73: private:
1.1.1.3 root 74: void OnSize(wxSizeEvent&);
1.1.1.7 root 75: void OnContextMenu(wxContextMenuEvent&);
76: void OnCopy(wxCommandEvent&);
1.1.1.3 root 77:
1.1.1.5 root 78: void Init(int col, int row);
1.1.1.7 root 79: void DoSize();
80: void InvalidateText();
81: void Draw() override;
1.1 root 82:
1.1.1.7 root 83: // コンテキストメニューを接続
84: void ConnectContextMenu();
1.1.1.5 root 85:
1.1.1.7 root 86: int pad_left {};
87: int pad_top {};
88: int pad_right {};
89: int pad_bottom {};
90:
1.1 root 91: wxDECLARE_EVENT_TABLE();
92: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.