--- nono/wx/wxdumpmonitor.cpp 2026/04/29 17:05:31 1.1.1.15 +++ nono/wx/wxdumpmonitor.cpp 2026/04/29 17:05:48 1.1.1.17 @@ -141,10 +141,11 @@ WXMemdumpWindow::WXMemdumpWindow(wxWindo SetSizer(topsizer); + // 自前レイアウト。 + SetMyLayout(); + // ウィンドウサイズを確定させる - fixed_height = ctrlbox->GetSize().y; FontChanged(); - DoSize(); // パネルに来るマウスイベントをこっちに回す screen->Connect(wxEVT_MOUSEWHEEL, @@ -169,30 +170,66 @@ WXMemdumpWindow::~WXMemdumpWindow() { } -bool -WXMemdumpWindow::Layout() -{ - // 縦リサイズ可能レイアウト - return LayoutTextVResize(screen, fixed_height); -} - void WXMemdumpWindow::FontChanged() { - inherited::FontChanged(); - - // 最小 24x24 にしてみる - wxSize sz(screen->GetFontWidth() * 2 + 4, - screen->GetFontHeight() + 4); - if (sz.x < 24) - sz.x = 24; - if (sz.y < 24) - sz.y = 24; for (auto *btn : buttons) { - btn->SetClientSize(sz); - btn->SetMinClientSize(sz); + // ボタンサイズを先に一旦リセット。 + btn->SetMinSize(wxSize(1, 1)); + btn->SetSize(wxSize(1, 1)); + + // 各ボタンコントロールに伝搬。 btn->FontChanged(); + + // ボタンを正方形に固定する (テキストは1文字か2文字と知っている)。 + // 押しやすくするため、最小 24x24 にしてみる。 + wxSize size = btn->GetSize(); + if (size.y < 24) { + size.y = 24; + } + size.x = size.y; + + // 勝手にベストサイズに戻らないように最小サイズごと固定する。 + btn->SetSize(size); + btn->SetMinSize(size); + } + + screen->FontChanged(); + + Fit(); +} + +bool +WXMemdumpWindow::GetMySizeHints(wxSize *newp, wxSize *minp, wxSize *maxp, + wxSize *incp) +{ + // この後の Fit() でリサイズに使われる大きさを取得。 + wxSize fitsize = GetSizer()->ComputeFittingClientSize(this); + wxSize ctrlsize = ctrlbox->ComputeFittingClientSize(this); + + // 高さの最小は (コントロールパネル分と) TextScreen 1行分にしておく。 + int min_y = ctrlsize.y + screen->GetScreenHeight(1); + int new_y = ctrlsize.y + screen->GetSize().y; + wxSize newsize(fitsize.x, new_y); + wxSize minsize(fitsize.x, min_y); + wxSize maxsize(fitsize.x, GetMaxClientSize().y); + wxSize incsize(0, screen->GetFontHeight()); + + if (newp) *newp = newsize; + if (minp) *minp = minsize; + if (maxp) *maxp = maxsize; + if (incp) *incp = incsize; + return true; +} + +bool +WXMemdumpWindow::Layout() +{ + if (MyLayout() == false) { + // Sizer 使ってるのでその処理は(さらに親に)任せる。 + BaseLayout(); } + return true; } // テキスト入力イベント