yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
canvas.h
Go to the documentation of this file.
1#ifndef YAZE_GUI_CANVAS_H
2#define YAZE_GUI_CANVAS_H
3
5#define IMGUI_DEFINE_MATH_OPERATORS
6
7#include <cstdint>
8#include <string>
9#include <functional>
10#include <memory>
11
12#include "app/gfx/core/bitmap.h"
13#include "app/rom.h"
28#include "imgui/imgui.h"
29
30namespace yaze {
31
36namespace gui {
37
38// Forward declaration (full include would cause circular dependency)
39class CanvasAutomationAPI;
40
41using gfx::Bitmap;
43
44enum class CanvasType { kTile, kBlock, kMap };
45enum class CanvasMode { kPaint, kSelect };
47
59class Canvas {
60 public:
61 // Default constructor
62 Canvas();
64
65 // Legacy constructors (renderer is optional for backward compatibility)
66 explicit Canvas(const std::string& id);
67 explicit Canvas(const std::string& id, ImVec2 canvas_size);
68 explicit Canvas(const std::string& id, ImVec2 canvas_size, CanvasGridSize grid_size);
69 explicit Canvas(const std::string& id, ImVec2 canvas_size, CanvasGridSize grid_size, float global_scale);
70
71 // New constructors with renderer support (for migration to IRenderer pattern)
73 explicit Canvas(gfx::IRenderer* renderer, const std::string& id);
74 explicit Canvas(gfx::IRenderer* renderer, const std::string& id, ImVec2 canvas_size);
75 explicit Canvas(gfx::IRenderer* renderer, const std::string& id, ImVec2 canvas_size, CanvasGridSize grid_size);
76 explicit Canvas(gfx::IRenderer* renderer, const std::string& id, ImVec2 canvas_size, CanvasGridSize grid_size, float global_scale);
77
78 // Set renderer after construction (for late initialization)
80 gfx::IRenderer* renderer() const { return renderer_; }
81
83 switch (grid_size) {
85 config_.grid_step = 8.0f;
86 break;
88 config_.grid_step = 16.0f;
89 break;
91 config_.grid_step = 32.0f;
92 break;
94 config_.grid_step = 64.0f;
95 break;
96 }
97 }
98
99 // Legacy compatibility
101
103 if (config_.grid_step == 8.0f) return CanvasGridSize::k8x8;
104 if (config_.grid_step == 16.0f) return CanvasGridSize::k16x16;
105 if (config_.grid_step == 32.0f) return CanvasGridSize::k32x32;
106 if (config_.grid_step == 64.0f) return CanvasGridSize::k64x64;
107 return CanvasGridSize::k16x16; // Default
108 }
109
110 void UpdateColorPainter(gfx::IRenderer* renderer, gfx::Bitmap &bitmap, const ImVec4 &color,
111 const std::function<void()> &event, int tile_size,
112 float scale = 1.0f);
113
114 void UpdateInfoGrid(ImVec2 bg_size, float grid_size = 64.0f,
115 int label_id = 0);
116
117 // ==================== Modern ImGui-Style Interface ====================
118
136 void Begin(ImVec2 canvas_size = ImVec2(0, 0));
137
144 void End();
145
146 // ==================== Legacy Interface (Backward Compatible) ====================
147
148 // Background for the Canvas represents region without any content drawn to
149 // it, but can be controlled by the user.
150 void DrawBackground(ImVec2 canvas_size = ImVec2(0, 0));
151
152 // Context Menu refers to what happens when the right mouse button is pressed
153 // This routine also handles the scrolling for the canvas.
154 void DrawContextMenu();
155
156 // Phase 4: Use unified menu item definition from canvas_menu.h
158
159 // BPP format UI components
160 std::unique_ptr<gui::BppFormatUI> bpp_format_ui_;
161 std::unique_ptr<gui::BppConversionDialog> bpp_conversion_dialog_;
162 std::unique_ptr<gui::BppComparisonTool> bpp_comparison_tool_;
163
164 // Enhanced canvas components
165 std::unique_ptr<CanvasModals> modals_;
166 std::unique_ptr<CanvasContextMenu> context_menu_;
167 std::shared_ptr<CanvasUsageTracker> usage_tracker_;
168 std::shared_ptr<CanvasPerformanceIntegration> performance_integration_;
170
171 void AddContextMenuItem(const gui::CanvasMenuItem& item);
173
174 // Phase 4: Access to editor-provided menu definition
177 void SetContextMenuEnabled(bool enabled) { context_menu_enabled_ = enabled; }
178
179 // Persistent popup management for context menu actions
180 void OpenPersistentPopup(const std::string& popup_id, std::function<void()> render_callback);
181 void ClosePersistentPopup(const std::string& popup_id);
183
184 // Popup registry access (Phase 3: for advanced users and testing)
187
188 // Enhanced view and edit operations
190 void ShowScalingControls();
191 void SetZoomToFit(const gfx::Bitmap& bitmap);
192 void ResetView();
193 void ApplyConfigSnapshot(const CanvasConfig& snapshot);
194 void ApplyScaleSnapshot(const CanvasConfig& snapshot);
195
196 // Modular component access
198 const CanvasConfig& GetConfig() const { return config_; }
200 const CanvasSelection& GetSelection() const { return selection_; }
201
202 // Enhanced palette management
204 void ShowPaletteEditor();
205 void ShowColorAnalysis();
206 bool ApplyROMPalette(int group_index, int palette_index);
207
208 // BPP format management
210 void ShowBppAnalysis();
212 bool ConvertBitmapFormat(gfx::BppFormat target_format);
214
215 // Enhanced canvas management
217 void SetUsageMode(CanvasUsage usage);
218 auto usage_mode() const { return config_.usage_mode; }
219
220 void RecordCanvasOperation(const std::string& operation_name, double time_ms);
221 void ShowPerformanceUI();
222 void ShowUsageReport();
223
224 // Interaction handler access
227
228 // Automation API access (Phase 4A)
230
231 // Initialization and cleanup
232 void InitializeDefaults();
233 void Cleanup();
234
235 // Size reporting for ImGui table integration
236 ImVec2 GetMinimumSize() const;
237 ImVec2 GetPreferredSize() const;
238 ImVec2 GetCurrentSize() const { return config_.canvas_size; }
239 void SetAutoResize(bool auto_resize) { config_.auto_resize = auto_resize; }
240 bool IsAutoResize() const { return config_.auto_resize; }
241
242 // Table integration helpers
243 void ReserveTableSpace(const std::string& label = "");
244 bool BeginTableCanvas(const std::string& label = "");
245 void EndTableCanvas();
246
247 // Improved interaction detection
248 bool HasValidSelection() const;
249 bool WasClicked(ImGuiMouseButton button = ImGuiMouseButton_Left) const;
250 bool WasDoubleClicked(ImGuiMouseButton button = ImGuiMouseButton_Left) const;
251 ImVec2 GetLastClickPosition() const;
252
253 // Tile painter methods
254 bool DrawTilePainter(const Bitmap &bitmap, int size, float scale = 1.0f);
255 bool DrawSolidTilePainter(const ImVec4 &color, int size);
256 void DrawTileOnBitmap(int tile_size, gfx::Bitmap *bitmap, ImVec4 color);
257
258 void DrawOutline(int x, int y, int w, int h);
259 void DrawOutlineWithColor(int x, int y, int w, int h, ImVec4 color);
260 void DrawOutlineWithColor(int x, int y, int w, int h, uint32_t color);
261
262 void DrawRect(int x, int y, int w, int h, ImVec4 color);
263
264 void DrawText(const std::string& text, int x, int y);
265 void DrawGridLines(float grid_step);
266
267 void DrawInfoGrid(float grid_step = 64.0f, int tile_id_offset = 8,
268 int label_id = 0);
269
270 void DrawLayeredElements();
271
273 float x = mouse_pos_in_canvas_.x;
274 float y = mouse_pos_in_canvas_.y;
275 int num_columns = (canvas_sz_.x / global_scale_) / custom_step_;
276 int num_rows = (canvas_sz_.y / global_scale_) / custom_step_;
277 int tile_id = (x / custom_step_) + (y / custom_step_) * num_columns;
278 tile_id = tile_id / global_scale_;
279 if (tile_id >= num_columns * num_rows) {
280 tile_id = -1; // Invalid tile ID
281 }
282 return tile_id;
283 }
284 void DrawCustomHighlight(float grid_step);
285 bool IsMouseHovering() const { return is_hovered_; }
286 void ZoomIn() { global_scale_ += 0.25f; }
287 void ZoomOut() { global_scale_ -= 0.25f; }
288
289 // Points accessors - points_ is maintained separately for custom overlay drawing
290 const ImVector<ImVec2>& points() const { return points_; }
291 ImVector<ImVec2>* mutable_points() { return &points_; }
292 auto push_back(ImVec2 pos) { points_.push_back(pos); }
293 auto draw_list() const { return draw_list_; }
294 auto zero_point() const { return canvas_p0_; }
295 auto scrolling() const { return scrolling_; }
296 void set_scrolling(ImVec2 scroll) { scrolling_ = scroll; }
297 auto drawn_tile_position() const { return drawn_tile_pos_; }
298 auto canvas_size() const { return canvas_sz_; }
299 void set_global_scale(float scale) { global_scale_ = scale; }
300 void set_draggable(bool draggable) { draggable_ = draggable; }
301
302 // Modern accessors using modular structure
304 const std::vector<ImVec2>& GetSelectedTiles() const { return selected_tiles_; }
305 ImVec2 GetSelectedTilePos() const { return selected_tile_pos_; }
306 void SetSelectedTilePos(ImVec2 pos) { selected_tile_pos_ = pos; }
307
308 // Configuration accessors
313 float GetGlobalScale() const { return config_.global_scale; }
314 void SetGlobalScale(float scale) { config_.global_scale = scale; }
316 float GetGridStep() const { return config_.grid_step; }
317
318 // Rectangle selection boundary control (prevents wrapping in large maps)
321 float GetCanvasWidth() const { return config_.canvas_size.x; }
322 float GetCanvasHeight() const { return config_.canvas_size.y; }
323
324 // Legacy compatibility accessors
326 auto selected_tiles() const { return selected_tiles_; }
327 auto selected_tile_pos() const { return selected_tile_pos_; }
328 void set_selected_tile_pos(ImVec2 pos) { selected_tile_pos_ = pos; }
329 auto global_scale() const { return config_.global_scale; }
331 auto custom_step() const { return config_.grid_step; }
332 auto width() const { return config_.canvas_size.x; }
333 auto height() const { return config_.canvas_size.y; }
334
335 // Public accessors for methods that need to be accessed externally
336 auto canvas_id() const { return canvas_id_; }
337
338 // Public methods for drawing operations
339 void DrawBitmap(Bitmap &bitmap, int border_offset, float scale);
340 void DrawBitmap(Bitmap &bitmap, int x_offset, int y_offset, float scale = 1.0f, int alpha = 255);
341 void DrawBitmap(Bitmap &bitmap, ImVec2 dest_pos, ImVec2 dest_size, ImVec2 src_pos, ImVec2 src_size);
342 void DrawBitmapTable(const BitmapTable &gfx_bin);
352 void DrawBitmapGroup(std::vector<int> &group, gfx::Tilemap &tilemap,
353 int tile_size, float scale = 1.0f,
354 int local_map_size = 0x200,
355 ImVec2 total_map_size = ImVec2(0x1000, 0x1000));
356 bool DrawTilemapPainter(gfx::Tilemap &tilemap, int current_tile);
357 void DrawSelectRect(int current_map, int tile_size = 0x10, float scale = 1.0f);
358 bool DrawTileSelector(int size, int size_y = 0);
359 void DrawGrid(float grid_step = 64.0f, int tile_id_offset = 8);
360 void DrawOverlay();
361 auto labels(int i) {
362 if (i >= labels_.size()) {
363 labels_.push_back(ImVector<std::string>());
364 }
365 return labels_[i];
366 }
367 auto mutable_labels(int i) {
368 if (i >= labels_.size()) {
369 int x = i;
370 while (x >= labels_.size()) {
371 labels_.push_back(ImVector<std::string>());
372 x--;
373 }
374 labels_.push_back(ImVector<std::string>());
375 }
376 return &labels_[i];
377 }
378
381
384 auto selected_points() const { return selected_points_; }
385
386 auto hover_mouse_pos() const { return mouse_pos_in_canvas_; }
387
388 void set_rom(Rom *rom) { rom_ = rom; }
389 Rom *rom() const { return rom_; }
390
391 private:
393
394 // Modular configuration and state
398 std::unique_ptr<PaletteEditorWidget> palette_editor_;
399
400 // Phase 1: Consolidated state (gradually replacing scattered members)
402
403 // Automation API (lazy-initialized on first access)
404 std::unique_ptr<CanvasAutomationAPI> automation_api_;
405
406 // Core canvas state
407 bool is_hovered_ = false;
408 bool refresh_graphics_ = false;
409
410 // Phase 4: Context menu system (declarative menu definition)
413
414 // Phase 4: Persistent popup state for context menu actions (unified registry)
416
417 // Legacy members (to be gradually replaced)
423
424 // Core canvas state
425 Bitmap *bitmap_ = nullptr;
426 Rom *rom_ = nullptr;
427 ImDrawList *draw_list_ = nullptr;
428
429 // Canvas geometry and interaction state
436
437 // Drawing and labeling
438 // NOTE: points_ synchronized from interaction_handler_ for backward compatibility
439 ImVector<ImVec2> points_;
440 ImVector<ImVector<std::string>> labels_;
441
442 // Identification
443 std::string canvas_id_ = "Canvas";
444 std::string context_id_ = "CanvasContext";
445
446 // Legacy compatibility (gradually being replaced by selection_)
447 std::vector<ImVec2> selected_tiles_;
448 ImVector<ImVec2> selected_points_;
449 ImVec2 selected_tile_pos_ = ImVec2(-1, -1);
451 float custom_step_ = 32.0f;
452 float global_scale_ = 1.0f;
453 bool enable_grid_ = true;
458 bool draggable_ = false;
459};
460
461void BeginCanvas(Canvas &canvas, ImVec2 child_size = ImVec2(0, 0));
462void EndCanvas(Canvas &canvas);
463
464void GraphicsBinCanvasPipeline(int width, int height, int tile_size,
465 int num_sheets_to_load, int canvas_id,
466 bool is_loaded, BitmapTable &graphics_bin);
467
468void BitmapCanvasPipeline(gui::Canvas &canvas, gfx::Bitmap &bitmap, int width,
469 int height, int tile_size, bool is_loaded,
470 bool scrollbar, int canvas_id);
471
472// Table-optimized canvas pipeline with automatic sizing
473void TableCanvasPipeline(gui::Canvas &canvas, gfx::Bitmap &bitmap,
474 const std::string& label = "", bool auto_resize = true);
475
504 public:
508 explicit ScopedCanvas(const std::string& id, ImVec2 canvas_size = ImVec2(0, 0))
509 : canvas_(new Canvas(id, canvas_size)), owned_(true), active_(true) {
510 canvas_->Begin();
511 }
512
516 explicit ScopedCanvas(gfx::IRenderer* renderer, const std::string& id, ImVec2 canvas_size = ImVec2(0, 0))
517 : canvas_(new Canvas(renderer, id, canvas_size)), owned_(true), active_(true) {
518 canvas_->Begin();
519 }
520
524 explicit ScopedCanvas(Canvas& canvas)
525 : canvas_(&canvas), owned_(false), active_(true) {
526 canvas_->Begin();
527 }
528
533 if (active_ && canvas_) {
534 canvas_->End();
535 }
536 if (owned_) {
537 delete canvas_;
538 }
539 }
540
541 // No copy, move only
542 ScopedCanvas(const ScopedCanvas&) = delete;
544
545 ScopedCanvas(ScopedCanvas&& other) noexcept
546 : canvas_(other.canvas_), owned_(other.owned_), active_(other.active_) {
547 other.active_ = false;
548 other.canvas_ = nullptr;
549 }
550
554 Canvas* operator->() { return canvas_; }
555 const Canvas* operator->() const { return canvas_; }
556
560 Canvas& operator*() { return *canvas_; }
561 const Canvas& operator*() const { return *canvas_; }
562
566 Canvas* get() { return canvas_; }
567 const Canvas* get() const { return canvas_; }
568
569 private:
571 bool owned_;
573};
574
575} // namespace gui
576} // namespace yaze
577
578#endif
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:74
Represents a bitmap image optimized for SNES ROM hacking.
Definition bitmap.h:66
Defines an abstract interface for all rendering operations.
Definition irenderer.h:35
Programmatic interface for controlling canvas operations.
Handles all tile-based interactions for Canvas.
Modern, robust canvas for drawing and manipulating graphics.
Definition canvas.h:59
ImVec2 scrolling_
Definition canvas.h:430
void set_scrolling(ImVec2 scroll)
Definition canvas.h:296
CanvasState state_
Definition canvas.h:401
const CanvasInteractionHandler & GetInteractionHandler() const
Definition canvas.h:226
auto selected_tile_pos() const
Definition canvas.h:327
ImVector< ImVec2 > points_
Definition canvas.h:439
int highlight_tile_id
Definition canvas.h:419
void DrawBitmap(Bitmap &bitmap, int border_offset, float scale)
Definition canvas.cc:1004
PopupRegistry popup_registry_
Definition canvas.h:415
Rom * rom() const
Definition canvas.h:389
const CanvasMenuDefinition & editor_menu() const
Definition canvas.h:176
std::string canvas_id_
Definition canvas.h:443
auto labels(int i)
Definition canvas.h:361
float GetCanvasWidth() const
Definition canvas.h:321
auto height() const
Definition canvas.h:333
auto custom_step() const
Definition canvas.h:331
void set_rom(Rom *rom)
Definition canvas.h:388
void ShowScalingControls()
Definition canvas.cc:1633
auto set_current_labels(int i)
Definition canvas.h:379
bool WasDoubleClicked(ImGuiMouseButton button=ImGuiMouseButton_Left) const
Definition canvas.cc:315
CanvasConfig config_
Definition canvas.h:396
ImVec2 selected_tile_pos_
Definition canvas.h:449
auto global_scale() const
Definition canvas.h:329
gfx::IRenderer * renderer_
Definition canvas.h:395
ImVec2 canvas_p1_
Definition canvas.h:433
void ShowBppAnalysis()
Definition canvas.cc:1781
gfx::IRenderer * renderer() const
Definition canvas.h:80
void DrawOutlineWithColor(int x, int y, int w, int h, ImVec4 color)
Definition canvas.cc:1065
auto select_rect_active() const
Definition canvas.h:325
void SetUsageMode(CanvasUsage usage)
Definition canvas.cc:187
uint64_t edit_palette_group_name_index_
Definition canvas.h:421
auto selected_tiles() const
Definition canvas.h:326
std::unique_ptr< gui::BppComparisonTool > bpp_comparison_tool_
Definition canvas.h:162
void DrawBitmapGroup(std::vector< int > &group, gfx::Tilemap &tilemap, int tile_size, float scale=1.0f, int local_map_size=0x200, ImVec2 total_map_size=ImVec2(0x1000, 0x1000))
Draw group of bitmaps for multi-tile selection preview.
Definition canvas.cc:1075
bool BeginTableCanvas(const std::string &label="")
Definition canvas.cc:280
void InitializeEnhancedComponents()
Definition canvas.cc:164
void ShowBppConversionDialog()
Definition canvas.cc:1792
CanvasAutomationAPI * GetAutomationAPI()
Definition canvas.cc:1846
bool GetClampRectToLocalMaps() const
Definition canvas.h:320
auto hover_mouse_pos() const
Definition canvas.h:386
void ShowAdvancedCanvasProperties()
Definition canvas.cc:1510
void ApplyScaleSnapshot(const CanvasConfig &snapshot)
Definition canvas.cc:664
ImVector< ImVec2 > * mutable_points()
Definition canvas.h:291
void UpdateInfoGrid(ImVec2 bg_size, float grid_size=64.0f, int label_id=0)
Definition canvas.cc:364
std::unique_ptr< gui::BppFormatUI > bpp_format_ui_
Definition canvas.h:160
void DrawContextMenu()
Definition canvas.cc:428
auto push_back(ImVec2 pos)
Definition canvas.h:292
ImVec2 mouse_pos_in_canvas_
Definition canvas.h:435
int GetTileIdFromMousePos()
Definition canvas.h:272
auto drawn_tile_position() const
Definition canvas.h:297
const CanvasSelection & GetSelection() const
Definition canvas.h:200
bool DrawTilemapPainter(gfx::Tilemap &tilemap, int current_tile)
Definition canvas.cc:716
bool DrawSolidTilePainter(const ImVec4 &color, int size)
Definition canvas.cc:787
bool enable_context_menu_
Definition canvas.h:456
auto draw_list() const
Definition canvas.h:293
CanvasMenuDefinition editor_menu_
Definition canvas.h:411
std::unique_ptr< CanvasModals > modals_
Definition canvas.h:165
void ApplyConfigSnapshot(const CanvasConfig &snapshot)
Definition canvas.cc:640
auto width() const
Definition canvas.h:332
void DrawLayeredElements()
Definition canvas.cc:1350
float GetCanvasHeight() const
Definition canvas.h:322
const CanvasConfig & GetConfig() const
Definition canvas.h:198
void ReserveTableSpace(const std::string &label="")
Definition canvas.cc:275
bool enable_custom_labels_
Definition canvas.h:455
const PopupRegistry & GetPopupRegistry() const
Definition canvas.h:186
void ShowUsageReport()
Definition canvas.cc:214
bool IsSelectRectActive() const
Definition canvas.h:303
CanvasInteractionHandler & GetInteractionHandler()
Definition canvas.h:225
auto mutable_selected_points()
Definition canvas.h:383
void SetRenderer(gfx::IRenderer *renderer)
Definition canvas.h:79
ImVec2 GetMinimumSize() const
Definition canvas.cc:265
bool DrawTileSelector(int size, int size_y=0)
Definition canvas.cc:862
bool ConvertBitmapFormat(gfx::BppFormat target_format)
Definition canvas.cc:1809
void DrawGridLines(float grid_step)
Definition canvas.cc:1257
uint64_t edit_palette_sub_index_
Definition canvas.h:422
void ShowPerformanceUI()
Definition canvas.cc:208
bool custom_canvas_size_
Definition canvas.h:457
void ClearContextMenuItems()
Definition canvas.cc:595
void DrawRect(int x, int y, int w, int h, ImVec4 color)
Definition canvas.cc:1247
bool HasValidSelection() const
Definition canvas.cc:307
bool DrawTilePainter(const Bitmap &bitmap, int size, float scale=1.0f)
Definition canvas.cc:670
ImDrawList * draw_list_
Definition canvas.h:427
PopupRegistry & GetPopupRegistry()
Definition canvas.h:185
auto custom_labels_enabled()
Definition canvas.h:330
ImVector< ImVec2 > selected_points_
Definition canvas.h:448
ImVec2 GetCurrentSize() const
Definition canvas.h:238
void SetCanvasSize(ImVec2 canvas_size)
Definition canvas.h:309
void UpdateColorPainter(gfx::IRenderer *renderer, gfx::Bitmap &bitmap, const ImVec4 &color, const std::function< void()> &event, int tile_size, float scale=1.0f)
Definition canvas.cc:348
void DrawTileOnBitmap(int tile_size, gfx::Bitmap *bitmap, ImVec4 color)
Definition canvas.cc:841
void DrawCustomHighlight(float grid_step)
Definition canvas.cc:1299
bool select_rect_active_
Definition canvas.h:450
auto mutable_selected_tiles()
Definition canvas.h:382
auto mutable_labels(int i)
Definition canvas.h:367
Bitmap * bitmap_
Definition canvas.h:425
void SetCanvasGridSize(CanvasGridSize grid_size)
Definition canvas.h:100
CanvasGridSize grid_size() const
Definition canvas.h:102
void AddContextMenuItem(const gui::CanvasMenuItem &item)
Definition canvas.cc:572
uint16_t edit_palette_index_
Definition canvas.h:420
ImVec2 GetPreferredSize() const
Definition canvas.cc:270
float GetGridStep() const
Definition canvas.h:316
CanvasInteractionHandler interaction_handler_
Definition canvas.h:169
void InitializePaletteEditor(Rom *rom)
Definition canvas.cc:236
void Begin(ImVec2 canvas_size=ImVec2(0, 0))
Begin canvas rendering (ImGui-style)
Definition canvas.cc:329
auto canvas_size() const
Definition canvas.h:298
void set_selected_tile_pos(ImVec2 pos)
Definition canvas.h:328
void SetZoomToFit(const gfx::Bitmap &bitmap)
Definition canvas.cc:615
bool WasClicked(ImGuiMouseButton button=ImGuiMouseButton_Left) const
Definition canvas.cc:311
ImVector< ImVector< std::string > > labels_
Definition canvas.h:440
void set_draggable(bool draggable)
Definition canvas.h:300
void SetContextMenuEnabled(bool enabled)
Definition canvas.h:177
gfx::BppFormat GetCurrentBppFormat() const
Definition canvas.cc:1837
auto canvas_id() const
Definition canvas.h:336
void ClosePersistentPopup(const std::string &popup_id)
Definition canvas.cc:605
void ShowBppFormatSelector()
Definition canvas.cc:1768
CanvasMenuDefinition & editor_menu()
Definition canvas.h:175
void RecordCanvasOperation(const std::string &operation_name, double time_ms)
Definition canvas.cc:197
void RenderPersistentPopups()
Definition canvas.cc:610
void set_global_scale(float scale)
Definition canvas.h:299
ImVec2 GetSelectedTilePos() const
Definition canvas.h:305
void SetGridSize(CanvasGridSize grid_size)
Definition canvas.h:82
bool IsAutoResize() const
Definition canvas.h:240
std::shared_ptr< CanvasUsageTracker > usage_tracker_
Definition canvas.h:167
void End()
End canvas rendering (ImGui-style)
Definition canvas.cc:335
float GetGlobalScale() const
Definition canvas.h:313
void SetSelectedTilePos(ImVec2 pos)
Definition canvas.h:306
std::unique_ptr< gui::BppConversionDialog > bpp_conversion_dialog_
Definition canvas.h:161
void DrawSelectRect(int current_map, int tile_size=0x10, float scale=1.0f)
Definition canvas.cc:890
auto zero_point() const
Definition canvas.h:294
CanvasConfig & GetConfig()
Definition canvas.h:197
bool IsMouseHovering() const
Definition canvas.h:285
const std::vector< ImVec2 > & GetSelectedTiles() const
Definition canvas.h:304
std::unique_ptr< CanvasContextMenu > context_menu_
Definition canvas.h:166
bool refresh_graphics_
Definition canvas.h:408
auto usage_mode() const
Definition canvas.h:218
ImVec2 GetLastClickPosition() const
Definition canvas.cc:320
CanvasSelection & GetSelection()
Definition canvas.h:199
void ShowPaletteEditor()
Definition canvas.cc:243
float global_scale_
Definition canvas.h:452
void DrawOutline(int x, int y, int w, int h)
Definition canvas.cc:1060
std::unique_ptr< PaletteEditorWidget > palette_editor_
Definition canvas.h:398
float custom_step_
Definition canvas.h:451
void SetClampRectToLocalMaps(bool clamp)
Definition canvas.h:319
bool context_menu_enabled_
Definition canvas.h:412
void DrawInfoGrid(float grid_step=64.0f, int tile_id_offset=8, int label_id=0)
Definition canvas.cc:1262
CanvasSelection selection_
Definition canvas.h:397
bool enable_hex_tile_labels_
Definition canvas.h:454
ImVec2 canvas_p0_
Definition canvas.h:432
auto scrolling() const
Definition canvas.h:295
void OpenPersistentPopup(const std::string &popup_id, std::function< void()> render_callback)
Definition canvas.cc:599
void DrawBitmapTable(const BitmapTable &gfx_bin)
Definition canvas.cc:1047
std::string context_id_
Definition canvas.h:444
void DrawBackground(ImVec2 canvas_size=ImVec2(0, 0))
Definition canvas.cc:372
ImVec2 canvas_sz_
Definition canvas.h:431
void InitializeDefaults()
Definition canvas.cc:110
void EndTableCanvas()
Definition canvas.cc:302
const ImVector< ImVec2 > & points() const
Definition canvas.h:290
std::unique_ptr< CanvasAutomationAPI > automation_api_
Definition canvas.h:404
std::shared_ptr< CanvasPerformanceIntegration > performance_integration_
Definition canvas.h:168
void SetAutoResize(bool auto_resize)
Definition canvas.h:239
void SetGlobalScale(float scale)
Definition canvas.h:314
void DrawGrid(float grid_step=64.0f, int tile_id_offset=8)
Definition canvas.cc:1304
void DrawContextMenuItem(const gui::CanvasMenuItem &item)
Definition canvas.cc:563
void DrawText(const std::string &text, int x, int y)
Definition canvas.cc:1252
ImVec2 drawn_tile_pos_
Definition canvas.h:434
bool * GetCustomLabelsEnabled()
Definition canvas.h:315
auto selected_points() const
Definition canvas.h:384
std::vector< ImVec2 > selected_tiles_
Definition canvas.h:447
bool ApplyROMPalette(int group_index, int palette_index)
Definition canvas.cc:257
void ShowColorAnalysis()
Definition canvas.cc:251
auto set_highlight_tile_id(int i)
Definition canvas.h:380
Registry for managing persistent popups.
RAII wrapper for Canvas (ImGui-style)
Definition canvas.h:503
ScopedCanvas(const std::string &id, ImVec2 canvas_size=ImVec2(0, 0))
Construct and begin a new canvas (legacy constructor without renderer)
Definition canvas.h:508
~ScopedCanvas()
Destructor automatically calls End()
Definition canvas.h:532
ScopedCanvas(ScopedCanvas &&other) noexcept
Definition canvas.h:545
const Canvas * get() const
Definition canvas.h:567
Canvas & operator*()
Dereference operator for direct access: (*scoped).DrawBitmap(...)
Definition canvas.h:560
ScopedCanvas(gfx::IRenderer *renderer, const std::string &id, ImVec2 canvas_size=ImVec2(0, 0))
Construct and begin a new canvas (with optional renderer)
Definition canvas.h:516
ScopedCanvas(const ScopedCanvas &)=delete
Canvas * operator->()
Arrow operator for clean syntax: scoped->DrawBitmap(...)
Definition canvas.h:554
const Canvas * operator->() const
Definition canvas.h:555
Canvas * get()
Get underlying canvas.
Definition canvas.h:566
ScopedCanvas(Canvas &canvas)
Wrap existing canvas with RAII.
Definition canvas.h:524
ScopedCanvas & operator=(const ScopedCanvas &)=delete
const Canvas & operator*() const
Definition canvas.h:561
BppFormat
BPP format enumeration for SNES graphics.
std::unordered_map< int, gfx::Bitmap > BitmapTable
Definition bitmap.h:365
void BitmapCanvasPipeline(gui::Canvas &canvas, gfx::Bitmap &bitmap, int width, int height, int tile_size, bool is_loaded, bool scrollbar, int canvas_id)
Definition canvas.cc:1451
CanvasUsage
Canvas usage patterns and tracking.
void EndCanvas(Canvas &canvas)
Definition canvas.cc:1412
void BeginCanvas(Canvas &canvas, ImVec2 child_size)
Definition canvas.cc:1391
void GraphicsBinCanvasPipeline(int width, int height, int tile_size, int num_sheets_to_load, int canvas_id, bool is_loaded, gfx::BitmapTable &graphics_bin)
Definition canvas.cc:1418
CanvasGridSize
Definition canvas.h:46
void TableCanvasPipeline(gui::Canvas &canvas, gfx::Bitmap &bitmap, const std::string &label, bool auto_resize)
Definition canvas.cc:1479
Main namespace for the application.
Definition controller.cc:20
Tilemap structure for SNES tile-based graphics management.
Definition tilemap.h:109
Unified configuration for canvas display and interaction.
Complete menu definition.
Declarative menu item definition.
Definition canvas_menu.h:63
Selection state for canvas interactions.
Complete canvas state snapshot.