yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
canvas_geometry.cc
Go to the documentation of this file.
1#include "canvas_geometry.h"
2
3#include <algorithm>
4
6
7namespace yaze {
8namespace gui {
9
11 ImVec2 requested_size,
12 ImVec2 cursor_screen_pos,
13 ImVec2 content_region_avail) {
14 CanvasGeometry geometry;
15
16 // Set canvas top-left position (screen space)
17 geometry.canvas_p0 = cursor_screen_pos;
18
19 // Calculate canvas size using existing utility function
20 ImVec2 canvas_sz = CanvasUtils::CalculateCanvasSize(
21 content_region_avail, config.canvas_size, config.custom_canvas_size);
22
23 // Override with explicit size if provided
24 if (requested_size.x != 0) {
25 canvas_sz = requested_size;
26 }
27
28 geometry.canvas_sz = canvas_sz;
29
30 // Calculate scaled canvas bounds
31 geometry.scaled_size =
33
34 // CRITICAL: Ensure minimum size to prevent ImGui assertions
35 if (geometry.scaled_size.x <= 0.0f) {
36 geometry.scaled_size.x = 1.0f;
37 }
38 if (geometry.scaled_size.y <= 0.0f) {
39 geometry.scaled_size.y = 1.0f;
40 }
41
42 // Calculate bottom-right position
43 geometry.canvas_p1 = ImVec2(geometry.canvas_p0.x + geometry.scaled_size.x,
44 geometry.canvas_p0.y + geometry.scaled_size.y);
45
46 // Copy scroll offset from config (will be updated by interaction)
47 geometry.scrolling = config.scrolling;
48
49 return geometry;
50}
51
53 ImVec2 mouse_screen_pos) {
54 // Calculate origin (locked scrolled origin as used throughout canvas.cc)
55 ImVec2 origin = GetCanvasOrigin(geometry);
56
57 // Convert screen space to canvas space
58 return ImVec2(mouse_screen_pos.x - origin.x, mouse_screen_pos.y - origin.y);
59}
60
61bool IsPointInCanvasBounds(const CanvasGeometry& geometry, ImVec2 point) {
62 return point.x >= geometry.canvas_p0.x && point.x <= geometry.canvas_p1.x &&
63 point.y >= geometry.canvas_p0.y && point.y <= geometry.canvas_p1.y;
64}
65
66void ApplyScrollDelta(CanvasGeometry& geometry, ImVec2 delta) {
67 geometry.scrolling.x += delta.x;
68 geometry.scrolling.y += delta.y;
69}
70
71} // namespace gui
72} // namespace yaze
ImVec2 CalculateCanvasSize(ImVec2 content_region, ImVec2 custom_size, bool use_custom)
ImVec2 CalculateScaledCanvasSize(ImVec2 canvas_size, float global_scale)
void ApplyScrollDelta(CanvasGeometry &geometry, ImVec2 delta)
Apply scroll delta to geometry.
ImVec2 CalculateMouseInCanvas(const CanvasGeometry &geometry, ImVec2 mouse_screen_pos)
Calculate mouse position in canvas space.
bool IsPointInCanvasBounds(const CanvasGeometry &geometry, ImVec2 point)
Check if a point is within canvas bounds.
CanvasGeometry CalculateCanvasGeometry(const CanvasConfig &config, ImVec2 requested_size, ImVec2 cursor_screen_pos, ImVec2 content_region_avail)
Calculate canvas geometry from configuration and ImGui context.
ImVec2 GetCanvasOrigin(const CanvasGeometry &geometry)
Get origin point (canvas top-left + scroll offset)
Unified configuration for canvas display and interaction.
Canvas geometry calculated per-frame.