11 ImVec2 requested_size,
12 ImVec2 cursor_screen_pos,
13 ImVec2 content_region_avail) {
24 if (requested_size.x != 0) {
25 canvas_sz = requested_size;
53 ImVec2 mouse_screen_pos) {
58 return ImVec2(mouse_screen_pos.x - origin.x, mouse_screen_pos.y - origin.y);
72 float old_scale,
float new_scale,
73 ImVec2 mouse_screen_pos) {
74 if (old_scale <= 0.0f || new_scale <= 0.0f) {
81 const ImVec2 mouse_in_canvas((mouse_screen_pos.x - origin.x) / old_scale,
82 (mouse_screen_pos.y - origin.y) / old_scale);
86 const ImVec2 new_origin(mouse_screen_pos.x - (mouse_in_canvas.x * new_scale),
87 mouse_screen_pos.y - (mouse_in_canvas.y * new_scale));
90 return ImVec2(new_origin.x - geometry.
canvas_p0.x,
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 ComputeScrollForZoomAtScreenPos(const CanvasGeometry &geometry, float old_scale, float new_scale, ImVec2 mouse_screen_pos)
Compute new scroll offset to keep a canvas point locked under the mouse.
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.