From d8a78e668b3fce00170b59e84888493a5135429a Mon Sep 17 00:00:00 2001 From: Evgeny Prikazchikov Date: Mon, 22 Dec 2025 10:25:26 +0300 Subject: [PATCH] Graph nodes creation issues fixed --- engine/includes/editor/viewport/viewport.h | 3 ++- engine/src/editor/viewport/viewport.cpp | 16 +++++++++++----- .../editor/graph/actions/createnode.cpp | 4 ++-- .../grapheditor/editor/graph/graphnode.cpp | 9 +++++++++ .../editor/grapheditor/editor/graph/graphnode.h | 5 +++-- 5 files changed, 27 insertions(+), 10 deletions(-) diff --git a/engine/includes/editor/viewport/viewport.h b/engine/includes/editor/viewport/viewport.h index 7796e411d..c12750d60 100644 --- a/engine/includes/editor/viewport/viewport.h +++ b/engine/includes/editor/viewport/viewport.h @@ -64,7 +64,7 @@ class ENGINE_EXPORT Viewport : public QWidget { QWindow *rhiWindow() { return m_rhiWindow; } - bool isFocused() const; + bool isFocused(); public slots: void onInProgressFlag(bool flag); @@ -120,6 +120,7 @@ protected slots: Texture *m_color; + bool m_focusedView; bool m_gameView; bool m_gamePaused; bool m_liveUpdate; diff --git a/engine/src/editor/viewport/viewport.cpp b/engine/src/editor/viewport/viewport.cpp index c422f12e4..c0c376e2f 100644 --- a/engine/src/editor/viewport/viewport.cpp +++ b/engine/src/editor/viewport/viewport.cpp @@ -41,6 +41,7 @@ Viewport::Viewport(QWidget *parent) : m_tasksMenu(nullptr), m_bufferMenu(nullptr), m_color(nullptr), + m_focusedView(false), m_gameView(false), m_gamePaused(false), m_liveUpdate(false), @@ -219,8 +220,6 @@ void Viewport::onDraw() { m_controller->update(); } instance.update(); - } else { - instance.reset(); } if(m_screenInProgress && m_color) { @@ -316,12 +315,19 @@ void Viewport::readPixels(void *object) { } } -bool Viewport::isFocused() const { +bool Viewport::isFocused() { + bool focus = false; #ifdef Q_OS_MACOS - return rect().contains(mapFromGlobal(QCursor::pos())); + focus = rect().contains(mapFromGlobal(QCursor::pos())); #else - return (QGuiApplication::focusWindow() == m_rhiWindow); + focus = QGuiApplication::focusWindow() == m_rhiWindow; #endif + if(focus != m_focusedView) { + m_focusedView = focus; + EditorPlatform::instance().reset(); + } + + return focus; } void Viewport::onBufferMenu() { diff --git a/modules/editor/grapheditor/editor/graph/actions/createnode.cpp b/modules/editor/grapheditor/editor/graph/actions/createnode.cpp index 195d37434..7a19a1544 100644 --- a/modules/editor/grapheditor/editor/graph/actions/createnode.cpp +++ b/modules/editor/grapheditor/editor/graph/actions/createnode.cpp @@ -51,8 +51,8 @@ void CreateNode::redo() { GraphNode *snd = (m_out) ? fromNode : node; GraphNode *rcv = (m_out) ? node : fromNode; if(snd && rcv) { - NodePort *sp = (m_fromPort > -1) ? ((m_out) ? item : snd->port(0)) : nullptr; - NodePort *rp = (m_fromPort > -1) ? ((m_out) ? rcv->port(0) : item) : nullptr; + NodePort *sp = (m_fromPort > -1) ? ((m_out) ? item : snd->firstPort(!m_out)) : nullptr; + NodePort *rp = (m_fromPort > -1) ? ((m_out) ? rcv->firstPort(!m_out) : item) : nullptr; AbstractNodeGraph::Link *link = g->linkCreate(snd, sp, rcv, rp); m_linkIndex = g->link(link); diff --git a/modules/editor/grapheditor/editor/graph/graphnode.cpp b/modules/editor/grapheditor/editor/graph/graphnode.cpp index 8ed21c361..148bb3c38 100644 --- a/modules/editor/grapheditor/editor/graph/graphnode.cpp +++ b/modules/editor/grapheditor/editor/graph/graphnode.cpp @@ -50,6 +50,15 @@ NodePort *GraphNode::port(int position) { return nullptr; } +NodePort *GraphNode::firstPort(bool out) { + for(auto &it : m_ports) { + if(it.m_out == out) { + return ⁢ + } + } + return nullptr; +} + int GraphNode::portPosition(NodePort *port) { return port->m_pos; } diff --git a/modules/editor/grapheditor/editor/graph/graphnode.h b/modules/editor/grapheditor/editor/graph/graphnode.h index cbd25f265..b5271669b 100644 --- a/modules/editor/grapheditor/editor/graph/graphnode.h +++ b/modules/editor/grapheditor/editor/graph/graphnode.h @@ -71,9 +71,10 @@ class NODEGRAPH_EXPORT GraphNode : public Object { AbstractNodeGraph *graph() const; void setGraph(AbstractNodeGraph *graph); - virtual NodePort *port(int position); + NodePort *port(int position); + NodePort *firstPort(bool out); - virtual int portPosition(NodePort *port); + int portPosition(NodePort *port); TString typeName() const override; virtual void setTypeName(const TString &name);