| 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; |
| 46 |
int zoom = 0; |
| 47 |
int checkerBoardSize = 4; |
| 48 |
int boundingBoxOnAll = 0; |
| 49 |
gl::vec4 gridColor{0.5f, 0.5f, 0.5f, 0.5f}; |
| 50 |
gl::vec4 checkerBoardColor1{0.2f, 0.2f, 0.2f, 0.8f}; |
| 51 |
gl::vec4 checkerBoardColor2{0.4f, 0.4f, 0.4f, 0.8f}; |
| 52 |
gl::vec4 boundingBoxColor {1.0f, 0.0f, 0.0f, 0.8f}; |
| 53 |
bool grid = true; |
| 54 |
bool drawBoundingBox = true; |
| 55 |
bool enableLimitPerLine = true; |
| 56 |
bool enableStopY = true; |
| 57 |
|
| 58 |
gl::Texture patternTex {gl::Null{}}; |
| 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}, |
| 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 |
} |
| 100 |
|
| 101 |
#endif |