--- nono/wx/wxlcdwindow.cpp 2026/04/29 17:04:53 1.1.1.2 +++ nono/wx/wxlcdwindow.cpp 2026/04/29 17:04:59 1.1.1.4 @@ -9,9 +9,10 @@ // #include "wxlcdwindow.h" -#include "wxbmp.h" +#include "wxbitmapbuf.h" #include "wxcolor.h" #include "wxtextscreen.h" +#include "wxuimessage.h" #include "lcd.h" // パネルの大きさ (定数) @@ -26,7 +27,6 @@ // イベントテーブル wxBEGIN_EVENT_TABLE(WXLCDPanel, inherited) - EVT_TIMER(wxID_ANY, WXLCDPanel::OnTimer) EVT_PAINT(WXLCDPanel::OnPaint) wxEND_EVENT_TABLE() @@ -37,33 +37,25 @@ WXLCDPanel::WXLCDPanel(wxWindow *parent) { bitmap.Create(PANEL_WIDTH, PANEL_HEIGHT); - count = (uint32)-1; ddram = gLCD->GetDDRAM(); - // 更新タイマー。そんなに応答速度速くなくていい - timer.SetOwner(this); - timer.Start(50); + // VM からの通知を受け取る + WXUIMessage::Connect(UIMessage::LCD, this, + wxCommandEventHandler(WXLCDPanel::OnLCDChanged)); } // デストラクタ WXLCDPanel::~WXLCDPanel() { + WXUIMessage::Disconnect(UIMessage::LCD, + wxCommandEventHandler(WXLCDPanel::OnLCDChanged)); } -// タイマーイベント +// LCD 状態変更イベント (UIMessage) void -WXLCDPanel::OnTimer(wxTimerEvent& event) +WXLCDPanel::OnLCDChanged(wxCommandEvent& event) { - uint32 devcount; - - // 更新があれば.. - devcount = gLCD->GetCounter(); - if (count != devcount) { - count = devcount; - - // 再描画を起こす - Refresh(); - } + Refresh(); } // 描画イベント (UI スレッドから呼ばれる) @@ -132,11 +124,15 @@ WXLCDPanel::DrawChar(wxDC& dc, int x, in // // コンストラクタ -WXLCDWindow::WXLCDWindow(wxWindow *parent, wxWindowID id) - : inherited(parent, id, _("Front LCD")) +WXLCDWindow::WXLCDWindow(wxWindow *parent) + : inherited(parent, wxID_ANY, _("Front LCD")) { + wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL); + panel = new WXLCDPanel(this); + topsizer->Add(panel, 0, wxEXPAND); + SetSizer(topsizer); // 大きさをそれに固定 Fit(); } @@ -243,8 +239,8 @@ WXLCDCharPanel::Draw(wxDC& dc) // // コンストラクタ -WXLCDMonitor::WXLCDMonitor(wxWindow *parent, wxWindowID id) - : inherited(parent, id, _("LCD")) +WXLCDMonitor::WXLCDMonitor(wxWindow *parent) + : inherited(parent, wxID_ANY, _("LCD")) { // top // | +--------------------------+ @@ -268,11 +264,12 @@ WXLCDMonitor::WXLCDMonitor(wxWindow *par // 2段目の左余白 hbox1->Add(new WXPaddingPanel(this), 0, wxEXPAND); - monpanel = new WXTextScreen(this, *gLCD); + monpanel = new WXTextScreen(this, gMonitorManager.Get(ID_MONITOR_LCD)); hbox1->Add(monpanel, 0, wxEXPAND); // 2段目の右余白 - hbox1->Add(new WXPaddingPanel(this), 0, wxEXPAND); + // ここの1でこの右余白が空き全部を使用するので空き地が埋まる + hbox1->Add(new WXPaddingPanel(this), 1, wxEXPAND); // 3段目 wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL);