InputEvent.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. DragEvent DragEvent::clone_without_chrome_data() const
  19. {
  20. return { type, position, screen_position, button, buttons, modifiers, {}, nullptr };
  21. }
  22. }
  23. template<>
  24. ErrorOr<void> IPC::encode(Encoder& encoder, Web::KeyEvent const& event)
  25. {
  26. TRY(encoder.encode(event.type));
  27. TRY(encoder.encode(event.key));
  28. TRY(encoder.encode(event.modifiers));
  29. TRY(encoder.encode(event.code_point));
  30. return {};
  31. }
  32. template<>
  33. ErrorOr<Web::KeyEvent> IPC::decode(Decoder& decoder)
  34. {
  35. auto type = TRY(decoder.decode<Web::KeyEvent::Type>());
  36. auto key = TRY(decoder.decode<Web::UIEvents::KeyCode>());
  37. auto modifiers = TRY(decoder.decode<Web::UIEvents::KeyModifier>());
  38. auto code_point = TRY(decoder.decode<u32>());
  39. return Web::KeyEvent { type, key, modifiers, code_point, nullptr };
  40. }
  41. template<>
  42. ErrorOr<void> IPC::encode(Encoder& encoder, Web::MouseEvent const& event)
  43. {
  44. TRY(encoder.encode(event.type));
  45. TRY(encoder.encode(event.position));
  46. TRY(encoder.encode(event.screen_position));
  47. TRY(encoder.encode(event.button));
  48. TRY(encoder.encode(event.buttons));
  49. TRY(encoder.encode(event.modifiers));
  50. TRY(encoder.encode(event.wheel_delta_x));
  51. TRY(encoder.encode(event.wheel_delta_y));
  52. return {};
  53. }
  54. template<>
  55. ErrorOr<Web::MouseEvent> IPC::decode(Decoder& decoder)
  56. {
  57. auto type = TRY(decoder.decode<Web::MouseEvent::Type>());
  58. auto position = TRY(decoder.decode<Web::DevicePixelPoint>());
  59. auto screen_position = TRY(decoder.decode<Web::DevicePixelPoint>());
  60. auto button = TRY(decoder.decode<Web::UIEvents::MouseButton>());
  61. auto buttons = TRY(decoder.decode<Web::UIEvents::MouseButton>());
  62. auto modifiers = TRY(decoder.decode<Web::UIEvents::KeyModifier>());
  63. auto wheel_delta_x = TRY(decoder.decode<int>());
  64. auto wheel_delta_y = TRY(decoder.decode<int>());
  65. return Web::MouseEvent { type, position, screen_position, button, buttons, modifiers, wheel_delta_x, wheel_delta_y, nullptr };
  66. }