/// <summary> /// Process events for the current window /// </summary> public virtual void ProcessEvent(SDL.SDL_Event e) { switch (e.type) { case SDL.SDL_EventType.SDL_QUIT: // When SDL sends a SDL_QUIT message, we have actually clicked on the close button. CloseActions?.Invoke(); break; case SDL.SDL_EventType.SDL_MOUSEBUTTONDOWN: PointerButtonPressActions?.Invoke(e.button); break; case SDL.SDL_EventType.SDL_MOUSEBUTTONUP: PointerButtonReleaseActions?.Invoke(e.button); break; case SDL.SDL_EventType.SDL_MOUSEMOTION: MouseMoveActions?.Invoke(e.motion); break; case SDL.SDL_EventType.SDL_MOUSEWHEEL: MouseWheelActions?.Invoke(e.wheel); break; case SDL.SDL_EventType.SDL_KEYDOWN: KeyDownActions?.Invoke(e.key); break; case SDL.SDL_EventType.SDL_KEYUP: KeyUpActions?.Invoke(e.key); break; case SDL.SDL_EventType.SDL_TEXTEDITING: TextEditingActions?.Invoke(e.edit); break; case SDL.SDL_EventType.SDL_TEXTINPUT: TextInputActions?.Invoke(e.text); break; case SDL.SDL_EventType.SDL_JOYDEVICEADDED: JoystickDeviceAdded?.Invoke(e.jdevice.which); break; case SDL.SDL_EventType.SDL_JOYDEVICEREMOVED: JoystickDeviceRemoved?.Invoke(e.jdevice.which); break; case SDL.SDL_EventType.SDL_FINGERMOTION: FingerMoveActions?.Invoke(e.tfinger); break; case SDL.SDL_EventType.SDL_FINGERDOWN: FingerPressActions?.Invoke(e.tfinger); break; case SDL.SDL_EventType.SDL_FINGERUP: FingerReleaseActions?.Invoke(e.tfinger); break; case SDL.SDL_EventType.SDL_DROPFILE: DropFileActions?.Invoke(SDL.UTF8_ToManaged(e.drop.file, true)); break; case SDL.SDL_EventType.SDL_WINDOWEVENT: { switch (e.window.windowEvent) { case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_SIZE_CHANGED: ResizeBeginActions?.Invoke(e.window); break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_RESIZED: ResizeEndActions?.Invoke(e.window); break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_CLOSE: CloseActions?.Invoke(); break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_SHOWN: ActivateActions?.Invoke(e.window); break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_HIDDEN: DeActivateActions?.Invoke(e.window); break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_MINIMIZED: MinimizedActions?.Invoke(e.window); break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_MAXIMIZED: MaximizedActions?.Invoke(e.window); break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_RESTORED: RestoredActions?.Invoke(e.window); break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_ENTER: MouseEnterActions?.Invoke(e.window); break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_LEAVE: MouseLeaveActions?.Invoke(e.window); break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_GAINED: FocusGainedActions?.Invoke(e.window); break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_LOST: FocusLostActions?.Invoke(e.window); break; } break; } } }
/// <summary> /// Process events for the current window /// </summary> public virtual void ProcessEvent(Event e) { switch ((EventType)e.Type) { case EventType.Quit: // When SDL sends a SDL_QUIT message, we have actually clicked on the close button. CloseActions?.Invoke(); break; case EventType.Mousebuttondown: PointerButtonPressActions?.Invoke(e.Button); break; case EventType.Mousebuttonup: PointerButtonReleaseActions?.Invoke(e.Button); break; case EventType.Mousemotion: MouseMoveActions?.Invoke(e.Motion); break; case EventType.Mousewheel: MouseWheelActions?.Invoke(e.Wheel); break; case EventType.Keydown: KeyDownActions?.Invoke(e.Key); break; case EventType.Keyup: KeyUpActions?.Invoke(e.Key); break; case EventType.Textediting: TextEditingActions?.Invoke(e.Edit); break; case EventType.Textinput: TextInputActions?.Invoke(e.Text); break; case EventType.Joydeviceadded: JoystickDeviceAdded?.Invoke(e.Jdevice.Which); break; case EventType.Joydeviceremoved: JoystickDeviceRemoved?.Invoke(e.Jdevice.Which); break; case EventType.Fingermotion: FingerMoveActions?.Invoke(e.Tfinger); break; case EventType.Fingerdown: FingerPressActions?.Invoke(e.Tfinger); break; case EventType.Fingerup: FingerReleaseActions?.Invoke(e.Tfinger); break; case EventType.Dropfile: DropFileActions?.Invoke(Silk.NET.Core.Native.SilkMarshal.PtrToString((IntPtr)e.Drop.File, Silk.NET.Core.Native.NativeStringEncoding.UTF8)); break; case EventType.Windowevent: { switch ((WindowEventID)e.Window.Event) { case WindowEventID.WindoweventSizeChanged: ResizeBeginActions?.Invoke(e.Window); break; case WindowEventID.WindoweventResized: ResizeEndActions?.Invoke(e.Window); break; case WindowEventID.WindoweventClose: CloseActions?.Invoke(); break; case WindowEventID.WindoweventShown: ActivateActions?.Invoke(e.Window); break; case WindowEventID.WindoweventHidden: DeActivateActions?.Invoke(e.Window); break; case WindowEventID.WindoweventMinimized: MinimizedActions?.Invoke(e.Window); break; case WindowEventID.WindoweventMaximized: MaximizedActions?.Invoke(e.Window); break; case WindowEventID.WindoweventRestored: RestoredActions?.Invoke(e.Window); break; case WindowEventID.WindoweventEnter: MouseEnterActions?.Invoke(e.Window); break; case WindowEventID.WindoweventLeave: MouseLeaveActions?.Invoke(e.Window); break; case WindowEventID.WindoweventFocusGained: FocusGainedActions?.Invoke(e.Window); break; case WindowEventID.WindoweventFocusLost: FocusLostActions?.Invoke(e.Window); break; } break; } } }