--- nono/wx/wxsubwindow.h 2026/04/29 17:04:43 1.1.1.4 +++ nono/wx/wxsubwindow.h 2026/04/29 17:05:12 1.1.1.10 @@ -4,11 +4,16 @@ // Licensed under nono-license.txt // +// +// サブウィンドウ +// + #pragma once -#include "wxheader.h" +#include "wxnono.h" + +class WXTextScreen; -// // サブウィンドウ // // メインウィンドウのメニューから表示されて、表示されてる間チェック状態を @@ -23,59 +28,25 @@ 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); - virtual ~WXSubWindow(); - - // テキスト系パネルのフォントサイズ変更 - virtual void SetFontSize(FontId fontid); - - private: - void OnClose(wxCloseEvent& event); - - wxDECLARE_EVENT_TABLE(); -}; - - -// -// 縦リサイズ可能なサブウィンドウ -// -class WXVResizeSubWindow : public WXSubWindow -{ - using inherited = WXSubWindow; - public: - WXVResizeSubWindow(wxWindow *parent, wxWindowID id, const wxString& name); - virtual ~WXVResizeSubWindow() override; + WXSubWindow(wxWindow *parent, wxWindowID id, const wxString& name) + : WXSubWindow(parent, id, name, DEFAULT_STYLE) { } + virtual ~WXSubWindow() override; - // テキスト系パネルのフォントサイズ変更 - void SetFontSize(FontId fontid) override; + // フォントサイズ変更 + virtual void FontChanged(); // ウィンドウサイズ再計算 (継承先による) - virtual void DoSize() = 0; + virtual void DoSize(); protected: - // ウィンドウサイズを再計算の共通部分 (継承先 DoSize() から呼ばれる) - void CalcVSize(int fixed); - - // 全体を収納する sizer - wxBoxSizer *topsizer {}; + // 縦リサイズ可能なテキストパネルの場合のレイアウト + bool LayoutTextVResize(const WXTextScreen *screen, int fixed_height = 0); - // テキストパネル - WXTextScreen *screen {}; + private: + void OnClose(wxCloseEvent& event); - // 上下パディング - wxPanel *padding1 {}; - wxPanel *padding2 {}; + wxDECLARE_EVENT_TABLE(); };