|
|
1.1 root 1: //
2: // nono
1.1.1.2 root 3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
1.1 root 5: //
6:
1.1.1.7 ! root 7: //
! 8: // ビデオ系モニターウィンドウ
! 9: //
! 10:
1.1 root 11: #pragma once
12:
13: #include "wxsubwindow.h"
1.1.1.7 ! root 14: #include "wxscrollbar.h"
! 15: #include <array>
! 16:
! 17: class LunaRenderer;
1.1 root 18:
19: // LUNA ビットマップパネル
1.1.1.7 ! root 20: class WXLunaBitmapPanel : public WXBitmapPanel
1.1 root 21: {
1.1.1.7 ! root 22: using inherited = WXBitmapPanel;
1.1 root 23: public:
24: WXLunaBitmapPanel(wxWindow *parent);
1.1.1.4 root 25: virtual ~WXLunaBitmapPanel() override;
1.1 root 26:
1.1.1.7 ! root 27: bool Layout() override;
! 28:
! 29: void EnablePlane(int plane, bool value);
! 30: void EnablePalette(bool value);
! 31:
1.1 root 32: private:
33: void OnSize(wxSizeEvent& event);
1.1.1.7 ! root 34: void OnScroll(wxScrollEvent& event);
! 35: void OnTimer(wxTimerEvent& event);
! 36: void OnPaletteChanged(wxCommandEvent& event);
! 37:
1.1 root 38: void Draw();
1.1.1.7 ! root 39: void GenPalette();
1.1 root 40:
1.1.1.7 ! root 41: LunaRenderer *renderer {};
! 42: std::array<Color, 256> pal {};
! 43: uint32 planemask {};
! 44: bool apply_palette {};
! 45:
! 46: Rect view {}; // ビュー矩形
1.1 root 47:
48: static const int virtual_width = 2048; // 仮想画面幅 [pixel]
49: static const int virtual_height = 1024; // 仮想画面高さ [pixel]
1.1.1.7 ! root 50:
! 51: WXScrollBar *vscroll {};
! 52: WXScrollBar *hscroll {};
! 53:
! 54: // タイマー
! 55: wxTimer timer {};
1.1 root 56:
57: // イベントテーブル
58: wxDECLARE_EVENT_TABLE();
59: };
60:
61: // LUNA ビットマップウィンドウ
62: class WXLunaBitmapWindow : public WXSubWindow
63: {
1.1.1.2 root 64: using inherited = WXSubWindow;
1.1.1.7 ! root 65:
! 66: public:
! 67: // コントロールパネルに表示するプレーン数
! 68: static const int NPLANES = 4;
! 69:
1.1 root 70: public:
1.1.1.6 root 71: WXLunaBitmapWindow(wxWindow *parent, const wxString& name);
1.1.1.4 root 72: virtual ~WXLunaBitmapWindow() override;
1.1 root 73:
1.1.1.7 ! root 74: void FontChanged() override;
! 75:
1.1 root 76: private:
1.1.1.7 ! root 77: void OnPlane(wxCommandEvent& event);
! 78: void DoPlane(int plane, bool value);
! 79: void OnApplyPalette(wxCommandEvent& event);
! 80: void DoApplyPalette(bool value);
! 81:
! 82: // コントロールパネル
! 83: std::array<wxCheckBox *, NPLANES> planesw {};
! 84: wxCheckBox *applysw {};
1.1 root 85:
86: // グラフィックパネル
1.1.1.7 ! root 87: WXLunaBitmapPanel *viewpanel {};
1.1 root 88:
89: // イベントテーブル
90: wxDECLARE_EVENT_TABLE();
1.1.1.7 ! root 91:
! 92: // 状態の二次記憶域。
! 93: // サブウィンドウは今のところ開いてる時だけオブジェクトが存在している
! 94: // タイプだが、このウィンドウを閉じてまた開くとさっきの状態が継続して
! 95: // いてほしいので、ここでその状況を真似する。
! 96: // ただしこっちはあくまで補助用で、コントロールの値のほうが一次情報。
! 97: static std::array<bool, NPLANES> sticky_plane;
! 98: static bool sticky_apply;
! 99:
! 100: // sticky_used が false ならまだ一度も使われていない (次のコンストラクタ
! 101: // で初期化する)、true なら前回の値が入っている。
! 102: static bool sticky_used;
1.1 root 103: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.