Olympe Engine 2.0
2D Game Engine with ECS Architecture
Loading...
Searching...
No Matches
ImNodesCanvasEditor.cpp
Go to the documentation of this file.
1/**
2 * @file ImNodesCanvasEditor.cpp
3 * @brief Implementation of ImNodesCanvasEditor adapter
4 * @details Wraps imnodes with standardized ICanvasEditor interface
5 */
6
8
9namespace Olympe
10{
12 const char* name,
14 ImVec2 canvasSize,
16 )
17 : m_name(name)
18 , m_canvasScreenPos(canvasScreenPos)
19 , m_canvasSize(canvasSize)
20 , m_imnodesContext(imnodesContext)
21 , m_gridVisible(true)
22 {
23 }
24
25 // ========================================================================
26 // Lifecycle Management
27 // ========================================================================
28
30 {
31 // Switch to this canvas's imnodes context
33 {
34 ImNodes::EditorContextSet(m_imnodesContext);
35 }
36
37 // Start imnodes rendering cycle
38 ImNodes::BeginNodeEditor();
39 }
40
42 {
43 // End imnodes rendering cycle
44 ImNodes::EndNodeEditor();
45
46 // Note: Grid rendering is called separately via RenderGrid()
47 // This happens before EndNodeEditor in the render loop
48 }
49
50 // ========================================================================
51 // Coordinate Transformation Systems
52 // ========================================================================
53
55 {
56 ImVec2 pan = GetPan();
58 ImVec2 result = ImVec2(canvasPos.x - pan.x, canvasPos.y - pan.y);
59 return result;
60 }
61
63 {
64 ImVec2 pan = GetPan();
65 ImVec2 result = ImVec2(canvasPos.x + pan.x + m_canvasScreenPos.x, canvasPos.y + pan.y + m_canvasScreenPos.y);
66 return result;
67 }
68
70 {
71 // Grid space = editor space - pan offset
72 ImVec2 pan = GetPan();
73 return ImVec2(editorPos.x - pan.x, editorPos.y - pan.y);
74 }
75
77 {
78 // Editor space = grid space + pan offset
79 ImVec2 pan = GetPan();
80 return ImVec2(gridPos.x + pan.x, gridPos.y + pan.y);
81 }
82
83 // ========================================================================
84 // Pan Management
85 // ========================================================================
86
88 {
89 return ImNodes::EditorContextGetPanning();
90 }
91
93 {
94 ImNodes::EditorContextResetPanning(offset);
95 }
96
98 {
99 ImVec2 newPan = ImVec2(GetPan().x + delta.x, GetPan().y + delta.y);
100 SetPan(newPan);
101 }
102
104 {
105 SetPan(ImVec2(0.0f, 0.0f));
106 }
107
108 // ========================================================================
109 // Grid Management
110 // ========================================================================
111
113 {
114 // Get the VisualScript style preset
117
118 // Apply canvas-specific parameters
119 config.canvasPos = m_canvasScreenPos;
120 config.canvasSize = m_canvasSize;
121 config.zoom = 1.0f; // imnodes always 1.0x
122 config.offsetX = GetPan().x;
123 config.offsetY = GetPan().y;
124
125 return config;
126 }
127
129 {
130 if (!m_gridVisible)
131 return;
132
135
136 config.canvasPos = m_canvasScreenPos;
137 config.canvasSize = m_canvasSize;
138 config.zoom = 1.0f; // imnodes always 1.0x
139 config.offsetX = GetPan().x;
140 config.offsetY = GetPan().y;
141
143 }
144
146 {
147 m_gridVisible = enabled;
148 }
149
150 // ========================================================================
151 // Canvas Properties
152 // ========================================================================
153
155 {
156 // Canvas visible area in screen space
159
160 // Convert to canvas space
163 }
164
172
173 // ========================================================================
174 // Context Information
175 // ========================================================================
176
178 {
179 return ImNodes::IsEditorHovered();
180 }
181
182 // ========================================================================
183 // Minimap Management
184 // ========================================================================
185
187 {
188 if (!m_minimapVisible)
189 return;
190
191 // Render minimap overlay using ImNodes API
192 // Note: ImNodes::MiniMap must be called before ImNodes::EndNodeEditor()
193 ImNodes::MiniMap(m_minimapSize, static_cast<ImNodesMiniMapLocation>(m_minimapPosition));
194 }
195
197 {
198 m_minimapVisible = enabled;
199 }
200
202 {
203 // Clamp to reasonable range
204 m_minimapSize = scale < 0.05f ? 0.05f : (scale > 0.5f ? 0.5f : scale);
205 }
206
208 {
209 m_minimapPosition = position;
210 }
211
212} // namespace Olympe
ComponentTypeID GetComponentTypeID_Static()
Definition ECS_Entity.h:56
ICanvasEditor adapter for ImNodes-based editors (VisualScript)
static GridConfig GetStylePreset(GridStylePreset preset)
Get pre-configured grid style (VisualScript/Compact/Spacious)
static void RenderGrid(ImDrawList *drawList, const GridConfig &config)
Render a grid on the given ImDrawList.
GridStylePreset
Pre-configured grid styles matching professional editors.
virtual void SetMinimapVisible(bool enabled) override
Enable/disable minimap rendering.
virtual void ResetPan() override
Reset pan to origin.
virtual void SetMinimapPosition(int position) override
Set minimap position.
virtual bool IsPointInCanvas(const ImVec2 &screenPos) const override
Check if point is in canvas.
virtual ImVec2 GetPan() const override
Get current pan offset.
virtual CanvasGridRenderer::GridConfig GetGridConfig() const override
Get current grid configuration.
ImNodesCanvasEditor(const char *name, ImVec2 canvasScreenPos, ImVec2 canvasSize, ImNodesEditorContext *imnodesContext=nullptr)
Construct imnodes-based canvas editor.
virtual void PanBy(const ImVec2 &delta) override
Pan by delta.
virtual void SetGridVisible(bool enabled) override
Set grid visibility.
virtual void EndRender() override
End rendering cycle (calls ImNodes::EndNodeEditor)
virtual void RenderGrid(CanvasGridRenderer::GridStylePreset preset) override
Render grid.
virtual void BeginRender() override
Begin rendering cycle (calls ImNodes::BeginNodeEditor)
virtual void SetMinimapSize(float scale) override
Set minimap size scale.
virtual void GetCanvasVisibleBounds(ImVec2 &outMin, ImVec2 &outMax) const override
Get canvas visible bounds in canvas space.
virtual ImVec2 CanvasToScreen(const ImVec2 &canvasPos) const override
Transform canvas space to screen space.
virtual ImVec2 GridToEditor(const ImVec2 &gridPos) const override
Transform grid space to editor space (adds pan)
virtual void RenderMinimap() override
Render minimap overlay.
virtual ImVec2 EditorToGrid(const ImVec2 &editorPos) const override
Transform editor space to grid space (removes pan)
ImNodesEditorContext * m_imnodesContext
virtual bool IsCanvasHovered() const override
Check if canvas is hovered.
virtual ImVec2 ScreenToCanvas(const ImVec2 &screenPos) const override
Transform screen space to canvas space.
virtual void SetPan(const ImVec2 &offset) override
Set pan offset.
< Provides AssetID and INVALID_ASSET_ID
Configuration parameters for grid rendering.