yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
canvas_interaction_handler.h
Go to the documentation of this file.
1#ifndef YAZE_APP_GUI_CANVAS_CANVAS_INTERACTION_HANDLER_H
2#define YAZE_APP_GUI_CANVAS_CANVAS_INTERACTION_HANDLER_H
3
4#include <vector>
5
8#include "imgui/imgui.h"
9
10namespace yaze {
11namespace gui {
12
17 kNone, // No interaction
18 kPaintSingle, // Paint single tiles
19 kPaintDrag, // Paint while dragging
20 kSelectSingle, // Select single tile
21 kSelectRectangle, // Select rectangular region
22 kColorPaint // Paint with solid color
23};
24
30 ImVec2 tile_position = ImVec2(-1, -1);
31 std::vector<ImVec2> selected_tiles;
32 int tile_id = -1;
33
34 void Reset() {
36 tile_position = ImVec2(-1, -1);
37 selected_tiles.clear();
38 tile_id = -1;
39 }
40};
41
59 public:
61
65 void Initialize(const std::string& canvas_id);
66
72
83 TileInteractionResult Update(ImVec2 canvas_p0, ImVec2 scrolling,
84 float global_scale, float tile_size,
85 ImVec2 canvas_size, bool is_hovered);
86
98 bool DrawTilePainter(const gfx::Bitmap& bitmap, ImDrawList* draw_list,
99 ImVec2 canvas_p0, ImVec2 scrolling, float global_scale,
100 float tile_size, bool is_hovered);
101
105 bool DrawTilemapPainter(gfx::Tilemap& tilemap, int current_tile,
106 ImDrawList* draw_list, ImVec2 canvas_p0,
107 ImVec2 scrolling, float global_scale,
108 bool is_hovered);
109
113 bool DrawSolidTilePainter(const ImVec4& color, ImDrawList* draw_list,
114 ImVec2 canvas_p0, ImVec2 scrolling,
115 float global_scale, float tile_size,
116 bool is_hovered);
117
121 bool DrawTileSelector(ImDrawList* draw_list, ImVec2 canvas_p0,
122 ImVec2 scrolling, float tile_size, bool is_hovered);
123
135 bool DrawSelectRect(int current_map, ImDrawList* draw_list, ImVec2 canvas_p0,
136 ImVec2 scrolling, float global_scale, float tile_size,
137 bool is_hovered);
138
142 const ImVector<ImVec2>& GetHoverPoints() const { return hover_points_; }
143
147 const ImVector<ImVec2>& GetSelectedPoints() const { return selected_points_; }
148
152 const std::vector<ImVec2>& GetSelectedTiles() const {
153 return selected_tiles_;
154 }
155
159 ImVec2 GetDrawnTilePosition() const { return drawn_tile_pos_; }
160
165
169 void ClearState();
170
175
180
184 void SetSelectedTilePosition(ImVec2 pos) { selected_tile_pos_ = pos; }
185
186 private:
187 std::string canvas_id_;
189
190 // Interaction state
191 ImVector<ImVec2> hover_points_; // Current hover preview points
192 ImVector<ImVec2> selected_points_; // Selected rectangle points
193 std::vector<ImVec2> selected_tiles_; // Selected tiles from rect
194 ImVec2 drawn_tile_pos_ = ImVec2(-1, -1); // Last drawn tile position
195 ImVec2 mouse_pos_in_canvas_ = ImVec2(0, 0); // Current mouse in canvas space
196 ImVec2 selected_tile_pos_ = ImVec2(-1, -1); // Single tile selection
198
199 // Helper methods
200 ImVec2 AlignPosToGrid(ImVec2 pos, float grid_step);
201 ImVec2 GetMousePosition(ImVec2 canvas_p0, ImVec2 scrolling);
202 bool IsMouseClicked(ImGuiMouseButton button);
203 bool IsMouseDoubleClicked(ImGuiMouseButton button);
204 bool IsMouseDragging(ImGuiMouseButton button);
205 bool IsMouseReleased(ImGuiMouseButton button);
206};
207
208} // namespace gui
209} // namespace yaze
210
211#endif // YAZE_APP_GUI_CANVAS_CANVAS_INTERACTION_HANDLER_H
Represents a bitmap image optimized for SNES ROM hacking.
Definition bitmap.h:67
Handles all tile-based interactions for Canvas.
const ImVector< ImVec2 > & GetSelectedPoints() const
Get selected points (for DrawOverlay)
bool DrawSelectRect(int current_map, ImDrawList *draw_list, ImVec2 canvas_p0, ImVec2 scrolling, float global_scale, float tile_size, bool is_hovered)
Draw rectangle selector (multi-tile selection)
void ClearState()
Clear all interaction state.
bool DrawTilemapPainter(gfx::Tilemap &tilemap, int current_tile, ImDrawList *draw_list, ImVec2 canvas_p0, ImVec2 scrolling, float global_scale, bool is_hovered)
Draw tilemap painter (preview + interaction)
const std::vector< ImVec2 > & GetSelectedTiles() const
Get selected tiles from last rectangle selection.
ImVec2 AlignPosToGrid(ImVec2 pos, float grid_step)
ImVec2 GetSelectedTilePosition() const
Get selected tile position (for single selection)
void SetSelectedTilePosition(ImVec2 pos)
Set selected tile position.
TileInteractionResult Update(ImVec2 canvas_p0, ImVec2 scrolling, float global_scale, float tile_size, ImVec2 canvas_size, bool is_hovered)
Update interaction state (call once per frame)
ImVec2 GetMousePositionInCanvas() const
Get current mouse position in canvas space.
bool DrawTileSelector(ImDrawList *draw_list, ImVec2 canvas_p0, ImVec2 scrolling, float tile_size, bool is_hovered)
Draw tile selector (single tile selection)
bool DrawSolidTilePainter(const ImVec4 &color, ImDrawList *draw_list, ImVec2 canvas_p0, ImVec2 scrolling, float global_scale, float tile_size, bool is_hovered)
Draw solid color painter.
const ImVector< ImVec2 > & GetHoverPoints() const
Get current hover points (for DrawOverlay)
void SetMode(TileInteractionMode mode)
Set the interaction mode.
ImVec2 GetDrawnTilePosition() const
Get last drawn tile position.
bool IsRectSelectActive() const
Check if rectangle selection is active.
bool IsMouseDoubleClicked(ImGuiMouseButton button)
bool DrawTilePainter(const gfx::Bitmap &bitmap, ImDrawList *draw_list, ImVec2 canvas_p0, ImVec2 scrolling, float global_scale, float tile_size, bool is_hovered)
Draw tile painter (preview + interaction)
ImVec2 GetMousePosition(ImVec2 canvas_p0, ImVec2 scrolling)
void Initialize(const std::string &canvas_id)
Initialize the interaction handler.
TileInteractionMode
Tile interaction mode for canvas.
Tilemap structure for SNES tile-based graphics management.
Definition tilemap.h:118
Result of a tile interaction operation.