#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 ##
