void AddChild(VisualElement view, IVisualElementRenderer oldRenderer = null, RendererPool pool = null, bool sameChildren = false) { var reference = Guid.NewGuid().ToString(); Performance.Start(reference); if (CompressedLayout.GetIsHeadless(view)) { var packager = new VisualElementPackager(_renderer, view); if (_childPackagers == null) { _childPackagers = new Dictionary <BindableObject, VisualElementPackager>(); } view.IsPlatformEnabled = true; packager.Load(); _childPackagers[view] = packager; } else { if (_childViews == null) { _childViews = new List <IVisualElementRenderer>(); } IVisualElementRenderer renderer = oldRenderer; if (pool != null) { renderer = pool.GetFreeRenderer(view); } if (renderer == null) { Performance.Start(reference, "New renderer"); renderer = Platform.CreateRenderer(view, _renderer.View.Context); Performance.Stop(reference, "New renderer"); } if (renderer == oldRenderer) { Platform.SetRenderer(renderer.Element, null); renderer.SetElement(view); } Performance.Start(reference, "Set renderer"); Platform.SetRenderer(view, renderer); Performance.Stop(reference, "Set renderer"); Performance.Start(reference, "Add view"); if (!sameChildren) { (_renderer.View as ViewGroup)?.AddView(renderer.View); _childViews.Add(renderer); } Performance.Stop(reference, "Add view"); Performance.Stop(reference); } }
void AddChild(VisualElement view, IVisualElementRenderer oldRenderer = null, RendererPool pool = null, bool sameChildren = false) { Performance.Start(); if (CompressedLayout.GetIsHeadless(view)) { var packager = new VisualElementPackager(_renderer, view); view.IsPlatformEnabled = true; packager.Load(); } else { if (_childViews == null) { _childViews = new List <IVisualElementRenderer>(); } IVisualElementRenderer renderer = oldRenderer; if (pool != null) { renderer = pool.GetFreeRenderer(view); } if (renderer == null) { Performance.Start("New renderer"); renderer = Platform.CreateRenderer(view); Performance.Stop("New renderer"); } if (renderer == oldRenderer) { Platform.SetRenderer(renderer.Element, null); renderer.SetElement(view); } Performance.Start("Set renderer"); Platform.SetRenderer(view, renderer); Performance.Stop("Set renderer"); Performance.Start("Add view"); if (!sameChildren) { (_renderer.View as ViewGroup)?.AddView(renderer.View); _childViews.Add(renderer); } Performance.Stop("Add view"); } Performance.Stop(); }
void AddChild(VisualElement view, IVisualElementRenderer oldRenderer = null, RendererPool pool = null, bool sameChildren = false) { Performance.Start(); if (_childViews == null) { _childViews = new List <IVisualElementRenderer>(); } IVisualElementRenderer renderer = oldRenderer; if (pool != null) { renderer = pool.GetFreeRenderer(view); } if (renderer == null) { Performance.Start("New renderer"); renderer = Platform.CreateRenderer(view); Performance.Stop("New renderer"); } if (renderer == oldRenderer) { Platform.SetRenderer(renderer.Element, null); renderer.SetElement(view); } Performance.Start("Set renderer"); Platform.SetRenderer(view, renderer); Performance.Stop("Set renderer"); Performance.Start("Add view"); if (!sameChildren) { _renderer.ViewGroup.AddView(renderer.ViewGroup); _childViews.Add(renderer); } Performance.Stop("Add view"); Performance.Stop(); }
void AddChild(VisualElement view, IVisualElementRenderer oldRenderer = null, RendererPool pool = null, bool sameChildren = false) { Performance.Start(); if (_childViews == null) _childViews = new List<IVisualElementRenderer>(); IVisualElementRenderer renderer = oldRenderer; if (pool != null) renderer = pool.GetFreeRenderer(view); if (renderer == null) { Performance.Start("New renderer"); renderer = Platform.CreateRenderer(view); Performance.Stop("New renderer"); } if (renderer == oldRenderer) { Platform.SetRenderer(renderer.Element, null); renderer.SetElement(view); } Performance.Start("Set renderer"); Platform.SetRenderer(view, renderer); Performance.Stop("Set renderer"); Performance.Start("Add view"); if (!sameChildren) { _renderer.ViewGroup.AddView(renderer.ViewGroup); _childViews.Add(renderer); } Performance.Stop("Add view"); Performance.Stop(); }
void SetElement(VisualElement oldElement, VisualElement newElement) { var reference = Guid.NewGuid().ToString(); Performance.Start(reference); var sameChildrenTypes = false; ReadOnlyCollection <Element> newChildren = null, oldChildren = null; RendererPool pool = null; if (oldElement != null) { if (newElement != null) { sameChildrenTypes = true; oldChildren = ((IElementController)oldElement).LogicalChildren; newChildren = ((IElementController)newElement).LogicalChildren; if (oldChildren.Count == newChildren.Count) { for (var i = 0; i < oldChildren.Count; i++) { if (oldChildren[i].GetType() != newChildren[i].GetType()) { sameChildrenTypes = false; break; } } } else { sameChildrenTypes = false; } } oldElement.ChildAdded -= _childAddedHandler; oldElement.ChildRemoved -= _childRemovedHandler; oldElement.ChildrenReordered -= _childReorderedHandler; if (!sameChildrenTypes) { _childViews = new List <IVisualElementRenderer>(); pool = new RendererPool(_renderer, oldElement); pool.ClearChildrenRenderers(); } } if (newElement != null) { Performance.Start(reference, "Setup"); newElement.ChildAdded += _childAddedHandler; newElement.ChildRemoved += _childRemovedHandler; newElement.ChildrenReordered += _childReorderedHandler; newChildren = newChildren ?? ((IElementController)newElement).LogicalChildren; for (var i = 0; i < newChildren.Count; i++) { IVisualElementRenderer oldRenderer = null; if (oldChildren != null && sameChildrenTypes) { oldRenderer = _childViews[i]; } AddChild((VisualElement)newChildren[i], oldRenderer, pool, sameChildrenTypes); } #if DEBUG //if (renderer.Element.LogicalChildren.Any() && renderer.ViewGroup.ChildCount != renderer.Element.LogicalChildren.Count) // throw new InvalidOperationException ("SetElement did not create the correct number of children"); #endif EnsureChildOrder(); Performance.Stop(reference, "Setup"); } Performance.Stop(reference); }
void SetElement(VisualElement oldElement, VisualElement newElement) { Performance.Start(); var sameChildrenTypes = false; ReadOnlyCollection<Element> newChildren = null, oldChildren = null; RendererPool pool = null; if (oldElement != null) { if (newElement != null) { sameChildrenTypes = true; oldChildren = oldElement.LogicalChildren; newChildren = newElement.LogicalChildren; if (oldChildren.Count == newChildren.Count) { for (var i = 0; i < oldChildren.Count; i++) { if (oldChildren[i].GetType() != newChildren[i].GetType()) { sameChildrenTypes = false; break; } } } else sameChildrenTypes = false; } oldElement.ChildAdded -= _childAddedHandler; oldElement.ChildRemoved -= _childRemovedHandler; oldElement.ChildrenReordered -= _childReorderedHandler; if (!sameChildrenTypes) { _childViews = new List<IVisualElementRenderer>(); pool = new RendererPool(_renderer, oldElement); pool.ClearChildrenRenderers(); } } if (newElement != null) { Performance.Start("Setup"); newElement.ChildAdded += _childAddedHandler; newElement.ChildRemoved += _childRemovedHandler; newElement.ChildrenReordered += _childReorderedHandler; newChildren = newChildren ?? newElement.LogicalChildren; for (var i = 0; i < newChildren.Count; i++) { IVisualElementRenderer oldRenderer = null; if (oldChildren != null && sameChildrenTypes) oldRenderer = _childViews[i]; AddChild((VisualElement)newChildren[i], oldRenderer, pool, sameChildrenTypes); } #if DEBUG //if (renderer.Element.LogicalChildren.Any() && renderer.ViewGroup.ChildCount != renderer.Element.LogicalChildren.Count) // throw new InvalidOperationException ("SetElement did not create the correct number of children"); #endif Performance.Stop("Setup"); } Performance.Stop(); }