|
|
1.1 ! root 1: // ! 2: // nono ! 3: // Copyright (C) 2021 nono project ! 4: // Licensed under nono-license.txt ! 5: // ! 6: ! 7: // ! 8: // バックバッファが BitmapRGB なパネル ! 9: // ! 10: ! 11: #include "wxbitmappanel.h" ! 12: #include "wxcolor.h" ! 13: ! 14: // イベントテーブル ! 15: wxBEGIN_EVENT_TABLE(WXBitmapPanel, inherited) ! 16: EVT_SIZE(WXBitmapPanel::OnSize) ! 17: EVT_PAINT(WXBitmapPanel::OnPaint) ! 18: wxEND_EVENT_TABLE() ! 19: ! 20: // コンストラクタ (ID なし) ! 21: WXBitmapPanel::WXBitmapPanel(wxWindow *parent, const wxSize& size, long style) ! 22: : WXBitmapPanel(parent, wxID_ANY, size, style) // 移譲 ! 23: { ! 24: } ! 25: ! 26: // コンストラクタ (ID あり) ! 27: WXBitmapPanel::WXBitmapPanel(wxWindow *parent, wxWindowID id, ! 28: const wxSize& size, long style) ! 29: : inherited(parent, id, wxDefaultPosition, size, style) ! 30: { ! 31: bitmap_bgcolor = BGPANEL; ! 32: } ! 33: ! 34: // デストラクタ ! 35: WXBitmapPanel::~WXBitmapPanel() ! 36: { ! 37: } ! 38: ! 39: // 背景色 ! 40: void ! 41: WXBitmapPanel::SetBitmapBGColor(Color c) ! 42: { ! 43: bitmap_bgcolor = c; ! 44: if (bitmap.GetBuf()) { ! 45: bitmap.Fill(bitmap_bgcolor); ! 46: } ! 47: } ! 48: ! 49: // サイズ変更イベント ! 50: void ! 51: WXBitmapPanel::OnSize(wxSizeEvent& event) ! 52: { ! 53: const wxSize& size = event.GetSize(); ! 54: if (size.x <= 1 || size.y <= 1) { ! 55: return; ! 56: } ! 57: ! 58: event.Skip(); ! 59: ! 60: // バックバッファの大きさも変更 ! 61: wxSize oldsize(bitmap.GetWidth(), bitmap.GetHeight()); ! 62: if (size != oldsize) { ! 63: bitmap.Create(size.x, size.y); ! 64: bitmap.Fill(bitmap_bgcolor); ! 65: } ! 66: } ! 67: ! 68: // 描画イベント (UI スレッドから呼ばれる) ! 69: void ! 70: WXBitmapPanel::OnPaint(wxPaintEvent& event) ! 71: { ! 72: // 継承クラスによる描画 ! 73: Draw(); ! 74: ! 75: wxImage image(bitmap.GetWidth(), bitmap.GetHeight(), bitmap.GetBuf(), true); ! 76: wxBitmap bmp(image); ! 77: ! 78: // 実画面 DC にコピー ! 79: wxPaintDC dstDC(this); ! 80: dstDC.DrawBitmap(bmp, 0, 0); ! 81: } ! 82: ! 83: // 描画処理 ! 84: void ! 85: WXBitmapPanel::Draw() ! 86: { ! 87: // 通常は継承クラスが記述する。 ! 88: // ここで用意している Draw() は何もしないことで、全域を背景色で ! 89: // 塗りつぶしただけの状態が表示できる。空き地や下地表示用。 ! 90: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.