Skip to content

Commit be84e51

Browse files
committed
Cache node extended rect instead of calculating it all the time during draw.
1 parent 1f9c26f commit be84e51

8 files changed

Lines changed: 54 additions & 26 deletions

Sources/NodeUIEngine/NUIE_NodeDrawingImage.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,14 @@
44
namespace NUIE
55
{
66

7-
NodeDrawingImage::NodeDrawingImage ()
7+
NodeDrawingImage::NodeDrawingImage () :
8+
nodeRect (),
9+
extendedNodeRect (),
10+
inputSlotConnPositions (),
11+
outputSlotConnPositions (),
12+
inputSlotRects (),
13+
outputSlotRects (),
14+
specialRects ()
815
{
916

1017
}
@@ -35,6 +42,16 @@ const Rect& NodeDrawingImage::GetNodeRect () const
3542
return nodeRect;
3643
}
3744

45+
void NodeDrawingImage::SetExtendedNodeRect (const Rect& rect)
46+
{
47+
extendedNodeRect = rect;
48+
}
49+
50+
const NUIE::Rect& NodeDrawingImage::GetExtendedNodeRect () const
51+
{
52+
return extendedNodeRect;
53+
}
54+
3855
void NodeDrawingImage::AddInputSlotConnPosition (const NE::SlotId& slotId, const Point& position)
3956
{
4057
DBGASSERT (inputSlotConnPositions.find (slotId) == inputSlotConnPositions.end ());

Sources/NodeUIEngine/NUIE_NodeDrawingImage.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ class NodeDrawingImage : public DrawingImage
2222
void SetNodeRect (const Rect& rect);
2323
const Rect& GetNodeRect () const;
2424

25+
void SetExtendedNodeRect (const Rect& rect);
26+
const Rect& GetExtendedNodeRect () const;
27+
2528
void AddInputSlotConnPosition (const NE::SlotId& slotId, const Point& position);
2629
const Point& GetInputSlotConnPosition (const NE::SlotId& slotId) const;
2730

@@ -42,6 +45,7 @@ class NodeDrawingImage : public DrawingImage
4245

4346
private:
4447
Rect nodeRect;
48+
Rect extendedNodeRect;
4549
std::unordered_map<NE::SlotId, Point> inputSlotConnPositions;
4650
std::unordered_map<NE::SlotId, Point> outputSlotConnPositions;
4751
std::unordered_map<NE::SlotId, Rect> inputSlotRects;

Sources/NodeUIEngine/NUIE_NodePanelDrawer.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,18 @@
77
namespace NUIE
88
{
99

10+
static Rect ExtendNodeRect (const Rect& originalRect, const SkinParams& skinParams)
11+
{
12+
const Size& slotMarkerSize = skinParams.GetSlotMarkerSize ();
13+
double extendSize = 0.0;
14+
if (skinParams.GetHiddenSlotMarker () != SkinParams::HiddenSlotMarker::None) {
15+
extendSize = slotMarkerSize.GetWidth () + slotMarkerSize.GetWidth () / 2.0;
16+
} else if (skinParams.GetSlotMarker () != SkinParams::SlotMarker::None) {
17+
extendSize = slotMarkerSize.GetWidth () / 2.0;
18+
}
19+
return originalRect.ExpandHorizontally (extendSize, extendSize);
20+
}
21+
1022
NodePanelDrawer::NodePanelDrawer ()
1123
{
1224

@@ -50,6 +62,9 @@ void NodePanelDrawer::Draw (NodeUIDrawingEnvironment& env, NodeDrawingImage& dra
5062

5163
drawingImage.AddItem (DrawingItemConstPtr (new DrawingRect (nodeRect, skinParams.GetNodeBorderPen ())));
5264
drawingImage.SetNodeRect (nodeRect);
65+
66+
Rect extendedNodeRect = ExtendNodeRect (nodeRect, skinParams);
67+
drawingImage.SetExtendedNodeRect (extendedNodeRect);
5368
}
5469

5570
}

Sources/NodeUIEngine/NUIE_NodeUIManager.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,7 @@ bool NodeUIManager::GetBoundingRect (NodeUIDrawingEnvironment& drawingEnv, Rect&
571571
{
572572
BoundingRect boundingRect;
573573
EnumerateNodes ([&] (UINodeConstPtr uiNode) {
574-
Rect nodeRect = GetNodeExtendedRect (drawingEnv, uiNode);
574+
Rect nodeRect = uiNode->GetExtendedRect (drawingEnv);
575575
boundingRect.AddRect (nodeRect);
576576
return true;
577577
});

Sources/NodeUIEngine/NUIE_NodeUIManagerDrawer.cpp

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,7 @@ bool NodeUIManagerDrawer::IsConnectionVisible (NodeUIDrawingEnvironment& drawing
249249

250250
bool NodeUIManagerDrawer::IsNodeVisible (NodeUIDrawingEnvironment& drawingEnv, const NodeUIScaleIndependentData& scaleIndependentData, const NodeDrawingModifier* drawModifier, const UINodeConstPtr& uiNode) const
251251
{
252-
Rect boundingRect = GetNodeRect (drawingEnv, drawModifier, uiNode);
253-
boundingRect = ExtendNodeRect (drawingEnv, boundingRect);
252+
Rect boundingRect = GetExtendedNodeRect (drawingEnv, drawModifier, uiNode);
254253

255254
double selectionThickness = scaleIndependentData.GetSelectionThickness ();
256255
boundingRect = boundingRect.Expand (Size (selectionThickness * 2.0, selectionThickness * 2.0));
@@ -271,6 +270,12 @@ Rect NodeUIManagerDrawer::GetNodeRect (NodeUIDrawingEnvironment& drawingEnv, con
271270
return nodeRect.Offset (drawModifier->GetNodeOffset (uiNode->GetId ()));
272271
}
273272

273+
Rect NodeUIManagerDrawer::GetExtendedNodeRect (NodeUIDrawingEnvironment& drawingEnv, const NodeDrawingModifier* drawModifier, const UINodeConstPtr& uiNode) const
274+
{
275+
Rect nodeRect = uiNode->GetExtendedRect (drawingEnv);
276+
return nodeRect.Offset (drawModifier->GetNodeOffset (uiNode->GetId ()));
277+
}
278+
274279
Point NodeUIManagerDrawer::GetOutputSlotConnPosition (NodeUIDrawingEnvironment& drawingEnv, const NodeDrawingModifier* drawModifier, const UINodeConstPtr& uiNode, const NE::SlotId& slotId) const
275280
{
276281
Point position = uiNode->GetOutputSlotConnPosition (drawingEnv, slotId);
@@ -283,23 +288,4 @@ Point NodeUIManagerDrawer::GetInputSlotConnPosition (NodeUIDrawingEnvironment& d
283288
return position + drawModifier->GetNodeOffset (uiNode->GetId ());
284289
}
285290

286-
Rect ExtendNodeRect (NodeUIDrawingEnvironment& drawingEnv, const Rect& originalRect)
287-
{
288-
const SkinParams& skinParams = drawingEnv.GetSkinParams ();
289-
const Size& slotMarkerSize = skinParams.GetSlotMarkerSize ();
290-
double extendSize = 0.0;
291-
if (skinParams.GetHiddenSlotMarker () != SkinParams::HiddenSlotMarker::None) {
292-
extendSize = slotMarkerSize.GetWidth () + slotMarkerSize.GetWidth () / 2.0;
293-
} else if (skinParams.GetSlotMarker () != SkinParams::SlotMarker::None) {
294-
extendSize = slotMarkerSize.GetWidth () / 2.0;
295-
}
296-
return originalRect.ExpandHorizontally (extendSize, extendSize);
297-
}
298-
299-
Rect GetNodeExtendedRect (NodeUIDrawingEnvironment& drawingEnv, const UINodeConstPtr& uiNode)
300-
{
301-
Rect nodeRect = uiNode->GetRect (drawingEnv);
302-
return ExtendNodeRect (drawingEnv, nodeRect);
303-
}
304-
305291
}

Sources/NodeUIEngine/NUIE_NodeUIManagerDrawer.hpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,13 @@ class NodeUIManagerDrawer
4747
bool IsRectVisible (NodeUIDrawingEnvironment& drawingEnv, const Rect& rect) const;
4848

4949
Rect GetNodeRect (NodeUIDrawingEnvironment& drawingEnv, const NodeDrawingModifier* drawModifier, const UINodeConstPtr& uiNode) const;
50+
Rect GetExtendedNodeRect (NodeUIDrawingEnvironment& drawingEnv, const NodeDrawingModifier* drawModifier, const UINodeConstPtr& uiNode) const;
5051
Point GetOutputSlotConnPosition (NodeUIDrawingEnvironment& drawingEnv, const NodeDrawingModifier* drawModifier, const UINodeConstPtr& uiNode, const NE::SlotId& slotId) const;
5152
Point GetInputSlotConnPosition (NodeUIDrawingEnvironment& drawingEnv, const NodeDrawingModifier* drawModifier, const UINodeConstPtr& uiNode, const NE::SlotId& slotId) const;
5253

5354
const NodeUIManager& uiManager;
5455
};
5556

56-
Rect ExtendNodeRect (NodeUIDrawingEnvironment& drawingEnv, const Rect& originalRect);
57-
Rect GetNodeExtendedRect (NodeUIDrawingEnvironment& drawingEnv, const UINodeConstPtr& uiNode);
58-
5957
}
6058

6159
#endif

Sources/NodeUIEngine/NUIE_UINode.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,13 @@ Rect UINode::GetRect (NodeUIDrawingEnvironment& env) const
8080
return nodeRect.Offset (nodePosition);
8181
}
8282

83+
Rect UINode::GetExtendedRect (NodeUIDrawingEnvironment& env) const
84+
{
85+
const NodeDrawingImage& drawingImage = GetDrawingImage (env);
86+
Rect nodeRect = drawingImage.GetExtendedNodeRect ();
87+
return nodeRect.Offset (nodePosition);
88+
}
89+
8390
void UINode::InvalidateDrawing () const
8491
{
8592
nodeDrawingImage.Reset ();

Sources/NodeUIEngine/NUIE_UINode.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class UINode : public NE::Node
4444
void Draw (NodeUIDrawingEnvironment& env) const;
4545

4646
Rect GetRect (NodeUIDrawingEnvironment& env) const;
47+
Rect GetExtendedRect (NodeUIDrawingEnvironment& env) const;
4748
void InvalidateDrawing () const;
4849

4950
Point GetInputSlotConnPosition (NodeUIDrawingEnvironment& env, const NE::SlotId& slotId) const;

0 commit comments

Comments
 (0)