Vendor node editor in-tree; add material presets; debug drag regression
Move the imgui-node-editor subset the build actually compiles from third_party/imgui-node-editor to src/ui/NodeEditor (version-controlled, MIT LICENSE included). FindImguiNodeEditor.cmake points at the new location; CMakeLists excludes src/ui/NodeEditor from UI_SOURCES so it isn't compiled twice. Material editor presets: a Presets menu (disabled with no open material) builds a UsdPreviewSurface + UsdUVTexture graph fed by an st primvar reader, or a MaterialX standard_surface + image graph fed by a texcoord node. Each is one idempotent, undoable command that re-normalizes layout. Create Material becomes an icon button. New nodes route through FindFreeCanvasSpot so a creation never lands on top of an existing node (overlapping nodes fight over the editor hit test and become undraggable). Shader-ball preview: pick a previewable output (terminal or 3/4-component color-like) instead of always the first output, so scalar-only nodes keep the whole-material preview rather than failing Storm codegen. Per-shape camera frame-fit margins and auto-clip framing. Fixes: DeletePrimCommand::Undo recreates missing destination ancestors before SdfCopySpec (parent material may have been deleted after the command ran). ConfigWindowsMoveFromTitleBarOnly stops a content-area drag in the node canvas from moving the whole Material Editor window. Temporary (marked for removal once the node-editor drag regression is diagnosed): main.cpp mirrors LOG_INFO to %APPDATA%\UsdLayerManager\ debug.log; a g_AxNodeEditorDebugLog hook in the vendored editor plus a [NodeGraph] event-trace block in RenderNodeGraphCanvas dump click/drag/ selection/position-save state. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -98,6 +98,16 @@ bool ImGuiContext::Initialize(const std::string& windowTitle, int width, int hei
|
||||
// position overlay appears then); a plain drag just moves the window,
|
||||
// so casual rearranging can't accidentally re-dock panels.
|
||||
io.ConfigDockingWithShift = true;
|
||||
// Windows move only via their title bar/tab, never by dragging empty
|
||||
// content. Without this, a press-drag that a content widget doesn't
|
||||
// capture falls through to ImGui's "drag body to move window" behaviour —
|
||||
// which, in the node-editor canvas (whose background button doesn't
|
||||
// reliably claim the drag in this nested-child embedding), meant dragging
|
||||
// in the graph moved the whole Material Editor window. Title-bar dragging
|
||||
// and Shift-to-dock are unaffected; this is also the desired behaviour for
|
||||
// every other content area (viewports, timelines) where a content drag
|
||||
// must never move the host window.
|
||||
io.ConfigWindowsMoveFromTitleBarOnly = true;
|
||||
|
||||
// Store imgui.ini in %APPDATA%\UsdLayerManager\ so it doesn't litter the CWD.
|
||||
if (const char* appData = getenv("APPDATA")) {
|
||||
|
||||
Reference in New Issue
Block a user