Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit d12b1d4

Browse files
Merge pull request #509 from github-for-unity/enhancements/skip-render-hidden-nodes
Hiding nodes that are not visible
2 parents 73341b3 + 5b67ea1 commit d12b1d4

File tree

2 files changed

+24
-19
lines changed

2 files changed

+24
-19
lines changed

src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ private void OnTreeGUI(Rect rect)
317317
var initialRect = rect;
318318
var treeHadFocus = treeLocals.SelectedNode != null;
319319

320-
rect = treeLocals.Render(rect, scroll,
320+
rect = treeLocals.Render(initialRect, rect, scroll,
321321
node =>{ },
322322
node => {
323323
if (node.IsFolder)
@@ -348,7 +348,7 @@ private void OnTreeGUI(Rect rect)
348348

349349
rect.y += Styles.TreePadding;
350350

351-
rect = treeRemotes.Render(rect, scroll,
351+
rect = treeRemotes.Render(initialRect, rect, scroll,
352352
node => { },
353353
node => {
354354
if (node.IsFolder)
@@ -358,7 +358,7 @@ private void OnTreeGUI(Rect rect)
358358
},
359359
node => {
360360
if (node.IsFolder)
361-
return;
361+
return;
362362

363363
var menu = CreateContextMenuForRemoteBranchNode(node);
364364
menu.ShowAsContext();

src/UnityExtension/Assets/Editor/GitHub.Unity/UI/TreeControl.cs

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ public void Load(IEnumerable<ITreeData> data, string title)
145145
}
146146
}
147147

148-
public Rect Render(Rect rect, Vector2 scroll, Action<TreeNode> singleClick = null, Action<TreeNode> doubleClick = null, Action<TreeNode> rightClick = null)
148+
public Rect Render(Rect containingRect, Rect rect, Vector2 scroll, Action<TreeNode> singleClick = null, Action<TreeNode> doubleClick = null, Action<TreeNode> rightClick = null)
149149
{
150150
if (Event.current.type != EventType.Repaint)
151151
{
@@ -157,15 +157,20 @@ public Rect Render(Rect rect, Vector2 scroll, Action<TreeNode> singleClick = nul
157157
}
158158
}
159159

160-
Profiler.BeginSample("TreeControl");
161-
bool visible = true;
162-
var availableHeight = rect.y + rect.height;
160+
var startDisplay = scroll.y;
161+
var endDisplay = scroll.y + containingRect.height;
163162

164163
RequiresRepaint = false;
165164
rect = new Rect(0f, rect.y, rect.width, ItemHeight);
166165

167166
var titleNode = nodes[0];
168-
bool selectionChanged = titleNode.Render(rect, 0f, selectedNode == titleNode, FolderStyle, TreeNodeStyle, ActiveTreeNodeStyle);
167+
var selectionChanged = false;
168+
169+
var titleDisplay = !(rect.y > endDisplay || rect.yMax < startDisplay);
170+
if (titleDisplay)
171+
{
172+
selectionChanged = titleNode.Render(rect, Styles.TreeIndentation, selectedNode == titleNode, FolderStyle, TreeNodeStyle, ActiveTreeNodeStyle);
173+
}
169174

170175
if (selectionChanged)
171176
{
@@ -187,15 +192,18 @@ public Rect Render(Rect rect, Vector2 scroll, Action<TreeNode> singleClick = nul
187192
Indent();
188193
}
189194

190-
if (visible)
195+
var changed = false;
196+
197+
var display = !(rect.y > endDisplay || rect.yMax < startDisplay);
198+
if (display)
191199
{
192-
var changed = node.Render(rect, Styles.TreeIndentation, selectedNode == node, FolderStyle, TreeNodeStyle, ActiveTreeNodeStyle);
200+
changed = node.Render(rect, Styles.TreeIndentation, selectedNode == node, FolderStyle, TreeNodeStyle, ActiveTreeNodeStyle);
201+
}
193202

194-
if (node.IsFolder && changed)
195-
{
196-
// toggle visibility for all the nodes under this one
197-
ToggleNodeVisibility(i, node);
198-
}
203+
if (node.IsFolder && changed)
204+
{
205+
// toggle visibility for all the nodes under this one
206+
ToggleNodeVisibility(i, node);
199207
}
200208

201209
if (node.Level < level)
@@ -209,10 +217,7 @@ public Rect Render(Rect rect, Vector2 scroll, Action<TreeNode> singleClick = nul
209217

210218
if (!node.IsHidden)
211219
{
212-
if (visible)
213-
{
214-
RequiresRepaint = HandleInput(rect, node, i, singleClick, doubleClick, rightClick);
215-
}
220+
RequiresRepaint = HandleInput(rect, node, i, singleClick, doubleClick, rightClick);
216221
rect.y += ItemHeight + ItemSpacing;
217222
}
218223
}

0 commit comments

Comments
 (0)