--- nono/wx/wxvideomonitor.cpp 2026/04/29 17:04:37 1.1.1.2 +++ nono/wx/wxvideomonitor.cpp 2026/04/29 17:04:56 1.1.1.5 @@ -5,7 +5,8 @@ // #include "wxvideomonitor.h" -#include "bitmap.h" +#include "wxbitmapbuf.h" +#include "lunafb.h" // // LUNA ビットマップパネル @@ -23,7 +24,7 @@ WXLunaBitmapPanel::WXLunaBitmapPanel(wxW : inherited(parent, wxID_ANY, wxDefaultPosition, wxSize(512, 384)) // 初期値は適当 { - src = gBitmap->GetBuf(); + src = gLunafb->GetBuf(); // 仮想キャンバスサイズを設定 SetVirtualSize(virtual_width, virtual_height); @@ -45,7 +46,7 @@ WXLunaBitmapPanel::OnSize(wxSizeEvent& e { // Mac ではウィンドウ作成時に 0 以下の値が来ることがある // GTK では 1 で来ることがある - wxSize size = event.GetSize(); + const wxSize& size = event.GetSize(); if (size.x <= 1 || size.y <= 1) { return; } @@ -53,13 +54,13 @@ WXLunaBitmapPanel::OnSize(wxSizeEvent& e view_width = size.x; view_height = size.y; - // BMP バッファを持っていれば一旦解放 - bmpbuf.reset(); - // BMP バッファ作成 - // 正しく描かれなかった時に分かりやすいよう初期値は濃いグレーにしておく - bmpbuf.reset(new uint8 [view_width * view_height * 3]); - memset(&bmpbuf[0], 0x70, view_width * view_height * 3); + bmpbuf.resize(view_width * view_height * 3); + // 正しく描かれなかった時に分かりやすいよう初期値は濃いグレーにしておく。 + // としたいところだが、このバッファはわりと大きくて更にリサイズする時は + // 連続して頻繁にリサイズが起きることになるので、この無駄な塗りつぶしは + // デバッグ目的以外では止めておく。 + //std::fill(bmpbuf.begin(), bmpbuf.end(), 0x70); } // スクロールイベント @@ -86,7 +87,7 @@ WXLunaBitmapPanel::OnPaint(wxPaintEvent& // 更新があれば、ここで裏バッファに描画 Draw(); // バッファから wxBitmap を作成 - wxImage image(view_width, view_height, bmpbuf.get(), true); + wxImage image(view_width, view_height, &bmpbuf[0], true); wxBitmap bitmap(image); // 実画面 DC にコピー @@ -137,20 +138,18 @@ wxBEGIN_EVENT_TABLE(WXLunaBitmapWindow, wxEND_EVENT_TABLE() // コンストラクタ -WXLunaBitmapWindow::WXLunaBitmapWindow(wxWindow *parent, wxWindowID id, - const wxString& name) - : inherited(parent, id, name, +WXLunaBitmapWindow::WXLunaBitmapWindow(wxWindow *parent, const wxString& name) + : inherited(parent, wxID_ANY, name, inherited::DEFAULT_STYLE | wxRESIZE_BORDER) { panel = new WXLunaBitmapPanel(this); // 大きさをそれに固定 - Layout(); Fit(); - // 更新タイマーは適当な短さにしておく + // 更新タイマーはモニターパネル同様の 30Hz にしておく。 timer.SetOwner(this); - timer.Start(10); + timer.Start(33); } // デストラクタ