skia_conversions.cc 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ui/gfx/geometry/skia_conversions.h"
  5. #include <stddef.h>
  6. #include <stdint.h>
  7. #include "base/numerics/safe_conversions.h"
  8. #include "base/numerics/safe_math.h"
  9. #include "ui/gfx/geometry/quad_f.h"
  10. #include "ui/gfx/geometry/rect.h"
  11. #include "ui/gfx/geometry/rect_f.h"
  12. #include "ui/gfx/geometry/transform.h"
  13. namespace gfx {
  14. SkPoint PointToSkPoint(const Point& point) {
  15. return SkPoint::Make(SkIntToScalar(point.x()), SkIntToScalar(point.y()));
  16. }
  17. SkIPoint PointToSkIPoint(const Point& point) {
  18. return SkIPoint::Make(point.x(), point.y());
  19. }
  20. Point SkIPointToPoint(const SkIPoint& point) {
  21. return Point(point.x(), point.y());
  22. }
  23. SkPoint PointFToSkPoint(const PointF& point) {
  24. return SkPoint::Make(SkFloatToScalar(point.x()), SkFloatToScalar(point.y()));
  25. }
  26. PointF SkPointToPointF(const SkPoint& point) {
  27. return PointF(SkScalarToFloat(point.x()), SkScalarToFloat(point.y()));
  28. }
  29. SkRect RectToSkRect(const Rect& rect) {
  30. return SkRect::MakeXYWH(SkIntToScalar(rect.x()), SkIntToScalar(rect.y()),
  31. SkIntToScalar(rect.width()),
  32. SkIntToScalar(rect.height()));
  33. }
  34. SkIRect RectToSkIRect(const Rect& rect) {
  35. return SkIRect::MakeXYWH(rect.x(), rect.y(), rect.width(), rect.height());
  36. }
  37. Rect SkIRectToRect(const SkIRect& rect) {
  38. Rect result;
  39. result.SetByBounds(rect.left(), rect.top(), rect.right(), rect.bottom());
  40. return result;
  41. }
  42. SkRect RectFToSkRect(const RectF& rect) {
  43. return SkRect::MakeXYWH(SkFloatToScalar(rect.x()), SkFloatToScalar(rect.y()),
  44. SkFloatToScalar(rect.width()),
  45. SkFloatToScalar(rect.height()));
  46. }
  47. RectF SkRectToRectF(const SkRect& rect) {
  48. return RectF(SkScalarToFloat(rect.x()), SkScalarToFloat(rect.y()),
  49. SkScalarToFloat(rect.width()), SkScalarToFloat(rect.height()));
  50. }
  51. SkSize SizeFToSkSize(const SizeF& size) {
  52. return SkSize::Make(SkFloatToScalar(size.width()),
  53. SkFloatToScalar(size.height()));
  54. }
  55. SkISize SizeToSkISize(const Size& size) {
  56. return SkISize::Make(size.width(), size.height());
  57. }
  58. SizeF SkSizeToSizeF(const SkSize& size) {
  59. return SizeF(SkScalarToFloat(size.width()), SkScalarToFloat(size.height()));
  60. }
  61. Size SkISizeToSize(const SkISize& size) {
  62. return Size(size.width(), size.height());
  63. }
  64. void TransformToFlattenedSkMatrix(const gfx::Transform& transform,
  65. SkMatrix* flattened) {
  66. // Convert from 4x4 to 3x3 by dropping the third row and column.
  67. flattened->set(0, transform.matrix().rc(0, 0));
  68. flattened->set(1, transform.matrix().rc(0, 1));
  69. flattened->set(2, transform.matrix().rc(0, 3));
  70. flattened->set(3, transform.matrix().rc(1, 0));
  71. flattened->set(4, transform.matrix().rc(1, 1));
  72. flattened->set(5, transform.matrix().rc(1, 3));
  73. flattened->set(6, transform.matrix().rc(3, 0));
  74. flattened->set(7, transform.matrix().rc(3, 1));
  75. flattened->set(8, transform.matrix().rc(3, 3));
  76. }
  77. void QuadFToSkPoints(const gfx::QuadF& quad, SkPoint points[4]) {
  78. points[0] = PointFToSkPoint(quad.p1());
  79. points[1] = PointFToSkPoint(quad.p2());
  80. points[2] = PointFToSkPoint(quad.p3());
  81. points[3] = PointFToSkPoint(quad.p4());
  82. }
  83. } // namespace gfx