--- nono/wx/wxbitmappanel.cpp 2026/04/29 17:05:08 1.1 +++ nono/wx/wxbitmappanel.cpp 2026/04/29 17:05:16 1.1.1.3 @@ -18,15 +18,16 @@ wxBEGIN_EVENT_TABLE(WXBitmapPanel, inher wxEND_EVENT_TABLE() // コンストラクタ (ID なし) -WXBitmapPanel::WXBitmapPanel(wxWindow *parent, const wxSize& size, long style) - : WXBitmapPanel(parent, wxID_ANY, size, style) // 移譲 +WXBitmapPanel::WXBitmapPanel(wxWindow *parent, + const wxPoint& position, const wxSize& size, long style) + : WXBitmapPanel(parent, wxID_ANY, position, size, style) // 移譲 { } // コンストラクタ (ID あり) WXBitmapPanel::WXBitmapPanel(wxWindow *parent, wxWindowID id, - const wxSize& size, long style) - : inherited(parent, id, wxDefaultPosition, size, style) + const wxPoint& position, const wxSize& size, long style) + : inherited(parent, id, position, size, style) { bitmap_bgcolor = BGPANEL; } @@ -36,28 +37,49 @@ WXBitmapPanel::~WXBitmapPanel() { } -// 背景色 +// 背景色を設定する void WXBitmapPanel::SetBitmapBGColor(Color c) { bitmap_bgcolor = c; +} + +// 背景色で塗りつぶす +void +WXBitmapPanel::Fill() +{ if (bitmap.GetBuf()) { bitmap.Fill(bitmap_bgcolor); } } +// 固定サイズ指定 +void +WXBitmapPanel::SetFixedSize(const wxSize& size_) +{ + fixedsize = size_; +} + // サイズ変更イベント void WXBitmapPanel::OnSize(wxSizeEvent& event) { - const wxSize& size = event.GetSize(); + wxSize size = event.GetSize(); if (size.x <= 1 || size.y <= 1) { return; } event.Skip(); - // バックバッファの大きさも変更 + // 固定サイズ指定がある場合。 + if (fixedsize.x != 0 && size.x < fixedsize.x) { + size.x = fixedsize.x; + } + if (fixedsize.y != 0 && size.y < fixedsize.y) { + size.y = fixedsize.y; + } + + // バックバッファの大きさが変われば変更。 wxSize oldsize(bitmap.GetWidth(), bitmap.GetHeight()); if (size != oldsize) { bitmap.Create(size.x, size.y); @@ -69,13 +91,18 @@ WXBitmapPanel::OnSize(wxSizeEvent& event void WXBitmapPanel::OnPaint(wxPaintEvent& event) { + if (__predict_false(bitmap.GetBuf() == NULL)) { + return; + } + // 継承クラスによる描画 Draw(); wxImage image(bitmap.GetWidth(), bitmap.GetHeight(), bitmap.GetBuf(), true); wxBitmap bmp(image); - // 実画面 DC にコピー + // 実画面 DC にコピー。 + // バックバッファのほうが大きくても気にしない。 wxPaintDC dstDC(this); dstDC.DrawBitmap(bmp, 0, 0); }