PaintContext.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /*
  2. * Copyright (c) 2018-2022, Andreas Kling <kling@serenityos.org>
  3. * Copyright (c) 2022, Sam Atkins <atkinssj@serenityos.org>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #include <LibWeb/Painting/PaintContext.h>
  8. namespace Web {
  9. PaintContext::PaintContext(Painting::RecordingPainter& recording_painter, Palette const& palette, double device_pixels_per_css_pixel)
  10. : m_recording_painter(recording_painter)
  11. , m_palette(palette)
  12. , m_device_pixels_per_css_pixel(device_pixels_per_css_pixel)
  13. {
  14. }
  15. CSSPixelRect PaintContext::css_viewport_rect() const
  16. {
  17. return {
  18. m_device_viewport_rect.x().value() / m_device_pixels_per_css_pixel,
  19. m_device_viewport_rect.y().value() / m_device_pixels_per_css_pixel,
  20. m_device_viewport_rect.width().value() / m_device_pixels_per_css_pixel,
  21. m_device_viewport_rect.height().value() / m_device_pixels_per_css_pixel
  22. };
  23. }
  24. DevicePixels PaintContext::rounded_device_pixels(CSSPixels css_pixels) const
  25. {
  26. return round(css_pixels.to_double() * m_device_pixels_per_css_pixel);
  27. }
  28. DevicePixels PaintContext::enclosing_device_pixels(CSSPixels css_pixels) const
  29. {
  30. return ceil(css_pixels.to_double() * m_device_pixels_per_css_pixel);
  31. }
  32. DevicePixels PaintContext::floored_device_pixels(CSSPixels css_pixels) const
  33. {
  34. return floor(css_pixels.to_double() * m_device_pixels_per_css_pixel);
  35. }
  36. DevicePixelPoint PaintContext::rounded_device_point(CSSPixelPoint point) const
  37. {
  38. return {
  39. round(point.x().to_double() * m_device_pixels_per_css_pixel),
  40. round(point.y().to_double() * m_device_pixels_per_css_pixel)
  41. };
  42. }
  43. DevicePixelPoint PaintContext::floored_device_point(CSSPixelPoint point) const
  44. {
  45. return {
  46. floor(point.x().to_double() * m_device_pixels_per_css_pixel),
  47. floor(point.y().to_double() * m_device_pixels_per_css_pixel)
  48. };
  49. }
  50. DevicePixelRect PaintContext::enclosing_device_rect(CSSPixelRect rect) const
  51. {
  52. return {
  53. floor(rect.x().to_double() * m_device_pixels_per_css_pixel),
  54. floor(rect.y().to_double() * m_device_pixels_per_css_pixel),
  55. ceil(rect.width().to_double() * m_device_pixels_per_css_pixel),
  56. ceil(rect.height().to_double() * m_device_pixels_per_css_pixel)
  57. };
  58. }
  59. DevicePixelRect PaintContext::rounded_device_rect(CSSPixelRect rect) const
  60. {
  61. return {
  62. round(rect.x().to_double() * m_device_pixels_per_css_pixel),
  63. round(rect.y().to_double() * m_device_pixels_per_css_pixel),
  64. round(rect.width().to_double() * m_device_pixels_per_css_pixel),
  65. round(rect.height().to_double() * m_device_pixels_per_css_pixel)
  66. };
  67. }
  68. DevicePixelSize PaintContext::enclosing_device_size(CSSPixelSize size) const
  69. {
  70. return {
  71. ceil(size.width().to_double() * m_device_pixels_per_css_pixel),
  72. ceil(size.height().to_double() * m_device_pixels_per_css_pixel)
  73. };
  74. }
  75. DevicePixelSize PaintContext::rounded_device_size(CSSPixelSize size) const
  76. {
  77. return {
  78. round(size.width().to_double() * m_device_pixels_per_css_pixel),
  79. round(size.height().to_double() * m_device_pixels_per_css_pixel)
  80. };
  81. }
  82. CSSPixels PaintContext::scale_to_css_pixels(DevicePixels device_pixels) const
  83. {
  84. return CSSPixels::nearest_value_for(device_pixels.value() / m_device_pixels_per_css_pixel);
  85. }
  86. CSSPixelPoint PaintContext::scale_to_css_point(DevicePixelPoint point) const
  87. {
  88. return {
  89. scale_to_css_pixels(point.x()),
  90. scale_to_css_pixels(point.y())
  91. };
  92. }
  93. CSSPixelSize PaintContext::scale_to_css_size(DevicePixelSize size) const
  94. {
  95. return {
  96. scale_to_css_pixels(size.width()),
  97. scale_to_css_pixels(size.height())
  98. };
  99. }
  100. CSSPixelRect PaintContext::scale_to_css_rect(DevicePixelRect rect) const
  101. {
  102. return {
  103. scale_to_css_point(rect.location()),
  104. scale_to_css_size(rect.size())
  105. };
  106. }
  107. }