File:  [Isaki's NoNo m68k/m88k emulator] / nono / wx / wxvideomonitor.h
Revision 1.1.1.7 (vendor branch): download - view: text, annotated - select for diffs
Wed Apr 29 17:05:08 2026 UTC (3 months ago) by root
Branches: MAIN, Isaki
CVS tags: v015, HEAD
nono 0.3.0

//
// nono
// Copyright (C) 2020 nono project
// Licensed under nono-license.txt
//

//
// ビデオ系モニターウィンドウ
//

#pragma once

#include "wxsubwindow.h"
#include "wxscrollbar.h"
#include <array>

class LunaRenderer;

// LUNA ビットマップパネル
class WXLunaBitmapPanel : public WXBitmapPanel
{
	using inherited = WXBitmapPanel;
 public:
	WXLunaBitmapPanel(wxWindow *parent);
	virtual ~WXLunaBitmapPanel() override;

	bool Layout() override;

	void EnablePlane(int plane, bool value);
	void EnablePalette(bool value);

 private:
	void OnSize(wxSizeEvent& event);
	void OnScroll(wxScrollEvent& event);
	void OnTimer(wxTimerEvent& event);
	void OnPaletteChanged(wxCommandEvent& event);

	void Draw();
	void GenPalette();

	LunaRenderer *renderer {};
	std::array<Color, 256> pal {};
	uint32 planemask {};
	bool apply_palette {};

	Rect view {};	// ビュー矩形

	static const int virtual_width = 2048;	// 仮想画面幅 [pixel]
	static const int virtual_height = 1024;	// 仮想画面高さ [pixel]

	WXScrollBar *vscroll {};
	WXScrollBar *hscroll {};

	// タイマー
	wxTimer timer {};

	// イベントテーブル
	wxDECLARE_EVENT_TABLE();
};

// LUNA ビットマップウィンドウ
class WXLunaBitmapWindow : public WXSubWindow
{
	using inherited = WXSubWindow;

 public:
	// コントロールパネルに表示するプレーン数
	static const int NPLANES = 4;

 public:
	WXLunaBitmapWindow(wxWindow *parent, const wxString& name);
	virtual ~WXLunaBitmapWindow() override;

	void FontChanged() override;

 private:
	void OnPlane(wxCommandEvent& event);
	void DoPlane(int plane, bool value);
	void OnApplyPalette(wxCommandEvent& event);
	void DoApplyPalette(bool value);

	// コントロールパネル
	std::array<wxCheckBox *, NPLANES> planesw {};
	wxCheckBox *applysw {};

	// グラフィックパネル
	WXLunaBitmapPanel *viewpanel {};

	// イベントテーブル
	wxDECLARE_EVENT_TABLE();

	// 状態の二次記憶域。
	// サブウィンドウは今のところ開いてる時だけオブジェクトが存在している
	// タイプだが、このウィンドウを閉じてまた開くとさっきの状態が継続して
	// いてほしいので、ここでその状況を真似する。
	// ただしこっちはあくまで補助用で、コントロールの値のほうが一次情報。
	static std::array<bool, NPLANES> sticky_plane;
	static bool sticky_apply;

	// sticky_used が false ならまだ一度も使われていない (次のコンストラクタ
	// で初期化する)、true なら前回の値が入っている。
	static bool sticky_used;
};

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.