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
4#include "app/gfx/tilemap.h"
5#define IMGUI_DEFINE_MATH_OPERATORS
6
7#include <cstdint>
8#include <string>
9#include <functional>
10#include <memory>
11
12#include "app/gfx/bitmap.h"
13#include "app/rom.h"
14#include "canvas/canvas_utils.h"
23#include "imgui/imgui.h"
24
25namespace yaze {
26
31namespace gui {
32
33// Forward declaration (full include would cause circular dependency)
34class CanvasAutomationAPI;
35
36using gfx::Bitmap;
38
39enum class CanvasType { kTile, kBlock, kMap };
40enum class CanvasMode { kPaint, kSelect };
42
54class Canvas {
55 public:
56 // Default constructor
57 Canvas();
59
60 // Legacy constructors (renderer is optional for backward compatibility)
61 explicit Canvas(const std::string& id);
62 explicit Canvas(const std::string& id, ImVec2 canvas_size);
63 explicit Canvas(const std::string& id, ImVec2 canvas_size, CanvasGridSize grid_size);
64 explicit Canvas(const std::string& id, ImVec2 canvas_size, CanvasGridSize grid_size, float global_scale);
65
66 // New constructors with renderer support (for migration to IRenderer pattern)
68 explicit Canvas(gfx::IRenderer* renderer, const std::string& id);
69 explicit Canvas(gfx::IRenderer* renderer, const std::string& id, ImVec2 canvas_size);
70 explicit Canvas(gfx::IRenderer* renderer, const std::string& id, ImVec2 canvas_size, CanvasGridSize grid_size);
71 explicit Canvas(gfx::IRenderer* renderer, const std::string& id, ImVec2 canvas_size, CanvasGridSize grid_size, float global_scale);
72
73 // Set renderer after construction (for late initialization)
75 gfx::IRenderer* renderer() const { return renderer_; }
76
78 switch (grid_size) {
80 config_.grid_step = 8.0f;
81 break;
83 config_.grid_step = 16.0f;
84 break;
86 config_.grid_step = 32.0f;
87 break;
89 config_.grid_step = 64.0f;
90 break;
91 }
92 }
93
94 // Legacy compatibility
96
98 if (config_.grid_step == 8.0f) return CanvasGridSize::k8x8;
99 if (config_.grid_step == 16.0f) return CanvasGridSize::k16x16;
100 if (config_.grid_step == 32.0f) return CanvasGridSize::k32x32;
101 if (config_.grid_step == 64.0f) return CanvasGridSize::k64x64;
102 return CanvasGridSize::k16x16; // Default
103 }
104
105 void UpdateColorPainter(gfx::IRenderer* renderer, gfx::Bitmap &bitmap, const ImVec4 &color,
106 const std::function<void()> &event, int tile_size,
107 float scale = 1.0f);
108
109 void UpdateInfoGrid(ImVec2 bg_size, float grid_size = 64.0f,
110 int label_id = 0);
111
112 // ==================== Modern ImGui-Style Interface ====================
113
131 void Begin(ImVec2 canvas_size = ImVec2(0, 0));
132
139 void End();
140
141 // ==================== Legacy Interface (Backward Compatible) ====================
142
143 // Background for the Canvas represents region without any content drawn to
144 // it, but can be controlled by the user.
145 void DrawBackground(ImVec2 canvas_size = ImVec2(0, 0));
146
147 // Context Menu refers to what happens when the right mouse button is pressed
148 // This routine also handles the scrolling for the canvas.
149 void DrawContextMenu();
150
151 // Context menu system for consumers to add their own menu elements
153 std::string label;
154 std::string shortcut;
155 std::function<void()> callback;
156 std::function<bool()> enabled_condition = []() { return true; };
157 std::vector<ContextMenuItem> subitems;
158
159 // Helper constructor for simple items
160 ContextMenuItem() = default;
161 ContextMenuItem(const std::string& lbl, std::function<void()> cb,
162 const std::string& sc = "")
163 : label(lbl), shortcut(sc), callback(std::move(cb)) {}
164
165 // Helper to create disabled item
166 static ContextMenuItem Disabled(const std::string& lbl) {
167 ContextMenuItem item;
168 item.label = lbl;
169 item.enabled_condition = []() { return false; };
170 return item;
171 }
172
173 // Helper to create conditional item
174 static ContextMenuItem Conditional(const std::string& lbl, std::function<void()> cb,
175 std::function<bool()> condition) {
176 ContextMenuItem item;
177 item.label = lbl;
178 item.callback = std::move(cb);
179 item.enabled_condition = std::move(condition);
180 return item;
181 }
182 };
183
184 // BPP format UI components
185 std::unique_ptr<gui::BppFormatUI> bpp_format_ui_;
186 std::unique_ptr<gui::BppConversionDialog> bpp_conversion_dialog_;
187 std::unique_ptr<gui::BppComparisonTool> bpp_comparison_tool_;
188
189 // Enhanced canvas components
190 std::unique_ptr<canvas::CanvasModals> modals_;
191 std::unique_ptr<canvas::CanvasContextMenu> context_menu_;
192 std::shared_ptr<canvas::CanvasUsageTracker> usage_tracker_;
193 std::shared_ptr<canvas::CanvasPerformanceIntegration> performance_integration_;
195
196 void AddContextMenuItem(const ContextMenuItem& item);
198 void SetContextMenuEnabled(bool enabled) { context_menu_enabled_ = enabled; }
199
200 // Persistent popup management for context menu actions
201 void OpenPersistentPopup(const std::string& popup_id, std::function<void()> render_callback);
202 void ClosePersistentPopup(const std::string& popup_id);
204
205 // Enhanced view and edit operations
207 void ShowScalingControls();
208 void SetZoomToFit(const gfx::Bitmap& bitmap);
209 void ResetView();
210 void ApplyConfigSnapshot(const canvas::CanvasConfig& snapshot);
211 void ApplyScaleSnapshot(const canvas::CanvasConfig& snapshot);
212
213 // Modular component access
215 const CanvasConfig& GetConfig() const { return config_; }
217 const CanvasSelection& GetSelection() const { return selection_; }
218
219 // Enhanced palette management
221 void ShowPaletteEditor();
222 void ShowColorAnalysis();
223 bool ApplyROMPalette(int group_index, int palette_index);
224
225 // BPP format management
227 void ShowBppAnalysis();
229 bool ConvertBitmapFormat(gfx::BppFormat target_format);
231
232 // Enhanced canvas management
236 void RecordCanvasOperation(const std::string& operation_name, double time_ms);
237 void ShowPerformanceUI();
238 void ShowUsageReport();
239
240 // Interaction handler access
243
244 // Automation API access (Phase 4A)
246
247 // Initialization and cleanup
248 void InitializeDefaults();
249 void Cleanup();
250
251 // Size reporting for ImGui table integration
252 ImVec2 GetMinimumSize() const;
253 ImVec2 GetPreferredSize() const;
254 ImVec2 GetCurrentSize() const { return config_.canvas_size; }
255 void SetAutoResize(bool auto_resize) { config_.auto_resize = auto_resize; }
256 bool IsAutoResize() const { return config_.auto_resize; }
257
258 // Table integration helpers
259 void ReserveTableSpace(const std::string& label = "");
260 bool BeginTableCanvas(const std::string& label = "");
261 void EndTableCanvas();
262
263 // Improved interaction detection
264 bool HasValidSelection() const;
265 bool WasClicked(ImGuiMouseButton button = ImGuiMouseButton_Left) const;
266 bool WasDoubleClicked(ImGuiMouseButton button = ImGuiMouseButton_Left) const;
267 ImVec2 GetLastClickPosition() const;
268
269 // Tile painter methods
270 bool DrawTilePainter(const Bitmap &bitmap, int size, float scale = 1.0f);
271 bool DrawSolidTilePainter(const ImVec4 &color, int size);
272 void DrawTileOnBitmap(int tile_size, gfx::Bitmap *bitmap, ImVec4 color);
273
274 void DrawOutline(int x, int y, int w, int h);
275 void DrawOutlineWithColor(int x, int y, int w, int h, ImVec4 color);
276 void DrawOutlineWithColor(int x, int y, int w, int h, uint32_t color);
277
278 void DrawRect(int x, int y, int w, int h, ImVec4 color);
279
280 void DrawText(const std::string& text, int x, int y);
281 void DrawGridLines(float grid_step);
282
283 void DrawInfoGrid(float grid_step = 64.0f, int tile_id_offset = 8,
284 int label_id = 0);
285
286 void DrawLayeredElements();
287
289 float x = mouse_pos_in_canvas_.x;
290 float y = mouse_pos_in_canvas_.y;
291 int num_columns = (canvas_sz_.x / global_scale_) / custom_step_;
292 int num_rows = (canvas_sz_.y / global_scale_) / custom_step_;
293 int tile_id = (x / custom_step_) + (y / custom_step_) * num_columns;
294 tile_id = tile_id / global_scale_;
295 if (tile_id >= num_columns * num_rows) {
296 tile_id = -1; // Invalid tile ID
297 }
298 return tile_id;
299 }
300 void DrawCustomHighlight(float grid_step);
301 bool IsMouseHovering() const { return is_hovered_; }
302 void ZoomIn() { global_scale_ += 0.25f; }
303 void ZoomOut() { global_scale_ -= 0.25f; }
304
305 // Points accessors - points_ is maintained separately for custom overlay drawing
306 const ImVector<ImVec2>& points() const { return points_; }
307 ImVector<ImVec2>* mutable_points() { return &points_; }
308 auto push_back(ImVec2 pos) { points_.push_back(pos); }
309 auto draw_list() const { return draw_list_; }
310 auto zero_point() const { return canvas_p0_; }
311 auto scrolling() const { return scrolling_; }
312 void set_scrolling(ImVec2 scroll) { scrolling_ = scroll; }
313 auto drawn_tile_position() const { return drawn_tile_pos_; }
314 auto canvas_size() const { return canvas_sz_; }
315 void set_global_scale(float scale) { global_scale_ = scale; }
316 void set_draggable(bool draggable) { draggable_ = draggable; }
317
318 // Modern accessors using modular structure
320 const std::vector<ImVec2>& GetSelectedTiles() const { return selected_tiles_; }
321 ImVec2 GetSelectedTilePos() const { return selected_tile_pos_; }
322 void SetSelectedTilePos(ImVec2 pos) { selected_tile_pos_ = pos; }
323
324 // Configuration accessors
329 float GetGlobalScale() const { return config_.global_scale; }
330 void SetGlobalScale(float scale) { config_.global_scale = scale; }
332 float GetGridStep() const { return config_.grid_step; }
333
334 // Rectangle selection boundary control (prevents wrapping in large maps)
337 float GetCanvasWidth() const { return config_.canvas_size.x; }
338 float GetCanvasHeight() const { return config_.canvas_size.y; }
339
340 // Legacy compatibility accessors
342 auto selected_tiles() const { return selected_tiles_; }
343 auto selected_tile_pos() const { return selected_tile_pos_; }
344 void set_selected_tile_pos(ImVec2 pos) { selected_tile_pos_ = pos; }
345 auto global_scale() const { return config_.global_scale; }
347 auto custom_step() const { return config_.grid_step; }
348 auto width() const { return config_.canvas_size.x; }
349 auto height() const { return config_.canvas_size.y; }
350
351 // Public accessors for methods that need to be accessed externally
352 auto canvas_id() const { return canvas_id_; }
353
354 // Public methods for drawing operations
355 void DrawBitmap(Bitmap &bitmap, int border_offset, float scale);
356 void DrawBitmap(Bitmap &bitmap, int x_offset, int y_offset, float scale = 1.0f, int alpha = 255);
357 void DrawBitmap(Bitmap &bitmap, ImVec2 dest_pos, ImVec2 dest_size, ImVec2 src_pos, ImVec2 src_size);
358 void DrawBitmapTable(const BitmapTable &gfx_bin);
368 void DrawBitmapGroup(std::vector<int> &group, gfx::Tilemap &tilemap,
369 int tile_size, float scale = 1.0f,
370 int local_map_size = 0x200,
371 ImVec2 total_map_size = ImVec2(0x1000, 0x1000));
372 bool DrawTilemapPainter(gfx::Tilemap &tilemap, int current_tile);
373 void DrawSelectRect(int current_map, int tile_size = 0x10, float scale = 1.0f);
374 bool DrawTileSelector(int size, int size_y = 0);
375 void DrawGrid(float grid_step = 64.0f, int tile_id_offset = 8);
376 void DrawOverlay();
377 auto labels(int i) {
378 if (i >= labels_.size()) {
379 labels_.push_back(ImVector<std::string>());
380 }
381 return labels_[i];
382 }
383 auto mutable_labels(int i) {
384 if (i >= labels_.size()) {
385 int x = i;
386 while (x >= labels_.size()) {
387 labels_.push_back(ImVector<std::string>());
388 x--;
389 }
390 labels_.push_back(ImVector<std::string>());
391 }
392 return &labels_[i];
393 }
394
397
400 auto selected_points() const { return selected_points_; }
401
402 auto hover_mouse_pos() const { return mouse_pos_in_canvas_; }
403
404 void set_rom(Rom *rom) { rom_ = rom; }
405 Rom *rom() const { return rom_; }
406
407 private:
408 void DrawContextMenuItem(const ContextMenuItem& item);
409
410 // Modular configuration and state
414 std::unique_ptr<PaletteWidget> palette_editor_;
415
416 // Automation API (lazy-initialized on first access)
417 std::unique_ptr<CanvasAutomationAPI> automation_api_;
418
419 // Core canvas state
420 bool is_hovered_ = false;
421 bool refresh_graphics_ = false;
422
423 // Context menu system
424 std::vector<ContextMenuItem> context_menu_items_;
426
427 // Persistent popup state for context menu actions
428 struct PopupState {
429 std::string popup_id;
430 bool is_open = false;
431 std::function<void()> render_callback;
432 };
433 std::vector<PopupState> active_popups_;
434
435 // Legacy members (to be gradually replaced)
441
442 // Core canvas state
443 Bitmap *bitmap_ = nullptr;
444 Rom *rom_ = nullptr;
445 ImDrawList *draw_list_ = nullptr;
446
447 // Canvas geometry and interaction state
454
455 // Drawing and labeling
456 // NOTE: points_ synchronized from interaction_handler_ for backward compatibility
457 ImVector<ImVec2> points_;
458 ImVector<ImVector<std::string>> labels_;
459
460 // Identification
461 std::string canvas_id_ = "Canvas";
462 std::string context_id_ = "CanvasContext";
463
464 // Legacy compatibility (gradually being replaced by selection_)
465 std::vector<ImVec2> selected_tiles_;
466 ImVector<ImVec2> selected_points_;
467 ImVec2 selected_tile_pos_ = ImVec2(-1, -1);
469 float custom_step_ = 32.0f;
470 float global_scale_ = 1.0f;
471 bool enable_grid_ = true;
476 bool draggable_ = false;
477};
478
479void BeginCanvas(Canvas &canvas, ImVec2 child_size = ImVec2(0, 0));
480void EndCanvas(Canvas &canvas);
481
482void GraphicsBinCanvasPipeline(int width, int height, int tile_size,
483 int num_sheets_to_load, int canvas_id,
484 bool is_loaded, BitmapTable &graphics_bin);
485
486void BitmapCanvasPipeline(gui::Canvas &canvas, gfx::Bitmap &bitmap, int width,
487 int height, int tile_size, bool is_loaded,
488 bool scrollbar, int canvas_id);
489
490// Table-optimized canvas pipeline with automatic sizing
491void TableCanvasPipeline(gui::Canvas &canvas, gfx::Bitmap &bitmap,
492 const std::string& label = "", bool auto_resize = true);
493
522 public:
526 explicit ScopedCanvas(const std::string& id, ImVec2 canvas_size = ImVec2(0, 0))
527 : canvas_(new Canvas(id, canvas_size)), owned_(true), active_(true) {
528 canvas_->Begin();
529 }
530
534 explicit ScopedCanvas(gfx::IRenderer* renderer, const std::string& id, ImVec2 canvas_size = ImVec2(0, 0))
535 : canvas_(new Canvas(renderer, id, canvas_size)), owned_(true), active_(true) {
536 canvas_->Begin();
537 }
538
542 explicit ScopedCanvas(Canvas& canvas)
543 : canvas_(&canvas), owned_(false), active_(true) {
544 canvas_->Begin();
545 }
546
551 if (active_ && canvas_) {
552 canvas_->End();
553 }
554 if (owned_) {
555 delete canvas_;
556 }
557 }
558
559 // No copy, move only
560 ScopedCanvas(const ScopedCanvas&) = delete;
562
563 ScopedCanvas(ScopedCanvas&& other) noexcept
564 : canvas_(other.canvas_), owned_(other.owned_), active_(other.active_) {
565 other.active_ = false;
566 other.canvas_ = nullptr;
567 }
568
572 Canvas* operator->() { return canvas_; }
573 const Canvas* operator->() const { return canvas_; }
574
578 Canvas& operator*() { return *canvas_; }
579 const Canvas& operator*() const { return *canvas_; }
580
584 Canvas* get() { return canvas_; }
585 const Canvas* get() const { return canvas_; }
586
587 private:
589 bool owned_;
591};
592
593} // namespace gui
594} // namespace yaze
595
596#endif
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:71
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.
Modern, robust canvas for drawing and manipulating graphics.
Definition canvas.h:54
ImVec2 scrolling_
Definition canvas.h:448
void set_scrolling(ImVec2 scroll)
Definition canvas.h:312
auto selected_tile_pos() const
Definition canvas.h:343
ImVector< ImVec2 > points_
Definition canvas.h:457
int highlight_tile_id
Definition canvas.h:437
void DrawBitmap(Bitmap &bitmap, int border_offset, float scale)
Definition canvas.cc:1062
Rom * rom() const
Definition canvas.h:405
std::string canvas_id_
Definition canvas.h:461
auto labels(int i)
Definition canvas.h:377
float GetCanvasWidth() const
Definition canvas.h:337
auto height() const
Definition canvas.h:349
auto custom_step() const
Definition canvas.h:347
void set_rom(Rom *rom)
Definition canvas.h:404
void ShowScalingControls()
Definition canvas.cc:1709
auto set_current_labels(int i)
Definition canvas.h:395
bool WasDoubleClicked(ImGuiMouseButton button=ImGuiMouseButton_Left) const
Definition canvas.cc:324
CanvasConfig config_
Definition canvas.h:412
ImVec2 selected_tile_pos_
Definition canvas.h:467
auto global_scale() const
Definition canvas.h:345
gfx::IRenderer * renderer_
Definition canvas.h:411
ImVec2 canvas_p1_
Definition canvas.h:451
void ShowBppAnalysis()
Definition canvas.cc:1857
gfx::IRenderer * renderer() const
Definition canvas.h:75
void DrawOutlineWithColor(int x, int y, int w, int h, ImVec4 color)
Definition canvas.cc:1147
auto select_rect_active() const
Definition canvas.h:341
uint64_t edit_palette_group_name_index_
Definition canvas.h:439
auto selected_tiles() const
Definition canvas.h:342
std::unique_ptr< gui::BppComparisonTool > bpp_comparison_tool_
Definition canvas.h:187
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:1157
bool BeginTableCanvas(const std::string &label="")
Definition canvas.cc:289
void InitializeEnhancedComponents()
Definition canvas.cc:164
void ShowBppConversionDialog()
Definition canvas.cc:1868
CanvasAutomationAPI * GetAutomationAPI()
Definition canvas.cc:1922
std::vector< ContextMenuItem > context_menu_items_
Definition canvas.h:424
bool GetClampRectToLocalMaps() const
Definition canvas.h:336
auto hover_mouse_pos() const
Definition canvas.h:402
void ShowAdvancedCanvasProperties()
Definition canvas.cc:1586
ImVector< ImVec2 > * mutable_points()
Definition canvas.h:307
void UpdateInfoGrid(ImVec2 bg_size, float grid_size=64.0f, int label_id=0)
Definition canvas.cc:373
std::unique_ptr< gui::BppFormatUI > bpp_format_ui_
Definition canvas.h:185
void DrawContextMenu()
Definition canvas.cc:441
auto push_back(ImVec2 pos)
Definition canvas.h:308
canvas::CanvasUsage GetUsageMode() const
Definition canvas.cc:199
ImVec2 mouse_pos_in_canvas_
Definition canvas.h:453
int GetTileIdFromMousePos()
Definition canvas.h:288
auto drawn_tile_position() const
Definition canvas.h:313
const CanvasSelection & GetSelection() const
Definition canvas.h:217
bool DrawTilemapPainter(gfx::Tilemap &tilemap, int current_tile)
Definition canvas.cc:774
bool DrawSolidTilePainter(const ImVec4 &color, int size)
Definition canvas.cc:845
const canvas::CanvasInteractionHandler & GetInteractionHandler() const
Definition canvas.h:242
bool enable_context_menu_
Definition canvas.h:474
auto draw_list() const
Definition canvas.h:309
auto width() const
Definition canvas.h:348
void DrawLayeredElements()
Definition canvas.cc:1432
float GetCanvasHeight() const
Definition canvas.h:338
const CanvasConfig & GetConfig() const
Definition canvas.h:215
void ReserveTableSpace(const std::string &label="")
Definition canvas.cc:284
bool enable_custom_labels_
Definition canvas.h:473
void ShowUsageReport()
Definition canvas.cc:223
bool IsSelectRectActive() const
Definition canvas.h:319
auto mutable_selected_points()
Definition canvas.h:399
void SetRenderer(gfx::IRenderer *renderer)
Definition canvas.h:74
ImVec2 GetMinimumSize() const
Definition canvas.cc:274
bool DrawTileSelector(int size, int size_y=0)
Definition canvas.cc:920
bool ConvertBitmapFormat(gfx::BppFormat target_format)
Definition canvas.cc:1885
void DrawGridLines(float grid_step)
Definition canvas.cc:1339
void DrawContextMenuItem(const ContextMenuItem &item)
Definition canvas.cc:585
uint64_t edit_palette_sub_index_
Definition canvas.h:440
void ShowPerformanceUI()
Definition canvas.cc:217
bool custom_canvas_size_
Definition canvas.h:475
void ClearContextMenuItems()
Definition canvas.cc:616
void ApplyConfigSnapshot(const canvas::CanvasConfig &snapshot)
Definition canvas.cc:698
void DrawRect(int x, int y, int w, int h, ImVec4 color)
Definition canvas.cc:1329
bool HasValidSelection() const
Definition canvas.cc:316
bool DrawTilePainter(const Bitmap &bitmap, int size, float scale=1.0f)
Definition canvas.cc:728
ImDrawList * draw_list_
Definition canvas.h:445
auto custom_labels_enabled()
Definition canvas.h:346
ImVector< ImVec2 > selected_points_
Definition canvas.h:466
ImVec2 GetCurrentSize() const
Definition canvas.h:254
void SetCanvasSize(ImVec2 canvas_size)
Definition canvas.h:325
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:357
void DrawTileOnBitmap(int tile_size, gfx::Bitmap *bitmap, ImVec4 color)
Definition canvas.cc:899
void DrawCustomHighlight(float grid_step)
Definition canvas.cc:1381
bool select_rect_active_
Definition canvas.h:468
auto mutable_selected_tiles()
Definition canvas.h:398
auto mutable_labels(int i)
Definition canvas.h:383
Bitmap * bitmap_
Definition canvas.h:443
void SetCanvasGridSize(CanvasGridSize grid_size)
Definition canvas.h:95
CanvasGridSize grid_size() const
Definition canvas.h:97
uint16_t edit_palette_index_
Definition canvas.h:438
std::vector< PopupState > active_popups_
Definition canvas.h:433
ImVec2 GetPreferredSize() const
Definition canvas.cc:279
float GetGridStep() const
Definition canvas.h:332
void InitializePaletteEditor(Rom *rom)
Definition canvas.cc:245
void Begin(ImVec2 canvas_size=ImVec2(0, 0))
Begin canvas rendering (ImGui-style)
Definition canvas.cc:338
auto canvas_size() const
Definition canvas.h:314
std::shared_ptr< canvas::CanvasUsageTracker > usage_tracker_
Definition canvas.h:192
void set_selected_tile_pos(ImVec2 pos)
Definition canvas.h:344
void SetZoomToFit(const gfx::Bitmap &bitmap)
Definition canvas.cc:673
bool WasClicked(ImGuiMouseButton button=ImGuiMouseButton_Left) const
Definition canvas.cc:320
ImVector< ImVector< std::string > > labels_
Definition canvas.h:458
void set_draggable(bool draggable)
Definition canvas.h:316
void SetContextMenuEnabled(bool enabled)
Definition canvas.h:198
gfx::BppFormat GetCurrentBppFormat() const
Definition canvas.cc:1913
auto canvas_id() const
Definition canvas.h:352
void ClosePersistentPopup(const std::string &popup_id)
Definition canvas.cc:640
void ShowBppFormatSelector()
Definition canvas.cc:1844
void RecordCanvasOperation(const std::string &operation_name, double time_ms)
Definition canvas.cc:206
void RenderPersistentPopups()
Definition canvas.cc:650
void set_global_scale(float scale)
Definition canvas.h:315
ImVec2 GetSelectedTilePos() const
Definition canvas.h:321
void SetGridSize(CanvasGridSize grid_size)
Definition canvas.h:77
bool IsAutoResize() const
Definition canvas.h:256
void SetUsageMode(canvas::CanvasUsage usage)
Definition canvas.cc:190
void End()
End canvas rendering (ImGui-style)
Definition canvas.cc:344
float GetGlobalScale() const
Definition canvas.h:329
void SetSelectedTilePos(ImVec2 pos)
Definition canvas.h:322
std::unique_ptr< gui::BppConversionDialog > bpp_conversion_dialog_
Definition canvas.h:186
void DrawSelectRect(int current_map, int tile_size=0x10, float scale=1.0f)
Definition canvas.cc:948
auto zero_point() const
Definition canvas.h:310
CanvasConfig & GetConfig()
Definition canvas.h:214
std::unique_ptr< PaletteWidget > palette_editor_
Definition canvas.h:414
bool IsMouseHovering() const
Definition canvas.h:301
const std::vector< ImVec2 > & GetSelectedTiles() const
Definition canvas.h:320
std::unique_ptr< canvas::CanvasContextMenu > context_menu_
Definition canvas.h:191
bool refresh_graphics_
Definition canvas.h:421
ImVec2 GetLastClickPosition() const
Definition canvas.cc:329
CanvasSelection & GetSelection()
Definition canvas.h:216
void ShowPaletteEditor()
Definition canvas.cc:252
std::unique_ptr< canvas::CanvasModals > modals_
Definition canvas.h:190
float global_scale_
Definition canvas.h:470
void DrawOutline(int x, int y, int w, int h)
Definition canvas.cc:1142
float custom_step_
Definition canvas.h:469
void SetClampRectToLocalMaps(bool clamp)
Definition canvas.h:335
bool context_menu_enabled_
Definition canvas.h:425
void DrawInfoGrid(float grid_step=64.0f, int tile_id_offset=8, int label_id=0)
Definition canvas.cc:1344
CanvasSelection selection_
Definition canvas.h:413
bool enable_hex_tile_labels_
Definition canvas.h:472
ImVec2 canvas_p0_
Definition canvas.h:450
auto scrolling() const
Definition canvas.h:311
void OpenPersistentPopup(const std::string &popup_id, std::function< void()> render_callback)
Definition canvas.cc:620
void DrawBitmapTable(const BitmapTable &gfx_bin)
Definition canvas.cc:1129
std::string context_id_
Definition canvas.h:462
void DrawBackground(ImVec2 canvas_size=ImVec2(0, 0))
Definition canvas.cc:381
ImVec2 canvas_sz_
Definition canvas.h:449
void InitializeDefaults()
Definition canvas.cc:110
void EndTableCanvas()
Definition canvas.cc:311
const ImVector< ImVec2 > & points() const
Definition canvas.h:306
std::shared_ptr< canvas::CanvasPerformanceIntegration > performance_integration_
Definition canvas.h:193
std::unique_ptr< CanvasAutomationAPI > automation_api_
Definition canvas.h:417
void SetAutoResize(bool auto_resize)
Definition canvas.h:255
void SetGlobalScale(float scale)
Definition canvas.h:330
void DrawGrid(float grid_step=64.0f, int tile_id_offset=8)
Definition canvas.cc:1386
void DrawText(const std::string &text, int x, int y)
Definition canvas.cc:1334
ImVec2 drawn_tile_pos_
Definition canvas.h:452
canvas::CanvasInteractionHandler interaction_handler_
Definition canvas.h:194
bool * GetCustomLabelsEnabled()
Definition canvas.h:331
canvas::CanvasInteractionHandler & GetInteractionHandler()
Definition canvas.h:241
auto selected_points() const
Definition canvas.h:400
void AddContextMenuItem(const ContextMenuItem &item)
Definition canvas.cc:612
std::vector< ImVec2 > selected_tiles_
Definition canvas.h:465
bool ApplyROMPalette(int group_index, int palette_index)
Definition canvas.cc:266
void ShowColorAnalysis()
Definition canvas.cc:260
auto set_highlight_tile_id(int i)
Definition canvas.h:396
void ApplyScaleSnapshot(const canvas::CanvasConfig &snapshot)
Definition canvas.cc:722
RAII wrapper for Canvas (ImGui-style)
Definition canvas.h:521
ScopedCanvas(const std::string &id, ImVec2 canvas_size=ImVec2(0, 0))
Construct and begin a new canvas (legacy constructor without renderer)
Definition canvas.h:526
~ScopedCanvas()
Destructor automatically calls End()
Definition canvas.h:550
ScopedCanvas(ScopedCanvas &&other) noexcept
Definition canvas.h:563
const Canvas * get() const
Definition canvas.h:585
Canvas & operator*()
Dereference operator for direct access: (*scoped).DrawBitmap(...)
Definition canvas.h:578
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:534
ScopedCanvas(const ScopedCanvas &)=delete
Canvas * operator->()
Arrow operator for clean syntax: scoped->DrawBitmap(...)
Definition canvas.h:572
const Canvas * operator->() const
Definition canvas.h:573
Canvas * get()
Get underlying canvas.
Definition canvas.h:584
ScopedCanvas(Canvas &canvas)
Wrap existing canvas with RAII.
Definition canvas.h:542
ScopedCanvas & operator=(const ScopedCanvas &)=delete
const Canvas & operator*() const
Definition canvas.h:579
Handles all tile-based interactions for Canvas.
BppFormat
BPP format enumeration for SNES graphics.
std::unordered_map< int, gfx::Bitmap > BitmapTable
Definition bitmap.h:333
CanvasUsage
Canvas usage patterns and tracking.
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:1531
void EndCanvas(Canvas &canvas)
Definition canvas.cc:1494
void BeginCanvas(Canvas &canvas, ImVec2 child_size)
Definition canvas.cc:1473
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:1500
CanvasGridSize
Definition canvas.h:41
void TableCanvasPipeline(gui::Canvas &canvas, gfx::Bitmap &bitmap, const std::string &label, bool auto_resize)
Definition canvas.cc:1557
Main namespace for the application.
Tilemap structure for SNES tile-based graphics management.
Definition tilemap.h:109
Configuration for canvas display and interaction.
Selection state for canvas interactions.
std::function< void()> callback
Definition canvas.h:155
ContextMenuItem(const std::string &lbl, std::function< void()> cb, const std::string &sc="")
Definition canvas.h:161
std::vector< ContextMenuItem > subitems
Definition canvas.h:157
static ContextMenuItem Conditional(const std::string &lbl, std::function< void()> cb, std::function< bool()> condition)
Definition canvas.h:174
static ContextMenuItem Disabled(const std::string &lbl)
Definition canvas.h:166
std::function< bool()> enabled_condition
Definition canvas.h:156
std::function< void()> render_callback
Definition canvas.h:431
Canvas configuration options for modals.