Exemplo n.º 1
0
        async Task ProcessContinuousButtonPressedAsync(Curses.MouseEvent cev, MouseFlags mouseFlag)
        {
            while (IsButtonPressed && LastMouseButtonPressed != null)
            {
                await Task.Delay(100);

                var me = new MouseEvent()
                {
                    X     = cev.X,
                    Y     = cev.Y,
                    Flags = mouseFlag
                };

                var view = Application.wantContinuousButtonPressedView;
                if (view == null)
                {
                    break;
                }
                if (IsButtonPressed && LastMouseButtonPressed != null && (mouseFlag & MouseFlags.ReportMousePosition) == 0)
                {
                    mouseHandler(me);
                    //mainLoop.Driver.Wakeup ();
                }
            }
        }
Exemplo n.º 2
0
 static MouseEvent ToDriverMouse(Curses.MouseEvent cev)
 {
     return(new MouseEvent {
         X = cev.X,
         Y = cev.Y,
         Flags = (MouseFlags)cev.ButtonState
     });
 }
Exemplo n.º 3
0
 MouseEvent ProcessButtonState(Curses.MouseEvent cev, MouseFlags mf)
 {
     return(new MouseEvent()
     {
         X = cev.X,
         Y = cev.Y,
         Flags = mf
     });
 }
Exemplo n.º 4
0
        MouseFlags GetButtonState(Curses.MouseEvent cev, bool pressed = false)
        {
            MouseFlags mf = default;

            switch (cev.ButtonState)
            {
            case Curses.Event.Button1Clicked:
                if (pressed)
                {
                    mf = MouseFlags.Button1Pressed;
                }
                else
                {
                    mf = MouseFlags.Button1Released;
                }
                break;

            case Curses.Event.Button2Clicked:
                if (pressed)
                {
                    mf = MouseFlags.Button2Pressed;
                }
                else
                {
                    mf = MouseFlags.Button2Released;
                }
                break;

            case Curses.Event.Button3Clicked:
                if (pressed)
                {
                    mf = MouseFlags.Button3Pressed;
                }
                else
                {
                    mf = MouseFlags.Button3Released;
                }
                break;

            case Curses.Event.Button1Released:
                mf = MouseFlags.Button1Clicked;
                break;

            case Curses.Event.Button2Released:
                mf = MouseFlags.Button2Clicked;
                break;

            case Curses.Event.Button3Released:
                mf = MouseFlags.Button3Clicked;
                break;
            }
            return(mf);
        }
Exemplo n.º 5
0
 private MouseFlags ProcessButtonReleasedEvent(Curses.MouseEvent cev, MouseFlags mf)
 {
     mf = (MouseFlags)cev.ButtonState;
     mouseHandler(ProcessButtonState(cev, mf));
     if (!cancelButtonClicked && LastMouseButtonPressed == null)
     {
         mf = GetButtonState(cev);
     }
     else
     {
         cancelButtonClicked = false;
     }
     return(mf);
 }
Exemplo n.º 6
0
        MouseFlags ProcessButtonReleasedEvent(Curses.MouseEvent cev)
        {
            var mf = MapCursesButton(cev.ButtonState);

            if (!cancelButtonClicked && LastMouseButtonPressed == null && !isReportMousePosition)
            {
                mouseHandler(ProcessButtonState(cev, mf));
                mf = GetButtonState(cev);
            }
            else if (isReportMousePosition)
            {
                mf = MouseFlags.ReportMousePosition;
            }
            cancelButtonClicked = false;
            return(mf);
        }
Exemplo n.º 7
0
 private MouseFlags ProcessButtonClickedEvent(Curses.MouseEvent cev, MouseFlags mf)
 {
     LastMouseButtonPressed = cev.ButtonState;
     mf = GetButtonState(cev, true);
     mouseHandler(ProcessButtonState(cev, mf));
     if (LastMouseButtonPressed != null && LastMouseButtonPressed == cev.ButtonState)
     {
         mf = GetButtonState(cev, false);
         mouseHandler(ProcessButtonState(cev, mf));
         if (LastMouseButtonPressed != null && LastMouseButtonPressed == cev.ButtonState)
         {
             mf = (MouseFlags)cev.ButtonState;
         }
     }
     LastMouseButtonPressed = null;
     return(mf);
 }
