Example #1
0
        public override void OnMouseDoubleClick(MouseButtons mb)
        {
            base.OnMouseDoubleClick(mb);

            ChildrenCopy.HandleMouseDoubleClick(mb);
        }
Example #2
0
        public override void OnTouchDown()
        {
            base.OnTouchDown();

            ChildrenCopy.HandleTouchDown();
        }
Example #3
0
        public override void OnMouseMoved()
        {
            base.OnMouseMoved();

            ChildrenCopy.HandleMouseMovement();
        }
Example #4
0
        public override void OnMouseUp(MouseButtons mb)
        {
            base.OnMouseUp(mb);

            ChildrenCopy.HandleMouseUp(mb);
        }
Example #5
0
 private void InputOnTouchUp()
 {
     ChildrenCopy.ProcessTouchUp();
 }
Example #6
0
        public void UpdateLayout()
        {
            var newBounds = BoundsFetcher();

            if (InternalBounds != newBounds)
            {
                InvalidateLayout();
            }

            InternalBounds = newBounds;

            if (InternalBounds.IsEmpty)
            {
                return;
            }

            if (!_layoutDirty)
            {
                return;
            }

            foreach (var i in ChildrenCopy)
            {
                if (i.Visible)
                {
                    i.Layout(InternalBounds);
                }
            }

            // Rest processing
            MenuBar = null;
            var active = true;

            for (var i = ChildrenCopy.Count - 1; i >= 0; --i)
            {
                var w = ChildrenCopy[i];
                if (!w.Visible)
                {
                    continue;
                }

                w.ProcessWidgets(widget =>
                {
                    widget.Active = active;

                    if (MenuBar == null && widget is HorizontalMenu)
                    {
                        // Found MenuBar
                        MenuBar = (HorizontalMenu)widget;
                    }

                    if (FocusedMouseWheelWidget == null && widget is ScrollViewer && widget.AcceptsMouseWheelFocus && active)
                    {
                        // If focused mouse wheel widget unset, then set first that accepts such focus
                        FocusedMouseWheelWidget = widget;
                    }

                    // Continue
                    return(true);
                });

                // Everything after first modal widget is not active
                if (w.IsModal)
                {
                    active = false;
                }
            }

            UpdateRecursiveLayout(ChildrenCopy);

            // Fire Mouse Movement without actual mouse movement in order to update Widget.IsMouseInside
            _previousMousePosition = _mousePosition;
            ChildrenCopy.ProcessMouseMovement();

            _layoutDirty = false;
        }
Example #7
0
        public void HandleButton(bool isDown, bool wasDown, MouseButtons buttons)
        {
            if (isDown && !wasDown)
            {
                IsTouchDown = true;

                var ev = MouseDown;
                if (ev != null)
                {
                    ev(this, new GenericEventArgs <MouseButtons>(buttons));
                }

                InputOnMouseDown();
                ChildrenCopy.HandleMouseDown(buttons);

                var td = TouchDown;
                if (td != null)
                {
                    td(this, EventArgs.Empty);
                }

                ChildrenCopy.HandleTouchDown();

                if ((DateTime.Now - _lastTouch).TotalMilliseconds < DoubleClickIntervalInMs)
                {
                    // Double click
                    var ev2 = MouseDoubleClick;
                    if (ev2 != null)
                    {
                        ev2(this, new GenericEventArgs <MouseButtons>(buttons));
                    }

                    ChildrenCopy.HandleMouseDoubleClick(buttons);

                    _lastTouch = DateTime.MinValue;
                }
                else
                {
                    _lastTouch = DateTime.Now;
                }
            }
            else if (!isDown && wasDown)
            {
                IsTouchDown = false;

                var ev = MouseUp;
                if (ev != null)
                {
                    ev(this, new GenericEventArgs <MouseButtons>(buttons));
                }

                ChildrenCopy.HandleMouseUp(buttons);

                var tu = TouchUp;
                if (tu != null)
                {
                    tu(this, EventArgs.Empty);
                }

                ChildrenCopy.HandleTouchUp();
            }
        }
