--- nono/wx/wxtextscreen.cpp 2026/04/29 17:05:12 1.1.1.9 +++ nono/wx/wxtextscreen.cpp 2026/04/29 17:05:27 1.1.1.11 @@ -133,33 +133,43 @@ WXTextScreen::Draw() int col = screen.GetCol(); int row = screen.GetRow(); - uint prevattr = (uint)-1; + uint prevcolor = (uint)-1; int py = pad_top; for (int y = 0; y < row; y++, py += font_height) { int px = pad_left; for (int x = 0; x < col; ) { uint16 data = *text; - uint attr = (data & 0xff00); - uint chr = (data & 0xff); + uint attr = (data & 0xf000); + uint color = (data & 0x0f00); + uint chr = (data & 0x00ff); // 属性(色)を変更 - if (__predict_false(attr != prevattr)) { - switch (attr) { - case TA::On: - SetTextColor(BGPANEL, UD_BLACK); - break; + if (__predict_false(color != prevcolor)) { + switch (color) { case TA::Off: SetTextColor(UD_BLACK, UD_LIGHT_GREY); break; case TA::Disable: SetTextColor(UD_GREY, BGPANEL); break; + case TA::Reverse: + SetTextColor(BGPANEL, UD_BLACK); + break; + case TA::ReverseRed: + SetTextColor(BGPANEL, UD_RED); + break; + case TA::ReverseGreen: + SetTextColor(UD_BLACK, UD_GREEN); + break; + case TA::ReverseOrange: + SetTextColor(UD_BLACK, UD_ORANGE); + break; default: ResetTextColor(); break; } - prevattr = attr; + prevcolor = color; } if (__predict_true(SJIS::IsHankaku(chr))) { @@ -222,6 +232,15 @@ WXTextScreen::SetPadding(int l, int t, i DoSize(); } +// 全域を表示するのに必要なピクセルサイズを返す。 +wxSize +WXTextScreen::GetDesiredSize() const +{ + int w = GetCol() * GetFontWidth() + GetPaddingLeft() + GetPaddingRight(); + int h = GetRow() * GetFontHeight() + GetPaddingTop() + GetPaddingBottom(); + return wxSize(w, h); +} + // クライアント座標 pos をテキスト座標(桁、行)に変換して返す // パディング(上と左)領域では戻り値が負数になることに注意。 wxPoint