Exemple #1
0
        /// <summary>
        /// Setup the native platform and creates a window.
        /// </summary>
        /// <param name="config">Configuration for the platform - usually passed from the engine.</param>
        internal virtual void Setup(Configurator config)
        {
            OnMouseScroll.AddListener(scroll =>
            {
                _mouseScrollAccum += scroll;
                return(true);
            });
            PopulateKeyCodes();

            SetupPlatform(config);

            // Check if the platform initialization was successful.
            if (Window == null)
            {
                Engine.SubmitError(new Exception("Platform couldn't create window."));
                return;
            }

            if (Window.Context == null)
            {
                Engine.SubmitError(new Exception("Platform couldn't create context."));
                return;
            }

            // Bind this window and its context.
            // "There /can/ be only one."
            Window.Context.MakeCurrent();
            Gl.BindAPI(Window.Context.GetProcAddress);

            // Set display mode, show and focus.
            Window.DisplayMode = config.InitialDisplayMode;
            Window.WindowState = WindowState.Normal;

            // Attach default key behavior.
            OnKey.AddListener(DefaultButtonBehavior);

            IsSetup = true;
            IsOpen  = true;
        }
Exemple #2
0
 protected void UpdateScroll(float amount)
 {
     _mouseScrollAccum += amount;
     OnMouseScroll.Invoke(amount);
 }
Exemple #3
0
        public override void PollEvents()
        {
            while (SDL.PollEvent(out ev) == 1)
            {
                switch (ev.Type)
                {
                case EventType.Quit:
                    OnQuit?.Invoke();
                    break;

                case EventType.KeyDown:
                    OnKeyDown?.Invoke(ev.Key.Keysym.Sym, ev.Key.Keysym.ScanCode);
                    break;

                case EventType.KeyUp:
                    OnKeyUp?.Invoke(ev.Key.Keysym.Sym, ev.Key.Keysym.ScanCode);
                    break;

                case EventType.MouseMotion:
                    OnMouseMove?.Invoke(ev.Motion.X, ev.Motion.Y);
                    break;

                case EventType.MouseButtonDown:
                    OnMouseButtonDown?.Invoke(ev.Button.Button);
                    break;

                case EventType.MouseButtonUp:
                    OnMouseButtonUp?.Invoke(ev.Button.Button);
                    break;

                case EventType.MouseWheel:
                    OnMouseScroll?.Invoke(ev.Wheel.X, ev.Wheel.Y);
                    break;

                case EventType.JoyDeviceAdded:
                    OnJoyDeviceAdd?.Invoke(ev.JDevice.Which);
                    break;

                case EventType.JoyDeviceRemoved:
                    OnJoyDeviceRemove?.Invoke(ev.JDevice.Which);
                    break;

                case EventType.JoyButtonDown:
                    OnJoyButtonDown?.Invoke(ev.JButton.Which, ev.JButton.Button);
                    break;

                case EventType.JoyButtonUp:
                    OnJoyButtonDown?.Invoke(ev.JButton.Which, ev.JButton.Button);
                    break;

                case EventType.JoyAxisMotion:
                    OnJoyAxisMove?.Invoke(ev.JAxis.Which, ev.JAxis.Axis, ev.JAxis.Value / (float)short.MaxValue);
                    break;

                case EventType.WindowEvent:
                    if (ev.Window.WindowID == windowID)
                    {
                        switch (ev.Window.Event)
                        {
                        case WindowEventID.Close:
                            OnWinClose?.Invoke();
                            break;

                        case WindowEventID.Shown:
                            OnWinShown?.Invoke();
                            break;

                        case WindowEventID.Hidden:
                            OnWinHidden?.Invoke();
                            break;

                        case WindowEventID.Exposed:
                            OnWinExposed?.Invoke();
                            break;

                        case WindowEventID.Moved:
                            OnWinMoved?.Invoke();
                            break;

                        case WindowEventID.Resized:
                            OnWinResized?.Invoke();
                            break;

                        case WindowEventID.Minimized:
                            OnWinMinimized?.Invoke();
                            break;

                        case WindowEventID.Maximized:
                            OnWinMaximized?.Invoke();
                            break;

                        case WindowEventID.Restored:
                            OnWinRestored?.Invoke();
                            break;

                        case WindowEventID.Enter:
                            OnWinEnter?.Invoke();
                            break;

                        case WindowEventID.Leave:
                            OnWinLeave?.Invoke();
                            break;

                        case WindowEventID.FocusGained:
                            OnWinFocusGained?.Invoke();
                            break;

                        case WindowEventID.FocusLost:
                            OnWinFocusLost?.Invoke();
                            break;

                        default:
                            OnWinOtherEvent?.Invoke((int)ev.Window.Event);
                            break;
                        }
                    }
                    break;

                default:
                    OnOtherEvent?.Invoke((int)ev.Type);
                    break;
                }
            }
        }