Exemplo n.º 8
0
        static MouseFlags SetControlKeyStates(Curses.MouseEvent cev, MouseFlags mouseFlag)
        {
            if ((cev.ButtonState & Curses.Event.ButtonCtrl) != 0 && (mouseFlag & MouseFlags.ButtonCtrl) == 0)
            {
                mouseFlag |= MouseFlags.ButtonCtrl;
            }

            if ((cev.ButtonState & Curses.Event.ButtonShift) != 0 && (mouseFlag & MouseFlags.ButtonShift) == 0)
            {
                mouseFlag |= MouseFlags.ButtonShift;
            }

            if ((cev.ButtonState & Curses.Event.ButtonAlt) != 0 && (mouseFlag & MouseFlags.ButtonAlt) == 0)
            {
                mouseFlag |= MouseFlags.ButtonAlt;
            }
            return(mouseFlag);
        }
Exemplo n.º 9
0
        MouseEvent ToDriverMouse(Curses.MouseEvent cev)
        {
            MouseFlags mouseFlag = MouseFlags.AllEvents;

            if (LastMouseButtonPressed != null && cev.ButtonState != Curses.Event.ReportMousePosition)
            {
                LastMouseButtonPressed = null;
                IsButtonPressed        = false;
            }


            if ((cev.ButtonState == Curses.Event.Button1Clicked || cev.ButtonState == Curses.Event.Button2Clicked ||
                 cev.ButtonState == Curses.Event.Button3Clicked) &&
                LastMouseButtonPressed == null)
            {
                IsButtonPressed = false;
                mouseFlag       = ProcessButtonClickedEvent(cev, mouseFlag);
            }
            else if (((cev.ButtonState == Curses.Event.Button1Pressed || cev.ButtonState == Curses.Event.Button2Pressed ||
                       cev.ButtonState == Curses.Event.Button3Pressed) && LastMouseButtonPressed == null) ||
                     IsButtonPressed && cev.ButtonState == Curses.Event.ReportMousePosition)
            {
                mouseFlag = (MouseFlags)cev.ButtonState;
                if (cev.ButtonState != Curses.Event.ReportMousePosition)
                {
                    LastMouseButtonPressed = cev.ButtonState;
                }
                IsButtonPressed = true;

                if (cev.ButtonState == Curses.Event.ReportMousePosition)
                {
                    mouseFlag           = (MouseFlags)LastMouseButtonPressed | MouseFlags.ReportMousePosition;
                    point               = new Point();
                    cancelButtonClicked = true;
                }
                else
                {
                    point = new Point()
                    {
                        X = cev.X,
                        Y = cev.Y
                    };
                }

                if ((mouseFlag & MouseFlags.ReportMousePosition) == 0)
                {
                    Task.Run(async() => {
                        while (IsButtonPressed && LastMouseButtonPressed != null)
                        {
                            await Task.Delay(200);
                            var me = new MouseEvent()
                            {
                                X     = cev.X,
                                Y     = cev.Y,
                                Flags = mouseFlag
                            };

                            var view = Application.wantContinuousButtonPressedView;
                            if (view == null)
                            {
                                break;
                            }
                            if (IsButtonPressed && LastMouseButtonPressed != null && (mouseFlag & MouseFlags.ReportMousePosition) == 0)
                            {
                                mouseHandler(me);
                                //mainLoop.Driver.Wakeup ();
                            }
                        }
                    });
                }
            }
            else if ((cev.ButtonState == Curses.Event.Button1Released || cev.ButtonState == Curses.Event.Button2Released ||
                      cev.ButtonState == Curses.Event.Button3Released))
            {
                mouseFlag       = ProcessButtonReleasedEvent(cev, mouseFlag);
                IsButtonPressed = false;
            }
            else if (cev.ButtonState == Curses.Event.Button4Pressed)
            {
                mouseFlag = MouseFlags.WheeledUp;
            }
            else if (cev.ButtonState == Curses.Event.ReportMousePosition && cev.X == point.X && cev.Y == point.Y)
            {
                mouseFlag = MouseFlags.WheeledDown;
            }
            else if (cev.ButtonState == Curses.Event.ReportMousePosition)
            {
                mouseFlag = MouseFlags.ReportMousePosition;
            }
            else
            {
                mouseFlag = (MouseFlags)cev.ButtonState;
            }

            point = new Point()
            {
                X = cev.X,
                Y = cev.Y
            };



            if (cev.ID != 0)
            {
                mouseFlag = MouseFlags.WheeledDown;
            }

            return(new MouseEvent()
            {
                X = cev.X,
                Y = cev.Y,
                //Flags = (MouseFlags)cev.ButtonState
                Flags = mouseFlag
            });
        }
