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);
            }
        }
Exemple #2
0
        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();
		}
Exemple #5
0
        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();
		}