コード例 #1
0
ファイル: Root.cs プロジェクト: Blecki/GemGui
 private bool IsHoverPartOfPopup()
 {
     if (PopupItem == null || HoverItem == null)
     {
         return(false);
     }
     if (Object.ReferenceEquals(PopupItem, HoverItem))
     {
         return(true);
     }
     if (HoverItem.IsChildOf(PopupItem))
     {
         return(true);
     }
     return(false);
 }
コード例 #2
0
        private bool IsHoverPartOfPopup()
        {
            if (PopupStack.Count == 0 || HoverItem == null)
            {
                return(false);
            }

            var item = PopupStack[PopupStack.Count - 1];

            if (Object.ReferenceEquals(item, HoverItem))
            {
                return(true);
            }
            if (HoverItem.IsChildOf(item))
            {
                return(true);
            }

            return(false);
        }
コード例 #3
0
ファイル: Root.cs プロジェクト: Blecki/GemGui
        /// <summary>
        /// Process mouse events.
        /// </summary>
        /// <param name="State"></param>
        public void HandleInput(InputEvents Event, InputEventArgs Args)
        {
            switch (Event)
            {
            case InputEvents.MouseMove:
            {
                // Destroy tooltips when the mouse moves.
                MouseMotionTime = DateTime.Now;
                if (TooltipItem != null)
                {
                    DestroyWidget(TooltipItem);
                }

                MousePosition = ScreenPointToGuiPoint(new Point(Args.X, Args.Y));
                var newArgs = new InputEventArgs {
                    X = MousePosition.X, Y = MousePosition.Y
                };
                // Detect hover item and fire mouse enter/leave events as appropriate.
                var newHoverItem = RootItem.FindWidgetAt(MousePosition.X, MousePosition.Y);
                if (!Object.ReferenceEquals(newHoverItem, HoverItem))
                {
                    if (HoverItem != null)
                    {
                        SafeCall(HoverItem.OnMouseLeave, HoverItem, newArgs);
                    }
                    if (newHoverItem != null)
                    {
                        SafeCall(newHoverItem.OnMouseEnter, newHoverItem, newArgs);
                    }
                    HoverItem = newHoverItem;
                }

                if (MouseDownItem != null)
                {
                    SafeCall(MouseDownItem.OnMouseMove, MouseDownItem,
                             new InputEventArgs {
                            X = MousePosition.X, Y = MousePosition.Y
                        });
                }
            }
            break;

            case InputEvents.MouseDown:
            {
                MousePosition = ScreenPointToGuiPoint(new Point(Args.X, Args.Y));
                var newArgs = new InputEventArgs {
                    X = MousePosition.X, Y = MousePosition.Y
                };

                MouseDownItem = null;
                if (PopupItem != null)
                {
                    if (IsHoverPartOfPopup())
                    {
                        MouseDownItem = HoverItem;
                    }
                }
                else
                {
                    MouseDownItem = HoverItem;
                }
            }
            break;

            case InputEvents.MouseUp:
                //MouseDownItem = null;
                break;

            case InputEvents.MouseClick:
            {
                MousePosition = ScreenPointToGuiPoint(new Point(Args.X, Args.Y));
                var newArgs = new InputEventArgs {
                    X = MousePosition.X, Y = MousePosition.Y
                };

                if (PopupItem != null)
                {
                    if (HoverItem == null || (!Object.ReferenceEquals(HoverItem, PopupItem) &&
                                              !HoverItem.IsChildOf(PopupItem)))
                    {
                        if (DestroyPopupOnOffClick)
                        {
                            SafeCall(PopupItem.OnPopupClose, PopupItem);
                            DestroyWidget(PopupItem);
                            PopupItem = null;
                        }

                        MouseDownItem = null;
                        return;
                    }

                    if (HoverItem != null && (Object.ReferenceEquals(HoverItem, PopupItem) ||
                                              HoverItem.IsChildOf(PopupItem)))
                    {
                        Args.Handled = true;
                        if (Object.ReferenceEquals(HoverItem, MouseDownItem))
                        {
                            CallOnClick(HoverItem, newArgs);
                        }
                        MouseDownItem = null;
                        return;
                    }

                    MouseDownItem = null;
                    return;
                }

                if (HoverItem != null && Object.ReferenceEquals(HoverItem, MouseDownItem))
                {
                    Args.Handled = true;
                    CallOnClick(HoverItem, newArgs);
                }
                MouseDownItem = null;
            }
            break;

            case InputEvents.KeyPress:
                if (FocusItem != null)
                {
                    SafeCall(FocusItem.OnKeyPress, FocusItem, Args);
                }
                break;

            case InputEvents.KeyDown:
                if (FocusItem != null)
                {
                    SafeCall(FocusItem.OnKeyDown, FocusItem, Args);
                }
                break;

            case InputEvents.KeyUp:
                if (FocusItem != null)
                {
                    SafeCall(FocusItem.OnKeyUp, FocusItem, Args);
                }
                break;
            }
        }