blob: 0db0fa881eb9b4372c1be4299153207fb0c5a762 [file] [log] [blame]
#Topic Matrix
#Alias Matrix_Reference
#Class SkMatrix
Matrix holds a 3x3 matrix for transforming coordinates.
Matrix elements are in column major order.
SkMatrix does not have a constructor, so it must be explicitly initialized
using either reset() - to construct an identity matrix, or one of the set
functions (e.g. setTranslate, setRotate, etc.).
SkMatrix is not thread safe unless getType is called first.
#Topic Overview
#Subtopic Subtopics
#ToDo manually add subtopics ##
#Table
#Legend
# topics # description ##
#Legend ##
#Table ##
##
#Subtopic Operators
#Table
#Legend
# description # function ##
#Legend ##
# friend SK_API bool operator!=(const SkMatrix& a, const SkMatrix& b) # Returns true if members are unequal. ##
# friend SK_API bool operator==(const SkMatrix& a, const SkMatrix& b) # Returns true if members are equal. ##
# SkScalar operator[](int index) const # Returns one of nine Matrix values. ##
# SkScalar& operator[](int index) # Returns a writable reference to one of nine Matrix values. ##
#Table ##
#Subtopic ##
#Subtopic Member_Functions
#Table
#Legend
# description # function ##
#Legend ##
# Concat # Returns the concatenation of Matrix pair. ##
# GetMapPtsProc # Returns optimal function to map Point array. ##
# GetMapXYProc # Returns optimal function to map one Point. ##
# I # Returns a reference to a const identity Matrix. ##
# InvalidMatrix # Returns a reference to a const invalid Matrix. ##
# MakeRectToRect # Constructs from source Rect to destination Rect. ##
# MakeScale # Constructs from scale in x and y. ##
# MakeTrans # Constructs from translate in x and y. ##
# SetAffineIdentity # Sets 2x3 array to identity. ##
# asAffine # Copies to 2x3 array. ##
# cheapEqualTo # Compares Matrix pair using memcmp(). ##
# decomposeScale # Separates scale if possible. ##
# dirtyMatrixTypeCache # Private; used by testing. ##
# dump # Sends text representation using floats to standard output. ##
# fixedStepInX # Returns step in x for a position in y. ##
# get # Returns one of nine Matrix values. ##
# get9 # Returns all nine Matrix values. ##
# getMapPtsProc # Returns optimal function to map Point array. ##
# getMapXYProc # Returns optimal function to map one Point. ##
# getMaxScale # Returns maximum scaling, if possible. ##
# getMinMaxScales # Returns minimum and maximum scaling, if possible. ##
# getMinScale # Returns minimum scaling, if possible. ##
# getPerspX # Returns horizontal perspective factor. ##
# getPerspY # Returns vertical perspective factor. ##
# getScaleX # Returns horizontal scale factor. ##
# getScaleY # Returns vertical scale factor.##
# getSkewX # Returns horizontal skew factor. ##
# getSkewY # Returns vertical skew factor. ##
# getTranslateX # Returns horizontal translation factor. ##
# getTranslateY # Returns vertical translation factor. ##
# getType # Returns transform complexity. ##
# hasPerspective # Returns if transform includes perspective. ##
# invert # Returns inverse, if possible. ##
# isFinite # Returns if all Matrix values are not infinity, NaN. ##
# isFixedStepInX # Returns if transformation supports fixed step in x. ##
# isIdentity # Returns if matrix equals the identity Matrix .##
# isScaleTranslate # Returns if transform is limited to scale and translate. ##
# isSimilarity # Returns if transform is limited to square scale and rotation. ##
# isTranslate # Returns if transform is limited to translate. ##
# mapHomogeneousPoints # ##
# mapPoints # ##
# mapPointsWithStride # ##
# mapRadius # ##
# mapRect # ##
# mapRectScaleTranslate # ##
# mapRectToQuad # ##
# mapVector # ##
# mapVectors # ##
# mapXY # ##
# postConcat # ##
# postIDiv # ##
# postRotate # ##
# postScale # ##
# postSkew # ##
# postTranslate # ##
# preConcat # ##
# preRotate # ##
# preScale # ##
# preSkew # ##
# preTranslate # ##
# preservesAxisAlignment # ##
# preservesRightAngles # ##
# readFromMemory # ##
# rectStaysRect # ##
# reset # ##
# set # ##
# set9 # ##
# setAffine # ##
# setAll # ##
# setConcat # ##
# setIDiv # ##
# setIdentity # ##
# setPerspX # ##
# setPerspY # ##
# setPolyToPoly # ##
# setRSXform # ##
# setRectToRect # ##
# setRotate # ##
# setScale # ##
# setScaleTranslate # ##
# setScaleX # ##
# setScaleY # ##
# setSinCos # ##
# setSkew # ##
# setSkewX # ##
# setSkewY # ##
# setTranslate # ##
# setTranslateX # ##
# setTranslateY # ##
# toString # ##
# writeToMemory # ##
#Table ##
#Subtopic ##
#Topic ##
# ------------------------------------------------------------------------------
#Method static SkMatrix SK_WARN_UNUSED_RESULT MakeScale(SkScalar sx, SkScalar sy)
#Param sx incomplete ##
#Param sy incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method static SkMatrix SK_WARN_UNUSED_RESULT MakeScale(SkScalar scale)
#Param scale incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method static SkMatrix SK_WARN_UNUSED_RESULT MakeTrans(SkScalar dx, SkScalar dy)
#Param dx incomplete ##
#Param dy incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Enum TypeMask
#Code
enum TypeMask {
kIdentity_Mask = 0,
kTranslate_Mask = 0x01,
kScale_Mask = 0x02,
kAffine_Mask = 0x04,
kPerspective_Mask = 0x08,
};
##
Enum of bit fields for the mask return by getType().
Use this to identify the complexity of the matrix.
#Const kIdentity_Mask = 0
##
#Const kTranslate_Mask = 0x01
set if the matrix has translation
##
#Const kScale_Mask = 0x02
set if the matrix has x or y scale
##
#Const kAffine_Mask = 0x04
set if the matrix skews or rotates
##
#Const kPerspective_Mask = 0x08
set if the matrix is in perspective
##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method TypeMask getType() const
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 true, all
other bits may be set to true even in the case of a pure perspective
transform.
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool isIdentity() const
Returns true if the matrix is identity.
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool isScaleTranslate() const
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool isTranslate() const
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool rectStaysRect() const
Returns true if will map a rectangle to another rectangle. This can be
true if the matrix is identity, scale-only, or rotates a multiple of
90 degrees, or mirrors in x or y.
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool preservesAxisAlignment() const
alias for rectStaysRect()
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool hasPerspective() const
Returns true if the matrix contains perspective elements.
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool isSimilarity(SkScalar tol = SK_ScalarNearlyZero) const
Returns true if the matrix contains only translation, rotation/reflection or uniform scale.
Returns false if other transformation types are included or is degenerate
#Param tol incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool preservesRightAngles(SkScalar tol = SK_ScalarNearlyZero) const
Returns true if the matrix contains only translation, rotation/reflection or scale
(non-uniform scale is allowed).
Returns false if other transformation types are included or is degenerate
#Param tol incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Enum _anonymous
#Code
enum {
kMScaleX,
kMSkewX,
kMTransX,
kMSkewY,
kMScaleY,
kMTransY,
kMPersp0,
kMPersp1,
kMPersp2,
};
##
#Const kMScaleX 0
##
#Const kMSkewX 1
##
#Const kMTransX 2
##
#Const kMSkewY 3
##
#Const kMScaleY 4
##
#Const kMTransY 5
##
#Const kMPersp0 6
##
#Const kMPersp1 7
##
#Const kMPersp2 8
##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Enum _anonymous_2
#Code
enum {
kAScaleX,
kASkewY,
kASkewX,
kAScaleY,
kATransX,
kATransY,
};
##
Affine arrays are in column major order
because that is how PDF and XPS like it.
#Const kAScaleX 0
##
#Const kASkewY 1
##
#Const kASkewX 2
##
#Const kAScaleY 3
##
#Const kATransX 4
##
#Const kATransY 5
##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method SkScalar operator[](int index) const
#Param index incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method SkScalar get(int index) const
#Param index incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method SkScalar getScaleX() const
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method SkScalar getScaleY() const
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method SkScalar getSkewY() const
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method SkScalar getSkewX() const
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method SkScalar getTranslateX() const
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method SkScalar getTranslateY() const
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method SkScalar getPerspX() const
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method SkScalar getPerspY() const
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method SkScalar operator[](int index)
#Param index incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void set(int index, SkScalar value)
#Param index incomplete ##
#Param value incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setScaleX(SkScalar v)
#Param v incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setScaleY(SkScalar v)
#Param v incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setSkewY(SkScalar v)
#Param v incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setSkewX(SkScalar v)
#Param v incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setTranslateX(SkScalar v)
#Param v incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setTranslateY(SkScalar v)
#Param v incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setPerspX(SkScalar v)
#Param v incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setPerspY(SkScalar v)
#Param v incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setAll(SkScalar scaleX, SkScalar skewX, SkScalar transX,
SkScalar skewY, SkScalar scaleY, SkScalar transY,
SkScalar persp0, SkScalar persp1, SkScalar persp2)
#Param scaleX incomplete ##
#Param skewX incomplete ##
#Param transX incomplete ##
#Param skewY incomplete ##
#Param scaleY incomplete ##
#Param transY incomplete ##
#Param persp0 incomplete ##
#Param persp1 incomplete ##
#Param persp2 incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void get9(SkScalar buffer[9]) const
Copy the 9 scalars for this matrix into buffer, in member value ascending order:
kMScaleX, kMSkewX, kMTransX, kMSkewY, kMScaleY, kMTransY, kMPersp0, kMPersp1, kMPersp2.
#Param buffer incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void set9(const SkScalar buffer[9])
Set this matrix to the 9 scalars from the buffer, in member value ascending order:
kMScaleX, kMSkewX, kMTransX, kMSkewY, kMScaleY, kMTransY, kMPersp0, kMPersp1, kMPersp2.
Note: calling set9 followed by get9 may not return the exact same values. Since the matrix
is used to map non-homogeneous coordinates, it is free to scale the 9 values as needed.
#Param buffer incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void reset()
Set the matrix to identity
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setIdentity()
alias for reset()
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setTranslate(SkScalar dx, SkScalar dy)
Set the matrix to translate by (dx, dy).
#Param dx incomplete ##
#Param dy incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setTranslate(const SkVector& v)
#Param v incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setScale(SkScalar sx, SkScalar sy, SkScalar px, SkScalar py)
Set the matrix to scale by sx and sy, with a pivot point at (px, py).
The pivot point is the coordinate that should remain unchanged by the
specified transformation.
#Param sx incomplete ##
#Param sy incomplete ##
#Param px incomplete ##
#Param py incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setScale(SkScalar sx, SkScalar sy)
Set the matrix to scale by sx and sy.
#Param sx incomplete ##
#Param sy incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool setIDiv(int divx, int divy)
Set the matrix to scale by 1/divx and 1/divy. Returns false and does not
touch the matrix if either divx or divy is zero.
#Param divx incomplete ##
#Param divy incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setRotate(SkScalar degrees, SkScalar px, SkScalar py)
Set the matrix to rotate by the specified number of degrees, with a
pivot point at (px, py). The pivot point is the coordinate that should
remain unchanged by the specified transformation.
#Param degrees incomplete ##
#Param px incomplete ##
#Param py incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setRotate(SkScalar degrees)
Set the matrix to rotate about (0,0) by the specified number of degrees.
#Param degrees incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setSinCos(SkScalar sinValue, SkScalar cosValue,
SkScalar px, SkScalar py)
Set the matrix to rotate by the specified sine and cosine values, with
a pivot point at (px, py). The pivot point is the coordinate that
should remain unchanged by the specified transformation.
#Param sinValue incomplete ##
#Param cosValue incomplete ##
#Param px incomplete ##
#Param py incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setSinCos(SkScalar sinValue, SkScalar cosValue)
Set the matrix to rotate by the specified sine and cosine values.
#Param sinValue incomplete ##
#Param cosValue incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method SkMatrix& setRSXform(const SkRSXform& rsxForm)
#Param rsxForm incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setSkew(SkScalar kx, SkScalar ky, SkScalar px, SkScalar py)
Set the matrix to skew by kx and ky, with a pivot point at (px, py).
The pivot point is the coordinate that should remain unchanged by the
specified transformation.
#Param kx incomplete ##
#Param ky incomplete ##
#Param px incomplete ##
#Param py incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setSkew(SkScalar kx, SkScalar ky)
Set the matrix to skew by kx and ky.
#Param kx incomplete ##
#Param ky incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setConcat(const SkMatrix& a, const SkMatrix& b)
Set the matrix to the concatenation of the two specified matrices.
Either of the two matrices may also be the target matrix.
this = a * b;
#Param a incomplete ##
#Param b incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void preTranslate(SkScalar dx, SkScalar dy)
Preconcats the matrix with the specified translation.
#Formula
M' = M * T(dx, dy)
##
#Param dx incomplete ##
#Param dy incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void preScale(SkScalar sx, SkScalar sy, SkScalar px, SkScalar py)
Preconcats the matrix with the specified scale.
#Formula
M' = M * S(sx, sy, px, py)
##
#Param sx incomplete ##
#Param sy incomplete ##
#Param px incomplete ##
#Param py incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void preScale(SkScalar sx, SkScalar sy)
Preconcats the matrix with the specified scale.
#Formula
M' = M * S(sx, sy)
##
#Param sx incomplete ##
#Param sy incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void preRotate(SkScalar degrees, SkScalar px, SkScalar py)
Preconcats the matrix with the specified rotation.
#Formula
M' = M * R(degrees, px, py)
##
#Param degrees incomplete ##
#Param px incomplete ##
#Param py incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void preRotate(SkScalar degrees)
Preconcats the matrix with the specified rotation.
#Formula
M' = M * R(degrees)
##
#Param degrees incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void preSkew(SkScalar kx, SkScalar ky, SkScalar px, SkScalar py)
Preconcats the matrix with the specified skew.
#Formula
M' = M * K(kx, ky, px, py)
##
#Param kx incomplete ##
#Param ky incomplete ##
#Param px incomplete ##
#Param py incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void preSkew(SkScalar kx, SkScalar ky)
Preconcats the matrix with the specified skew.
#Formula
M' = M * K(kx, ky)
##
#Param kx incomplete ##
#Param ky incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void preConcat(const SkMatrix& other)
Preconcats the matrix with the specified matrix.
#Formula
M' = M * other
##
#Param other incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void postTranslate(SkScalar dx, SkScalar dy)
Postconcats the matrix with the specified translation.
#Formula
M' = T(dx, dy) * M
##
#Param dx incomplete ##
#Param dy incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void postScale(SkScalar sx, SkScalar sy, SkScalar px, SkScalar py)
Postconcats the matrix with the specified scale.
#Formula
M' = S(sx, sy, px, py) * M
##
#Param sx incomplete ##
#Param sy incomplete ##
#Param px incomplete ##
#Param py incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void postScale(SkScalar sx, SkScalar sy)
Postconcats the matrix with the specified scale.
#Formula
M' = S(sx, sy) * M
##
#Param sx incomplete ##
#Param sy incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool postIDiv(int divx, int divy)
Postconcats the matrix by dividing it by the specified integers.
#Formula
M' = S(1/divx, 1/divy, 0, 0) * M
##
#Param divx incomplete ##
#Param divy incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void postRotate(SkScalar degrees, SkScalar px, SkScalar py)
Postconcats the matrix with the specified rotation.
#Formula
M' = R(degrees, px, py) * M
##
#Param degrees incomplete ##
#Param px incomplete ##
#Param py incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void postRotate(SkScalar degrees)
Postconcats the matrix with the specified rotation.
#Formula
M' = R(degrees) * M
##
#Param degrees incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void postSkew(SkScalar kx, SkScalar ky, SkScalar px, SkScalar py)
Postconcats the matrix with the specified skew.
#Formula
M' = K(kx, ky, px, py) * M
##
#Param kx incomplete ##
#Param ky incomplete ##
#Param px incomplete ##
#Param py incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void postSkew(SkScalar kx, SkScalar ky)
Postconcats the matrix with the specified skew.
#Formula
M' = K(kx, ky) * M
##
#Param kx incomplete ##
#Param ky incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void postConcat(const SkMatrix& other)
Postconcats the matrix with the specified matrix.
#Formula
M' = other * M
##
#Param other incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Enum ScaleToFit
#Code
enum ScaleToFit {
kFill_ScaleToFit,
kStart_ScaleToFit,
kCenter_ScaleToFit,
kEnd_ScaleToFit,
};
##
#Const kFill_ScaleToFit
Scale in X and Y independently, so that src matches dst exactly.
This may change the aspect ratio of the src.
##
#Const kStart_ScaleToFit
Compute a scale that will maintain the original src aspect ratio,
but will also ensure that src fits entirely inside dst. At least one
axis (x or y) will fit exactly. Aligns the result to the
left and top edges of dst.
##
#Const kCenter_ScaleToFit
Compute a scale that will maintain the original src aspect ratio,
but will also ensure that src fits entirely inside dst. At least one
axis (x or y) will fit exactly. The result is centered inside dst.
##
#Const kEnd_ScaleToFit
Compute a scale that will maintain the original src aspect ratio,
but will also ensure that src fits entirely inside dst. At least one
axis (x or y) will fit exactly. Aligns the result to the
right and bottom edges of dst.
##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool setRectToRect(const SkRect& src, const SkRect& dst, ScaleToFit stf)
Set the matrix to the scale and translate values that map the source
rectangle to the destination rectangle, returning true if the the result
can be represented.
#Param src the source rectangle to map from
##
#Param dst the destination rectangle to map to
##
#Param stf the ScaleToFit option
##
#Return true if the matrix can be represented by the rectangle mapping
##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method static SkMatrix MakeRectToRect(const SkRect& src, const SkRect& dst, ScaleToFit stf)
#Param src incomplete ##
#Param dst incomplete ##
#Param stf incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool setPolyToPoly(const SkPoint src[], const SkPoint dst[], int count)
Set the matrix such that the specified src points would map to the
specified dst points. count must be within [0..4].
#Param src array of src points
##
#Param dst array of dst points
##
#Param count number of points to use for the transformation
##
#Return true if the matrix was set to the specified transformation
##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool SK_WARN_UNUSED_RESULT invert(SkMatrix* inverse) const
If this matrix can be inverted, return true and if inverse is not null,
set inverse to be the inverse of this matrix. If this matrix cannot be
inverted, ignore inverse and return false
#Param inverse incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method static void SetAffineIdentity(SkScalar affine[6])
Fills the passed array with affine identity values
in column major order.
#Param affine array to fill with affine identity values; must not be nullptr
##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool SK_WARN_UNUSED_RESULT asAffine(SkScalar affine[6]) const
Fills the passed array with the affine values in column major order.
If the matrix is a perspective transform, returns false
and does not change the passed array.
#Param affine array to fill with affine values; ignored if nullptr
##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setAffine(const SkScalar affine[6])
Set the matrix to the specified affine values.
Note: these are passed in column major order.
#Param affine incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void mapPoints(SkPoint dst[], const SkPoint src[], int count) const
Apply this matrix to the array of points specified by src, and write
the transformed points into the array of points specified by dst.
#Formula
dst[] = M * src[]
##
#Param dst storage for transformed coordinates; must
allow count entries
##
#Param src original coordinates that are to be transformed;
must allow count entries
##
#Param count number of points in src to read, and then transform
into dst
##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void mapPoints(SkPoint pts[], int count) const
Apply this matrix to the array of points, overwriting it with the
transformed values.
#Formula
dst[] = M * pts[]
##
#Param pts storage for transformed points; must allow count entries
##
#Param count number of points in pts
##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void mapPointsWithStride(SkPoint pts[], size_t stride, int count) const
Like mapPoints but with custom byte stride between the points. Stride
should be a multiple of
#Formula
sizeof(SkScalar)
##
.
#Param pts incomplete ##
#Param stride incomplete ##
#Param count incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void mapPointsWithStride(SkPoint dst[], const SkPoint src[], size_t stride, int count) const
Like mapPoints but with custom byte stride between the points.
#Param dst incomplete ##
#Param src incomplete ##
#Param stride incomplete ##
#Param count incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void mapHomogeneousPoints(SkScalar dst[], const SkScalar src[], int count) const
Apply this matrix to the array of homogeneous points, specified by src,
where a homogeneous point is defined by 3 contiguous scalar values,
and write the transformed points into the array of scalars specified by dst.
#Formula
dst[] = M * src[]
##
#Param dst storage for transformed coordinates; must
allow 3 * count entries
##
#Param src original coordinates to be transformed;
must contain at least 3 * count entries
##
#Param count number of triples (homogeneous points) in src to read,
and then transform into dst
##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void mapXY(SkScalar x, SkScalar y, SkPoint* result) const
#Param x incomplete ##
#Param y incomplete ##
#Param result incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method SkPoint mapXY(SkScalar x, SkScalar y) const
#Param x incomplete ##
#Param y incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void mapVectors(SkVector dst[], const SkVector src[], int count) const
Apply this matrix to the array of vectors specified by src, and write
the transformed vectors into the array of vectors specified by dst.
This is similar to mapPoints, but ignores any translation in the matrix.
#Param dst storage for transformed coordinates; must
allow count entries
##
#Param src coordinates to be transformed;
must contain at least count entries
##
#Param count number of vectors in src to read and transform
into dst
##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void mapVectors(SkVector vecs[], int count) const
Apply this matrix to count vectors in array vecs.
This is similar to mapPoints, but ignores any translation in the matrix.
#Param vecs vectors to transform; must contain at least
count entries
##
#Param count number of vectors in vecs
##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void mapVector(SkScalar dx, SkScalar dy, SkVector* result) const
#Param dx incomplete ##
#Param dy incomplete ##
#Param result incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method SkVector mapVector(SkScalar dx, SkScalar dy) const
#Param dx incomplete ##
#Param dy incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool mapRect(SkRect* dst, const SkRect& src) const
Apply this matrix to the src rectangle, and write the transformed
rectangle into dst. This is accomplished by transforming the 4 corners
of src, and then setting dst to the bounds of those points.
#Param dst storage for transformed rectangle ##
#Param src rectangle to transform ##
#Return result of calling rectStaysRect
##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool mapRect(SkRect* rect) const
Apply this matrix to the rectangle, and write the transformed rectangle
back into it. This is accomplished by transforming the 4 corners of
rect, and then setting it to the bounds of those points
#Param rect rectangle to transform
##
#Return the result of calling rectStaysRect
##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void mapRectToQuad(SkPoint dst[4], const SkRect& rect) const
Applies Matrix to rect, and write the four transformed
points into dst. The points written to dst will be the original top-left, top-right,
bottom-right, and bottom-left points transformed by Matrix.
#Param dst storage for transformed quad
##
#Param rect rectangle to transform
##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void mapRectScaleTranslate(SkRect* dst, const SkRect& src) const
Maps a rectangle to another rectangle, asserting (in debug mode) that the matrix only contains
scale and translate elements. If it contains other elements, the results are undefined.
#Param dst incomplete ##
#Param src incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method SkScalar mapRadius(SkScalar radius) const
Return the mean radius of a circle after it has been mapped by
this matrix. NOTE: in perspective this value assumes the circle
has its center at the origin.
#Param radius incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method static MapXYProc GetMapXYProc(TypeMask mask)
#Param mask incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method MapXYProc getMapXYProc() const
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method static MapPtsProc GetMapPtsProc(TypeMask mask)
#Param mask incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method MapPtsProc getMapPtsProc() const
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool isFixedStepInX() const
Returns true if the matrix can be stepped in x (not complex
perspective).
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method SkVector fixedStepInX(SkScalar y) const
If the matrix can be stepped in x (not complex perspective)
then return the step value.
If it cannot, behavior is undefined.
#Param y incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool cheapEqualTo(const SkMatrix& m) const
Returns true if Matrix equals m, using an efficient comparison.
Return false when the sign of zero values is the different, that is, one
matrix has positive zero value and the other has negative zero value.
Normally, comparing NaN prevents the value from equaling any other value,
including itself. To improve performance, NaN values are treated as bit patterns
that are equal if their bit patterns are equal.
#Param m incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method friend SK_API bool operator==(const SkMatrix& a, const SkMatrix& b)
mac chromium debug build requires SK_API to make operator== visible
#Param a incomplete ##
#Param b incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method friend SK_API bool operator!=(const SkMatrix& a, const SkMatrix& b)
#Param a incomplete ##
#Param b incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Enum _anonymous_3
#Code
enum {
kMaxFlattenSize = 9 * sizeof(SkScalar) + sizeof(uint32_t),
};
##
#Const kMaxFlattenSize = 9 * sizeof(SkScalar) + sizeof(uint32_t)
writeToMemory and readFromMemory will never return a value larger than this
##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method size_t writeToMemory(void* buffer) const
return the number of bytes written, whether or not buffer is null
#Param buffer incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method size_t readFromMemory(const void* buffer, size_t length)
Reads data from the buffer parameter
#Param buffer memory to read from
##
#Param length amount of memory available in the buffer
##
#Return number of bytes read (must be a multiple of 4) or
0 if there was not enough memory available
##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void dump() const
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void toString(SkString* str) const
#Param str incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method SkScalar getMinScale() const
Calculates the minimum scaling factor of the matrix as computed from the
singular value decomposition of the upper
left 2x2. If the max scale factor cannot be computed (for example overflow or perspective)
-1 is returned.
#Return minimum scale factor
##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method SkScalar getMaxScale() const
Calculates the maximum scaling factor of the matrix as computed from the
singular value decomposition of the upper
left 2x2. If the max scale factor cannot be computed (for example overflow or perspective)
-1 is returned.
#Return maximum scale factor
##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool SK_WARN_UNUSED_RESULT getMinMaxScales(SkScalar scaleFactors[2]) const
Gets both the min and max scale factors. The min scale factor is scaleFactors[0] and the max
is scaleFactors[1]. If the min/max scale factors cannot be computed false is returned and the
values of scaleFactors[] are undefined.
#Param scaleFactors incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool decomposeScale(SkSize* scale, SkMatrix* remaining = nullptr) const
Attempt to decompose this matrix into a scale-only component and whatever remains, where
the scale component is to be applied first.
#Formula
M -> Remaining * Scale
##
On success, return true and assign the scale and remaining components (assuming their
respective parameters are not null). On failure return false and ignore the parameters.
Possible reasons to fail: perspective, one or more scale factors are zero.
#Param scale incomplete ##
#Param remaining incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method static const SkMatrix& I()
Return a reference to a const identity matrix
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method static const SkMatrix& InvalidMatrix()
Return a reference to a const matrix that is "invalid", one that could
never be used.
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method static SkMatrix Concat(const SkMatrix& a, const SkMatrix& b)
Return the concatenation of two matrices, a * b.
#Param a incomplete ##
#Param b incomplete ##
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void dirtyMatrixTypeCache()
Testing routine; the matrix type cache should never need to be
manually invalidated during normal use.
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method void setScaleTranslate(SkScalar sx, SkScalar sy, SkScalar tx, SkScalar ty)
Initialize the matrix to be scale + post-translate.
#Param sx incomplete ##
#Param sy incomplete ##
#Param tx incomplete ##
#Param ty incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
# ------------------------------------------------------------------------------
#Method bool isFinite() const
Are all elements of the matrix finite?
#Return incomplete ##
#Example
// incomplete
##
#ToDo incomplete ##
##
#Class SkMatrix ##
#Topic Matrix ##