PixelUnits.cpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*
  2. * Copyright (c) 2023, Aliaksandr Kalenik <kalenik.aliaksandr@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <AK/Math.h>
  7. #include <LibIPC/Decoder.h>
  8. #include <LibIPC/Encoder.h>
  9. #include <LibWeb/PixelUnits.h>
  10. namespace Web {
  11. float CSSPixels::to_float() const
  12. {
  13. return static_cast<float>(m_value) / fixed_point_denominator;
  14. }
  15. double CSSPixels::to_double() const
  16. {
  17. return static_cast<double>(m_value) / fixed_point_denominator;
  18. }
  19. int CSSPixels::to_int() const
  20. {
  21. return m_value / fixed_point_denominator;
  22. }
  23. }
  24. namespace IPC {
  25. template<>
  26. ErrorOr<void> encode(Encoder& encoder, Web::DevicePixels const& value)
  27. {
  28. TRY(encoder.encode(value.value()));
  29. return {};
  30. }
  31. template<>
  32. ErrorOr<Web::DevicePixels> decode(Decoder& decoder)
  33. {
  34. auto value = TRY(decoder.decode<int>());
  35. return Web::DevicePixels(value);
  36. }
  37. template<>
  38. ErrorOr<void> encode(Encoder& encoder, Web::DevicePixelPoint const& value)
  39. {
  40. TRY(encoder.encode(value.x()));
  41. TRY(encoder.encode(value.y()));
  42. return {};
  43. }
  44. template<>
  45. ErrorOr<Web::DevicePixelPoint> decode(Decoder& decoder)
  46. {
  47. auto x = TRY(decoder.decode<Web::DevicePixels>());
  48. auto y = TRY(decoder.decode<Web::DevicePixels>());
  49. return Web::DevicePixelPoint { x, y };
  50. }
  51. template<>
  52. ErrorOr<void> encode(Encoder& encoder, Web::DevicePixelSize const& value)
  53. {
  54. TRY(encoder.encode(value.width()));
  55. TRY(encoder.encode(value.height()));
  56. return {};
  57. }
  58. template<>
  59. ErrorOr<Web::DevicePixelSize> decode(Decoder& decoder)
  60. {
  61. auto width = TRY(decoder.decode<Web::DevicePixels>());
  62. auto height = TRY(decoder.decode<Web::DevicePixels>());
  63. return Web::DevicePixelSize { width, height };
  64. }
  65. template<>
  66. ErrorOr<void> encode(Encoder& encoder, Web::DevicePixelRect const& value)
  67. {
  68. TRY(encoder.encode(value.location()));
  69. TRY(encoder.encode(value.size()));
  70. return {};
  71. }
  72. template<>
  73. ErrorOr<Web::DevicePixelRect> decode(Decoder& decoder)
  74. {
  75. auto location = TRY(decoder.decode<Web::DevicePixelPoint>());
  76. auto size = TRY(decoder.decode<Web::DevicePixelSize>());
  77. return Web::DevicePixelRect { location, size };
  78. }
  79. }