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>
5
6namespace yaze {
7namespace gui {
8
10 const CanvasConfig& config,
11 ImVec2 requested_size,
12 ImVec2 cursor_screen_pos,
13 ImVec2 content_region_avail) {
14
15 CanvasGeometry geometry;
16
17 // Set canvas top-left position (screen space)
18 geometry.canvas_p0 = cursor_screen_pos;
19
20 // Calculate canvas size using existing utility function
21 ImVec2 canvas_sz = CanvasUtils::CalculateCanvasSize(
22 content_region_avail, config.canvas_size, config.custom_canvas_size);
23
24 // Override with explicit size if provided
25 if (requested_size.x != 0) {
26 canvas_sz = requested_size;
27 }
28
29 geometry.canvas_sz = canvas_sz;
30
31 // Calculate scaled canvas bounds
33 canvas_sz, config.global_scale);
34
35 // CRITICAL: Ensure minimum size to prevent ImGui assertions
36 if (geometry.scaled_size.x <= 0.0f) {
37 geometry.scaled_size.x = 1.0f;
38 }
39 if (geometry.scaled_size.y <= 0.0f) {
40 geometry.scaled_size.y = 1.0f;
41 }
42
43 // Calculate bottom-right position
44 geometry.canvas_p1 = ImVec2(
45 geometry.canvas_p0.x + geometry.scaled_size.x,
46 geometry.canvas_p0.y + geometry.scaled_size.y);
47
48 // Copy scroll offset from config (will be updated by interaction)
49 geometry.scrolling = config.scrolling;
50
51 return geometry;
52}
53
55 const CanvasGeometry& geometry,
56 ImVec2 mouse_screen_pos) {
57
58 // Calculate origin (locked scrolled origin as used throughout canvas.cc)
59 ImVec2 origin = GetCanvasOrigin(geometry);
60
61 // Convert screen space to canvas space
62 return ImVec2(
63 mouse_screen_pos.x - origin.x,
64 mouse_screen_pos.y - origin.y);
65}
66
68 const CanvasGeometry& geometry,
69 ImVec2 point) {
70
71 return point.x >= geometry.canvas_p0.x &&
72 point.x <= geometry.canvas_p1.x &&
73 point.y >= geometry.canvas_p0.y &&
74 point.y <= geometry.canvas_p1.y;
75}
76
77void ApplyScrollDelta(CanvasGeometry& geometry, ImVec2 delta) {
78 geometry.scrolling.x += delta.x;
79 geometry.scrolling.y += delta.y;
80}
81
82} // namespace gui
83} // namespace yaze
84
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)
Main namespace for the application.
Definition controller.cc:20
Unified configuration for canvas display and interaction.
Canvas geometry calculated per-frame.