Ejemplo n.º 1
0
        /// <summary>
        /// Returns a clone of the node hierarchy.
        /// </summary>
        public virtual Node Clone()
        {
            var clone = (Node)MemberwiseClone();

            ++CreatedCount;
            clone.Parent         = null;
            clone.FirstAnimation = null;
            clone.FirstChild     = null;
            clone.NextSibling    = null;
            clone.gestures       = null;
            clone.AsWidget       = clone as Widget;
            clone.Animations     = Animations.Clone(clone);
            clone.Animators      = AnimatorCollection.SharedClone(clone, Animators);
            clone.Nodes          = Nodes.Clone(clone);
            clone.Components     = Components.Clone(clone);
            clone.IsAwake        = false;
            if (RenderChainBuilder != null)
            {
                clone.RenderChainBuilder = RenderChainBuilder.Clone(clone);
            }
            if (Presenter != null)
            {
                clone.Presenter = Presenter.Clone();
            }
            if (PostPresenter != null)
            {
                clone.PostPresenter = PostPresenter.Clone();
            }
            clone.DirtyMask = DirtyFlags.All;
            clone.UserData  = null;
            return(clone);
        }
Ejemplo n.º 2
0
        public override void Update(float delta)
        {
            if (ContinuousRendering())
            {
                Window.Invalidate();
            }
            var context = WidgetContext.Current;

            // Find the node under mouse, using the render chain built on one frame before.
            context.NodeUnderMouse = LookForNodeUnderMouse(renderChain);

            // Assign NodeCapturedByMouse if any mouse button was pressed.
            var anyCaptureKeyPressed = IsAnyCaptureKeyPressed();

            if (!prevAnyCaptureKeyPressed && anyCaptureKeyPressed)
            {
                context.NodeCapturedByMouse = context.NodeUnderMouse;
            }

            // Process mouse/touch screen input.
            context.GestureManager.Process();

            // Update the widget hierarchy.
            context.MouseCursor = MouseCursor.Default;
            base.Update(delta);
            Window.Cursor = context.MouseCursor;

            // Set NodeCapturedByMouse to null if all mouse buttons were released.
            if (prevAnyCaptureKeyPressed && !anyCaptureKeyPressed)
            {
                context.NodeCapturedByMouse = null;
            }
            prevAnyCaptureKeyPressed = anyCaptureKeyPressed;

            if (Window.Input.WasKeyPressed(Key.DismissSoftKeyboard))
            {
                SetFocus(null);
            }

            // Refresh widgets layout.
            LayoutManager.Layout();

            RaiseUpdating(delta);

            ManageFocusOnWindowActivation();

            // Rebuild the render chain.
            renderChain.Clear();
            renderChain.ClipRegion = new Rectangle(Vector2.Zero, Size);
            RenderChainBuilder?.AddToRenderChain(renderChain);
        }
Ejemplo n.º 3
0
        public virtual void Update(float delta)
        {
            if (ContinuousRendering())
            {
                Window.Invalidate();
            }
            var context = WidgetContext.Current;

            // Find the node under mouse, using the render chain built on one frame before.
            context.NodeUnderMouse = LookForNodeUnderMouse(renderChain);

            // Assign NodeCapturedByMouse if any mouse button was pressed or files were dropped.
            var anyCaptureKeyPressed = IsAnyCaptureKeyPressed();

            if (!prevAnyCaptureKeyPressed && anyCaptureKeyPressed || Window.Input.DroppedFiles.Count > 0)
            {
                context.NodeCapturedByMouse = context.NodeUnderMouse;
            }
            else if (
                !anyCaptureKeyPressed ||
                (!(context.NodeCapturedByMouse as Widget)?.GloballyVisible ?? false) ||
                (!(context.NodeCapturedByMouse as Node3D)?.GloballyVisible ?? false)
                )
            {
                // Set NodeCapturedByMouse to null if all mouse buttons are released or widget became invisible.
                context.NodeCapturedByMouse = null;
            }
            prevAnyCaptureKeyPressed = anyCaptureKeyPressed;

            // Update the widget hierarchy.
            context.MouseCursor = MouseCursor.Default;
            Manager.Update(delta);
            Window.Cursor = context.MouseCursor;

            if (Window.Input.WasKeyPressed(Key.DismissSoftKeyboard))
            {
                SetFocus(null);
            }

            ManageFocusOnWindowActivation();

            // Rebuild the render chain.
            renderChain.Clear();
            renderChain.ClipRegion = new Rectangle(Vector2.Zero, Size);
            RenderChainBuilder?.AddToRenderChain(renderChain);
        }