mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Implement Canvas::Skew.
This commit is contained in:
parent
5f7cf832b9
commit
dbc9a8e299
@ -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
|
||||
|
||||
@ -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));
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -7,10 +7,6 @@
|
||||
|
||||
namespace impeller {
|
||||
|
||||
std::string Shear::ToString() const {
|
||||
std::stringstream stream;
|
||||
stream << "{" << xy << ", " << xz << ", " << yz << "}";
|
||||
return stream.str();
|
||||
}
|
||||
//
|
||||
|
||||
} // namespace impeller
|
||||
|
||||
@ -27,8 +27,6 @@ struct Shear {
|
||||
}
|
||||
|
||||
bool operator!=(const Shear& o) const { return !(*this == o); }
|
||||
|
||||
std::string ToString() const;
|
||||
};
|
||||
|
||||
} // namespace impeller
|
||||
|
||||
@ -3,7 +3,6 @@
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "size.h"
|
||||
#include <sstream>
|
||||
|
||||
namespace impeller {
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user