Skia
2D Graphics Library
|
SkMatrix holds a 3x3 matrix for transforming coordinates. More...
#include <SkMatrix.h>
Public Types | |
enum | ScaleToFit { kFill_ScaleToFit , kStart_ScaleToFit , kCenter_ScaleToFit , kEnd_ScaleToFit } |
enum | TypeMask { kIdentity_Mask = 0 , kTranslate_Mask = 0x01 , kScale_Mask = 0x02 , kAffine_Mask = 0x04 , kPerspective_Mask = 0x08 } |
Public Member Functions | |
constexpr | SkMatrix () |
Creates an identity SkMatrix: More... | |
TypeMask | getType () const |
Returns a bit field describing the transformations the matrix may perform. More... | |
bool | isIdentity () const |
Returns true if SkMatrix is identity. More... | |
bool | isScaleTranslate () const |
Returns true if SkMatrix at most scales and translates. More... | |
bool | isTranslate () const |
Returns true if SkMatrix is identity, or translates. More... | |
bool | rectStaysRect () const |
Returns true SkMatrix maps SkRect to another SkRect. More... | |
bool | preservesAxisAlignment () const |
Returns true SkMatrix maps SkRect to another SkRect. More... | |
bool | hasPerspective () const |
Returns true if the matrix contains perspective elements. More... | |
bool | isSimilarity (SkScalar tol=SK_ScalarNearlyZero) const |
Returns true if SkMatrix contains only translation, rotation, reflection, and uniform scale. More... | |
bool | preservesRightAngles (SkScalar tol=SK_ScalarNearlyZero) const |
Returns true if SkMatrix contains only translation, rotation, reflection, and scale. More... | |
SkScalar | operator[] (int index) const |
Returns one matrix value. More... | |
SkScalar | get (int index) const |
Returns one matrix value. More... | |
SkScalar | rc (int r, int c) const |
Returns one matrix value from a particular row/column. More... | |
SkScalar | getScaleX () const |
Returns scale factor multiplied by x-axis input, contributing to x-axis output. More... | |
SkScalar | getScaleY () const |
Returns scale factor multiplied by y-axis input, contributing to y-axis output. More... | |
SkScalar | getSkewY () const |
Returns scale factor multiplied by x-axis input, contributing to y-axis output. More... | |
SkScalar | getSkewX () const |
Returns scale factor multiplied by y-axis input, contributing to x-axis output. More... | |
SkScalar | getTranslateX () const |
Returns translation contributing to x-axis output. More... | |
SkScalar | getTranslateY () const |
Returns translation contributing to y-axis output. More... | |
SkScalar | getPerspX () const |
Returns factor scaling input x-axis relative to input y-axis. More... | |
SkScalar | getPerspY () const |
Returns factor scaling input y-axis relative to input x-axis. More... | |
SkScalar & | operator[] (int index) |
Returns writable SkMatrix value. More... | |
SkMatrix & | set (int index, SkScalar value) |
Sets SkMatrix value. More... | |
SkMatrix & | setScaleX (SkScalar v) |
Sets horizontal scale factor. More... | |
SkMatrix & | setScaleY (SkScalar v) |
Sets vertical scale factor. More... | |
SkMatrix & | setSkewY (SkScalar v) |
Sets vertical skew factor. More... | |
SkMatrix & | setSkewX (SkScalar v) |
Sets horizontal skew factor. More... | |
SkMatrix & | setTranslateX (SkScalar v) |
Sets horizontal translation. More... | |
SkMatrix & | setTranslateY (SkScalar v) |
Sets vertical translation. More... | |
SkMatrix & | setPerspX (SkScalar v) |
Sets input x-axis perspective factor, which causes mapXY() to vary input x-axis values inversely proportional to input y-axis values. More... | |
SkMatrix & | setPerspY (SkScalar v) |
Sets input y-axis perspective factor, which causes mapXY() to vary input y-axis values inversely proportional to input x-axis values. More... | |
SkMatrix & | setAll (SkScalar scaleX, SkScalar skewX, SkScalar transX, SkScalar skewY, SkScalar scaleY, SkScalar transY, SkScalar persp0, SkScalar persp1, SkScalar persp2) |
Sets all values from parameters. More... | |
void | get9 (SkScalar buffer[9]) const |
Copies nine scalar values contained by SkMatrix into buffer, in member value ascending order: kMScaleX, kMSkewX, kMTransX, kMSkewY, kMScaleY, kMTransY, kMPersp0, kMPersp1, kMPersp2. More... | |
SkMatrix & | set9 (const SkScalar buffer[9]) |
Sets SkMatrix to nine scalar values in buffer, in member value ascending order: kMScaleX, kMSkewX, kMTransX, kMSkewY, kMScaleY, kMTransY, kMPersp0, kMPersp1, kMPersp2. More... | |
SkMatrix & | reset () |
Sets SkMatrix to identity; which has no effect on mapped SkPoint. More... | |
SkMatrix & | setIdentity () |
Sets SkMatrix to identity; which has no effect on mapped SkPoint. More... | |
SkMatrix & | setTranslate (SkScalar dx, SkScalar dy) |
Sets SkMatrix to translate by (dx, dy). More... | |
SkMatrix & | setTranslate (const SkVector &v) |
Sets SkMatrix to translate by (v.fX, v.fY). More... | |
SkMatrix & | setScale (SkScalar sx, SkScalar sy, SkScalar px, SkScalar py) |
Sets SkMatrix to scale by sx and sy, about a pivot point at (px, py). More... | |
SkMatrix & | setScale (SkScalar sx, SkScalar sy) |
Sets SkMatrix to scale by sx and sy about at pivot point at (0, 0). More... | |
SkMatrix & | setRotate (SkScalar degrees, SkScalar px, SkScalar py) |
Sets SkMatrix to rotate by degrees about a pivot point at (px, py). More... | |
SkMatrix & | setRotate (SkScalar degrees) |
Sets SkMatrix to rotate by degrees about a pivot point at (0, 0). More... | |
SkMatrix & | setSinCos (SkScalar sinValue, SkScalar cosValue, SkScalar px, SkScalar py) |
Sets SkMatrix to rotate by sinValue and cosValue, about a pivot point at (px, py). More... | |
SkMatrix & | setSinCos (SkScalar sinValue, SkScalar cosValue) |
Sets SkMatrix to rotate by sinValue and cosValue, about a pivot point at (0, 0). More... | |
SkMatrix & | setRSXform (const SkRSXform &rsxForm) |
Sets SkMatrix to rotate, scale, and translate using a compressed matrix form. More... | |
SkMatrix & | setSkew (SkScalar kx, SkScalar ky, SkScalar px, SkScalar py) |
Sets SkMatrix to skew by kx and ky, about a pivot point at (px, py). More... | |
SkMatrix & | setSkew (SkScalar kx, SkScalar ky) |
Sets SkMatrix to skew by kx and ky, about a pivot point at (0, 0). More... | |
SkMatrix & | setConcat (const SkMatrix &a, const SkMatrix &b) |
Sets SkMatrix to SkMatrix a multiplied by SkMatrix b. More... | |
SkMatrix & | preTranslate (SkScalar dx, SkScalar dy) |
Sets SkMatrix to SkMatrix multiplied by SkMatrix constructed from translation (dx, dy). More... | |
SkMatrix & | preScale (SkScalar sx, SkScalar sy, SkScalar px, SkScalar py) |
Sets SkMatrix to SkMatrix multiplied by SkMatrix constructed from scaling by (sx, sy) about pivot point (px, py). More... | |
SkMatrix & | preScale (SkScalar sx, SkScalar sy) |
Sets SkMatrix to SkMatrix multiplied by SkMatrix constructed from scaling by (sx, sy) about pivot point (0, 0). More... | |
SkMatrix & | preRotate (SkScalar degrees, SkScalar px, SkScalar py) |
Sets SkMatrix to SkMatrix multiplied by SkMatrix constructed from rotating by degrees about pivot point (px, py). More... | |
SkMatrix & | preRotate (SkScalar degrees) |
Sets SkMatrix to SkMatrix multiplied by SkMatrix constructed from rotating by degrees about pivot point (0, 0). More... | |
SkMatrix & | preSkew (SkScalar kx, SkScalar ky, SkScalar px, SkScalar py) |
Sets SkMatrix to SkMatrix multiplied by SkMatrix constructed from skewing by (kx, ky) about pivot point (px, py). More... | |
SkMatrix & | preSkew (SkScalar kx, SkScalar ky) |
Sets SkMatrix to SkMatrix multiplied by SkMatrix constructed from skewing by (kx, ky) about pivot point (0, 0). More... | |
SkMatrix & | preConcat (const SkMatrix &other) |
Sets SkMatrix to SkMatrix multiplied by SkMatrix other. More... | |
SkMatrix & | postTranslate (SkScalar dx, SkScalar dy) |
Sets SkMatrix to SkMatrix constructed from translation (dx, dy) multiplied by SkMatrix. More... | |
SkMatrix & | postScale (SkScalar sx, SkScalar sy, SkScalar px, SkScalar py) |
Sets SkMatrix to SkMatrix constructed from scaling by (sx, sy) about pivot point (px, py), multiplied by SkMatrix. More... | |
SkMatrix & | postScale (SkScalar sx, SkScalar sy) |
Sets SkMatrix to SkMatrix constructed from scaling by (sx, sy) about pivot point (0, 0), multiplied by SkMatrix. More... | |
SkMatrix & | postRotate (SkScalar degrees, SkScalar px, SkScalar py) |
Sets SkMatrix to SkMatrix constructed from rotating by degrees about pivot point (px, py), multiplied by SkMatrix. More... | |
SkMatrix & | postRotate (SkScalar degrees) |
Sets SkMatrix to SkMatrix constructed from rotating by degrees about pivot point (0, 0), multiplied by SkMatrix. More... | |
SkMatrix & | postSkew (SkScalar kx, SkScalar ky, SkScalar px, SkScalar py) |
Sets SkMatrix to SkMatrix constructed from skewing by (kx, ky) about pivot point (px, py), multiplied by SkMatrix. More... | |
SkMatrix & | postSkew (SkScalar kx, SkScalar ky) |
Sets SkMatrix to SkMatrix constructed from skewing by (kx, ky) about pivot point (0, 0), multiplied by SkMatrix. More... | |
SkMatrix & | postConcat (const SkMatrix &other) |
Sets SkMatrix to SkMatrix other multiplied by SkMatrix. More... | |
bool | setRectToRect (const SkRect &src, const SkRect &dst, ScaleToFit stf) |
Sets SkMatrix to scale and translate src SkRect to dst SkRect. More... | |
bool | setPolyToPoly (const SkPoint src[], const SkPoint dst[], int count) |
Sets SkMatrix to map src to dst. More... | |
bool | invert (SkMatrix *inverse) const |
Sets inverse to reciprocal matrix, returning true if SkMatrix can be inverted. More... | |
bool | asAffine (SkScalar affine[6]) const |
Fills affine in column major order. More... | |
SkMatrix & | setAffine (const SkScalar affine[6]) |
Sets SkMatrix to affine values, passed in column major order. More... | |
void | normalizePerspective () |
A matrix is categorized as 'perspective' if the bottom row is not [0, 0, 1]. More... | |
void | mapPoints (SkPoint dst[], const SkPoint src[], int count) const |
Maps src SkPoint array of length count to dst SkPoint array of equal or greater length. More... | |
void | mapPoints (SkPoint pts[], int count) const |
Maps pts SkPoint array of length count in place. More... | |
void | mapHomogeneousPoints (SkPoint3 dst[], const SkPoint3 src[], int count) const |
Maps src SkPoint3 array of length count to dst SkPoint3 array, which must of length count or greater. More... | |
void | mapHomogeneousPoints (SkPoint3 dst[], const SkPoint src[], int count) const |
Returns homogeneous points, starting with 2D src points (with implied w = 1). More... | |
SkPoint | mapPoint (SkPoint pt) const |
Returns SkPoint pt multiplied by SkMatrix. More... | |
void | mapXY (SkScalar x, SkScalar y, SkPoint *result) const |
Maps SkPoint (x, y) to result. More... | |
SkPoint | mapXY (SkScalar x, SkScalar y) const |
Returns SkPoint (x, y) multiplied by SkMatrix. More... | |
SkPoint | mapOrigin () const |
Returns (0, 0) multiplied by SkMatrix. More... | |
void | mapVectors (SkVector dst[], const SkVector src[], int count) const |
Maps src vector array of length count to vector SkPoint array of equal or greater length. More... | |
void | mapVectors (SkVector vecs[], int count) const |
Maps vecs vector array of length count in place, multiplying each vector by SkMatrix, treating SkMatrix translation as zero. More... | |
void | mapVector (SkScalar dx, SkScalar dy, SkVector *result) const |
Maps vector (dx, dy) to result. More... | |
SkVector | mapVector (SkScalar dx, SkScalar dy) const |
Returns vector (dx, dy) multiplied by SkMatrix, treating SkMatrix translation as zero. More... | |
bool | mapRect (SkRect *dst, const SkRect &src, SkApplyPerspectiveClip pc=SkApplyPerspectiveClip::kYes) const |
Sets dst to bounds of src corners mapped by SkMatrix. More... | |
bool | mapRect (SkRect *rect, SkApplyPerspectiveClip pc=SkApplyPerspectiveClip::kYes) const |
Sets rect to bounds of rect corners mapped by SkMatrix. More... | |
SkRect | mapRect (const SkRect &src, SkApplyPerspectiveClip pc=SkApplyPerspectiveClip::kYes) const |
Returns bounds of src corners mapped by SkMatrix. More... | |
void | mapRectToQuad (SkPoint dst[4], const SkRect &rect) const |
Maps four corners of rect to dst. More... | |
void | mapRectScaleTranslate (SkRect *dst, const SkRect &src) const |
Sets dst to bounds of src corners mapped by SkMatrix. More... | |
SkScalar | mapRadius (SkScalar radius) const |
Returns geometric mean radius of ellipse formed by constructing circle of size radius, and mapping constructed circle with SkMatrix. More... | |
void | dump () const |
Writes text representation of SkMatrix to standard output. More... | |
SkScalar | getMinScale () const |
Returns the minimum scaling factor of SkMatrix by decomposing the scaling and skewing elements. More... | |
SkScalar | getMaxScale () const |
Returns the maximum scaling factor of SkMatrix by decomposing the scaling and skewing elements. More... | |
bool | getMinMaxScales (SkScalar scaleFactors[2]) const |
Sets scaleFactors[0] to the minimum scaling factor, and scaleFactors[1] to the maximum scaling factor. More... | |
bool | decomposeScale (SkSize *scale, SkMatrix *remaining=nullptr) const |
Decomposes SkMatrix into scale components and whatever remains. More... | |
void | dirtyMatrixTypeCache () |
Sets internal cache to unknown state. More... | |
void | setScaleTranslate (SkScalar sx, SkScalar sy, SkScalar tx, SkScalar ty) |
Initializes SkMatrix with scale and translate elements. More... | |
bool | isFinite () const |
Returns true if all elements of the matrix are finite. More... | |
Static Public Member Functions | |
static SkMatrix | Scale (SkScalar sx, SkScalar sy) |
Sets SkMatrix to scale by (sx, sy). More... | |
static SkMatrix | Translate (SkScalar dx, SkScalar dy) |
Sets SkMatrix to translate by (dx, dy). More... | |
static SkMatrix | Translate (SkVector t) |
static SkMatrix | Translate (SkIVector t) |
static SkMatrix | RotateDeg (SkScalar deg) |
Sets SkMatrix to rotate by |deg| about a pivot point at (0, 0). More... | |
static SkMatrix | RotateDeg (SkScalar deg, SkPoint pt) |
static SkMatrix | RotateRad (SkScalar rad) |
static SkMatrix | Skew (SkScalar kx, SkScalar ky) |
Sets SkMatrix to skew by (kx, ky) about pivot point (0, 0). More... | |
static SkMatrix | RectToRect (const SkRect &src, const SkRect &dst, ScaleToFit mode=kFill_ScaleToFit) |
Returns SkMatrix set to scale and translate src to dst. More... | |
static SkMatrix | MakeAll (SkScalar scaleX, SkScalar skewX, SkScalar transX, SkScalar skewY, SkScalar scaleY, SkScalar transY, SkScalar pers0, SkScalar pers1, SkScalar pers2) |
Sets SkMatrix to: More... | |
static SkMatrix | MakeRectToRect (const SkRect &src, const SkRect &dst, ScaleToFit stf) |
Returns SkMatrix set to scale and translate src SkRect to dst SkRect. More... | |
static void | SetAffineIdentity (SkScalar affine[6]) |
Fills affine with identity values in column major order. More... | |
static const SkMatrix & | I () |
Returns reference to const identity SkMatrix. More... | |
static const SkMatrix & | InvalidMatrix () |
Returns reference to a const SkMatrix with invalid values. More... | |
static SkMatrix | Concat (const SkMatrix &a, const SkMatrix &b) |
Returns SkMatrix a multiplied by SkMatrix b. More... | |
Static Public Attributes | |
static constexpr int | kMScaleX = 0 |
SkMatrix organizes its values in row-major order. More... | |
static constexpr int | kMSkewX = 1 |
horizontal skew factor More... | |
static constexpr int | kMTransX = 2 |
horizontal translation More... | |
static constexpr int | kMSkewY = 3 |
vertical skew factor More... | |
static constexpr int | kMScaleY = 4 |
vertical scale factor More... | |
static constexpr int | kMTransY = 5 |
vertical translation More... | |
static constexpr int | kMPersp0 = 6 |
input x perspective factor More... | |
static constexpr int | kMPersp1 = 7 |
input y perspective factor More... | |
static constexpr int | kMPersp2 = 8 |
perspective bias More... | |
static constexpr int | kAScaleX = 0 |
Affine arrays are in column-major order to match the matrix used by PDF and XPS. More... | |
static constexpr int | kASkewY = 1 |
vertical skew factor More... | |
static constexpr int | kASkewX = 2 |
horizontal skew factor More... | |
static constexpr int | kAScaleY = 3 |
vertical scale factor More... | |
static constexpr int | kATransX = 4 |
horizontal translation More... | |
static constexpr int | kATransY = 5 |
vertical translation More... | |
Friends | |
class | SkPerspIter |
class | SkMatrixPriv |
class | SerializationTest |
SK_API bool | operator== (const SkMatrix &a, const SkMatrix &b) |
Compares a and b; returns true if a and b are numerically equal. More... | |
SK_API bool | operator!= (const SkMatrix &a, const SkMatrix &b) |
Compares a and b; returns true if a and b are not numerically equal. More... | |
SkMatrix | operator* (const SkMatrix &a, const SkMatrix &b) |
SkMatrix holds a 3x3 matrix for transforming coordinates.
This allows mapping SkPoint and vectors with translation, scaling, skewing, rotation, and perspective.
SkMatrix elements are in row major order. SkMatrix constexpr default constructs to identity.
SkMatrix includes a hidden variable that classifies the type of matrix to improve performance. SkMatrix is not thread safe unless getType() is called first.
enum SkMatrix::ScaleToFit |
Enumerator | |
---|---|
kFill_ScaleToFit | scales in x and y to fill destination SkRect |
kStart_ScaleToFit | scales and aligns to left and top |
kCenter_ScaleToFit | scales and aligns to center |
kEnd_ScaleToFit | scales and aligns to right and bottom |
enum SkMatrix::TypeMask |
|
inlineconstexpr |
Creates an identity SkMatrix:
| 1 0 0 | | 0 1 0 | | 0 0 1 |
bool SkMatrix::asAffine | ( | SkScalar | affine[6] | ) | const |
Fills affine in column major order.
Sets affine to:
| scale-x skew-x translate-x | | skew-y scale-y translate-y |
If SkMatrix contains perspective, returns false and leaves affine unchanged.
affine | storage for 3 by 2 affine matrix; may be nullptr |
Returns SkMatrix a multiplied by SkMatrix b.
Given:
| A B C | | J K L | a = | D E F |, b = | M N O | | G H I | | P Q R |
sets SkMatrix to:
| A B C | | J K L | | AJ+BM+CP AK+BN+CQ AL+BO+CR | a * b = | D E F | * | M N O | = | DJ+EM+FP DK+EN+FQ DL+EO+FR | | G H I | | P Q R | | GJ+HM+IP GK+HN+IQ GL+HO+IR |
a | SkMatrix on left side of multiply expression |
b | SkMatrix on right side of multiply expression |
Decomposes SkMatrix into scale components and whatever remains.
Returns false if SkMatrix could not be decomposed.
Sets scale to portion of SkMatrix that scale axes. Sets remaining to SkMatrix with scaling factored out. remaining may be passed as nullptr to determine if SkMatrix can be decomposed without computing remainder.
Returns true if scale components are found. scale and remaining are unchanged if SkMatrix contains perspective; scale factors are not finite, or are nearly zero.
On success: Matrix = Remaining * scale.
scale | axes scaling factors; may be nullptr |
remaining | SkMatrix without scaling; may be nullptr |
|
inline |
Sets internal cache to unknown state.
Use to force update after repeated modifications to SkMatrix element reference returned by operator[](int index).
void SkMatrix::dump | ( | ) | const |
|
inline |
Returns one matrix value.
Asserts if index is out of range and SK_DEBUG is defined.
index | one of: kMScaleX, kMSkewX, kMTransX, kMSkewY, kMScaleY, kMTransY, kMPersp0, kMPersp1, kMPersp2 |
|
inline |
Copies nine scalar values contained by SkMatrix into buffer, in member value ascending order: kMScaleX, kMSkewX, kMTransX, kMSkewY, kMScaleY, kMTransY, kMPersp0, kMPersp1, kMPersp2.
buffer | storage for nine scalar values |
SkScalar SkMatrix::getMaxScale | ( | ) | const |
bool SkMatrix::getMinMaxScales | ( | SkScalar | scaleFactors[2] | ) | const |
Sets scaleFactors[0] to the minimum scaling factor, and scaleFactors[1] to the maximum scaling factor.
Scaling factors are computed by decomposing the SkMatrix scaling and skewing elements.
Returns true if scaleFactors are found; otherwise, returns false and sets scaleFactors to undefined values.
scaleFactors | storage for minimum and maximum scale factors |
SkScalar SkMatrix::getMinScale | ( | ) | const |
|
inline |
Returns factor scaling input x-axis relative to input y-axis.
|
inline |
Returns factor scaling input y-axis relative to input x-axis.
|
inline |
Returns scale factor multiplied by x-axis input, contributing to x-axis output.
With mapPoints(), scales SkPoint along the x-axis.
|
inline |
Returns scale factor multiplied by y-axis input, contributing to y-axis output.
With mapPoints(), scales SkPoint along the y-axis.
|
inline |
Returns scale factor multiplied by y-axis input, contributing to x-axis output.
With mapPoints(), skews SkPoint along the x-axis. Skewing both axes can rotate SkPoint.
|
inline |
Returns scale factor multiplied by x-axis input, contributing to y-axis output.
With mapPoints(), skews SkPoint along the y-axis. Skewing both axes can rotate SkPoint.
|
inline |
Returns translation contributing to x-axis output.
With mapPoints(), moves SkPoint along the x-axis.
|
inline |
Returns translation contributing to y-axis output.
With mapPoints(), moves SkPoint along the y-axis.
|
inline |
Returns a bit field describing the transformations the matrix may perform.
The bit field is computed conservatively, so it may include false positives. For example, when kPerspective_Mask is set, all other bits are set.
|
inline |
Returns true if the matrix contains perspective elements.
SkMatrix form is:
| -- -- -- | | -- -- -- | | perspective-x perspective-y perspective-scale |
where perspective-x or perspective-y is non-zero, or perspective-scale is not one. All other elements may have any value.
|
static |
Returns reference to const identity SkMatrix.
Returned SkMatrix is set to:
| 1 0 0 | | 0 1 0 | | 0 0 1 |
example: https://fiddle.skia.org/c/@Matrix_I
|
static |
|
inline |
Sets inverse to reciprocal matrix, returning true if SkMatrix can be inverted.
Geometrically, if SkMatrix maps from source to destination, inverse SkMatrix maps from destination to source. If SkMatrix can not be inverted, inverse is unchanged.
inverse | storage for inverted SkMatrix; may be nullptr |
|
inline |
Returns true if all elements of the matrix are finite.
Returns false if any element is infinity, or NaN.
|
inline |
|
inline |
bool SkMatrix::isSimilarity | ( | SkScalar | tol = SK_ScalarNearlyZero | ) | const |
Returns true if SkMatrix contains only translation, rotation, reflection, and uniform scale.
Returns false if SkMatrix contains different scales, skewing, perspective, or degenerate forms that collapse to a line or point.
Describes that the SkMatrix makes rendering with and without the matrix are visually alike; a transformed circle remains a circle. Mathematically, this is referred to as similarity of a Euclidean space, or a similarity transformation.
Preserves right angles, keeping the arms of the angle equal lengths.
tol | to be deprecated |
|
inline |
|
inlinestatic |
Sets SkMatrix to:
| scaleX skewX transX | | skewY scaleY transY | | pers0 pers1 pers2 |
scaleX | horizontal scale factor |
skewX | horizontal skew factor |
transX | horizontal translation |
skewY | vertical skew factor |
scaleY | vertical scale factor |
transY | vertical translation |
pers0 | input x-axis perspective factor |
pers1 | input y-axis perspective factor |
pers2 | perspective scale factor |
|
inlinestatic |
Returns SkMatrix set to scale and translate src SkRect to dst SkRect.
stf selects whether mapping completely fills dst or preserves the aspect ratio, and how to align src within dst. Returns the identity SkMatrix if src is empty. If dst is empty, returns SkMatrix set to:
| 0 0 0 | | 0 0 0 | | 0 0 1 |
void SkMatrix::mapHomogeneousPoints | ( | SkPoint3 | dst[], |
const SkPoint | src[], | ||
int | count | ||
) | const |
Returns homogeneous points, starting with 2D src points (with implied w = 1).
Maps src SkPoint3 array of length count to dst SkPoint3 array, which must of length count or greater.
SkPoint3 array is mapped by multiplying each SkPoint3 by SkMatrix. Given:
| A B C | | x | Matrix = | D E F |, src = | y | | G H I | | z |
each resulting dst SkPoint is computed as:
|A B C| |x| Matrix * src = |D E F| |y| = |Ax+By+Cz Dx+Ey+Fz Gx+Hy+Iz| |G H I| |z|
dst | storage for mapped SkPoint3 array |
src | SkPoint3 array to transform |
count | items in SkPoint3 array to transform |
example: https://fiddle.skia.org/c/@Matrix_mapHomogeneousPoints
|
inline |
Returns (0, 0) multiplied by SkMatrix.
Given:
| A B C | | 0 | Matrix = | D E F |, pt = | 0 | | G H I | | 1 |
result is computed as:
|A B C| |0| C F Matrix * pt = |D E F| |0| = |C F I| = - , - |G H I| |1| I I
|
inline |
Returns SkPoint pt multiplied by SkMatrix.
Given:
| A B C | | x | Matrix = | D E F |, pt = | y | | G H I | | 1 |
result is computed as:
|A B C| |x| Ax+By+C Dx+Ey+F Matrix * pt = |D E F| |y| = |Ax+By+C Dx+Ey+F Gx+Hy+I| = ------- , ------- |G H I| |1| Gx+Hy+I Gx+Hy+I
p | SkPoint to map |
void SkMatrix::mapPoints | ( | SkPoint | dst[], |
const SkPoint | src[], | ||
int | count | ||
) | const |
Maps src SkPoint array of length count to dst SkPoint array of equal or greater length.
SkPoint are mapped by multiplying each SkPoint by SkMatrix. Given:
| A B C | | x | Matrix = | D E F |, pt = | y | | G H I | | 1 |
where
for (i = 0; i < count; ++i) { x = src[i].fX y = src[i].fY }
each dst SkPoint is computed as:
|A B C| |x| Ax+By+C Dx+Ey+F Matrix * pt = |D E F| |y| = |Ax+By+C Dx+Ey+F Gx+Hy+I| = ------- , ------- |G H I| |1| Gx+Hy+I Gx+Hy+I
src and dst may point to the same storage.
dst | storage for mapped SkPoint |
src | SkPoint to transform |
count | number of SkPoint to transform |
|
inline |
Maps pts SkPoint array of length count in place.
SkPoint are mapped by multiplying each SkPoint by SkMatrix. Given:
| A B C | | x | Matrix = | D E F |, pt = | y | | G H I | | 1 |
where
for (i = 0; i < count; ++i) { x = pts[i].fX y = pts[i].fY }
each resulting pts SkPoint is computed as:
|A B C| |x| Ax+By+C Dx+Ey+F Matrix * pt = |D E F| |y| = |Ax+By+C Dx+Ey+F Gx+Hy+I| = ------- , ------- |G H I| |1| Gx+Hy+I Gx+Hy+I
pts | storage for mapped SkPoint |
count | number of SkPoint to transform |
Returns geometric mean radius of ellipse formed by constructing circle of size radius, and mapping constructed circle with SkMatrix.
The result squared is equal to the major axis length times the minor axis length. Result is not meaningful if SkMatrix contains perspective elements.
radius | circle size to map |
|
inline |
Returns bounds of src corners mapped by SkMatrix.
src | rectangle to map |
bool SkMatrix::mapRect | ( | SkRect * | dst, |
const SkRect & | src, | ||
SkApplyPerspectiveClip | pc = SkApplyPerspectiveClip::kYes |
||
) | const |
Sets dst to bounds of src corners mapped by SkMatrix.
Returns true if mapped corners are dst corners.
Returned value is the same as calling rectStaysRect().
dst | storage for bounds of mapped SkPoint |
src | SkRect to map |
pc | whether to apply perspective clipping |
|
inline |
Sets rect to bounds of rect corners mapped by SkMatrix.
Returns true if mapped corners are computed rect corners.
Returned value is the same as calling rectStaysRect().
rect | rectangle to map, and storage for bounds of mapped corners |
pc | whether to apply perspective clipping |
Sets dst to bounds of src corners mapped by SkMatrix.
If matrix contains elements other than scale or translate: asserts if SK_DEBUG is defined; otherwise, results are undefined.
dst | storage for bounds of mapped SkPoint |
src | SkRect to map |
example: https://fiddle.skia.org/c/@Matrix_mapRectScaleTranslate
|
inline |
Maps four corners of rect to dst.
SkPoint are mapped by multiplying each rect corner by SkMatrix. rect corner is processed in this order: (rect.fLeft, rect.fTop), (rect.fRight, rect.fTop), (rect.fRight, rect.fBottom), (rect.fLeft, rect.fBottom).
rect may be empty: rect.fLeft may be greater than or equal to rect.fRight; rect.fTop may be greater than or equal to rect.fBottom.
Given:
| A B C | | x | Matrix = | D E F |, pt = | y | | G H I | | 1 |
where pt is initialized from each of (rect.fLeft, rect.fTop), (rect.fRight, rect.fTop), (rect.fRight, rect.fBottom), (rect.fLeft, rect.fBottom), each dst SkPoint is computed as:
|A B C| |x| Ax+By+C Dx+Ey+F Matrix * pt = |D E F| |y| = |Ax+By+C Dx+Ey+F Gx+Hy+I| = ------- , ------- |G H I| |1| Gx+Hy+I Gx+Hy+I
dst | storage for mapped corner SkPoint |
rect | SkRect to map |
Note: this does not perform perspective clipping (as that might result in more than 4 points, so results are suspect if the matrix contains perspective.
Returns vector (dx, dy) multiplied by SkMatrix, treating SkMatrix translation as zero.
Given:
| A B 0 | | dx | Matrix = | D E 0 |, vec = | dy | | G H I | | 1 |
each result vector is computed as:
|A B 0| |dx| A*dx+B*dy D*dx+E*dy
Matrix * vec = |D E 0| |dy| = |A*dx+B*dy D*dx+E*dy G*dx+H*dy+I| = --------— , --------— |G H I| | 1| G*dx+H*dy+I G*dx+*dHy+I
dx | x-axis value of vector to map |
dy | y-axis value of vector to map |
Maps vector (dx, dy) to result.
Vector is mapped by multiplying by SkMatrix, treating SkMatrix translation as zero. Given:
| A B 0 | | dx | Matrix = | D E 0 |, vec = | dy | | G H I | | 1 |
each result vector is computed as:
|A B 0| |dx| A*dx+B*dy D*dx+E*dy
Matrix * vec = |D E 0| |dy| = |A*dx+B*dy D*dx+E*dy G*dx+H*dy+I| = --------— , --------— |G H I| | 1| G*dx+H*dy+I G*dx+*dHy+I
dx | x-axis value of vector to map |
dy | y-axis value of vector to map |
result | storage for mapped vector |
void SkMatrix::mapVectors | ( | SkVector | dst[], |
const SkVector | src[], | ||
int | count | ||
) | const |
Maps src vector array of length count to vector SkPoint array of equal or greater length.
Vectors are mapped by multiplying each vector by SkMatrix, treating SkMatrix translation as zero. Given:
| A B 0 | | x | Matrix = | D E 0 |, src = | y | | G H I | | 1 |
where
for (i = 0; i < count; ++i) { x = src[i].fX y = src[i].fY }
each dst vector is computed as:
|A B 0| |x| Ax+By Dx+Ey Matrix * src = |D E 0| |y| = |Ax+By Dx+Ey Gx+Hy+I| = ------- , ------- |G H I| |1| Gx+Hy+I Gx+Hy+I
src and dst may point to the same storage.
dst | storage for mapped vectors |
src | vectors to transform |
count | number of vectors to transform |
|
inline |
Maps vecs vector array of length count in place, multiplying each vector by SkMatrix, treating SkMatrix translation as zero.
Given:
| A B 0 | | x | Matrix = | D E 0 |, vec = | y | | G H I | | 1 |
where
for (i = 0; i < count; ++i) { x = vecs[i].fX y = vecs[i].fY }
each result vector is computed as:
|A B 0| |x| Ax+By Dx+Ey Matrix * vec = |D E 0| |y| = |Ax+By Dx+Ey Gx+Hy+I| = ------- , ------- |G H I| |1| Gx+Hy+I Gx+Hy+I
vecs | vectors to transform, and storage for mapped vectors |
count | number of vectors to transform |
Returns SkPoint (x, y) multiplied by SkMatrix.
Given:
| A B C | | x | Matrix = | D E F |, pt = | y | | G H I | | 1 |
result is computed as:
|A B C| |x| Ax+By+C Dx+Ey+F Matrix * pt = |D E F| |y| = |Ax+By+C Dx+Ey+F Gx+Hy+I| = ------- , ------- |G H I| |1| Gx+Hy+I Gx+Hy+I
x | x-axis value of SkPoint to map |
y | y-axis value of SkPoint to map |
Maps SkPoint (x, y) to result.
SkPoint is mapped by multiplying by SkMatrix. Given:
| A B C | | x | Matrix = | D E F |, pt = | y | | G H I | | 1 |
result is computed as:
|A B C| |x| Ax+By+C Dx+Ey+F Matrix * pt = |D E F| |y| = |Ax+By+C Dx+Ey+F Gx+Hy+I| = ------- , ------- |G H I| |1| Gx+Hy+I Gx+Hy+I
x | x-axis value of SkPoint to map |
y | y-axis value of SkPoint to map |
result | storage for mapped SkPoint |
|
inline |
A matrix is categorized as 'perspective' if the bottom row is not [0, 0, 1].
However, for most uses (e.g. mapPoints) a bottom row of [0, 0, X] behaves like a non-perspective matrix, though it will be categorized as perspective. Calling normalizePerspective() will change the matrix such that, if its bottom row was [0, 0, X], it will be changed to [0, 0, 1] by scaling the rest of the matrix by 1/X.
| A B C | | A/X B/X C/X | | D E F | -> | D/X E/X F/X | for X != 0 | 0 0 X | | 0 0 1 |
|
inline |
Returns writable SkMatrix value.
Asserts if index is out of range and SK_DEBUG is defined. Clears internal cache anticipating that caller will change SkMatrix value.
Next call to read SkMatrix state may recompute cache; subsequent writes to SkMatrix value must be followed by dirtyMatrixTypeCache().
index | one of: kMScaleX, kMSkewX, kMTransX, kMSkewY, kMScaleY, kMTransY, kMPersp0, kMPersp1, kMPersp2 |
|
inline |
Returns one matrix value.
Asserts if index is out of range and SK_DEBUG is defined.
index | one of: kMScaleX, kMSkewX, kMTransX, kMSkewY, kMScaleY, kMTransY, kMPersp0, kMPersp1, kMPersp2 |
Sets SkMatrix to SkMatrix other multiplied by SkMatrix.
This can be thought of mapping by other after applying SkMatrix.
Given:
| J K L | | A B C | Matrix = | M N O |, other = | D E F | | P Q R | | G H I |
sets SkMatrix to:
| A B C | | J K L | | AJ+BM+CP AK+BN+CQ AL+BO+CR | other * Matrix = | D E F | * | M N O | = | DJ+EM+FP DK+EN+FQ DL+EO+FR | | G H I | | P Q R | | GJ+HM+IP GK+HN+IQ GL+HO+IR |
other | SkMatrix on left side of multiply expression |
Sets SkMatrix to SkMatrix constructed from rotating by degrees about pivot point (0, 0), multiplied by SkMatrix.
This can be thought of as rotating about the origin after applying SkMatrix.
Positive degrees rotates clockwise.
Given:
| J K L | | c -s 0 | Matrix = | M N O |, R(degrees, px, py) = | s c 0 | | P Q R | | 0 0 1 |
where
c = cos(degrees) s = sin(degrees)
sets SkMatrix to:
| c -s dx | | J K L | | cJ-sM cK-sN cL-sO | R(degrees, px, py) * Matrix = | s c dy | | M N O | = | sJ+cM sK+cN sL+cO | | 0 0 1 | | P Q R | | P Q R |
degrees | angle of axes relative to upright axes |
Sets SkMatrix to SkMatrix constructed from rotating by degrees about pivot point (px, py), multiplied by SkMatrix.
This can be thought of as rotating about a pivot point after applying SkMatrix.
Positive degrees rotates clockwise.
Given:
| J K L | | c -s dx | Matrix = | M N O |, R(degrees, px, py) = | s c dy | | P Q R | | 0 0 1 |
where
c = cos(degrees) s = sin(degrees) dx = s * py + (1 - c) * px dy = -s * px + (1 - c) * py
sets SkMatrix to:
|c -s dx| |J K L| |cJ-sM+dx*P cK-sN+dx*Q cL-sO+dx+R| R(degrees, px, py) * Matrix = |s c dy| |M N O| = |sJ+cM+dy*P sK+cN+dy*Q sL+cO+dy*R| |0 0 1| |P Q R| | P Q R|
degrees | angle of axes relative to upright axes |
px | pivot on x-axis |
py | pivot on y-axis |
Sets SkMatrix to SkMatrix constructed from scaling by (sx, sy) about pivot point (0, 0), multiplied by SkMatrix.
This can be thought of as scaling about the origin after applying SkMatrix.
Given:
| J K L | | sx 0 0 | Matrix = | M N O |, S(sx, sy) = | 0 sy 0 | | P Q R | | 0 0 1 |
sets SkMatrix to:
| sx 0 0 | | J K L | | sx*J sx*K sx*L | S(sx, sy) * Matrix = | 0 sy 0 | | M N O | = | sy*M sy*N sy*O | | 0 0 1 | | P Q R | | P Q R |
sx | horizontal scale factor |
sy | vertical scale factor |
Sets SkMatrix to SkMatrix constructed from scaling by (sx, sy) about pivot point (px, py), multiplied by SkMatrix.
This can be thought of as scaling about a pivot point after applying SkMatrix.
Given:
| J K L | | sx 0 dx | Matrix = | M N O |, S(sx, sy, px, py) = | 0 sy dy | | P Q R | | 0 0 1 |
where
dx = px - sx * px dy = py - sy * py
sets SkMatrix to:
| sx 0 dx | | J K L | | sx*J+dx*P sx*K+dx*Q sx*L+dx+R | S(sx, sy, px, py) * Matrix = | 0 sy dy | | M N O | = | sy*M+dy*P sy*N+dy*Q sy*O+dy*R | | 0 0 1 | | P Q R | | P Q R |
sx | horizontal scale factor |
sy | vertical scale factor |
px | pivot on x-axis |
py | pivot on y-axis |
Sets SkMatrix to SkMatrix constructed from skewing by (kx, ky) about pivot point (0, 0), multiplied by SkMatrix.
This can be thought of as skewing about the origin after applying SkMatrix.
Given:
| J K L | | 1 kx 0 | Matrix = | M N O |, K(kx, ky) = | ky 1 0 | | P Q R | | 0 0 1 |
sets SkMatrix to:
| 1 kx 0 | | J K L | | J+kx*M K+kx*N L+kx*O | K(kx, ky) * Matrix = | ky 1 0 | | M N O | = | ky*J+M ky*K+N ky*L+O | | 0 0 1 | | P Q R | | P Q R |
kx | horizontal skew factor |
ky | vertical skew factor |
Sets SkMatrix to SkMatrix constructed from skewing by (kx, ky) about pivot point (px, py), multiplied by SkMatrix.
This can be thought of as skewing about a pivot point after applying SkMatrix.
Given:
| J K L | | 1 kx dx | Matrix = | M N O |, K(kx, ky, px, py) = | ky 1 dy | | P Q R | | 0 0 1 |
where
dx = -kx * py dy = -ky * px
sets SkMatrix to:
| 1 kx dx| |J K L| |J+kx*M+dx*P K+kx*N+dx*Q L+kx*O+dx+R| K(kx, ky, px, py) * Matrix = |ky 1 dy| |M N O| = |ky*J+M+dy*P ky*K+N+dy*Q ky*L+O+dy*R| | 0 0 1| |P Q R| | P Q R|
kx | horizontal skew factor |
ky | vertical skew factor |
px | pivot on x-axis |
py | pivot on y-axis |
Sets SkMatrix to SkMatrix constructed from translation (dx, dy) multiplied by SkMatrix.
This can be thought of as moving the point to be mapped after applying SkMatrix.
Given:
| J K L | | 1 0 dx | Matrix = | M N O |, T(dx, dy) = | 0 1 dy | | P Q R | | 0 0 1 |
sets SkMatrix to:
| 1 0 dx | | J K L | | J+dx*P K+dx*Q L+dx*R | T(dx, dy) * Matrix = | 0 1 dy | | M N O | = | M+dy*P N+dy*Q O+dy*R | | 0 0 1 | | P Q R | | P Q R |
Sets SkMatrix to SkMatrix multiplied by SkMatrix other.
This can be thought of mapping by other before applying SkMatrix.
Given:
| A B C | | J K L | Matrix = | D E F |, other = | M N O | | G H I | | P Q R |
sets SkMatrix to:
| A B C | | J K L | | AJ+BM+CP AK+BN+CQ AL+BO+CR | Matrix * other = | D E F | * | M N O | = | DJ+EM+FP DK+EN+FQ DL+EO+FR | | G H I | | P Q R | | GJ+HM+IP GK+HN+IQ GL+HO+IR |
other | SkMatrix on right side of multiply expression |
Sets SkMatrix to SkMatrix multiplied by SkMatrix constructed from rotating by degrees about pivot point (0, 0).
This can be thought of as rotating about the origin before applying SkMatrix.
Positive degrees rotates clockwise.
Given:
| A B C | | c -s 0 | Matrix = | D E F |, R(degrees, px, py) = | s c 0 | | G H I | | 0 0 1 |
where
c = cos(degrees) s = sin(degrees)
sets SkMatrix to:
| A B C | | c -s 0 | | Ac+Bs -As+Bc C | Matrix * R(degrees, px, py) = | D E F | | s c 0 | = | Dc+Es -Ds+Ec F | | G H I | | 0 0 1 | | Gc+Hs -Gs+Hc I |
degrees | angle of axes relative to upright axes |
Sets SkMatrix to SkMatrix multiplied by SkMatrix constructed from rotating by degrees about pivot point (px, py).
This can be thought of as rotating about a pivot point before applying SkMatrix.
Positive degrees rotates clockwise.
Given:
| A B C | | c -s dx | Matrix = | D E F |, R(degrees, px, py) = | s c dy | | G H I | | 0 0 1 |
where
c = cos(degrees) s = sin(degrees) dx = s * py + (1 - c) * px dy = -s * px + (1 - c) * py
sets SkMatrix to:
| A B C | | c -s dx | | Ac+Bs -As+Bc A*dx+B*dy+C | Matrix * R(degrees, px, py) = | D E F | | s c dy | = | Dc+Es -Ds+Ec D*dx+E*dy+F | | G H I | | 0 0 1 | | Gc+Hs -Gs+Hc G*dx+H*dy+I |
degrees | angle of axes relative to upright axes |
px | pivot on x-axis |
py | pivot on y-axis |
Sets SkMatrix to SkMatrix multiplied by SkMatrix constructed from scaling by (sx, sy) about pivot point (0, 0).
This can be thought of as scaling about the origin before applying SkMatrix.
Given:
| A B C | | sx 0 0 | Matrix = | D E F |, S(sx, sy) = | 0 sy 0 | | G H I | | 0 0 1 |
sets SkMatrix to:
| A B C | | sx 0 0 | | A*sx B*sy C | Matrix * S(sx, sy) = | D E F | | 0 sy 0 | = | D*sx E*sy F | | G H I | | 0 0 1 | | G*sx H*sy I |
sx | horizontal scale factor |
sy | vertical scale factor |
Sets SkMatrix to SkMatrix multiplied by SkMatrix constructed from scaling by (sx, sy) about pivot point (px, py).
This can be thought of as scaling about a pivot point before applying SkMatrix.
Given:
| A B C | | sx 0 dx | Matrix = | D E F |, S(sx, sy, px, py) = | 0 sy dy | | G H I | | 0 0 1 |
where
dx = px - sx * px dy = py - sy * py
sets SkMatrix to:
| A B C | | sx 0 dx | | A*sx B*sy A*dx+B*dy+C | Matrix * S(sx, sy, px, py) = | D E F | | 0 sy dy | = | D*sx E*sy D*dx+E*dy+F | | G H I | | 0 0 1 | | G*sx H*sy G*dx+H*dy+I |
sx | horizontal scale factor |
sy | vertical scale factor |
px | pivot on x-axis |
py | pivot on y-axis |
|
inline |
Returns true SkMatrix maps SkRect to another SkRect.
If true, SkMatrix is identity, or scales, or rotates a multiple of 90 degrees, or mirrors on axes. In all cases, SkMatrix may also have translation. SkMatrix form is either:
| scale-x 0 translate-x | | 0 scale-y translate-y | | 0 0 1 |
or
| 0 rotate-x translate-x | | rotate-y 0 translate-y | | 0 0 1 |
for non-zero values of scale-x, scale-y, rotate-x, and rotate-y.
Also called rectStaysRect(); use the one that provides better inline documentation.
bool SkMatrix::preservesRightAngles | ( | SkScalar | tol = SK_ScalarNearlyZero | ) | const |
Returns true if SkMatrix contains only translation, rotation, reflection, and scale.
Scale may differ along rotated axes. Returns false if SkMatrix skewing, perspective, or degenerate forms that collapse to a line or point.
Preserves right angles, but not requiring that the arms of the angle retain equal lengths.
tol | to be deprecated |
example: https://fiddle.skia.org/c/@Matrix_preservesRightAngles
Sets SkMatrix to SkMatrix multiplied by SkMatrix constructed from skewing by (kx, ky) about pivot point (0, 0).
This can be thought of as skewing about the origin before applying SkMatrix.
Given:
| A B C | | 1 kx 0 | Matrix = | D E F |, K(kx, ky) = | ky 1 0 | | G H I | | 0 0 1 |
sets SkMatrix to:
| A B C | | 1 kx 0 | | A+B*ky A*kx+B C | Matrix * K(kx, ky) = | D E F | | ky 1 0 | = | D+E*ky D*kx+E F | | G H I | | 0 0 1 | | G+H*ky G*kx+H I |
kx | horizontal skew factor |
ky | vertical skew factor |
Sets SkMatrix to SkMatrix multiplied by SkMatrix constructed from skewing by (kx, ky) about pivot point (px, py).
This can be thought of as skewing about a pivot point before applying SkMatrix.
Given:
| A B C | | 1 kx dx | Matrix = | D E F |, K(kx, ky, px, py) = | ky 1 dy | | G H I | | 0 0 1 |
where
dx = -kx * py dy = -ky * px
sets SkMatrix to:
| A B C | | 1 kx dx | | A+B*ky A*kx+B A*dx+B*dy+C | Matrix * K(kx, ky, px, py) = | D E F | | ky 1 dy | = | D+E*ky D*kx+E D*dx+E*dy+F | | G H I | | 0 0 1 | | G+H*ky G*kx+H G*dx+H*dy+I |
kx | horizontal skew factor |
ky | vertical skew factor |
px | pivot on x-axis |
py | pivot on y-axis |
Sets SkMatrix to SkMatrix multiplied by SkMatrix constructed from translation (dx, dy).
This can be thought of as moving the point to be mapped before applying SkMatrix.
Given:
| A B C | | 1 0 dx | Matrix = | D E F |, T(dx, dy) = | 0 1 dy | | G H I | | 0 0 1 |
sets SkMatrix to:
| A B C | | 1 0 dx | | A B A*dx+B*dy+C | Matrix * T(dx, dy) = | D E F | | 0 1 dy | = | D E D*dx+E*dy+F | | G H I | | 0 0 1 | | G H G*dx+H*dy+I |
|
inline |
Returns one matrix value from a particular row/column.
Asserts if index is out of range and SK_DEBUG is defined.
r | matrix row to fetch |
c | matrix column to fetch |
|
inline |
Returns true SkMatrix maps SkRect to another SkRect.
If true, SkMatrix is identity, or scales, or rotates a multiple of 90 degrees, or mirrors on axes. In all cases, SkMatrix may also have translation. SkMatrix form is either:
| scale-x 0 translate-x | | 0 scale-y translate-y | | 0 0 1 |
or
| 0 rotate-x translate-x | | rotate-y 0 translate-y | | 0 0 1 |
for non-zero values of scale-x, scale-y, rotate-x, and rotate-y.
Also called preservesAxisAlignment(); use the one that provides better inline documentation.
|
inlinestatic |
Returns SkMatrix set to scale and translate src to dst.
ScaleToFit selects whether mapping completely fills dst or preserves the aspect ratio, and how to align src within dst. Returns the identity SkMatrix if src is empty. If dst is empty, returns SkMatrix set to:
| 0 0 0 | | 0 0 0 | | 0 0 1 |
SkMatrix& SkMatrix::reset | ( | ) |
Sets SkMatrix to identity; which has no effect on mapped SkPoint.
Sets SkMatrix to:
| 1 0 0 | | 0 1 0 | | 0 0 1 |
Also called setIdentity(); use the one that provides better inline documentation.
Sets SkMatrix to nine scalar values in buffer, in member value ascending order: kMScaleX, kMSkewX, kMTransX, kMSkewY, kMScaleY, kMTransY, kMPersp0, kMPersp1, kMPersp2.
Sets matrix to:
| buffer[0] buffer[1] buffer[2] | | buffer[3] buffer[4] buffer[5] | | buffer[6] buffer[7] buffer[8] |
In the future, set9 followed by get9 may not return the same values. Since SkMatrix maps non-homogeneous coordinates, scaling all nine values produces an equivalent transformation, possibly improving precision.
buffer | nine scalar values |
Sets SkMatrix to affine values, passed in column major order.
Given affine, column, then row, as:
| scale-x skew-x translate-x | | skew-y scale-y translate-y |
SkMatrix is set, row, then column, to:
| scale-x skew-x translate-x | | skew-y scale-y translate-y | | 0 0 1 |
affine | 3 by 2 affine matrix |
|
static |
Fills affine with identity values in column major order.
Sets affine to:
| 1 0 0 | | 0 1 0 |
Affine 3 by 2 matrices in column major order are used by OpenGL and XPS.
affine | storage for 3 by 2 affine matrix |
example: https://fiddle.skia.org/c/@Matrix_SetAffineIdentity
|
inline |
Sets all values from parameters.
Sets matrix to:
| scaleX skewX transX | | skewY scaleY transY | | persp0 persp1 persp2 |
scaleX | horizontal scale factor to store |
skewX | horizontal skew factor to store |
transX | horizontal translation to store |
skewY | vertical skew factor to store |
scaleY | vertical scale factor to store |
transY | vertical translation to store |
persp0 | input x-axis values perspective factor to store |
persp1 | input y-axis values perspective factor to store |
persp2 | perspective scale factor to store |
Sets SkMatrix to SkMatrix a multiplied by SkMatrix b.
Either a or b may be this.
Given:
| A B C | | J K L | a = | D E F |, b = | M N O | | G H I | | P Q R |
sets SkMatrix to:
| A B C | | J K L | | AJ+BM+CP AK+BN+CQ AL+BO+CR | a * b = | D E F | * | M N O | = | DJ+EM+FP DK+EN+FQ DL+EO+FR | | G H I | | P Q R | | GJ+HM+IP GK+HN+IQ GL+HO+IR |
|
inline |
Sets input x-axis perspective factor, which causes mapXY() to vary input x-axis values inversely proportional to input y-axis values.
v | perspective factor |
Sets input y-axis perspective factor, which causes mapXY() to vary input y-axis values inversely proportional to input x-axis values.
v | perspective factor |
bool SkMatrix::setPolyToPoly | ( | const SkPoint | src[], |
const SkPoint | dst[], | ||
int | count | ||
) |
Sets SkMatrix to map src to dst.
count must be zero or greater, and four or less.
If count is zero, sets SkMatrix to identity and returns true. If count is one, sets SkMatrix to translate and returns true. If count is two or more, sets SkMatrix to map SkPoint if possible; returns false if SkMatrix cannot be constructed. If count is four, SkMatrix may include perspective.
src | SkPoint to map from |
dst | SkPoint to map to |
count | number of SkPoint in src and dst |
bool SkMatrix::setRectToRect | ( | const SkRect & | src, |
const SkRect & | dst, | ||
ScaleToFit | stf | ||
) |
Sets SkMatrix to scale and translate src SkRect to dst SkRect.
stf selects whether mapping completely fills dst or preserves the aspect ratio, and how to align src within dst. Returns false if src is empty, and sets SkMatrix to identity. Returns true if dst is empty, and sets SkMatrix to:
| 0 0 0 | | 0 0 0 | | 0 0 1 |
Sets SkMatrix to rotate by degrees about a pivot point at (0, 0).
Positive degrees rotates clockwise.
degrees | angle of axes relative to upright axes |
Sets SkMatrix to rotate, scale, and translate using a compressed matrix form.
Vector (rsxForm.fSSin, rsxForm.fSCos) describes the angle of rotation relative to (0, 1). Vector length specifies scale. Mapped point is rotated and scaled by vector, then translated by (rsxForm.fTx, rsxForm.fTy).
rsxForm | compressed SkRSXform matrix |
Sets SkMatrix to scale by sx and sy about at pivot point at (0, 0).
sx | horizontal scale factor |
sy | vertical scale factor |
Initializes SkMatrix with scale and translate elements.
| sx 0 tx | | 0 sy ty | | 0 0 1 |
sx | horizontal scale factor to store |
sy | vertical scale factor to store |
tx | horizontal translation to store |
ty | vertical translation to store |
Sets horizontal scale factor.
v | horizontal scale factor to store |
Sets vertical scale factor.
v | vertical scale factor to store |
Sets SkMatrix to rotate by sinValue and cosValue, about a pivot point at (0, 0).
Vector (sinValue, cosValue) describes the angle of rotation relative to (0, 1). Vector length specifies scale.
sinValue | rotation vector x-axis component |
cosValue | rotation vector y-axis component |
Sets SkMatrix to rotate by sinValue and cosValue, about a pivot point at (px, py).
The pivot point is unchanged when mapped with SkMatrix.
Vector (sinValue, cosValue) describes the angle of rotation relative to (0, 1). Vector length specifies scale.
sinValue | rotation vector x-axis component |
cosValue | rotation vector y-axis component |
px | pivot on x-axis |
py | pivot on y-axis |
Sets SkMatrix to skew by kx and ky, about a pivot point at (0, 0).
kx | horizontal skew factor |
ky | vertical skew factor |
Sets horizontal skew factor.
v | horizontal skew factor to store |
Sets vertical skew factor.
v | vertical skew factor to store |
|
inline |
Sets SkMatrix to translate by (v.fX, v.fY).
v | vector containing horizontal and vertical translation |
Sets SkMatrix to translate by (dx, dy).
dx | horizontal translation |
dy | vertical translation |
Sets horizontal translation.
v | horizontal translation to store |
Sets vertical translation.
v | vertical translation to store |
|
inlinestatic |
|
inlinestatic |
|
friend |
|
friend |
|
friend |
|
staticconstexpr |
Affine arrays are in column-major order to match the matrix used by PDF and XPS.
horizontal scale factor
|
staticconstexpr |
vertical scale factor
|
staticconstexpr |
horizontal skew factor
|
staticconstexpr |
vertical skew factor
|
staticconstexpr |
horizontal translation
|
staticconstexpr |
vertical translation
|
staticconstexpr |
input x perspective factor
|
staticconstexpr |
input y perspective factor
|
staticconstexpr |
perspective bias
|
staticconstexpr |
|
staticconstexpr |
vertical scale factor
|
staticconstexpr |
horizontal skew factor
|
staticconstexpr |
vertical skew factor
|
staticconstexpr |
horizontal translation
|
staticconstexpr |
vertical translation