--- nono/wx/wxsubwindow.h 2026/04/29 17:04:28 1.1.1.1 +++ nono/wx/wxsubwindow.h 2026/04/29 17:04:43 1.1.1.4 @@ -1,37 +1,81 @@ // // nono -// Copyright (C) 2018 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #pragma once +#include "wxheader.h" + // // サブウィンドウ // // メインウィンドウのメニューから表示されて、表示されてる間チェック状態を // 維持するタイプのウィンドウ。クローズ処理が共通に必要なだけで、中身に // ついては関与していない。 - class WXSubWindow : public wxFrame { - typedef wxFrame inherited; + using inherited = wxFrame; public: static const int DEFAULT_STYLE = (wxDEFAULT_FRAME_STYLE | wxFRAME_FLOAT_ON_PARENT) & ~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(fontsize_t fontsize) { } + // テキスト系パネルのフォントサイズ変更 + 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; + + // テキスト系パネルのフォントサイズ変更 + void SetFontSize(FontId fontid) override; + + // ウィンドウサイズ再計算 (継承先による) + virtual void DoSize() = 0; + + protected: + // ウィンドウサイズを再計算の共通部分 (継承先 DoSize() から呼ばれる) + void CalcVSize(int fixed); + + // 全体を収納する sizer + wxBoxSizer *topsizer {}; + + // テキストパネル + WXTextScreen *screen {}; + + // 上下パディング + wxPanel *padding1 {}; + wxPanel *padding2 {}; +};