--- nono/wx/wxsubwindow.h 2026/04/29 17:04:45 1.1.1.5 +++ nono/wx/wxsubwindow.h 2026/04/29 17:05:00 1.1.1.8 @@ -6,7 +6,9 @@ #pragma once -#include "wxheader.h" +#include "wxnono.h" + +class WXPaddingPanel; // // サブウィンドウ @@ -23,20 +25,11 @@ class WXSubWindow : public wxFrame & ~wxMAXIMIZE_BOX & ~wxRESIZE_BORDER; - // テキスト系パネルを配置する際のデフォルトの余白。 - // 今流行りの縁がまったくないウィンドウマネージャだと、こちらのテキスト - // パネルにもウィンドウにも縁を一切付けない場合 (これがデフォルト動作)、 - // 端の文字が読みにくくなってしまうので、こちらで余白を用意する。orz - // 余白は、リサイズ可能なテキストウィンドウのリサイズ方向では1行の高さや - // 1文字の幅の整数倍にしなければならない(したい)ので都度計算する必要が - // あるが、そうでない固定方向については現在のフォントから計算とかも面倒 - // なのでとりあえず固定値としておく。単位は px。 - static const int DefaultPadding = 3; - public: WXSubWindow(wxWindow *parent, wxWindowID id, const wxString& name, int style); - WXSubWindow(wxWindow *parent, wxWindowID id, const wxString& name); + WXSubWindow(wxWindow *parent, wxWindowID id, const wxString& name) + : WXSubWindow(parent, id, name, DEFAULT_STYLE) { } virtual ~WXSubWindow() override; // テキスト系パネルのフォントサイズ変更 @@ -69,13 +62,42 @@ class WXVResizeSubWindow : public WXSubW // ウィンドウサイズを再計算の共通部分 (継承先 DoSize() から呼ばれる) void CalcVSize(int fixed); - // 全体を収納する sizer - wxBoxSizer *topsizer {}; - // テキストパネル WXTextScreen *screen {}; // 上下パディング - wxPanel *padding1 {}; - wxPanel *padding2 {}; + WXPaddingPanel *padding1 {}; + WXPaddingPanel *padding2 {}; +}; + +// +// パディングパネル +// +// モニタウィンドウ系で使うテキストパネルは単純なキャラクタビットマップ構造 +// のため、クライアント領域の端の1ピクセルまでふんだんに使用している。 +// モニタウィンドウは本来このテキストパネルを一つ持つだけの単純なウィンドウ +// でよいはずだった。しかし、ウィンドウマネージャ側でこのウィンドウに余白なり +// 枠なりをつけてくれる場合はそれで問題ないが、余白(ふち)を一切つけないタイプ +// のウィンドウマネージャでこのウィンドウを表示するとウィンドウ境界に接する +// 文字の視認性が(文字とウィンドウ外の背景によっては)すこぶる悪い。 +// そのため、こちらで余白パネルを用意する。なお wxSizer にも似たような +// パディング機能はあるが、このパディング領域の背景色はテキストパネルの背景色 +// と異なっているため悪目立ちしてしまう。そのため、テキストパネルと背景色を +// 揃えたパネルをわざわざ用意する。 +// サブウィンドウ系の人は、このパネルを四辺に貼り付けること。 +class WXPaddingPanel : public wxPanel +{ + using inherited = wxPanel; + + // デフォルトの余白幅もしくは高さ [px] + // 余白は、リサイズ可能なテキストウィンドウのリサイズ方向では1行の高さや + // 1文字の幅の整数倍にしなければならない(したい)ので都度計算する必要が + // あるが、そうでない固定方向については現在のフォントから計算とかも面倒 + // なのでとりあえず固定値としておく。単位は px。 + static const int DefaultPadding = 3; + + public: + WXPaddingPanel(wxWindow *parent); + WXPaddingPanel(wxWindow *parent_, const wxSize& size_); + virtual ~WXPaddingPanel(); };