OXYGENHUB
◆ main openmsx / src / imgui / ImGuiSpriteViewer.hh
4.2 KiB · C++ · last changed chore(): initial commit 1 month ago source blame history raw
1
#ifndef IMGUI_SPRITE_VIEWER_HH
2
#define IMGUI_SPRITE_VIEWER_HH
3
4
#include "ImGuiPart.hh"
5
6
#include "GLUtil.hh"
7
#include "gl_vec.hh"
8
9
#include <string>
10
11
namespace openmsx {
12
13
class ImGuiSpriteViewer final : public ImGuiPart
14
{
15
public:
16
	ImGuiSpriteViewer(ImGuiManager& manager_, size_t index);
17
18
	[[nodiscard]] zstring_view iniName() const override { return title; }
19
	void save(ImGuiTextBuffer& buf) override;
20
	void loadLine(std::string_view name, zstring_view value) override;
21
	void paint(MSXMotherBoard* motherBoard) override;
22
23
public:
24
	bool show = true;
25
26
private:
27
	std::string title;
28
29
	bool overrideAll    = false;
30
	bool overrideMode   = false;
31
	bool overrideSize   = false;
32
	bool overrideMag    = false;
33
	bool overrideTrans  = false;
34
	bool overridePat    = false;
35
	bool overrideAtt    = false;
36
	bool overrideScroll = false;
37
	bool overrideLines  = false;
38
	int manualMode = 1;
39
	int manualSize = 8;
40
	int manualMag = 0;
41
	int manualTransparent = 0;
42
	int manualPatBase = 0;
43
	int manualAttBase = 0;
44
	int manualVerticalScroll = 0;
45
	int manualLines = 0; // 0->192, 1->212, 2->256
46
	int zoom = 0; // 0->1x, 1->2x, ..., 7->8x
47
	int checkerBoardSize = 4;
48
	int boundingBoxOnAll = 0;
49
	gl::vec4 gridColor{0.5f, 0.5f, 0.5f, 0.5f}; // RGBA
50
	gl::vec4 checkerBoardColor1{0.2f, 0.2f, 0.2f, 0.8f}; // RGBA
51
	gl::vec4 checkerBoardColor2{0.4f, 0.4f, 0.4f, 0.8f}; // RGBA
52
	gl::vec4 boundingBoxColor  {1.0f, 0.0f, 0.0f, 0.8f}; // RGBA
53
	bool grid = true;
54
	bool drawBoundingBox = true;
55
	bool enableLimitPerLine = true;
56
	bool enableStopY = true;
57
58
	gl::Texture patternTex {gl::Null{}}; // TODO also deallocate when needed
59
	gl::Texture gridTex    {gl::Null{}};
60
	gl::Texture zoomGridTex{gl::Null{}};
61
	gl::Texture checkerTex {gl::Null{}};
62
	gl::Texture renderTex  {gl::Null{}};
63
	gl::vecN<2, int> gridPosition;
64
65
	static constexpr auto validSizes = {8, 16};
66
	static constexpr auto persistentElements = std::tuple{
67
		PersistentElement{"show",                &ImGuiSpriteViewer::show},
68
		PersistentElement{"overrideAll",         &ImGuiSpriteViewer::overrideAll},
69
		PersistentElement{"overrideMode",        &ImGuiSpriteViewer::overrideMode},
70
		PersistentElement{"overrideSize",        &ImGuiSpriteViewer::overrideSize},
71
		PersistentElement{"overrideMag",         &ImGuiSpriteViewer::overrideMag},
72
		PersistentElement{"overrideTrans",       &ImGuiSpriteViewer::overrideTrans},
73
		PersistentElement{"overridePat",         &ImGuiSpriteViewer::overridePat},
74
		PersistentElement{"overrideAtt",         &ImGuiSpriteViewer::overrideAtt},
75
		PersistentElement{"overrideScroll",      &ImGuiSpriteViewer::overrideScroll},
76
		PersistentElement{"overrideLines",       &ImGuiSpriteViewer::overrideLines},
77
		PersistentElementMinMax{"mode",          &ImGuiSpriteViewer::manualMode, 1, 3}, // 1 or 2
78
		PersistentElementEnum{"size",            &ImGuiSpriteViewer::manualSize, validSizes},
79
		PersistentElementMax{"mag",              &ImGuiSpriteViewer::manualMag, 2},
80
		PersistentElementMax{"transparent",      &ImGuiSpriteViewer::manualTransparent, 2},
81
		PersistentElementMax{"patBase",          &ImGuiSpriteViewer::manualPatBase, 0x20000},
82
		PersistentElementMax{"attBase",          &ImGuiSpriteViewer::manualAttBase, 0x20000},
83
		PersistentElementMax{"verticalScroll",   &ImGuiSpriteViewer::manualVerticalScroll, 256},
84
		PersistentElementMax{"lines",            &ImGuiSpriteViewer::manualLines, 3},
85
		PersistentElementMax{"zoom",             &ImGuiSpriteViewer::zoom, 8},
86
		PersistentElement{"showGrid",            &ImGuiSpriteViewer::grid},
87
		PersistentElementMax{"checkerBoardSize", &ImGuiSpriteViewer::checkerBoardSize, 256},
88
		PersistentElementMax{"boundingBoxOnAll", &ImGuiSpriteViewer::boundingBoxOnAll, 2},
89
		PersistentElement{"gridColor",           &ImGuiSpriteViewer::gridColor},
90
		PersistentElement{"checkerBoardColor1",  &ImGuiSpriteViewer::checkerBoardColor1},
91
		PersistentElement{"checkerBoardColor2",  &ImGuiSpriteViewer::checkerBoardColor2},
92
		PersistentElement{"boundingBox",         &ImGuiSpriteViewer::drawBoundingBox},
93
		PersistentElement{"boundingBoxColor",    &ImGuiSpriteViewer::boundingBoxColor},
94
		PersistentElement{"spritesPerLineLimit", &ImGuiSpriteViewer::enableLimitPerLine},
95
		PersistentElement{"stopY",               &ImGuiSpriteViewer::enableStopY}
96
	};
97
};
98
99
} // namespace openmsx
100
101
#endif