Exemplo n.º 10
0
        MouseEvent ToDriverMouse(Curses.MouseEvent cev)
        {
            MouseFlags mouseFlag = MouseFlags.AllEvents;

            if (LastMouseButtonPressed != null && cev.ButtonState != Curses.Event.ReportMousePosition)
            {
                LastMouseButtonPressed = null;
                IsButtonPressed        = false;
            }


            if ((cev.ButtonState == Curses.Event.Button1Clicked || cev.ButtonState == Curses.Event.Button2Clicked ||
                 cev.ButtonState == Curses.Event.Button3Clicked) &&
                LastMouseButtonPressed == null)
            {
                IsButtonPressed = false;
                mouseFlag       = ProcessButtonClickedEvent(cev);
            }
            else if (((cev.ButtonState == Curses.Event.Button1Pressed || cev.ButtonState == Curses.Event.Button2Pressed ||
                       cev.ButtonState == Curses.Event.Button3Pressed) && LastMouseButtonPressed == null) ||
                     IsButtonPressed && cev.ButtonState == Curses.Event.ReportMousePosition)
            {
                mouseFlag = MapCursesButton(cev.ButtonState);
                if (cev.ButtonState != Curses.Event.ReportMousePosition)
                {
                    LastMouseButtonPressed = cev.ButtonState;
                }
                IsButtonPressed       = true;
                isReportMousePosition = false;

                if (cev.ButtonState == Curses.Event.ReportMousePosition)
                {
                    mouseFlag = MapCursesButton((Curses.Event)LastMouseButtonPressed) | MouseFlags.ReportMousePosition;
                    point     = new Point();
                    //cancelButtonClicked = true;
                }
                else
                {
                    point = new Point()
                    {
                        X = cev.X,
                        Y = cev.Y
                    };
                }

                if ((mouseFlag & MouseFlags.ReportMousePosition) == 0)
                {
                    ProcessContinuousButtonPressedAsync(cev, mouseFlag).ConfigureAwait(false);
                }
            }
            else if ((cev.ButtonState == Curses.Event.Button1Released || cev.ButtonState == Curses.Event.Button2Released ||
                      cev.ButtonState == Curses.Event.Button3Released))
            {
                mouseFlag       = ProcessButtonReleasedEvent(cev);
                IsButtonPressed = false;
            }
            else if (cev.ButtonState == Curses.Event.ButtonWheeledUp)
            {
                mouseFlag = MouseFlags.WheeledUp;
            }
            else if (cev.ButtonState == Curses.Event.ButtonWheeledDown)
            {
                mouseFlag = MouseFlags.WheeledDown;
            }
            else if ((cev.ButtonState & (Curses.Event.ButtonWheeledUp & Curses.Event.ButtonShift)) != 0)
            {
                mouseFlag = MouseFlags.WheeledLeft;
            }
            else if ((cev.ButtonState & (Curses.Event.ButtonWheeledDown & Curses.Event.ButtonShift)) != 0)
            {
                mouseFlag = MouseFlags.WheeledRight;
            }
            else if (cev.ButtonState == Curses.Event.ReportMousePosition)
            {
                mouseFlag             = MouseFlags.ReportMousePosition;
                isReportMousePosition = true;
            }
            else
            {
                mouseFlag = 0;
                var eFlags = cev.ButtonState;
                foreach (Enum value in Enum.GetValues(eFlags.GetType()))
                {
                    if (eFlags.HasFlag(value))
                    {
                        mouseFlag |= MapCursesButton((Curses.Event)value);
                    }
                }
            }

            mouseFlag = SetControlKeyStates(cev, mouseFlag);

            point = new Point()
            {
                X = cev.X,
                Y = cev.Y
            };

            return(new MouseEvent()
            {
                X = cev.X,
                Y = cev.Y,
                //Flags = MapCursesButton (cev.ButtonState)
                Flags = mouseFlag
            });
        }
