public MouseAction(SDL.SDL_MouseButtonEvent ev) { MouseX = ev.x; MouseY = ev.y; NumClicks = ev.clicks; Button = (MouseButton)ev.button; }
private void OnMouseInputEvent(SDL.SDL_MouseButtonEvent e) { MouseButton button = ConvertMouseButton(e.button); if (e.type == SDL.SDL_EventType.SDL_MOUSEBUTTONDOWN) { MouseState.HandleButtonDown(button); } else { MouseState.HandleButtonUp(button); } }
public static MouseButton MapSdlMouseButton(SDL.SDL_MouseButtonEvent mouseButtonEvent) { switch (mouseButtonEvent.button) { case (byte)SDL.SDL_BUTTON_LEFT: return(MouseButton.Left); case (byte)SDL.SDL_BUTTON_MIDDLE: return(MouseButton.Middle); case (byte)SDL.SDL_BUTTON_RIGHT: return(MouseButton.Right); case (byte)SDL.SDL_BUTTON_X1: return(MouseButton.X1); case (byte)SDL.SDL_BUTTON_X2: return(MouseButton.X2); default: return(MouseButton.Unknown); } }
private unsafe int HandleSDLEvent(IntPtr userdata, IntPtr ptr) { SDL_Event *e = (SDL_Event *)ptr; switch (e->type) { case SDL.SDL_EventType.SDL_AUDIODEVICEADDED: Console.WriteLine("AUDIO ADDED: {0}", e->adevice.which); break; case SDL.SDL_EventType.SDL_AUDIODEVICEREMOVED: Console.WriteLine("AUDIO REMOVED: {0}", e->adevice.which); break; case SDL.SDL_EventType.SDL_WINDOWEVENT: switch (e->window.windowEvent) { case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_ENTER: Mouse.MouseInWindow = true; break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_LEAVE: Mouse.MouseInWindow = false; break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_GAINED: Plugin.OnFocusGained(); break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_LOST: Plugin.OnFocusLost(); break; } break; case SDL.SDL_EventType.SDL_KEYDOWN: Keyboard.OnKeyDown(e->key); if (Plugin.ProcessHotkeys((int)e->key.keysym.sym, (int)e->key.keysym.mod, true)) { _ignoreNextTextInput = false; UIManager.KeyboardFocusControl?.InvokeKeyDown(e->key.keysym.sym, e->key.keysym.mod); _scene.OnKeyDown(e->key); } else { _ignoreNextTextInput = true; } break; case SDL.SDL_EventType.SDL_KEYUP: Keyboard.OnKeyUp(e->key); UIManager.KeyboardFocusControl?.InvokeKeyUp(e->key.keysym.sym, e->key.keysym.mod); _scene.OnKeyUp(e->key); Plugin.ProcessHotkeys(0, 0, false); if (e->key.keysym.sym == SDL_Keycode.SDLK_PRINTSCREEN) { string path = Path.Combine(FileSystemHelper.CreateFolderIfNotExists(CUOEnviroment.ExecutablePath, "Data", "Client", "Screenshots"), $"screenshot_{DateTime.Now:yyyy-MM-dd_hh-mm-ss}.png"); using (Stream stream = File.Create(path)) { _buffer.SaveAsPng(stream, _buffer.Width, _buffer.Height); GameActions.Print($"Screenshot stored in: {path}", 0x44, MessageType.System); } } break; case SDL.SDL_EventType.SDL_TEXTINPUT: if (_ignoreNextTextInput) { break; } string s = StringHelper.ReadUTF8(e->text.text); if (!string.IsNullOrEmpty(s)) { UIManager.KeyboardFocusControl?.InvokeTextInput(s); _scene.OnTextInput(s); } break; case SDL.SDL_EventType.SDL_MOUSEMOTION: Mouse.Update(); if (Mouse.IsDragging) { UIManager.OnMouseDragging(); _scene.OnMouseDragging(); } if (Mouse.IsDragging && !_dragStarted) { _dragStarted = true; } break; case SDL.SDL_EventType.SDL_MOUSEWHEEL: Mouse.Update(); bool isup = e->wheel.y > 0; Plugin.ProcessMouse(0, e->wheel.y); UIManager.OnMouseWheel(isup); _scene.OnMouseWheel(isup); break; case SDL.SDL_EventType.SDL_MOUSEBUTTONUP: case SDL.SDL_EventType.SDL_MOUSEBUTTONDOWN: Mouse.Update(); bool isDown = e->type == SDL.SDL_EventType.SDL_MOUSEBUTTONDOWN; if (_dragStarted && !isDown) { _dragStarted = false; } SDL.SDL_MouseButtonEvent mouse = e->button; switch ((uint)mouse.button) { case SDL_BUTTON_LEFT: if (isDown) { Mouse.Begin(); Mouse.LButtonPressed = true; Mouse.LDropPosition = Mouse.Position; Mouse.CancelDoubleClick = false; uint ticks = Time.Ticks; if (Mouse.LastLeftButtonClickTime + Mouse.MOUSE_DELAY_DOUBLE_CLICK >= ticks) { Mouse.LastLeftButtonClickTime = 0; bool res = UIManager.ValidForDClick() ? UIManager.OnLeftMouseDoubleClick() : _scene.OnLeftMouseDoubleClick(); if (!res) { _scene.OnLeftMouseDown(); UIManager.OnLeftMouseButtonDown(); } else { Mouse.LastLeftButtonClickTime = 0xFFFF_FFFF; } break; } _scene.OnLeftMouseDown(); UIManager.OnLeftMouseButtonDown(); Mouse.LastLeftButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks; } else { if (Mouse.LastLeftButtonClickTime != 0xFFFF_FFFF) { if (!UIManager.HadMouseDownOnGump(MouseButtonType.Left)) { _scene.OnLeftMouseUp(); } UIManager.OnLeftMouseButtonUp(); } Mouse.LButtonPressed = false; Mouse.End(); } break; case SDL_BUTTON_MIDDLE: if (isDown) { Mouse.Begin(); Mouse.MButtonPressed = true; Mouse.MDropPosition = Mouse.Position; Mouse.CancelDoubleClick = false; uint ticks = Time.Ticks; if (Mouse.LastMidButtonClickTime + Mouse.MOUSE_DELAY_DOUBLE_CLICK >= ticks) { Mouse.LastMidButtonClickTime = 0; if (!_scene.OnMiddleMouseDoubleClick()) { _scene.OnMiddleMouseDown(); UIManager.OnMiddleMouseButtonDown(); } break; } Plugin.ProcessMouse(e->button.button, 0); _scene.OnMiddleMouseDown(); UIManager.OnMiddleMouseButtonDown(); Mouse.LastMidButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks; } else { if (Mouse.LastMidButtonClickTime != 0xFFFF_FFFF) { if (!UIManager.HadMouseDownOnGump(MouseButtonType.Middle)) { _scene.OnMiddleMouseUp(); } UIManager.OnMiddleMouseButtonUp(); } Mouse.MButtonPressed = false; Mouse.End(); } break; case SDL_BUTTON_RIGHT: if (isDown) { Mouse.Begin(); Mouse.RButtonPressed = true; Mouse.RDropPosition = Mouse.Position; Mouse.CancelDoubleClick = false; uint ticks = Time.Ticks; if (Mouse.LastRightButtonClickTime + Mouse.MOUSE_DELAY_DOUBLE_CLICK >= ticks) { Mouse.LastRightButtonClickTime = 0; bool res = _scene.OnRightMouseDoubleClick() || UIManager.OnRightMouseDoubleClick(); if (!res) { _scene.OnRightMouseDown(); UIManager.OnRightMouseButtonDown(); } else { Mouse.LastRightButtonClickTime = 0xFFFF_FFFF; } break; } _scene.OnRightMouseDown(); UIManager.OnRightMouseButtonDown(); Mouse.LastRightButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks; } else { if (Mouse.LastRightButtonClickTime != 0xFFFF_FFFF) { if (!UIManager.HadMouseDownOnGump(MouseButtonType.Right)) { _scene.OnRightMouseUp(); } UIManager.OnRightMouseButtonUp(); } Mouse.RButtonPressed = false; Mouse.End(); } break; case SDL_BUTTON_X1: case SDL_BUTTON_X2: if (isDown) { Mouse.Begin(); Mouse.XButtonPressed = true; Mouse.CancelDoubleClick = false; Plugin.ProcessMouse(e->button.button, 0); _scene.OnExtraMouseDown(mouse.button - 1); UIManager.OnExtraMouseButtonDown(mouse.button - 1); } else { if (!UIManager.HadMouseDownOnGump(MouseButtonType.XButton1) && !UIManager.HadMouseDownOnGump(MouseButtonType.XButton2)) { _scene.OnExtraMouseUp(mouse.button - 1); } UIManager.OnExtraMouseButtonUp(mouse.button - 1); Mouse.XButtonPressed = false; Mouse.End(); } break; } break; } return(0); }
private unsafe void HandleSDLEvent(ref SDL.SDL_Event e) { switch (e.type) { case SDL.SDL_EventType.SDL_AUDIODEVICEADDED: Console.WriteLine("AUDIO ADDED: {0}", e.adevice.which); break; case SDL.SDL_EventType.SDL_AUDIODEVICEREMOVED: Console.WriteLine("AUDIO REMOVED: {0}", e.adevice.which); break; case SDL.SDL_EventType.SDL_WINDOWEVENT: switch (e.window.windowEvent) { case SDL_WindowEventID.SDL_WINDOWEVENT_MOVED: break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_ENTER: Mouse.MouseInWindow = true; break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_LEAVE: Mouse.MouseInWindow = false; break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_GAINED: Plugin.OnFocusGained(); // SDL_CaptureMouse(SDL_bool.SDL_TRUE); //Log.Debug("FOCUS"); break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_LOST: Plugin.OnFocusLost(); //Log.Debug("NO FOCUS"); //SDL_CaptureMouse(SDL_bool.SDL_FALSE); break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_TAKE_FOCUS: //Log.Debug("TAKE FOCUS"); break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_HIT_TEST: break; } break; case SDL.SDL_EventType.SDL_SYSWMEVENT: break; case SDL.SDL_EventType.SDL_KEYDOWN: Keyboard.OnKeyDown(e.key); if (Plugin.ProcessHotkeys((int)e.key.keysym.sym, (int)e.key.keysym.mod, true)) { _ignoreNextTextInput = false; //UIManager.MouseOverControl?.InvokeKeyDown(e.key.keysym.sym, e.key.keysym.mod); //if (UIManager.MouseOverControl != UIManager.KeyboardFocusControl) UIManager.KeyboardFocusControl?.InvokeKeyDown(e.key.keysym.sym, e.key.keysym.mod); _scene.OnKeyDown(e.key); } else { _ignoreNextTextInput = true; } break; case SDL.SDL_EventType.SDL_KEYUP: Keyboard.OnKeyUp(e.key); //if (e.key.keysym.sym == SDL_Keycode.SDLK_0) //{ // byte[] firebreathcode = { // 0xC0, // 0x00, 0x00, 0x00, 0x00 , // source serial // 0x00 ,0x00 ,0x00 , 0x00, // target serial // 0x00, 0xAA, // graphic // 0xAC, 0x06, // src X // 0x74, 0x06, // src Y // 0x28, // src Z // 0x3F, 0x06, // targ X // 0x74, 0x06, // targY // 0x2B, // targZ // 0x3F, 0x01, 0xF0 , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ,0x00, 0x00, // 0x00, 0x00, 0x00, 0x00, // }; // int xx = (0x06 << 8) | (0xAC ) ; // int yy = (0x06 << 8) | (0x74 ) ; // int txx = (0x06 << 8) | (0x3F); // int tyy = (0x06 << 8) | (0x74 ); // NetClient.EnqueuePacketFromPlugin(firebreathcode, 36); //} //UIManager.MouseOverControl?.InvokeKeyUp(e.key.keysym.sym, e.key.keysym.mod); //if (UIManager.MouseOverControl != UIManager.KeyboardFocusControl) UIManager.KeyboardFocusControl?.InvokeKeyUp(e.key.keysym.sym, e.key.keysym.mod); _scene.OnKeyUp(e.key); break; case SDL.SDL_EventType.SDL_TEXTINPUT: if (_ignoreNextTextInput) break; fixed(SDL.SDL_Event *ev = &e) { string s = StringHelper.ReadUTF8(ev->text.text); if (!string.IsNullOrEmpty(s)) { UIManager.KeyboardFocusControl?.InvokeTextInput(s); _scene.OnTextInput(s); } } break; case SDL.SDL_EventType.SDL_MOUSEMOTION: Mouse.Update(); if (Mouse.IsDragging) { UIManager.OnMouseDragging(); _scene.OnMouseDragging(); } if (Mouse.IsDragging && !_dragStarted) { _dragStarted = true; } break; case SDL.SDL_EventType.SDL_MOUSEWHEEL: Mouse.Update(); bool isup = e.wheel.y > 0; Plugin.ProcessMouse(0, e.wheel.y); UIManager.OnMouseWheel(isup); _scene.OnMouseWheel(isup); break; case SDL.SDL_EventType.SDL_MOUSEBUTTONUP: case SDL.SDL_EventType.SDL_MOUSEBUTTONDOWN: Mouse.Update(); bool isDown = e.type == SDL.SDL_EventType.SDL_MOUSEBUTTONDOWN; bool resetTime = false; if (_dragStarted && !isDown) { _dragStarted = false; resetTime = true; } SDL.SDL_MouseButtonEvent mouse = e.button; switch ((uint)mouse.button) { case SDL_BUTTON_LEFT: if (isDown) { Mouse.Begin(); Mouse.LButtonPressed = true; Mouse.LDropPosition = Mouse.Position; Mouse.CancelDoubleClick = false; uint ticks = SDL_GetTicks(); if (Mouse.LastLeftButtonClickTime + Mouse.MOUSE_DELAY_DOUBLE_CLICK >= ticks) { Mouse.LastLeftButtonClickTime = 0; bool res; if (UIManager.ValidForDClick()) { res = UIManager.OnLeftMouseDoubleClick(); } else { res = _scene.OnLeftMouseDoubleClick(); } //bool res = _scene.OnLeftMouseDoubleClick() || UIManager.OnLeftMouseDoubleClick(); MouseDoubleClickEventArgs arg = new MouseDoubleClickEventArgs(Mouse.Position.X, Mouse.Position.Y, MouseButton.Left); if (!arg.Result && !res) { _scene.OnLeftMouseDown(); UIManager.OnLeftMouseButtonDown(); } else { Mouse.LastLeftButtonClickTime = 0xFFFF_FFFF; } break; } _scene.OnLeftMouseDown(); UIManager.OnLeftMouseButtonDown(); Mouse.LastLeftButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks; } else { if (resetTime) { Mouse.LastLeftButtonClickTime = 0; } if (Mouse.LastLeftButtonClickTime != 0xFFFF_FFFF) { _scene.OnLeftMouseUp(); UIManager.OnLeftMouseButtonUp(); } Mouse.LButtonPressed = false; Mouse.End(); Mouse.LastClickPosition = Mouse.Position; } break; case SDL_BUTTON_MIDDLE: if (isDown) { Mouse.Begin(); Mouse.MButtonPressed = true; Mouse.MDropPosition = Mouse.Position; Mouse.CancelDoubleClick = false; uint ticks = SDL_GetTicks(); if (Mouse.LastMidButtonClickTime + Mouse.MOUSE_DELAY_DOUBLE_CLICK >= ticks) { Mouse.LastMidButtonClickTime = 0; var res = _scene.OnMiddleMouseDoubleClick(); MouseDoubleClickEventArgs arg = new MouseDoubleClickEventArgs(Mouse.Position.X, Mouse.Position.Y, MouseButton.Middle); if (!arg.Result && !res) { _scene.OnMiddleMouseDown(); } break; } Plugin.ProcessMouse(e.button.button, 0); _scene.OnMiddleMouseDown(); Mouse.LastMidButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks; } else { Mouse.MButtonPressed = false; Mouse.End(); } break; case SDL_BUTTON_RIGHT: if (isDown) { Mouse.Begin(); Mouse.RButtonPressed = true; Mouse.RDropPosition = Mouse.Position; Mouse.CancelDoubleClick = false; uint ticks = SDL_GetTicks(); if (Mouse.LastRightButtonClickTime + Mouse.MOUSE_DELAY_DOUBLE_CLICK >= ticks) { Mouse.LastRightButtonClickTime = 0; var res = _scene.OnRightMouseDoubleClick() || UIManager.OnRightMouseDoubleClick(); MouseDoubleClickEventArgs arg = new MouseDoubleClickEventArgs(Mouse.Position.X, Mouse.Position.Y, MouseButton.Right); if (!arg.Result && !res) { _scene.OnRightMouseDown(); UIManager.OnRightMouseButtonDown(); } else { Mouse.LastRightButtonClickTime = 0xFFFF_FFFF; } break; } _scene.OnRightMouseDown(); UIManager.OnRightMouseButtonDown(); Mouse.LastRightButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks; } else { if (resetTime) { Mouse.LastRightButtonClickTime = 0; } if (Mouse.LastRightButtonClickTime != 0xFFFF_FFFF) { _scene.OnRightMouseUp(); UIManager.OnRightMouseButtonUp(); } Mouse.RButtonPressed = false; Mouse.End(); } break; case SDL_BUTTON_X1: if (isDown) { Plugin.ProcessMouse(e.button.button, 0); } break; case SDL_BUTTON_X2: if (isDown) { Plugin.ProcessMouse(e.button.button, 0); } break; } break; } }
/// <summary> /// Handle mouse double click to select word under the mouse. /// </summary> /// <param name="parent">the control hosting the html to set cursor and invalidate</param> /// <param name="e">mouse event args</param> public void HandleMouseDoubleClick(SDL.SDL_MouseButtonEvent e) { _htmlContainerInt.HandleMouseDoubleClick(new ControlAdapter(SDL2Adapter.Instance, e.ToRPoint(), e), e.ToRPoint()); }
public void ProcessMouseEvent(SDL.SDL_MouseButtonEvent button) { bool pressed = button.state == SDL.SDL_PRESSED; SetButtonState(TranslateButton(button.button), pressed); }
public static RMouseEvent ToRMouseEvent(this SDL.SDL_MouseButtonEvent e) { return(new RMouseEvent((e.button & SDL.SDL_BUTTON_LEFT) != 0)); }
public static RPoint ToRPoint(this SDL.SDL_MouseButtonEvent e) { return(new RPoint(e.x, e.y)); }
public ControlAdapter(RAdapter adapter, RPoint mouse_location, SDL.SDL_MouseButtonEvent mouse_event) : base(adapter) { _mouseLocation = mouse_location; _leftMouseButton = (mouse_event.button & SDL.SDL_BUTTON_LEFT) > 0; _rightMouseButton = (mouse_event.button & SDL.SDL_BUTTON_RIGHT) > 0; }
public MouseButtonDownEventArgs(SDL.SDL_MouseButtonEvent evt) { _evt = evt; }