|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2019 [email protected]
4: //
5:
6: #pragma once
7:
8: #include <mutex>
9:
10: //
11: // テキストフォントを持つ管理するクラス
12: //
13: // wxPanel
14: // ↓
15: // WXTextPanel テキストフォントを管理するクラス
16: // ↓
17: // WXTextScreen テキストフォントを使ったテキストスクリーン
18: //
19:
20: class WXTextPanel : public wxPanel
21: {
22: typedef wxPanel inherited;
23: public:
24: WXTextPanel(wxWindow *parent);
25: virtual ~WXTextPanel();
26:
27: // フォントサイズ(指定値)
28: // この値を元に各コントロールに指示を出す
29: static fontsize_t global_fontsize;
30:
31: protected:
32: // このコントロールの現在のフォントサイズ
33: // (一瞬の過渡期以外は基本的に global_fontsize と同じ値のはず)
34: fontsize_t fontsize = FONT_NONE;
35:
36: // フォントの幅と高さ(ピクセル)
37: int font_width = 0;
38: int font_height = 0;
39:
40: // フォント関連の内部情報を更新する
41: void UpdateFont(fontsize_t fontsize);
42:
43: // グリフを切り替える。
44: // 0x5c は false: 円記号 true: バックスラッシュ
45: // 0x7c は false: パイプ記号 true: パイプ記号(破線)
46: // 0x7e は false: オーバーライン true: チルダ
47: void SetGlyph5C(bool value) { glyph_5c = value; }
48: void SetGlyph7C(bool value) { glyph_7c = value; }
49: void SetGlyph7E(bool value) { glyph_7e = value; }
50:
51: // テキスト色を指定
52: void SetTextColor(const wxColour& fg, const wxColour& bg,
53: const wxColour& disable);
54: void SetTextForeColor(const wxColour& fg) { text_fgcolor = fg; }
55: void SetTextBackColor(const wxColour& bg) { text_bgcolor = bg; }
56: void SetTextDisableColor(const wxColour& disable) {
57: text_disable_color = disable;
58: }
59: // テキスト色を取得
60: const wxColour& GetTextForeColor() const { return text_fgcolor; }
61: const wxColour& GetTextBackColor() const { return text_bgcolor; }
62: const wxColour& GetTextDisableColor() const { return text_disable_color; }
63:
64: // Shift_JIS (正確には CP932) 文字列を描画する。
65: void DrawStringSJIS(wxDC&, int px, int py, const char *sjis,
66: uint attr = TA::Normal);
67:
68: // ASCII 1文字を描画
69: void DrawChar1(wxDC&, int px, int py, uint code, uint attr);
70: // 漢字1文字を描画
71: void DrawChar2(wxDC&, int px, int py, uint code, uint attr);
72:
73: private:
74: // 指定の文字ビットマップを描画
75: void DrawBitmap(wxDC&, int px, int py, const wxBitmap& bitmap, uint attr);
76: // 漢字ビットマップを生成
77: wxBitmap *KanjiBitmap(uint16, uint attr);
78:
79: static void AllocFont(fontsize_t fontsize);
80: static void FreeFont(fontsize_t fontsize);
81:
82: // 現在のフォントでのフォントデータ
83: wxBitmap **ascii_glyph = NULL;
84: wxBitmap **bold_glyph = NULL;
85:
86: // 現在のグリフ
87: bool glyph_5c = false;
88: bool glyph_7c = false;
89: bool glyph_7e = false;
90:
91: static std::mutex global_font_mutex;
92: // 以下の3つを書き換える時は global_font_mutex を取ること
93: static u_int font_refcnt[FONT_MAX];
94: static wxBitmap *ascii_glyph_table[FONT_MAX][0x83];
95: static wxBitmap *bold_glyph_table[FONT_MAX][0x83];
96:
97: // 色
98: wxColour text_fgcolor; // 前景色
99: wxColour text_bgcolor; // 背景色
100: wxColour text_disable_color; // Disable 属性時の前景色
101: };
102:
103: // 12ドット全角フォント
104: extern uint8 builtin_kanji12[];
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.