Exemplo n.º 11
0
        MouseEvent ToDriverMouse(Curses.MouseEvent cev)
        {
            MouseFlags mouseFlag = MouseFlags.AllEvents;

            if (LastMouseButtonPressed != null && cev.ButtonState != Curses.Event.ReportMousePosition)
            {
                LastMouseButtonPressed = null;
                IsButtonPressed        = false;
            }


            if ((cev.ButtonState == Curses.Event.Button1Clicked || cev.ButtonState == Curses.Event.Button2Clicked ||
                 cev.ButtonState == Curses.Event.Button3Clicked) &&
                LastMouseButtonPressed == null)
            {
                IsButtonPressed = false;
                mouseFlag       = ProcessButtonClickedEvent(cev);
            }
            else if (((cev.ButtonState == Curses.Event.Button1Pressed || cev.ButtonState == Curses.Event.Button2Pressed ||
                       cev.ButtonState == Curses.Event.Button3Pressed) && LastMouseButtonPressed == null) ||
                     IsButtonPressed && cev.ButtonState == Curses.Event.ReportMousePosition)
            {
                mouseFlag = MapCursesButton(cev.ButtonState);
                if (cev.ButtonState != Curses.Event.ReportMousePosition)
                {
                    LastMouseButtonPressed = cev.ButtonState;
                }
                IsButtonPressed       = true;
                isReportMousePosition = false;

                if (cev.ButtonState == Curses.Event.ReportMousePosition)
                {
                    mouseFlag = MapCursesButton((Curses.Event)LastMouseButtonPressed) | MouseFlags.ReportMousePosition;
                    point     = new Point();
                    //cancelButtonClicked = true;
                }
                else
                {
                    point = new Point()
                    {
                        X = cev.X,
                        Y = cev.Y
                    };
                }

                if ((mouseFlag & MouseFlags.ReportMousePosition) == 0)
                {
                    Task.Run(async() => {
                        while (IsButtonPressed && LastMouseButtonPressed != null)
                        {
                            await Task.Delay(100);
                            var me = new MouseEvent()
                            {
                                X     = cev.X,
                                Y     = cev.Y,
                                Flags = mouseFlag
                            };

                            var view = Application.wantContinuousButtonPressedView;
                            if (view == null)
                            {
                                break;
                            }
                            if (IsButtonPressed && LastMouseButtonPressed != null && (mouseFlag & MouseFlags.ReportMousePosition) == 0)
                            {
                                mouseHandler(me);
                                //mainLoop.Driver.Wakeup ();
                            }
                        }
                    });
                }
            }
            else if ((cev.ButtonState == Curses.Event.Button1Released || cev.ButtonState == Curses.Event.Button2Released ||
                      cev.ButtonState == Curses.Event.Button3Released))
            {
                mouseFlag       = ProcessButtonReleasedEvent(cev);
                IsButtonPressed = false;
            }
            else if (cev.ButtonState == Curses.Event.ButtonWheeledUp)
            {
                mouseFlag = MouseFlags.WheeledUp;
            }
            else if (cev.ButtonState == Curses.Event.ButtonWheeledDown)
            {
                mouseFlag = MouseFlags.WheeledDown;
            }
            else if ((cev.ButtonState & (Curses.Event.ButtonWheeledUp & Curses.Event.ButtonShift)) != 0)
            {
                mouseFlag = MouseFlags.WheeledLeft;
            }
            else if ((cev.ButtonState & (Curses.Event.ButtonWheeledDown & Curses.Event.ButtonShift)) != 0)
            {
                mouseFlag = MouseFlags.WheeledRight;
            }
            else if (cev.ButtonState == Curses.Event.ReportMousePosition)
            {
                mouseFlag             = MouseFlags.ReportMousePosition;
                isReportMousePosition = true;
            }
            else
            {
                mouseFlag = 0;
                var eFlags = cev.ButtonState;
                foreach (Enum value in Enum.GetValues(eFlags.GetType()))
                {
                    if (eFlags.HasFlag(value))
                    {
                        mouseFlag |= MapCursesButton((Curses.Event)value);
                    }
                }
            }

            mouseFlag = SetControlKeyStates(cev, mouseFlag);

            point = new Point()
            {
                X = cev.X,
                Y = cev.Y
            };

            return(new MouseEvent()
            {
                X = cev.X,
                Y = cev.Y,
                //Flags = MapCursesButton (cev.ButtonState)
                Flags = mouseFlag
            });
        }