Exemple #4
0
 private void TriggerMouseScroll(int value)
 {
     OnMouseScroll?.Invoke(value);
 }
Exemple #5
0
 public void MouseScroll(object sender, MouseEventArgs scrollEventArgs)
 {
     OnMouseScroll?.Invoke(sender, scrollEventArgs);
 }
Exemple #6
0
        /// <summary>
        /// mousehook callback happens.
        /// </summary>
        /// <param name="nCode"></param>
        /// <param name="wParam"></param>
        /// <param name="lParam"></param>
        /// <returns></returns>
        private IntPtr MHookCallback(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode < 0)
            {
                return(CallNextHookEx(_kbHookID, nCode, wParam, lParam));
            }

            MSLLHOOKSTRUCT hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));

            switch ((int)wParam)
            {
            case WM_LBUTTONDOWN:
                MarkMouseButtonAsPressed(hookStruct, MouseEventArgs.Buttons.LMB, true);
                break;

            case WM_RBUTTONDOWN:
                MarkMouseButtonAsPressed(hookStruct, MouseEventArgs.Buttons.RMB, true);
                break;

            case WM_MBUTTONDOWN:
                MarkMouseButtonAsPressed(hookStruct, MouseEventArgs.Buttons.MMB, true);
                break;

            case WM_XBUTTONDOWN:
                switch (((uint)hookStruct.mouseData >> 16 & (uint)ushort.MaxValue))
                {
                case 1:
                    MarkMouseButtonAsPressed(hookStruct, MouseEventArgs.Buttons.XMB1, true);
                    break;

                case 2:
                    MarkMouseButtonAsPressed(hookStruct, MouseEventArgs.Buttons.XMB2, true);
                    break;
                }
                break;

            case WM_LBUTTONUP:
                MarkMouseButtonAsPressed(hookStruct, MouseEventArgs.Buttons.LMB, false);
                break;

            case WM_RBUTTONUP:
                MarkMouseButtonAsPressed(hookStruct, MouseEventArgs.Buttons.RMB, false);
                break;

            case WM_MBUTTONUP:
                MarkMouseButtonAsPressed(hookStruct, MouseEventArgs.Buttons.MMB, false);
                break;

            case WM_XBUTTONUP:
                switch (((uint)hookStruct.mouseData >> 16 & (uint)ushort.MaxValue))
                {
                case 1:
                    MarkMouseButtonAsPressed(hookStruct, MouseEventArgs.Buttons.XMB1, false);
                    break;

                case 2:
                    MarkMouseButtonAsPressed(hookStruct, MouseEventArgs.Buttons.XMB2, false);
                    break;
                }
                break;


            case WM_MOUSEWHEEL:
                if (hookStruct.mouseData >> 16 > 0)
                {
                    OnMouseScroll?.Invoke(this, new ScrollEventArgs(ScrollEventArgs.Directions.Up));
                }
                else
                {
                    OnMouseScroll?.Invoke(this, new ScrollEventArgs(ScrollEventArgs.Directions.Down));
                }
                break;

            case WM_MOUSEHWHEEL:
                if (hookStruct.mouseData >> 16 > 0)
                {
                    OnMouseScroll?.Invoke(this, new ScrollEventArgs(ScrollEventArgs.Directions.Right));
                }
                else
                {
                    OnMouseScroll?.Invoke(this, new ScrollEventArgs(ScrollEventArgs.Directions.Left));
                }
                break;


            case WM_MOUSEMOVE:
                break;
            }

            return(CallNextHookEx(_mHookID, nCode, wParam, lParam));
        }
