Add zoom functionality to node editor#192
Conversation
IMGUI_DEFINE_MATH_OPERATORS now needs to be defined before #include <imgui.h>
…ilding examples, custom imgui linking
Uses second ImGui context for fully functional scaling in node editor
Fixes difference between contexts due to missing config
|
If you are curious you can see how I implemented it viewport_wrapper.h. This is a little helper to render other contexts as widgets. Please note that it's not complete yet, and it will change in the following days. |
|
Yes you've used the same structure code from LumixEngine as I did, there were several input and config bugs from this implementation which I've fixed in this PR |
|
yes yes it's almost identical, the main difference being the BeginChild which in my opinion is pretty handy and makes interactions more predictable and consistent. Tha's why the mention |
|
I think this probably needs an optional flag to enable it given that it makes use of a second ImGui context. Which can cause some ImGui features to behave differently |
|
Thank you for implementing this @Auburn ! 🚀 It's very nice to see the state of the art in ImGui node editors advance, appreciate the pointers @Fattorino 👍
|
|
I tried this fork but the node editor was no longer visible. Any idea why? |
|
It doesn't currently work with multiple node editor instances which I need to look into. I have tested it works in the examples, but I don't know what your setup is like |
| // Nav (tabbing) needs to be disabled otherwise it doubles up with the main context | ||
| // not sure how to get this working correctly | ||
| ImGuiWindowFlags windowFlags = ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoSavedSettings | | ||
| ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_NoMove; |
There was a problem hiding this comment.
Need ImGuiWindowFlags_NoBackground for docking feature
| GImNodes->NodeEditorImgCtx->IO.ConfigInputTrickleEventQueue = false; | ||
| GImNodes->NodeEditorImgCtx->IO.DisplaySize = ImMax(canvas_size / editor.ZoomScale, ImVec2(0, 0)); | ||
| GImNodes->NodeEditorImgCtx->Style = GImNodes->OriginalImgCtx->Style; | ||
|
|
There was a problem hiding this comment.
Scaled(Zoom) context does not need viewport option, nor docking.
So, we have to disable (only if a user enabled these flags).
Otherwise assertion failur in ImGui::ErrorCheckNewFrameSanityChecks()
GImNodes->NodeEditorImgCtx->IO.ConfigFlags -= ImGuiConfigFlags_ViewportsEnable;
GImNodes->NodeEditorImgCtx->IO.ConfigFlags -= ImGuiConfigFlags_DockingEnable;
|
has this not merged yet? |
|
if anything is needed i can help, i have used this repo before |
|
Hi everyone, I'me very keen on this to move forward if anyone has time. Thanks a lot! |
|
Hey @Nelarius, would you have time to look into this to be rolled out please? Thanks a lot. |
|
Nice and necessary implementation! |
|
will this be implemented some day? |
|
Gentle bump, @Auburn is there any chance of this getting merged? |
|
The implementation for this is a bit of a hack and breaks certain parts of imgui unless you workaround it. So I don't think it would be great to merge this as is. |
|
Ah ok, thanks 👍 |
|
What about @Nelarius? I hope he is doing well. I would like to know if there is any alternative that he considers viable to have something similar to this incredible job in the next update! |
This is done in a different way than #134, everything between
BeginNodeEditor()andEndNodeEditor()is managed through it's own ImGui context. I've found this causes less bugs with ImGui features compare to #134. I got the idea from hereIn
BeginNodeEditor()the second ImGui context has the input queue copied from the main context with mouse positions adjusted. Then inEndNodeEditor()the draw data is copied into the main ImGui context and transformed according to the zoom scaling.To get it working add this after
EndNodeEditor()Having 2 ImGui contexts does cause some incorrect interactions between them both, I have fixed some of these by syncing up parts from each context but there are likely still some remaining,