Example #8
0
        public void UpdateInput()
        {
            if (MouseInfoGetter != null)
            {
                var mouseInfo = MouseInfoGetter();
                MousePosition = mouseInfo.Position;

                if (SpriteBatchBeginParams.TransformMatrix != null)
                {
                    // Apply transform
                    var t = Vector2.Transform(
                        new Vector2(MousePosition.X, MousePosition.Y),
                        SpriteBatchBeginParams.InverseTransform);

                    MousePosition = new Point((int)t.X, (int)t.Y);
                }

                if (MousePosition.X != LastMousePosition.X ||
                    MousePosition.Y != LastMousePosition.Y)
                {
                    var ev = MouseMoved;
                    if (ev != null)
                    {
                        ev(this, EventArgs.Empty);
                    }

                    ChildrenCopy.HandleMouseMovement();
                }

                HandleButton(mouseInfo.IsLeftButtonDown, _lastMouseInfo.IsLeftButtonDown, MouseButtons.Left);
                HandleButton(mouseInfo.IsMiddleButtonDown, _lastMouseInfo.IsMiddleButtonDown, MouseButtons.Middle);
                HandleButton(mouseInfo.IsRightButtonDown, _lastMouseInfo.IsRightButtonDown, MouseButtons.Right);

#if XENKO
                var handleWheel = mouseInfo.Wheel != 0;
#else
                var handleWheel = mouseInfo.Wheel != _lastMouseInfo.Wheel;
#endif

                if (handleWheel)
                {
                    var delta = mouseInfo.Wheel;
#if !XENKO
                    delta -= _lastMouseInfo.Wheel;
#endif

                    var ev = MouseWheelChanged;
                    if (ev != null)
                    {
                        ev(null, new GenericEventArgs <float>(delta));
                    }

                    if (_focusedWidget != null)
                    {
                        _focusedWidget.IterateFocusable(w => w.OnMouseWheel(delta));
                    }
                }

                _lastMouseInfo = mouseInfo;
            }

            if (DownKeysGetter != null)
            {
                var pressedKeys = DownKeysGetter();

                if (pressedKeys != null)
                {
                    MyraEnvironment.ShowUnderscores = (MenuBar != null && MenuBar.OpenMenuItem != null) ||
                                                      pressedKeys.Contains(Keys.LeftAlt) ||
                                                      pressedKeys.Contains(Keys.RightAlt);

                    if (_lastDownKeys != null)
                    {
                        foreach (var key in pressedKeys)
                        {
                            if (!_lastDownKeys.Contains(key))
                            {
                                var ev = KeyDown;
                                if (ev != null)
                                {
                                    ev(this, new GenericEventArgs <Keys>(key));
                                }

                                if (MenuBar != null && MyraEnvironment.ShowUnderscores)
                                {
                                    MenuBar.OnKeyDown(key);
                                }
                                else
                                {
                                    if (_focusedWidget != null)
                                    {
                                        _focusedWidget.IterateFocusable(w => w.OnKeyDown(key));

#if XENKO
                                        var ch = key.ToChar(pressedKeys.Contains(Keys.LeftShift) ||
                                                            pressedKeys.Contains(Keys.RightShift));
                                        if (ch != null)
                                        {
                                            _focusedWidget.IterateFocusable(w => w.OnChar(ch.Value));
                                        }
#endif
                                    }
                                }

                                if (key == Keys.Escape && ContextMenu != null)
                                {
                                    HideContextMenu();
                                }
                            }
                        }

                        foreach (var key in _lastDownKeys)
                        {
                            if (!pressedKeys.Contains(key))
                            {
                                // Key had been released
                                var ev = KeyUp;
                                if (ev != null)
                                {
                                    ev(this, new GenericEventArgs <Keys>(key));
                                }

                                if (_focusedWidget != null)
                                {
                                    _focusedWidget.IterateFocusable(w => w.OnKeyUp(key));
                                }
                            }
                        }
                    }
                }

                _lastDownKeys = pressedKeys.ToArray();
            }
        }
Example #9
0
        public override void OnMouseEntered()
        {
            base.OnMouseEntered();

            ChildrenCopy.ProcessMouseMovement();
        }
Example #10
0
        public override void OnTouchDoubleClick()
        {
            base.OnTouchDoubleClick();

            ChildrenCopy.ProcessTouchDoubleClick();
        }
Example #11
0
        public override void OnTouchUp()
        {
            base.OnTouchUp();

            ChildrenCopy.ProcessTouchUp();
        }
Example #12
0
        public override void OnTouchMoved()
        {
            base.OnTouchMoved();

            ChildrenCopy.ProcessTouchMovement();
        }
Example #13
0
        public static void UpdateLayout()
        {
            ///TODO
            ///widget
            var newBounds = BoundsFetcher();

            if (InternalBounds != newBounds)
            {
                _layoutDirty = true;
            }

            InternalBounds = newBounds;

            if (InternalBounds.IsEmpty)
            {
                return;
            }

            if (!_layoutDirty)
            {
                return;
            }

            ChildrenCopy.ForEach(
                i =>
            {
                if (i.Visible)
                {
                    i.Layout(InternalBounds);
                }
            });

            // Rest processing
            MenuBar = null;
            var active = true;

            for (var i = ChildrenCopy.Count - 1; i >= 0; --i)
            {
                var w = ChildrenCopy[i];
                if (!w.Visible)
                {
                    continue;
                }

                UIUtils.ProcessWidgets(w, widget =>
                {
                    widget.Active = active;

                    if (MenuBar == null && widget is HorizontalMenu)
                    {
                        // Found MenuBar
                        MenuBar = (HorizontalMenu)widget;
                    }

                    if (FocusedMouseWheelWidget == null && widget is ScrollViewer && widget.AcceptsMouseWheelFocus && active)
                    {
                        // If focused mouse wheel widget unset, then set first that accepts such focus
                        FocusedMouseWheelWidget = widget;
                    }

                    // Continue
                    return(true);
                });

                // Everything after first modal widget is not active
                if (w.IsModal)
                {
                    active = false;
                }
            }


            UpdateRecursiveLayout(ChildrenCopy);

            _layoutDirty = false;
        }