8#ifndef SkMatrixPriv_DEFINE
9#define SkMatrixPriv_DEFINE
31 return matrix.writeToMemory(
buffer);
43 return SkMatrix::GetMapPtsProc(matrix.getType());
47 return SkMatrix::GetMapXYProc(matrix.getType());
73 if (sx < 0.f && sy < 0.f) {
74 inverted = skvx::shuffle<2, 3, 0, 1>(inverted);
75 }
else if (sx < 0.f) {
76 inverted = skvx::shuffle<2, 1, 0, 3>(inverted);
77 }
else if (sy < 0.f) {
78 inverted = skvx::shuffle<0, 3, 2, 1>(inverted);
81 inverted.store(&dst->fLeft);
125 for (
int i = 0; i <
count; ++i) {
127 pts = (
SkPoint*)((intptr_t)pts + stride);
134 SkMatrix::MapXYProc proc = mx.getMapXYProc();
135 for (
int i = 0; i <
count; ++i) {
136 proc(mx, pts->
fX, pts->
fY, pts);
137 pts = (
SkPoint*)((intptr_t)pts + stride);
167 for (
int i = 0; i <
count; ++i) {
169 src = (
SkPoint*)((intptr_t)src + srcStride);
170 dst = (
SkPoint*)((intptr_t)dst + dstStride);
178 return matrix->postIDiv(divx, divy);
182 return &
a == &
b || 0 == memcmp(
a.fMat,
b.fMat,
sizeof(
a.fMat));
191 return m.rc(1,0) == 0 && m.rc(3,0) == 0 &&
192 m.rc(0,1) == 0 && m.rc(3,1) == 0 &&
#define SK_ScalarNearlyZero
static MapXYProc GetMapXYProc(const SkMatrix &matrix)
static MapPtsProc GetMapPtsProc(const SkMatrix &matrix)
static size_t WriteToMemory(const SkMatrix &matrix, void *buffer)
SkMatrix::MapXYProc MapXYProc
SkMatrix::MapPtsProc MapPtsProc
static SkRect MapRect(const SkM44 &m, const SkRect &r)
static bool CheapEqual(const SkMatrix &a, const SkMatrix &b)
static SkScalar DifferentialAreaScale(const SkMatrix &m, const SkPoint &p)
static const SkScalar * M44ColMajor(const SkM44 &m)
static void MapHomogeneousPointsWithStride(const SkMatrix &mx, SkPoint3 dst[], size_t dstStride, const SkPoint3 src[], size_t srcStride, int count)
static size_t ReadFromMemory(SkMatrix *matrix, const void *buffer, size_t length)
static bool IsScaleTranslateAsM33(const SkM44 &m)
static bool PostIDiv(SkMatrix *matrix, int divx, int divy)
static void MapPointsWithStride(const SkMatrix &mx, SkPoint pts[], size_t stride, int count)
static bool NearlyAffine(const SkMatrix &m, const SkRect &bounds, SkScalar tolerance=SK_ScalarNearlyZero)
static void MapPointsWithStride(const SkMatrix &mx, SkPoint dst[], size_t dstStride, const SkPoint src[], size_t srcStride, int count)
static bool InverseMapRect(const SkMatrix &mx, SkRect *dst, const SkRect &src)
static SkScalar ComputeResScaleForStroking(const SkMatrix &matrix)
SkScalar getTranslateY() const
void mapPoints(SkPoint dst[], const SkPoint src[], int count) const
bool invert(SkMatrix *inverse) const
SkScalar getScaleX() const
SkScalar getScaleY() const
bool isScaleTranslate() const
bool mapRect(SkRect *dst, const SkRect &src, SkApplyPerspectiveClip pc=SkApplyPerspectiveClip::kYes) const
SkScalar getTranslateX() const
@ kTranslate_Mask
translation SkMatrix
@ kIdentity_Mask
identity SkMatrix; all bits clear
static const uint8_t buffer[]
static SKVX_ALWAYS_INLINE Vec Load(const void *ptr)