InputEvent.cpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * Copyright (c) 2024, Tim Flynn <trflynn89@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibIPC/Decoder.h>
  7. #include <LibIPC/Encoder.h>
  8. #include <LibWeb/Page/InputEvent.h>
  9. namespace Web {
  10. KeyEvent KeyEvent::clone_without_chrome_data() const
  11. {
  12. return { type, key, modifiers, code_point, nullptr };
  13. }
  14. MouseEvent MouseEvent::clone_without_chrome_data() const
  15. {
  16. return { type, position, screen_position, button, buttons, modifiers, wheel_delta_x, wheel_delta_y, nullptr };
  17. }
  18. }
  19. template<>
  20. ErrorOr<void> IPC::encode(Encoder& encoder, Web::KeyEvent const& event)
  21. {
  22. TRY(encoder.encode(event.type));
  23. TRY(encoder.encode(event.key));
  24. TRY(encoder.encode(event.modifiers));
  25. TRY(encoder.encode(event.code_point));
  26. return {};
  27. }
  28. template<>
  29. ErrorOr<Web::KeyEvent> IPC::decode(Decoder& decoder)
  30. {
  31. auto type = TRY(decoder.decode<Web::KeyEvent::Type>());
  32. auto key = TRY(decoder.decode<KeyCode>());
  33. auto modifiers = TRY(decoder.decode<KeyModifier>());
  34. auto code_point = TRY(decoder.decode<u32>());
  35. return Web::KeyEvent { type, key, modifiers, code_point, nullptr };
  36. }
  37. template<>
  38. ErrorOr<void> IPC::encode(Encoder& encoder, Web::MouseEvent const& event)
  39. {
  40. TRY(encoder.encode(event.type));
  41. TRY(encoder.encode(event.position));
  42. TRY(encoder.encode(event.screen_position));
  43. TRY(encoder.encode(event.button));
  44. TRY(encoder.encode(event.buttons));
  45. TRY(encoder.encode(event.modifiers));
  46. TRY(encoder.encode(event.wheel_delta_x));
  47. TRY(encoder.encode(event.wheel_delta_y));
  48. return {};
  49. }
  50. template<>
  51. ErrorOr<Web::MouseEvent> IPC::decode(Decoder& decoder)
  52. {
  53. auto type = TRY(decoder.decode<Web::MouseEvent::Type>());
  54. auto position = TRY(decoder.decode<Web::DevicePixelPoint>());
  55. auto screen_position = TRY(decoder.decode<Web::DevicePixelPoint>());
  56. auto button = TRY(decoder.decode<Web::UIEvents::MouseButton>());
  57. auto buttons = TRY(decoder.decode<Web::UIEvents::MouseButton>());
  58. auto modifiers = TRY(decoder.decode<KeyModifier>());
  59. auto wheel_delta_x = TRY(decoder.decode<int>());
  60. auto wheel_delta_y = TRY(decoder.decode<int>());
  61. return Web::MouseEvent { type, position, screen_position, button, buttons, modifiers, wheel_delta_x, wheel_delta_y, nullptr };
  62. }