From 00b1bcce2589077ef3e2874033836d7f6ef37b00 Mon Sep 17 00:00:00 2001 From: Malcolm Tyrrell Date: Sun, 18 May 2025 17:27:35 +0100 Subject: [PATCH 1/2] Do not use a ratio for bounding rect. --- .../QtNodes/internal/AbstractNodeGeometry.hpp | 5 +---- .../internal/DefaultHorizontalNodeGeometry.hpp | 2 ++ .../internal/DefaultVerticalNodeGeometry.hpp | 2 ++ src/AbstractNodeGeometry.cpp | 16 ---------------- src/DefaultHorizontalNodeGeometry.cpp | 12 ++++++++++++ src/DefaultVerticalNodeGeometry.cpp | 12 ++++++++++++ 6 files changed, 29 insertions(+), 20 deletions(-) diff --git a/include/QtNodes/internal/AbstractNodeGeometry.hpp b/include/QtNodes/internal/AbstractNodeGeometry.hpp index b30c5a36c..acc60def5 100644 --- a/include/QtNodes/internal/AbstractNodeGeometry.hpp +++ b/include/QtNodes/internal/AbstractNodeGeometry.hpp @@ -21,11 +21,8 @@ class NODE_EDITOR_PUBLIC AbstractNodeGeometry * The node's size plus some additional margin around it to account for drawing * effects (for example shadows) or node's parts outside the size rectangle * (for example port points). - * - * The default implementation returns QSize + 20 percent of width and heights - * at each side of the rectangle. */ - virtual QRectF boundingRect(NodeId const nodeId) const; + virtual QRectF boundingRect(NodeId const nodeId) const = 0; /// A direct rectangle defining the borders of the node's rectangle. virtual QSize size(NodeId const nodeId) const = 0; diff --git a/include/QtNodes/internal/DefaultHorizontalNodeGeometry.hpp b/include/QtNodes/internal/DefaultHorizontalNodeGeometry.hpp index f5f660784..e7a91d987 100644 --- a/include/QtNodes/internal/DefaultHorizontalNodeGeometry.hpp +++ b/include/QtNodes/internal/DefaultHorizontalNodeGeometry.hpp @@ -15,6 +15,8 @@ class NODE_EDITOR_PUBLIC DefaultHorizontalNodeGeometry : public AbstractNodeGeom DefaultHorizontalNodeGeometry(AbstractGraphModel &graphModel); public: + QRectF boundingRect(NodeId const nodeId) const; + QSize size(NodeId const nodeId) const override; void recomputeSize(NodeId const nodeId) const override; diff --git a/include/QtNodes/internal/DefaultVerticalNodeGeometry.hpp b/include/QtNodes/internal/DefaultVerticalNodeGeometry.hpp index ae9b62876..ce4dd9f17 100644 --- a/include/QtNodes/internal/DefaultVerticalNodeGeometry.hpp +++ b/include/QtNodes/internal/DefaultVerticalNodeGeometry.hpp @@ -15,6 +15,8 @@ class NODE_EDITOR_PUBLIC DefaultVerticalNodeGeometry : public AbstractNodeGeomet DefaultVerticalNodeGeometry(AbstractGraphModel &graphModel); public: + QRectF boundingRect(NodeId const nodeId) const override; + QSize size(NodeId const nodeId) const override; void recomputeSize(NodeId const nodeId) const override; diff --git a/src/AbstractNodeGeometry.cpp b/src/AbstractNodeGeometry.cpp index 034f4cf03..f6c893df7 100644 --- a/src/AbstractNodeGeometry.cpp +++ b/src/AbstractNodeGeometry.cpp @@ -15,22 +15,6 @@ AbstractNodeGeometry::AbstractNodeGeometry(AbstractGraphModel &graphModel) // } -QRectF AbstractNodeGeometry::boundingRect(NodeId const nodeId) const -{ - QSize s = size(nodeId); - - double ratio = 0.20; - - int widthMargin = s.width() * ratio; - int heightMargin = s.height() * ratio; - - QMargins margins(widthMargin, heightMargin, widthMargin, heightMargin); - - QRectF r(QPointF(0, 0), s); - - return r.marginsAdded(margins); -} - QPointF AbstractNodeGeometry::portScenePosition(NodeId const nodeId, PortType const portType, PortIndex const index, diff --git a/src/DefaultHorizontalNodeGeometry.cpp b/src/DefaultHorizontalNodeGeometry.cpp index 466c5ef34..f48dcf312 100644 --- a/src/DefaultHorizontalNodeGeometry.cpp +++ b/src/DefaultHorizontalNodeGeometry.cpp @@ -23,6 +23,18 @@ DefaultHorizontalNodeGeometry::DefaultHorizontalNodeGeometry(AbstractGraphModel _portSize = _fontMetrics.height(); } +QRectF DefaultHorizontalNodeGeometry::boundingRect(NodeId const nodeId) const +{ + QSize s = size(nodeId); + + qreal marginSize = 2.0 * _portSpasing; + QMargins margins(marginSize, marginSize, marginSize, marginSize); + + QRectF r(QPointF(0, 0), s); + + return r.marginsAdded(margins); +} + QSize DefaultHorizontalNodeGeometry::size(NodeId const nodeId) const { return _graphModel.nodeData(nodeId, NodeRole::Size); diff --git a/src/DefaultVerticalNodeGeometry.cpp b/src/DefaultVerticalNodeGeometry.cpp index 0254028ed..f20617f25 100644 --- a/src/DefaultVerticalNodeGeometry.cpp +++ b/src/DefaultVerticalNodeGeometry.cpp @@ -23,6 +23,18 @@ DefaultVerticalNodeGeometry::DefaultVerticalNodeGeometry(AbstractGraphModel &gra _portSize = _fontMetrics.height(); } +QRectF DefaultVerticalNodeGeometry::boundingRect(NodeId const nodeId) const +{ + QSize s = size(nodeId); + + qreal marginSize = 2.0 * _portSpasing; + QMargins margins(marginSize, marginSize, marginSize, marginSize); + + QRectF r(QPointF(0, 0), s); + + return r.marginsAdded(margins); +} + QSize DefaultVerticalNodeGeometry::size(NodeId const nodeId) const { return _graphModel.nodeData(nodeId, NodeRole::Size); From cf85dd0314d80cfa6a8c829529bcdf80283b2fcb Mon Sep 17 00:00:00 2001 From: Malcolm Tyrrell Date: Sat, 24 May 2025 13:54:15 +0100 Subject: [PATCH 2/2] Add missing "override". --- include/QtNodes/internal/DefaultHorizontalNodeGeometry.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/QtNodes/internal/DefaultHorizontalNodeGeometry.hpp b/include/QtNodes/internal/DefaultHorizontalNodeGeometry.hpp index e7a91d987..33367e109 100644 --- a/include/QtNodes/internal/DefaultHorizontalNodeGeometry.hpp +++ b/include/QtNodes/internal/DefaultHorizontalNodeGeometry.hpp @@ -15,7 +15,7 @@ class NODE_EDITOR_PUBLIC DefaultHorizontalNodeGeometry : public AbstractNodeGeom DefaultHorizontalNodeGeometry(AbstractGraphModel &graphModel); public: - QRectF boundingRect(NodeId const nodeId) const; + QRectF boundingRect(NodeId const nodeId) const override; QSize size(NodeId const nodeId) const override;