diff --git a/engine/src/flutter/impeller/aiks/aiks_unittests.cc b/engine/src/flutter/impeller/aiks/aiks_unittests.cc index 2c916a8d720..f10423ba9b6 100644 --- a/engine/src/flutter/impeller/aiks/aiks_unittests.cc +++ b/engine/src/flutter/impeller/aiks/aiks_unittests.cc @@ -141,5 +141,17 @@ TEST_F(AiksTest, CanPerformFullScreenMSAA) { ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture())); } +TEST_F(AiksTest, CanPerformSkew) { + Canvas canvas; + + Paint red; + red.color = Color::Red(); + + canvas.Skew(10, 125); + canvas.DrawRect(Rect::MakeXYWH(0, 0, 100, 100), red); + + ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture())); +} + } // namespace testing } // namespace impeller diff --git a/engine/src/flutter/impeller/aiks/canvas.cc b/engine/src/flutter/impeller/aiks/canvas.cc index c4fab50f5f9..634becd436c 100644 --- a/engine/src/flutter/impeller/aiks/canvas.cc +++ b/engine/src/flutter/impeller/aiks/canvas.cc @@ -65,6 +65,10 @@ void Canvas::Scale(const Vector3& scale) { Concat(Matrix::MakeScale(scale)); } +void Canvas::Skew(Scalar sx, Scalar sy) { + Concat(Matrix::MakeSkew(sx, sy)); +} + void Canvas::Rotate(Radians radians) { Concat(Matrix::MakeRotationZ(radians)); } diff --git a/engine/src/flutter/impeller/aiks/canvas.h b/engine/src/flutter/impeller/aiks/canvas.h index 6fa9de69b10..94ebdea3d4e 100644 --- a/engine/src/flutter/impeller/aiks/canvas.h +++ b/engine/src/flutter/impeller/aiks/canvas.h @@ -47,6 +47,8 @@ class Canvas { void Scale(const Vector3& scale); + void Skew(Scalar sx, Scalar sy); + void Rotate(Radians radians); void DrawPath(Path path, Paint paint); diff --git a/engine/src/flutter/impeller/geometry/matrix.h b/engine/src/flutter/impeller/geometry/matrix.h index a52e5eeed03..70a58482b86 100644 --- a/engine/src/flutter/impeller/geometry/matrix.h +++ b/engine/src/flutter/impeller/geometry/matrix.h @@ -80,6 +80,15 @@ struct Matrix { // clang-format on } + static constexpr Matrix MakeSkew(Scalar sx, Scalar sy) { + // clang-format off + return Matrix(1.0, sy , 0.0, 0.0, + sx , 1.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + // clang-format on + } + static Matrix MakeRotation(Scalar radians, const Vector4& r) { const Vector4 v = r.Normalize(); @@ -112,8 +121,8 @@ struct Matrix { } static Matrix MakeRotationX(Radians r) { - Scalar cosine = cos(r.radians); - Scalar sine = sin(r.radians); + const Scalar cosine = cos(r.radians); + const Scalar sine = sin(r.radians); // clang-format off return Matrix( 1.0, 0.0, 0.0, 0.0, @@ -125,8 +134,8 @@ struct Matrix { } static Matrix MakeRotationY(Radians r) { - Scalar cosine = cos(r.radians); - Scalar sine = sin(r.radians); + const Scalar cosine = cos(r.radians); + const Scalar sine = sin(r.radians); // clang-format off return Matrix( @@ -139,8 +148,8 @@ struct Matrix { } static Matrix MakeRotationZ(Radians r) { - Scalar cosine = cos(r.radians); - Scalar sine = sin(r.radians); + const Scalar cosine = cos(r.radians); + const Scalar sine = sin(r.radians); // clang-format off return Matrix ( @@ -196,12 +205,14 @@ struct Matrix { } constexpr Matrix Transpose() const { + // clang-format off return { - m[0], m[4], m[8], m[12], // - m[1], m[5], m[9], m[13], // - m[2], m[6], m[10], m[14], // - m[3], m[7], m[11], m[15], // + m[0], m[4], m[8], m[12], + m[1], m[5], m[9], m[13], + m[2], m[6], m[10], m[14], + m[3], m[7], m[11], m[15], }; + // clang-format on } Matrix Invert() const; diff --git a/engine/src/flutter/impeller/geometry/shear.cc b/engine/src/flutter/impeller/geometry/shear.cc index fed0fc9be0e..34986a9d787 100644 --- a/engine/src/flutter/impeller/geometry/shear.cc +++ b/engine/src/flutter/impeller/geometry/shear.cc @@ -7,10 +7,6 @@ namespace impeller { -std::string Shear::ToString() const { - std::stringstream stream; - stream << "{" << xy << ", " << xz << ", " << yz << "}"; - return stream.str(); -} +// } // namespace impeller diff --git a/engine/src/flutter/impeller/geometry/shear.h b/engine/src/flutter/impeller/geometry/shear.h index 220342a8b65..155f7ea7fae 100644 --- a/engine/src/flutter/impeller/geometry/shear.h +++ b/engine/src/flutter/impeller/geometry/shear.h @@ -27,8 +27,6 @@ struct Shear { } bool operator!=(const Shear& o) const { return !(*this == o); } - - std::string ToString() const; }; } // namespace impeller diff --git a/engine/src/flutter/impeller/geometry/size.cc b/engine/src/flutter/impeller/geometry/size.cc index 13bd3aebce2..77460b7ce43 100644 --- a/engine/src/flutter/impeller/geometry/size.cc +++ b/engine/src/flutter/impeller/geometry/size.cc @@ -3,7 +3,6 @@ // found in the LICENSE file. #include "size.h" -#include namespace impeller {