Exemple #7
0
        private void InputThread()
        {
            // if there is no console available, no need to display anything.
            if (_screenLogBuilder == null)
            {
                return;
            }
            // get pointer to the console
            var hWnd = GetStdHandle(STD_INPUT_HANDLE);

            // disable quick edit mode as it steals mouse input
            var wasQuickEditModeEnabled = IsQuickEditModeEnabled(hWnd);

            if (wasQuickEditModeEnabled)
            {
                DisableQuickEditMode(hWnd);
            }

            EnableConsoleInputs(hWnd);

            // read initial key state
            CapsLockEnabled   = GetKeyState(VirtualKeyStates.VK_CAPITAL) == 1;
            NumLockEnabled    = GetKeyState(VirtualKeyStates.VK_NUMLOCK) == 1;
            ScrollLockEnabled = GetKeyState(VirtualKeyStates.VK_SCROLL) == 1;

            while (!_isRunning.WaitOne(100))
            {
                var buffer     = new INPUT_RECORD[128];
                var eventsRead = 0U;
                var success    = GetNumberOfConsoleInputEvents(hWnd, out eventsRead);
                if (eventsRead > 0)
                {
                    var keyRead = ReadConsoleInput(hWnd, buffer, (uint)buffer.Length, out eventsRead);
                    if (keyRead)
                    {
                        for (var z = 0; z < eventsRead; z++)
                        {
                            switch (buffer[z].EventType)
                            {
                            case KEYBOARD_EVENT:
                                var keyEvent = buffer[z].KeyEvent;
                                var key      = (ConsoleKey)keyEvent.wVirtualKeyCode;
                                CapsLockEnabled   = keyEvent.dwControlKeyState.HasFlag(ControlKeyState.CAPSLOCK_ON);
                                ScrollLockEnabled = keyEvent.dwControlKeyState.HasFlag(ControlKeyState.SCROLLLOCK_ON);
                                NumLockEnabled    = keyEvent.dwControlKeyState.HasFlag(ControlKeyState.NUMLOCK_ON);
                                if (Options.InputOptions == InputOptions.UseBuiltInKeyOperations)
                                {
                                    // internal keyboard handling events
                                    if (_isSearchEnabled && keyEvent.bKeyDown &&
                                        !keyEvent.dwControlKeyState.HasFlag(ControlKeyState.LEFT_CTRL_PRESSED) &&
                                        !keyEvent.dwControlKeyState.HasFlag(ControlKeyState.RIGHT_CTRL_PRESSED) &&
                                        !keyEvent.dwControlKeyState.HasFlag(ControlKeyState.LEFT_ALT_PRESSED) &&
                                        !keyEvent.dwControlKeyState.HasFlag(ControlKeyState.RIGHT_ALT_PRESSED)
                                        )
                                    {
                                        AddSearchString(keyEvent.UnicodeChar);
                                    }
                                    if (keyEvent.bKeyDown)
                                    {
                                        switch (key)
                                        {
                                        case ConsoleKey.H:
                                            if (!_isSearchEnabled)
                                            {
                                                ToggleHelp();
                                            }
                                            break;

                                        case ConsoleKey.Home:
                                            // scroll to start
                                            _bufferYCursor = Configuration.MaxHistoryLines;
                                            _hasLogUpdates = true;
                                            break;

                                        case ConsoleKey.Escape:
                                        case ConsoleKey.End:
                                            // scroll to end
                                            _bufferYCursor   = 0;
                                            _searchLineIndex = -1;
                                            _hasLogUpdates   = true;
                                            SetSearch(false);
                                            break;

                                        case ConsoleKey.PageUp:
                                            if (Options.InputOptions == InputOptions.UseBuiltInKeyOperations)
                                            {
                                                _hasLogUpdates = true;
                                                if (_bufferYCursor < _fullLogHistory.Count - LogDisplayHeight)
                                                {
                                                    _bufferYCursor += LogDisplayHeight;
                                                }
                                                else
                                                {
                                                    _bufferYCursor = _fullLogHistory.Count;
                                                }
                                            }
                                            break;

                                        case ConsoleKey.PageDown:
                                            if (Options.InputOptions == InputOptions.UseBuiltInKeyOperations)
                                            {
                                                _hasLogUpdates = true;
                                                if (_bufferYCursor - LogDisplayHeight > 0)
                                                {
                                                    _bufferYCursor -= LogDisplayHeight;
                                                }
                                                else
                                                {
                                                    _bufferYCursor = 0;
                                                }
                                            }
                                            break;

                                        case ConsoleKey.Enter:
                                            if (_isSearchEnabled)
                                            {
                                                FindNext();
                                            }
                                            break;

                                        case ConsoleKey.S:
                                            // find/search
                                            if (keyEvent.dwControlKeyState.HasFlag(ControlKeyState.LEFT_CTRL_PRESSED))
                                            {
                                                ToggleSearch();
                                            }
                                            break;

                                        case ConsoleKey.F3:
                                            // find/search control keys
                                            if (keyEvent.dwControlKeyState.HasFlag(ControlKeyState.SHIFT_PRESSED))
                                            {
                                                FindPrevious();
                                            }
                                            else
                                            {
                                                FindNext();
                                            }
                                            break;

                                        case ConsoleKey.Q:
                                            // quit
                                            if (!_isSearchEnabled)
                                            {
                                                System.Diagnostics.Debug.WriteLine("Quitting....");
                                                Close();
                                                Dispose();
                                            }
                                            break;
                                        }
                                    }
                                }

                                OnKeyPress?.Invoke(new KeyPressEventArgs(key, keyEvent.dwControlKeyState));
                                break;

                            case MOUSE_EVENT:
                                var mouseEvent = buffer[z].MouseEvent;
                                if (mouseEvent.dwEventFlags == MOUSE_MOVED)
                                {
                                    // mouse move
                                    OnMouseMove?.Invoke(new MouseMoveEventArgs(mouseEvent.dwMousePosition.x, mouseEvent.dwMousePosition.y));
                                }
                                else if (mouseEvent.dwEventFlags == MOUSE_BUTTON)
                                {
                                    // mouse button press
                                    OnMousePress?.Invoke(new MousePressEventArgs((MouseButtonState)mouseEvent.dwButtonState, mouseEvent.dwControlKeyState));
                                }
                                else if (mouseEvent.dwEventFlags == MOUSE_WHEELED)
                                {
                                    // mouse wheel scroll
                                    var isWheelUp   = mouseEvent.dwButtonState == MOUSE_WHEELUP;
                                    var isWheelDown = mouseEvent.dwButtonState == MOUSE_WHEELDOWN;
                                    if (isWheelUp)
                                    {
                                        if (Options.InputOptions == InputOptions.UseBuiltInKeyOperations)
                                        {
                                            _hasLogUpdates = true;
                                            if (_bufferYCursor > 0)
                                            {
                                                _bufferYCursor--;
                                            }
                                        }
                                        OnMouseScroll?.Invoke(new MouseScrollEventArgs(MouseScrollDirection.Up));
                                    }
                                    if (isWheelDown)
                                    {
                                        if (Options.InputOptions == InputOptions.UseBuiltInKeyOperations)
                                        {
                                            _hasLogUpdates = true;
                                            if (_bufferYCursor < _fullLogHistory.Count - LogDisplayHeight)
                                            {
                                                _bufferYCursor++;
                                            }
                                        }
                                        OnMouseScroll?.Invoke(new MouseScrollEventArgs(MouseScrollDirection.Down));
                                    }
                                }

                                break;
                            }
                        }
                    }
                }
            }

            if (wasQuickEditModeEnabled)
            {
                EnableQuickEditMode(hWnd);
            }
        }