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>
7#include "imgui/imgui.h"
8
9namespace yaze {
10namespace gui {
11
16 kNone, // No interaction
17 kPaintSingle, // Paint single tiles
18 kPaintDrag, // Paint while dragging
19 kSelectSingle, // Select single tile
20 kSelectRectangle, // Select rectangular region
21 kColorPaint // Paint with solid color
22};
23
29 ImVec2 tile_position = ImVec2(-1, -1);
30 std::vector<ImVec2> selected_tiles;
31 int tile_id = -1;
32
33 void Reset() {
35 tile_position = ImVec2(-1, -1);
36 selected_tiles.clear();
37 tile_id = -1;
38 }
39};
40
58 public:
60
64 void Initialize(const std::string& canvas_id);
65
71
82 TileInteractionResult Update(ImVec2 canvas_p0, ImVec2 scrolling,
83 float global_scale, float tile_size,
84 ImVec2 canvas_size, bool is_hovered);
85
97 bool DrawTilePainter(const gfx::Bitmap& bitmap, ImDrawList* draw_list,
98 ImVec2 canvas_p0, ImVec2 scrolling, float global_scale,
99 float tile_size, bool is_hovered);
100
104 bool DrawTilemapPainter(gfx::Tilemap& tilemap, int current_tile,
105 ImDrawList* draw_list, ImVec2 canvas_p0,
106 ImVec2 scrolling, float global_scale, bool is_hovered);
107
111 bool DrawSolidTilePainter(const ImVec4& color, ImDrawList* draw_list,
112 ImVec2 canvas_p0, ImVec2 scrolling,
113 float global_scale, float tile_size, bool is_hovered);
114
118 bool DrawTileSelector(ImDrawList* draw_list, ImVec2 canvas_p0,
119 ImVec2 scrolling, float tile_size, bool is_hovered);
120
132 bool DrawSelectRect(int current_map, ImDrawList* draw_list, ImVec2 canvas_p0,
133 ImVec2 scrolling, float global_scale, float tile_size,
134 bool is_hovered);
135
139 const ImVector<ImVec2>& GetHoverPoints() const { return hover_points_; }
140
144 const ImVector<ImVec2>& GetSelectedPoints() const { return selected_points_; }
145
149 const std::vector<ImVec2>& GetSelectedTiles() const { return selected_tiles_; }
150
154 ImVec2 GetDrawnTilePosition() const { return drawn_tile_pos_; }
155
160
164 void ClearState();
165
170
175
179 void SetSelectedTilePosition(ImVec2 pos) { selected_tile_pos_ = pos; }
180
181 private:
182 std::string canvas_id_;
184
185 // Interaction state
186 ImVector<ImVec2> hover_points_; // Current hover preview points
187 ImVector<ImVec2> selected_points_; // Selected rectangle points
188 std::vector<ImVec2> selected_tiles_; // Selected tiles from rect
189 ImVec2 drawn_tile_pos_ = ImVec2(-1, -1); // Last drawn tile position
190 ImVec2 mouse_pos_in_canvas_ = ImVec2(0, 0); // Current mouse in canvas space
191 ImVec2 selected_tile_pos_ = ImVec2(-1, -1); // Single tile selection
193
194 // Helper methods
195 ImVec2 AlignPosToGrid(ImVec2 pos, float grid_step);
196 ImVec2 GetMousePosition(ImVec2 canvas_p0, ImVec2 scrolling);
197 bool IsMouseClicked(ImGuiMouseButton button);
198 bool IsMouseDoubleClicked(ImGuiMouseButton button);
199 bool IsMouseDragging(ImGuiMouseButton button);
200 bool IsMouseReleased(ImGuiMouseButton button);
201};
202
203} // namespace gui
204} // namespace yaze
205
206#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.
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.
Main namespace for the application.
Definition controller.cc:20
Tilemap structure for SNES tile-based graphics management.
Definition tilemap.h:109
Result of a tile interaction operation.