PaintContext.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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 <LibGfx/Painter.h>
  8. #include <LibWeb/Painting/PaintContext.h>
  9. namespace Web {
  10. PaintContext::PaintContext(Gfx::Painter& painter, Palette const& palette, double device_pixels_per_css_pixel)
  11. : m_painter(painter)
  12. , m_palette(palette)
  13. , m_device_pixels_per_css_pixel(device_pixels_per_css_pixel)
  14. {
  15. }
  16. CSSPixelRect PaintContext::css_viewport_rect() const
  17. {
  18. return {
  19. m_device_viewport_rect.x().value() / m_device_pixels_per_css_pixel,
  20. m_device_viewport_rect.y().value() / m_device_pixels_per_css_pixel,
  21. m_device_viewport_rect.width().value() / m_device_pixels_per_css_pixel,
  22. m_device_viewport_rect.height().value() / m_device_pixels_per_css_pixel
  23. };
  24. }
  25. DevicePixels PaintContext::rounded_device_pixels(CSSPixels css_pixels) const
  26. {
  27. return roundf(css_pixels.to_double() * m_device_pixels_per_css_pixel);
  28. }
  29. DevicePixels PaintContext::enclosing_device_pixels(CSSPixels css_pixels) const
  30. {
  31. return ceilf(css_pixels.to_double() * m_device_pixels_per_css_pixel);
  32. }
  33. DevicePixels PaintContext::floored_device_pixels(CSSPixels css_pixels) const
  34. {
  35. return floorf(css_pixels.to_double() * m_device_pixels_per_css_pixel);
  36. }
  37. DevicePixelPoint PaintContext::rounded_device_point(CSSPixelPoint point) const
  38. {
  39. return {
  40. roundf(point.x().to_double() * m_device_pixels_per_css_pixel),
  41. roundf(point.y().to_double() * m_device_pixels_per_css_pixel)
  42. };
  43. }
  44. DevicePixelPoint PaintContext::floored_device_point(CSSPixelPoint point) const
  45. {
  46. return {
  47. floorf(point.x().to_double() * m_device_pixels_per_css_pixel),
  48. floorf(point.y().to_double() * m_device_pixels_per_css_pixel)
  49. };
  50. }
  51. DevicePixelRect PaintContext::enclosing_device_rect(CSSPixelRect rect) const
  52. {
  53. return {
  54. floorf(rect.x().to_double() * m_device_pixels_per_css_pixel),
  55. floorf(rect.y().to_double() * m_device_pixels_per_css_pixel),
  56. ceilf(rect.width().to_double() * m_device_pixels_per_css_pixel),
  57. ceilf(rect.height().to_double() * m_device_pixels_per_css_pixel)
  58. };
  59. }
  60. DevicePixelRect PaintContext::rounded_device_rect(CSSPixelRect rect) const
  61. {
  62. return {
  63. roundf(rect.x().to_double() * m_device_pixels_per_css_pixel),
  64. roundf(rect.y().to_double() * m_device_pixels_per_css_pixel),
  65. roundf(rect.width().to_double() * m_device_pixels_per_css_pixel),
  66. roundf(rect.height().to_double() * m_device_pixels_per_css_pixel)
  67. };
  68. }
  69. DevicePixelSize PaintContext::enclosing_device_size(CSSPixelSize size) const
  70. {
  71. return {
  72. ceilf(size.width().to_double() * m_device_pixels_per_css_pixel),
  73. ceilf(size.height().to_double() * m_device_pixels_per_css_pixel)
  74. };
  75. }
  76. DevicePixelSize PaintContext::rounded_device_size(CSSPixelSize size) const
  77. {
  78. return {
  79. roundf(size.width().to_double() * m_device_pixels_per_css_pixel),
  80. roundf(size.height().to_double() * m_device_pixels_per_css_pixel)
  81. };
  82. }
  83. CSSPixels PaintContext::scale_to_css_pixels(DevicePixels device_pixels) const
  84. {
  85. return device_pixels.value() / m_device_pixels_per_css_pixel;
  86. }
  87. CSSPixelPoint PaintContext::scale_to_css_point(DevicePixelPoint point) const
  88. {
  89. return {
  90. scale_to_css_pixels(point.x()),
  91. scale_to_css_pixels(point.y())
  92. };
  93. }
  94. CSSPixelSize PaintContext::scale_to_css_size(DevicePixelSize size) const
  95. {
  96. return {
  97. scale_to_css_pixels(size.width()),
  98. scale_to_css_pixels(size.height())
  99. };
  100. }
  101. CSSPixelRect PaintContext::scale_to_css_rect(DevicePixelRect rect) const
  102. {
  103. return {
  104. scale_to_css_point(rect.location()),
  105. scale_to_css_size(rect.size())
  106. };
  107. }
  108. bool PaintContext::would_be_fully_clipped_by_painter(DevicePixelRect rect) const
  109. {
  110. return !painter().clip_rect().intersects(rect.to_type<int>().translated(painter().translation()));
  111. }
  112. }