yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
tile_selector_widget.h
Go to the documentation of this file.
1#ifndef YAZE_APP_GUI_WIDGETS_TILE_SELECTOR_WIDGET_H
2#define YAZE_APP_GUI_WIDGETS_TILE_SELECTOR_WIDGET_H
3
4#include <string>
5
6#include "app/gfx/bitmap.h"
7#include "app/gui/canvas.h"
8#include "imgui/imgui.h"
9
10namespace yaze::gui {
11
18 public:
19 struct Config {
20 int tile_size = 16;
21 float display_scale = 2.0f;
23 int total_tiles = 512;
24 ImVec2 draw_offset = {2.0f, 0.0f};
25 bool show_tile_ids = false;
26 ImVec4 highlight_color = {1.0f, 0.85f, 0.35f, 1.0f};
27 };
28
29 struct RenderResult {
30 bool tile_clicked = false;
31 bool tile_double_clicked = false;
32 bool selection_changed = false;
33 int selected_tile = -1;
34 };
35
36 explicit TileSelectorWidget(std::string widget_id);
37 TileSelectorWidget(std::string widget_id, Config config);
38
39 void AttachCanvas(Canvas* canvas);
40 void SetTileCount(int total_tiles);
41 void SetSelectedTile(int tile_id);
42 int GetSelectedTileID() const { return selected_tile_id_; }
43
44 RenderResult Render(gfx::Bitmap& atlas, bool atlas_ready);
45
46 void ScrollToTile(int tile_id, bool use_imgui_scroll = true);
47 ImVec2 TileOrigin(int tile_id) const;
48
49 private:
50 RenderResult HandleInteraction(int tile_display_size);
51 int ResolveTileAtCursor(int tile_display_size) const;
52 void DrawHighlight(int tile_display_size) const;
53 void DrawTileIdLabels(int tile_display_size) const;
54 bool IsValidTileId(int tile_id) const;
55
56 Canvas* canvas_ = nullptr;
59 int total_tiles_ = 0;
60 std::string widget_id_;
61
62 // Deferred scroll state (for when ScrollToTile is called outside render context)
63 mutable int pending_scroll_tile_id_ = -1;
64 mutable bool pending_scroll_use_imgui_ = true;
65};
66
67} // namespace yaze::gui
68
69#endif // YAZE_APP_GUI_WIDGETS_TILE_SELECTOR_WIDGET_H
70
71
Represents a bitmap image optimized for SNES ROM hacking.
Definition bitmap.h:66
Modern, robust canvas for drawing and manipulating graphics.
Definition canvas.h:54
Reusable tile selector built on top of Canvas.
int ResolveTileAtCursor(int tile_display_size) const
RenderResult Render(gfx::Bitmap &atlas, bool atlas_ready)
bool IsValidTileId(int tile_id) const
ImVec2 TileOrigin(int tile_id) const
RenderResult HandleInteraction(int tile_display_size)
void ScrollToTile(int tile_id, bool use_imgui_scroll=true)
void DrawTileIdLabels(int tile_display_size) const
void DrawHighlight(int tile_display_size) const
Graphical User Interface (GUI) components for the application.