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#include "app/gfx/bitmap.h"
6#include "app/gfx/tilemap.h"
7#include "imgui/imgui.h"
8
9namespace yaze {
10namespace gui {
11namespace canvas {
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, bool is_hovered);
108
112 bool DrawSolidTilePainter(const ImVec4& color, ImDrawList* draw_list,
113 ImVec2 canvas_p0, ImVec2 scrolling,
114 float global_scale, float tile_size, bool is_hovered);
115
119 bool DrawTileSelector(ImDrawList* draw_list, ImVec2 canvas_p0,
120 ImVec2 scrolling, float tile_size, bool is_hovered);
121
133 bool DrawSelectRect(int current_map, ImDrawList* draw_list, ImVec2 canvas_p0,
134 ImVec2 scrolling, float global_scale, float tile_size,
135 bool is_hovered);
136
140 const ImVector<ImVec2>& GetHoverPoints() const { return hover_points_; }
141
145 const ImVector<ImVec2>& GetSelectedPoints() const { return selected_points_; }
146
150 const std::vector<ImVec2>& GetSelectedTiles() const { return selected_tiles_; }
151
155 ImVec2 GetDrawnTilePosition() const { return drawn_tile_pos_; }
156
161
165 void ClearState();
166
171
176
180 void SetSelectedTilePosition(ImVec2 pos) { selected_tile_pos_ = pos; }
181
182 private:
183 std::string canvas_id_;
185
186 // Interaction state
187 ImVector<ImVec2> hover_points_; // Current hover preview points
188 ImVector<ImVec2> selected_points_; // Selected rectangle points
189 std::vector<ImVec2> selected_tiles_; // Selected tiles from rect
190 ImVec2 drawn_tile_pos_ = ImVec2(-1, -1); // Last drawn tile position
191 ImVec2 mouse_pos_in_canvas_ = ImVec2(0, 0); // Current mouse in canvas space
192 ImVec2 selected_tile_pos_ = ImVec2(-1, -1); // Single tile selection
194
195 // Helper methods
196 ImVec2 AlignPosToGrid(ImVec2 pos, float grid_step);
197 ImVec2 GetMousePosition(ImVec2 canvas_p0, ImVec2 scrolling);
198 bool IsMouseClicked(ImGuiMouseButton button);
199 bool IsMouseDoubleClicked(ImGuiMouseButton button);
200 bool IsMouseDragging(ImGuiMouseButton button);
201 bool IsMouseReleased(ImGuiMouseButton button);
202};
203
204} // namespace canvas
205} // namespace gui
206} // namespace yaze
207
208#endif // YAZE_APP_GUI_CANVAS_CANVAS_INTERACTION_HANDLER_H
Represents a bitmap image optimized for SNES ROM hacking.
Definition bitmap.h:66
Handles all tile-based interactions for Canvas.
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)
void SetSelectedTilePosition(ImVec2 pos)
Set selected tile position.
ImVec2 GetMousePosition(ImVec2 canvas_p0, ImVec2 scrolling)
bool IsRectSelectActive() const
Check if rectangle selection is active.
ImVec2 GetDrawnTilePosition() const
Get last drawn tile position.
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)
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)
void SetMode(TileInteractionMode mode)
Set the interaction mode.
ImVec2 GetSelectedTilePosition() const
Get selected tile position (for single selection)
const ImVector< ImVec2 > & GetSelectedPoints() const
Get selected points (for DrawOverlay)
const std::vector< ImVec2 > & GetSelectedTiles() const
Get selected tiles from last rectangle selection.
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)
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.
void Initialize(const std::string &canvas_id)
Initialize the interaction handler.
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)
const ImVector< ImVec2 > & GetHoverPoints() const
Get current hover points (for DrawOverlay)
TileInteractionMode
Tile interaction mode for canvas.
Main namespace for the application.
Tilemap structure for SNES tile-based graphics management.
Definition tilemap.h:109
Result of a tile interaction operation.