
This file contains a mapping from where these documumentation examples
should be inserted into the headers.

###########################################################################

[AutoCanvasRestore_SkCanvas_star]
SkAutoCanvasRestore
SkAutoCanvasRestore(SkCanvas* canvas, bool doSave);

[AutoCanvasRestore_restore]
SkAutoCanvasRestore
void restore();

[Bitmap_ComputeIsOpaque]
SkBitmap
static bool ComputeIsOpaque(const SkBitmap& bm);

[Bitmap_empty_constructor]
SkBitmap
SkBitmap();

[Bitmap_move_SkBitmap]
SkBitmap
SkBitmap(SkBitmap&& src);

[Bitmap_copy_const_SkBitmap]
SkBitmap
SkBitmap(const SkBitmap& src);

[Bitmap_allocN32Pixels]
SkBitmap
void allocN32Pixels(int width, int height, bool isOpaque = false);

[Bitmap_HeapAllocator_allocPixelRef]
SkBitmap
bool allocPixelRef(SkBitmap* bitmap) override;

[Bitmap_allocPixels_3]
SkBitmap
void allocPixels();

[Bitmap_allocPixels_4]
SkBitmap
void allocPixels(Allocator* allocator);

[Bitmap_allocPixels_2]
SkBitmap
void allocPixels(const SkImageInfo& info);

[Bitmap_allocPixels]
SkBitmap
void allocPixels(const SkImageInfo& info, size_t rowBytes);

[Bitmap_allocPixelsFlags]
SkBitmap
void allocPixelsFlags(const SkImageInfo& info, uint32_t flags);

[Pixmap_alphaType]
SkBitmap
SkAlphaType alphaType() const;

[Bitmap_bounds]
SkBitmap
SkIRect bounds() const;

[Bitmap_bytesPerPixel]
SkBitmap
int bytesPerPixel() const;

[Bitmap_colorSpace]
SkBitmap
SkColorSpace* colorSpace() const;

[Bitmap_colorType]
SkBitmap
SkColorType colorType() const;

[Bitmap_computeByteSize]
SkBitmap
size_t computeByteSize() const;

[Bitmap_dimensions]
SkBitmap
SkISize dimensions() const;

[Bitmap_drawsNothing]
SkBitmap
bool drawsNothing() const;

[Bitmap_empty]
SkBitmap
bool empty() const;

[Bitmap_erase]
SkBitmap
void erase(SkColor c, const SkIRect& area) const;

[Bitmap_eraseARGB]
SkBitmap
void eraseARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b) const;

[Bitmap_eraseColor]
SkBitmap
void eraseColor(SkColor c) const;

[Bitmap_extractAlpha]
SkBitmap
bool extractAlpha(SkBitmap* dst) const;

[Bitmap_extractAlpha_3]
SkBitmap
bool extractAlpha(SkBitmap* dst, const SkPaint* paint, Allocator* allocator, SkIPoint* offset) const;

[Bitmap_extractAlpha_2]
SkBitmap
bool extractAlpha(SkBitmap* dst, const SkPaint* paint, SkIPoint* offset) const;

[Bitmap_extractSubset]
SkBitmap
bool extractSubset(SkBitmap* dst, const SkIRect& subset) const;

[Bitmap_getAddr]
SkBitmap
void* getAddr(int x, int y) const;

[Bitmap_getAddr16]
SkBitmap
uint16_t* getAddr16(int x, int y) const;

[Bitmap_getAddr32]
SkBitmap
uint32_t* getAddr32(int x, int y) const;

[Bitmap_getAddr8]
SkBitmap
uint8_t* getAddr8(int x, int y) const;

[Bitmap_getBounds_2]
SkBitmap
void getBounds(SkIRect* bounds) const;

[Bitmap_getBounds]
SkBitmap
void getBounds(SkRect* bounds) const;

[Bitmap_getColor]
SkBitmap
SkColor getColor(int x, int y) const;

[Bitmap_getGenerationID]
SkBitmap
uint32_t getGenerationID() const;

[Bitmap_getPixels]
SkBitmap
void* getPixels() const;

[Bitmap_getSubset]
SkBitmap
SkIRect getSubset() const;

[Bitmap_height]
SkBitmap
int height() const;

[Bitmap_info]
SkBitmap
const SkImageInfo& info() const;

[Bitmap_installPixels_2]
SkBitmap
bool installPixels(const SkImageInfo& info, void* pixels, size_t rowBytes);

[Bitmap_installPixels]
SkBitmap
bool installPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, void (*releaseProc) (void* addr, void* context) , void* context);

[Bitmap_installPixels_3]
SkBitmap
bool installPixels(const SkPixmap& pixmap);

[Bitmap_isImmutable]
SkBitmap
bool isImmutable() const;

[Bitmap_isNull]
SkBitmap
bool isNull() const;

[Bitmap_isOpaque]
SkBitmap
bool isOpaque() const;

[Bitmap_isVolatile]
SkBitmap
bool isVolatile() const;

[Bitmap_notifyPixelsChanged]
SkBitmap
void notifyPixelsChanged() const;

[Bitmap_move_operator]
SkBitmap
SkBitmap& operator=(SkBitmap&& src);

[Bitmap_copy_operator]
SkBitmap
SkBitmap& operator=(const SkBitmap& src);

[Bitmap_peekPixels]
SkBitmap
bool peekPixels(SkPixmap* pixmap) const;

[Bitmap_pixelRef]
SkBitmap
SkPixelRef* pixelRef() const;

[Bitmap_pixelRefOrigin]
SkBitmap
SkIPoint pixelRefOrigin() const;

[Bitmap_pixmap]
SkBitmap
const SkPixmap& pixmap() const;

[Bitmap_readPixels]
SkBitmap
bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, int srcX, int srcY) const;

[Bitmap_readPixels_3]
SkBitmap
bool readPixels(const SkPixmap& dst) const;

[Bitmap_readPixels_2]
SkBitmap
bool readPixels(const SkPixmap& dst, int srcX, int srcY) const;

[Bitmap_readyToDraw]
SkBitmap
bool readyToDraw() const;

[Bitmap_refColorSpace]
SkBitmap
sk_sp<SkColorSpace> refColorSpace() const;

[Bitmap_reset]
SkBitmap
void reset();

[Bitmap_rowBytes]
SkBitmap
size_t rowBytes() const;

[Bitmap_rowBytesAsPixels]
SkBitmap
int rowBytesAsPixels() const;

[Bitmap_setAlphaType]
SkBitmap
bool setAlphaType(SkAlphaType alphaType);

[Bitmap_setImmutable]
SkBitmap
void setImmutable();

[Bitmap_setInfo]
SkBitmap
bool setInfo(const SkImageInfo& imageInfo, size_t rowBytes = 0);

[Bitmap_setIsVolatile]
SkBitmap
void setIsVolatile(bool isVolatile);

[Bitmap_setPixelRef]
SkBitmap
void setPixelRef(sk_sp<SkPixelRef> pixelRef, int dx, int dy);

[Bitmap_setPixels]
SkBitmap
void setPixels(void* pixels);

[Bitmap_shiftPerPixel]
SkBitmap
int shiftPerPixel() const;

[Bitmap_swap]
SkBitmap
void swap(SkBitmap& other);

[Bitmap_tryAllocN32Pixels]
SkBitmap
bool tryAllocN32Pixels(int width, int height, bool isOpaque = false);

[Bitmap_tryAllocPixels_3]
SkBitmap
bool tryAllocPixels();

[Bitmap_tryAllocPixels_4]
SkBitmap
bool tryAllocPixels(Allocator* allocator);

[Bitmap_tryAllocPixels_2]
SkBitmap
bool tryAllocPixels(const SkImageInfo& info);

[Bitmap_tryAllocPixels]
SkBitmap
bool tryAllocPixels(const SkImageInfo& info, size_t rowBytes);

[Bitmap_tryAllocPixelsFlags]
SkBitmap
bool tryAllocPixelsFlags(const SkImageInfo& info, uint32_t flags);

[Bitmap_width]
SkBitmap
int width() const;

[Bitmap_writePixels_2]
SkBitmap
bool writePixels(const SkPixmap& src);

[Bitmap_writePixels]
SkBitmap
bool writePixels(const SkPixmap& src, int dstX, int dstY);

[BlendMode_Name]
SkBlendMode
const char* SkBlendMode_Name(SkBlendMode blendMode);

[Clear]
[Color]
[Color_Burn]
[Color_Dodge]
[Darken]
[Difference]
[Dst]
[Dst_Atop]
[Dst_In]
[Dst_Out]
[Dst_Over]
[Exclusion]
[Hard_Light]
[Hue]
[Lighten]
[Luminosity]
[Modulate]
[Multiply]
[Overlay]
[Plus]
[Saturation]
[Screen]
[Soft_Light]
[Src]
[Src_Atop]
[Src_In]
[Src_Out]
[Src_Over]
[Xor]
SkBlendMode
enum class SkBlendMode { kClear, kSrc, kDst, kSrcOver, kDstOver, kSrcIn, kDstIn, kSrcOut, kDstOut, kSrcATop, kDstATop, kXor, kPlus, kModulate, kScreen, kLastCoeffMode = kScreen, kOverlay, kDarken, kLighten, kColorDodge, kColorBurn, kHardLight, kSoftLight, kDifference, kExclusion, kMultiply, kLastSeparableMode = kMultiply, kHue, kSaturation, kColor, kLuminosity, kLastMode = kLuminosity, }; const char* SkBlendMode_Name(SkBlendMode blendMode);

[Canvas_MakeRasterDirect]
SkCanvas
static std::unique_ptr<SkCanvas> MakeRasterDirect(const SkImageInfo& info, void* pixels, size_t rowBytes, const SkSurfaceProps* props = nullptr);

[Canvas_MakeRasterDirectN32]
SkCanvas
static std::unique_ptr<SkCanvas> MakeRasterDirectN32(int width, int height, SkPMColor* pixels, size_t rowBytes);

[Canvas_SaveLayerRec]
SkCanvas
struct SaveLayerRec { SaveLayerRec(); SaveLayerRec(const SkRect* bounds, const SkPaint* paint, SaveLayerFlags saveLayerFlags = 0); SaveLayerRec(const SkRect* bounds, const SkPaint* paint, const SkImageFilter* backdrop, SaveLayerFlags saveLayerFlags); const SkRect* fBounds = nullptr; const SkPaint* fPaint = nullptr; const SkImageFilter* fBackdrop = nullptr; const SkImage* fClipMask = nullptr; const SkMatrix* fClipMatrix = nullptr; SaveLayerFlags fSaveLayerFlags = 0; };

[Canvas_SaveLayerRec_SaveLayerRec]
SkCanvas
SaveLayerRec();

[Canvas_SaveLayerRec_const_SkRect_star_const_SkPaint_star]
SkCanvas
SaveLayerRec(const SkRect* bounds, const SkPaint* paint, SaveLayerFlags saveLayerFlags = 0);

[Canvas_SaveLayerRec_const_SkRect_star_const_SkPaint_star_const_SkImageFilter_star]
SkCanvas
SaveLayerRec(const SkRect* bounds, const SkPaint* paint, const SkImageFilter* backdrop, SaveLayerFlags saveLayerFlags);

[Canvas_copy_const_SkBitmap]
SkCanvas
explicit SkCanvas(const SkBitmap& bitmap);

[Canvas_empty_constructor]
SkCanvas
SkCanvas();

[Canvas_const_SkBitmap_const_SkSurfaceProps]
SkCanvas
SkCanvas(const SkBitmap& bitmap, const SkSurfaceProps& props);

[Canvas_int_int_const_SkSurfaceProps_star]
SkCanvas
SkCanvas(int width, int height, const SkSurfaceProps* props = nullptr);

[Canvas_accessTopLayerPixels_a]
[Canvas_accessTopLayerPixels_b]
SkCanvas
void* accessTopLayerPixels(SkImageInfo* info, size_t* rowBytes, SkIPoint* origin = nullptr);

[Canvas_accessTopRasterHandle]
SkCanvas
SkRasterHandleAllocator::Handle accessTopRasterHandle() const;

[Canvas_clear]
SkCanvas
void clear(SkColor color);

[Canvas_clipPath_2]
SkCanvas
void clipPath(const SkPath& path, SkClipOp op);

[Canvas_clipPath]
SkCanvas
void clipPath(const SkPath& path, SkClipOp op, bool doAntiAlias);

[Canvas_clipPath_3]
SkCanvas
void clipPath(const SkPath& path, bool doAntiAlias = false);

[Canvas_clipRRect_2]
SkCanvas
void clipRRect(const SkRRect& rrect, SkClipOp op);

[Canvas_clipRRect]
SkCanvas
void clipRRect(const SkRRect& rrect, SkClipOp op, bool doAntiAlias);

[Canvas_clipRRect_3]
SkCanvas
void clipRRect(const SkRRect& rrect, bool doAntiAlias = false);

[Canvas_clipRect_2]
SkCanvas
void clipRect(const SkRect& rect, SkClipOp op);

[Canvas_clipRect]
SkCanvas
void clipRect(const SkRect& rect, SkClipOp op, bool doAntiAlias);

[Canvas_clipRect_3]
SkCanvas
void clipRect(const SkRect& rect, bool doAntiAlias = false);

[Canvas_clipRegion]
SkCanvas
void clipRegion(const SkRegion& deviceRgn, SkClipOp op = SkClipOp::kIntersect);

[Canvas_concat]
SkCanvas
void concat(const SkMatrix& matrix);

[Canvas_drawAnnotation_2]
SkCanvas
void drawAnnotation(const SkRect& rect, const char key[], SkData* value);

[Canvas_drawAnnotation_2]
SkCanvas
void drawAnnotation(const SkRect& rect, const char key[], const sk_sp<SkData>& value);

[Canvas_drawArc_a]
[Canvas_drawArc_b]
SkCanvas
void drawArc(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool useCenter, const SkPaint& paint);

[Canvas_drawAtlas]
SkCanvas
void drawAtlas(const SkImage* atlas, const SkRSXform xform[], const SkRect tex[], const SkColor colors[], int count, SkBlendMode mode, const SkRect* cullRect, const SkPaint* paint);

[Canvas_drawAtlas_3]
SkCanvas
void drawAtlas(const SkImage* atlas, const SkRSXform xform[], const SkRect tex[], int count, const SkRect* cullRect, const SkPaint* paint);

[Canvas_drawAtlas_2]
SkCanvas
void drawAtlas(const sk_sp<SkImage>& atlas, const SkRSXform xform[], const SkRect tex[], const SkColor colors[], int count, SkBlendMode mode, const SkRect* cullRect, const SkPaint* paint);

[Canvas_drawAtlas_4]
SkCanvas
void drawAtlas(const sk_sp<SkImage>& atlas, const SkRSXform xform[], const SkRect tex[], int count, const SkRect* cullRect, const SkPaint* paint);

[Canvas_drawBitmap]
SkCanvas
void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, const SkPaint* paint = nullptr);

[Canvas_drawBitmapLattice]
SkCanvas
void drawBitmapLattice(const SkBitmap& bitmap, const Lattice& lattice, const SkRect& dst, const SkPaint* paint = nullptr);

[Canvas_drawBitmapNine]
SkCanvas
void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, const SkRect& dst, const SkPaint* paint = nullptr);

[Canvas_drawBitmapRect_2]
SkCanvas
void drawBitmapRect(const SkBitmap& bitmap, const SkIRect& isrc, const SkRect& dst, const SkPaint* paint, SrcRectConstraint constraint = kStrict_SrcRectConstraint);

[Canvas_drawBitmapRect_3]
SkCanvas
void drawBitmapRect(const SkBitmap& bitmap, const SkRect& dst, const SkPaint* paint, SrcRectConstraint constraint = kStrict_SrcRectConstraint);

[Canvas_drawBitmapRect]
SkCanvas
void drawBitmapRect(const SkBitmap& bitmap, const SkRect& src, const SkRect& dst, const SkPaint* paint, SrcRectConstraint constraint = kStrict_SrcRectConstraint);

[Canvas_drawCircle_2]
SkCanvas
void drawCircle(SkPoint center, SkScalar radius, const SkPaint& paint);

[Canvas_drawCircle]
SkCanvas
void drawCircle(SkScalar cx, SkScalar cy, SkScalar radius, const SkPaint& paint);

[Canvas_drawColor]
SkCanvas
void drawColor(SkColor color, SkBlendMode mode = SkBlendMode::kSrcOver);

[Canvas_drawDRRect_a]
[Canvas_drawDRRect_b]
SkCanvas
void drawDRRect(const SkRRect& outer, const SkRRect& inner, const SkPaint& paint);

[Canvas_drawDrawable_2]
SkCanvas
void drawDrawable(SkDrawable* drawable, SkScalar x, SkScalar y);

[Canvas_drawDrawable]
SkCanvas
void drawDrawable(SkDrawable* drawable, const SkMatrix* matrix = nullptr);

[Canvas_drawIRect]
SkCanvas
void drawIRect(const SkIRect& rect, const SkPaint& paint);

[Canvas_drawImage]
SkCanvas
void drawImage(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint = nullptr);

[Canvas_drawImage_2]
SkCanvas
void drawImage(const sk_sp<SkImage>& image, SkScalar left, SkScalar top, const SkPaint* paint = nullptr);

[Canvas_drawImageNine]
SkCanvas
void drawImageLattice(const SkImage* image, const Lattice& lattice, const SkRect& dst, const SkPaint* paint = nullptr);

[Canvas_drawImageNine]
SkCanvas
void drawImageNine(const SkImage* image, const SkIRect& center, const SkRect& dst, const SkPaint* paint = nullptr);

[Canvas_drawImageNine_2]
SkCanvas
void drawImageNine(const sk_sp<SkImage>& image, const SkIRect& center, const SkRect& dst, const SkPaint* paint = nullptr);

[Canvas_drawImageRect_2]
SkCanvas
void drawImageRect(const SkImage* image, const SkIRect& isrc, const SkRect& dst, const SkPaint* paint, SrcRectConstraint constraint = kStrict_SrcRectConstraint);

[Canvas_drawImageRect_3]
SkCanvas
void drawImageRect(const SkImage* image, const SkRect& dst, const SkPaint* paint);

[Canvas_drawImageRect]
SkCanvas
void drawImageRect(const SkImage* image, const SkRect& src, const SkRect& dst, const SkPaint* paint, SrcRectConstraint constraint = kStrict_SrcRectConstraint);

[Canvas_drawImageRect_5]
SkCanvas
void drawImageRect(const sk_sp<SkImage>& image, const SkIRect& isrc, const SkRect& dst, const SkPaint* paint, SrcRectConstraint constraint = kStrict_SrcRectConstraint);

[Canvas_drawImageRect_6]
SkCanvas
void drawImageRect(const sk_sp<SkImage>& image, const SkRect& dst, const SkPaint* paint);

[Canvas_drawImageRect_4]
SkCanvas
void drawImageRect(const sk_sp<SkImage>& image, const SkRect& src, const SkRect& dst, const SkPaint* paint, SrcRectConstraint constraint = kStrict_SrcRectConstraint);

[Canvas_drawLine_2]
SkCanvas
void drawLine(SkPoint p0, SkPoint p1, const SkPaint& paint);

[Canvas_drawLine]
SkCanvas
void drawLine(SkScalar x0, SkScalar y0, SkScalar x1, SkScalar y1, const SkPaint& paint);

[Canvas_drawOval]
SkCanvas
void drawOval(const SkRect& oval, const SkPaint& paint);

[Canvas_drawPaint]
SkCanvas
void drawPaint(const SkPaint& paint);

[Canvas_drawPatch]
SkCanvas
void drawPatch(const SkPoint cubics[12], const SkColor colors[4], const SkPoint texCoords[4], SkBlendMode mode, const SkPaint& paint);

[Canvas_drawPatch_2_a]
[Canvas_drawPatch_2_b]
SkCanvas
void drawPatch(const SkPoint cubics[12], const SkColor colors[4], const SkPoint texCoords[4], const SkPaint& paint);

[Canvas_drawPath]
SkCanvas
void drawPath(const SkPath& path, const SkPaint& paint);

[Canvas_drawPicture_2]
SkCanvas
void drawPicture(const SkPicture* picture);

[Canvas_drawPicture_3]
SkCanvas
void drawPicture(const SkPicture* picture, const SkMatrix* matrix, const SkPaint* paint);

[Canvas_drawPicture_2]
SkCanvas
void drawPicture(const sk_sp<SkPicture>& picture);

[Canvas_drawPicture_4]
SkCanvas
void drawPicture(const sk_sp<SkPicture>& picture, const SkMatrix* matrix, const SkPaint* paint);

[Canvas_drawPoint_2]
SkCanvas
void drawPoint(SkPoint p, const SkPaint& paint);

[Canvas_drawPoint]
SkCanvas
void drawPoint(SkScalar x, SkScalar y, const SkPaint& paint);

[Canvas_drawPoints]
SkCanvas
void drawPoints(PointMode mode, size_t count, const SkPoint pts[], const SkPaint& paint);

[Canvas_drawPosText]
SkCanvas
void drawPosText(const void* text, size_t byteLength, const SkPoint pos[], const SkPaint& paint);

[Canvas_drawPosTextH]
SkCanvas
void drawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[], SkScalar constY, const SkPaint& paint);

[Canvas_drawRRect]
SkCanvas
void drawRRect(const SkRRect& rrect, const SkPaint& paint);

[Canvas_drawRect]
SkCanvas
void drawRect(const SkRect& rect, const SkPaint& paint);

[Canvas_drawRegion]
SkCanvas
void drawRegion(const SkRegion& region, const SkPaint& paint);

[Canvas_drawRoundRect]
SkCanvas
void drawRoundRect(const SkRect& rect, SkScalar rx, SkScalar ry, const SkPaint& paint);

[Canvas_drawString_2]
SkCanvas
void drawString(const SkString& string, SkScalar x, SkScalar y, const SkPaint& paint);

[Canvas_drawString]
SkCanvas
void drawString(const char* string, SkScalar x, SkScalar y, const SkPaint& paint);

[Canvas_drawText]
SkCanvas
void drawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, const SkPaint& paint);

[Canvas_drawTextBlob]
SkCanvas
void drawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, const SkPaint& paint);

[Canvas_drawTextBlob_2]
SkCanvas
void drawTextBlob(const sk_sp<SkTextBlob>& blob, SkScalar x, SkScalar y, const SkPaint& paint);

[Canvas_drawTextRSXform]
SkCanvas
void drawTextRSXform(const void* text, size_t byteLength, const SkRSXform xform[], const SkRect* cullRect, const SkPaint& paint);

[Canvas_drawVertices]
SkCanvas
void drawVertices(const SkVertices* vertices, SkBlendMode mode, const SkPaint& paint);

[Canvas_drawVertices_2]
SkCanvas
void drawVertices(const sk_sp<SkVertices>& vertices, SkBlendMode mode, const SkPaint& paint);

[Canvas_PointMode]
SkCanvas
enum PointMode { kPoints_PointMode, kLines_PointMode, kPolygon_PointMode, };

[Canvas_kInitWithPrevious_SaveLayerFlag]
SkCanvas
enum SaveLayerFlagsSet { kPreserveLCDText_SaveLayerFlag = 1 << 1, kInitWithPrevious_SaveLayerFlag = 1 << 2, };

[Canvas_SrcRectConstraint]
SkCanvas
enum SrcRectConstraint { kStrict_SrcRectConstraint, kFast_SrcRectConstraint, };

[Canvas_getBaseLayerSize]
SkCanvas
virtual SkISize getBaseLayerSize() const;

[Canvas_getDeviceClipBounds]
SkCanvas
SkIRect getDeviceClipBounds() const;

[Canvas_getDeviceClipBounds_2]
SkCanvas
bool getDeviceClipBounds(SkIRect* bounds) const;

[Canvas_getGrContext]
SkCanvas
virtual GrContext* getGrContext();

[Canvas_getLocalClipBounds]
SkCanvas
SkRect getLocalClipBounds() const;

[Canvas_getLocalClipBounds_2]
SkCanvas
bool getLocalClipBounds(SkRect* bounds) const;

[Canvas_getProps]
SkCanvas
bool getProps(SkSurfaceProps* props) const;

[Canvas_getSaveCount]
SkCanvas
int getSaveCount() const;

[Canvas_getTotalMatrix]
[Clip]
SkCanvas
const SkMatrix& getTotalMatrix() const;

[Canvas_imageInfo]
SkCanvas
SkImageInfo imageInfo() const;

[Canvas_isClipEmpty]
SkCanvas
virtual bool isClipEmpty() const;

[Canvas_isClipRect]
SkCanvas
virtual bool isClipRect() const;

[Canvas_makeSurface]
SkCanvas
sk_sp<SkSurface> makeSurface(const SkImageInfo& info, const SkSurfaceProps* props = nullptr);

[Canvas_peekPixels]
SkCanvas
bool peekPixels(SkPixmap* pixmap);

[Canvas_quickReject_2]
SkCanvas
bool quickReject(const SkPath& path) const;

[Canvas_quickReject]
SkCanvas
bool quickReject(const SkRect& rect) const;

[Canvas_readPixels_3]
SkCanvas
bool readPixels(const SkBitmap& bitmap, int srcX, int srcY);

[Canvas_readPixels_a]
[Canvas_readPixels_b]
SkCanvas
bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, int srcX, int srcY);

[Canvas_readPixels_2]
SkCanvas
bool readPixels(const SkPixmap& pixmap, int srcX, int srcY);

[Canvas_resetMatrix]
SkCanvas
void resetMatrix();

[Canvas_restore]
SkCanvas
void restore();

[Canvas_restoreToCount]
SkCanvas
void restoreToCount(int saveCount);

[Canvas_rotate]
SkCanvas
void rotate(SkScalar degrees);

[Canvas_rotate_2]
SkCanvas
void rotate(SkScalar degrees, SkScalar px, SkScalar py);

[Canvas_save]
SkCanvas
int save();

[Canvas_saveLayer_3]
SkCanvas
int saveLayer(const SaveLayerRec& layerRec);

[Canvas_saveLayer_2]
SkCanvas
int saveLayer(const SkRect& bounds, const SkPaint* paint);

[Canvas_saveLayer]
SkCanvas
int saveLayer(const SkRect* bounds, const SkPaint* paint);

[Canvas_saveLayerAlpha]
SkCanvas
int saveLayerAlpha(const SkRect* bounds, U8CPU alpha);

[Canvas_saveLayerPreserveLCDTextRequests]
SkCanvas
int saveLayerPreserveLCDTextRequests(const SkRect* bounds, const SkPaint* paint);

[Canvas_scale]
SkCanvas
void scale(SkScalar sx, SkScalar sy);

[Canvas_setMatrix]
SkCanvas
void setMatrix(const SkMatrix& matrix);

[Canvas_skew]
SkCanvas
void skew(SkScalar sx, SkScalar sy);

[Canvas_translate]
SkCanvas
void translate(SkScalar dx, SkScalar dy);

[Canvas_writePixels_2]
[State_Stack_a]
[State_Stack_b]
SkCanvas
bool writePixels(const SkBitmap& bitmap, int x, int y);

[Canvas_writePixels]
SkCanvas
bool writePixels(const SkImageInfo& info, const void* pixels, size_t rowBytes, int x, int y);

[Canvas_destructor]
SkCanvas
virtual ~SkCanvas();

[ColorGetA]
SkColor
#define SkColorGetA(color) (((color) >> 24) & 0xFF) color;

[ColorGetB]
SkColor
#define SkColorGetB(color) (((color) >> 0) & 0xFF) color;

[ColorGetG]
SkColor
#define SkColorGetG(color) (((color) >> 8) & 0xFF) color;

[ColorGetR]
SkColor
#define SkColorGetR(color) (((color) >> 16) & 0xFF) color;

[ColorSetA]
SkColor
static constexpr inline SkColor SkColorSetA(SkColor c, U8CPU a);

[ColorSetRGB]
SkColor
#define SkColorSetRGB(r, g, b) SkColorSetARGB(0xFF, r, g, b) r g b;

[ColorSetARGB]
SkColor
static constexpr inline SkColor SkColorSetARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b);

[ColorToHSV]
SkColor
static void SkColorToHSV(SkColor color, SkScalar hsv[3]);

[HSVToColor]
SkColor
SkColor SkHSVToColor(U8CPU alpha, const SkScalar hsv[3]);

[HSVToColor_2]
SkColor
static SkColor SkHSVToColor(const SkScalar hsv[3]);

[PreMultiplyARGB]
SkColor
SkPMColor SkPreMultiplyARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b);

[PreMultiplyColor]
SkColor
SkPMColor SkPreMultiplyColor(SkColor c);

[RGBToHSV]
SkColor
void SkRGBToHSV(U8CPU red, U8CPU green, U8CPU blue, SkScalar hsv[3]);

[Alpha_Constants_a]
[Alpha_Constants_b]
SkColor
constexpr SkAlpha SK_AlphaTRANSPARENT = 0x00; constexpr SkAlpha SK_AlphaOPAQUE = 0xFF;

[Color_Constants_a]
[Color_Constants_b]
[Color_Constants_c]
[Color_Constants_d]
SkColor
constexpr SkColor SK_ColorTRANSPARENT; constexpr SkColor SK_ColorBLACK; constexpr SkColor SK_ColorDKGRAY; constexpr SkColor SK_ColorGRAY; constexpr SkColor SK_ColorLTGRAY; constexpr SkColor SK_ColorWHITE; constexpr SkColor SK_ColorRED; constexpr SkColor SK_ColorGREEN; constexpr SkColor SK_ColorBLUE; constexpr SkColor SK_ColorYELLOW; constexpr SkColor SK_ColorCYAN; constexpr SkColor SK_ColorMAGENTA;

[RGBA4f_FromColor]
SkColor4f
static SkRGBA4f FromColor(SkColor color);

[RGBA4f_notequal1_operator]
SkColor4f
bool operator!=(const SkRGBA4f& other) const;

[RGBA4f_equal1_operator]
SkColor4f
bool operator==(const SkRGBA4f& other) const;

[RGBA4f_toSkColor]
SkColor4f
SkColor toSkColor() const;

[RGBA4f_vec]
SkColor4f
const float* vec() const;

[RGBA4f_vec_2]
SkColor4f
float* vec();

[Font_breakText]
SkFont
size_t breakText(const void* text, size_t length, SkTextEncoding encoding, SkScalar maxWidth, SkScalar* measuredWidth = nullptr) const;

[IPoint_Make]
SkIPoint
static constexpr SkIPoint Make(int32_t x, int32_t y);

[IPoint_equals]
SkIPoint
bool equals(int32_t x, int32_t y) const;

[IPoint_isZero]
SkIPoint
bool isZero() const;

[IPoint_notequal_operator]
SkIPoint
bool operator!=(const SkIPoint& a, const SkIPoint& b);

[IPoint_add_operator]
SkIPoint
SkIPoint operator+(const SkIPoint& a, const SkIVector& b);

[IPoint_addto_operator]
SkIPoint
void operator+=(const SkIVector& v);

[IPoint_minus_operator]
SkIPoint
SkIPoint operator-() const;

[IPoint_subtract_operator]
SkIPoint
SkIVector operator-(const SkIPoint& a, const SkIPoint& b);

[IPoint_subtractfrom_operator]
SkIPoint
void operator-=(const SkIVector& v);

[IPoint_equal_operator]
SkIPoint
bool operator==(const SkIPoint& a, const SkIPoint& b);

[IPoint_set]
SkIPoint
void set(int32_t x, int32_t y);

[IPoint_x]
SkIPoint
int32_t x() const;

[IPoint_y]
SkIPoint
int32_t y() const;

[IRect_Intersects]
SkIRect
static bool Intersects(const SkIRect& a, const SkIRect& b);

[IRect_IntersectsNoEmptyCheck]
SkIRect
static bool IntersectsNoEmptyCheck(const SkIRect& a, const SkIRect& b);

[IRect_MakeEmpty]
SkIRect
static constexpr SkIRect MakeEmpty();

[IRect_MakeLTRB]
SkIRect
static constexpr SkIRect MakeLTRB(int32_t l, int32_t t, int32_t r, int32_t b);

[IRect_MakeSize]
SkIRect
static constexpr SkIRect MakeSize(const SkISize& size);

[IRect_MakeWH]
SkIRect
static constexpr SkIRect MakeWH(int32_t w, int32_t h);

[IRect_MakeXYWH]
SkIRect
static constexpr SkIRect MakeXYWH(int32_t x, int32_t y, int32_t w, int32_t h);

[IRect_adjust]
SkIRect
void adjust(int32_t dL, int32_t dT, int32_t dR, int32_t dB);

[IRect_bottom]
SkIRect
int32_t bottom() const;

[IRect_contains_3]
SkIRect
bool contains(const SkIRect& r) const;

[IRect_contains_4]
SkIRect
bool contains(const SkRect& r) const;

[IRect_contains_2]
SkIRect
bool contains(int32_t left, int32_t top, int32_t right, int32_t bottom) const;

[IRect_contains]
SkIRect
bool contains(int32_t x, int32_t y) const;

[IRect_containsNoEmptyCheck_2]
SkIRect
bool containsNoEmptyCheck(const SkIRect& r) const;

[IRect_containsNoEmptyCheck]
SkIRect
bool containsNoEmptyCheck(int32_t left, int32_t top, int32_t right, int32_t bottom) const;

[IRect_height]
SkIRect
int32_t height() const;

[IRect_height64]
SkIRect
int64_t height64() const;

[IRect_inset]
SkIRect
void inset(int32_t dx, int32_t dy);

[IRect_intersect_2]
SkIRect
bool intersect(const SkIRect& a, const SkIRect& b);

[IRect_intersect]
SkIRect
bool intersect(const SkIRect& r);

[IRect_intersect_3]
SkIRect
bool intersect(int32_t left, int32_t top, int32_t right, int32_t bottom);

[IRect_intersectNoEmptyCheck]
SkIRect
bool intersectNoEmptyCheck(const SkIRect& a, const SkIRect& b);

[IRect_isEmpty]
SkIRect
bool isEmpty() const;

[IRect_isEmpty64]
SkIRect
bool isEmpty64() const;

[IRect_join_2]
SkIRect
void join(const SkIRect& r);

[IRect_join]
SkIRect
void join(int32_t left, int32_t top, int32_t right, int32_t bottom);

[IRect_left]
SkIRect
int32_t left() const;

[IRect_makeInset]
SkIRect
SkIRect makeInset(int32_t dx, int32_t dy) const;

[IRect_makeOffset]
SkIRect
SkIRect makeOffset(int32_t dx, int32_t dy) const;

[IRect_makeOutset]
SkIRect
SkIRect makeOutset(int32_t dx, int32_t dy) const;

[IRect_makeSorted]
SkIRect
SkIRect makeSorted() const;

[IRect_offset_2]
SkIRect
void offset(const SkIPoint& delta);

[IRect_offset]
SkIRect
void offset(int32_t dx, int32_t dy);

[IRect_offsetTo]
SkIRect
void offsetTo(int32_t newX, int32_t newY);

[IRect_notequal_operator]
SkIRect
bool operator!=(const SkIRect& a, const SkIRect& b);

[IRect_equal_operator]
SkIRect
bool operator==(const SkIRect& a, const SkIRect& b);

[IRect_outset]
SkIRect
void outset(int32_t dx, int32_t dy);

[IRect_right]
SkIRect
int32_t right() const;

[IRect_set]
SkIRect
void set(int32_t left, int32_t top, int32_t right, int32_t bottom);

[IRect_setEmpty]
SkIRect
void setEmpty();

[IRect_setLTRB]
SkIRect
void setLTRB(int32_t left, int32_t top, int32_t right, int32_t bottom);

[IRect_setXYWH]
SkIRect
void setXYWH(int32_t x, int32_t y, int32_t width, int32_t height);

[IRect_size]
SkIRect
SkISize size() const;

[IRect_sort]
SkIRect
void sort();

[IRect_top]
SkIRect
int32_t top() const;

[IRect_width]
SkIRect
int32_t width() const;

[IRect_width64]
SkIRect
int64_t width64() const;

[IRect_x]
SkIRect
int32_t x() const;

[IRect_y]
SkIRect
int32_t y() const;

[Image_MakeBackendTextureFromSkImage]
SkImage
static bool MakeBackendTextureFromSkImage(GrContext* context, sk_sp<SkImage> image, GrBackendTexture* backendTexture, BackendTextureReleaseProc* backendTextureReleaseProc);

[Image_MakeCrossContextFromPixmap]
SkImage
static sk_sp<SkImage> MakeCrossContextFromPixmap(GrContext* context, const SkPixmap& pixmap, bool buildMips, bool limitToMaxTextureSize = false);

[Image_MakeFromAdoptedTexture]
SkImage
static sk_sp<SkImage> MakeFromAdoptedTexture(GrContext* context, const GrBackendTexture& backendTexture, GrSurfaceOrigin surfaceOrigin, SkColorType colorType, SkAlphaType alphaType = kPremul_SkAlphaType, sk_sp<SkColorSpace> colorSpace = nullptr);

[Image_MakeFromBitmap]
SkImage
static sk_sp<SkImage> MakeFromBitmap(const SkBitmap& bitmap);

[Image_MakeFromEncoded]
SkImage
static sk_sp<SkImage> MakeFromEncoded(sk_sp<SkData> encoded, const SkIRect* subset = nullptr);

[Image_MakeFromGenerator]
SkImage
static sk_sp<SkImage> MakeFromGenerator(std::unique_ptr<SkImageGenerator> imageGenerator, const SkIRect* subset = nullptr);

[Image_MakeFromPicture]
SkImage
static sk_sp<SkImage> MakeFromPicture(sk_sp<SkPicture> picture, const SkISize& dimensions, const SkMatrix* matrix, const SkPaint* paint, BitDepth bitDepth, sk_sp<SkColorSpace> colorSpace);

[Image_MakeFromRaster]
SkImage
static sk_sp<SkImage> MakeFromRaster(const SkPixmap& pixmap, RasterReleaseProc rasterReleaseProc, ReleaseContext releaseContext);

[Image_MakeFromTexture]
SkImage
static sk_sp<SkImage> MakeFromTexture(GrContext* context, const GrBackendTexture& backendTexture, GrSurfaceOrigin origin, SkColorType colorType, SkAlphaType alphaType, sk_sp<SkColorSpace> colorSpace);

[Image_MakeFromTexture_2]
SkImage
static sk_sp<SkImage> MakeFromTexture(GrContext* context, const GrBackendTexture& backendTexture, GrSurfaceOrigin origin, SkColorType colorType, SkAlphaType alphaType, sk_sp<SkColorSpace> colorSpace, TextureReleaseProc textureReleaseProc, ReleaseContext releaseContext);

[Image_MakeRasterCopy]
SkImage
static sk_sp<SkImage> MakeRasterCopy(const SkPixmap& pixmap);

[Image_MakeRasterData]
SkImage
static sk_sp<SkImage> MakeRasterData(const SkImageInfo& info, sk_sp<SkData> pixels, size_t rowBytes);

[Image_alphaType]
SkImage
SkAlphaType alphaType() const;

[Image_bounds]
SkImage
SkIRect bounds() const;

[Image_colorSpace]
SkImage
SkColorSpace* colorSpace() const;

[Image_colorType]
SkImage
SkColorType colorType() const;

[Image_dimensions]
SkImage
SkISize dimensions() const;

[Image_encodeToData_2]
SkImage
sk_sp<SkData> encodeToData() const;

[Image_encodeToData]
SkImage
sk_sp<SkData> encodeToData(SkEncodedImageFormat encodedImageFormat, int quality) const;

[Image_getBackendTexture]
SkImage
GrBackendTexture getBackendTexture(bool flushPendingGrContextIO, GrSurfaceOrigin* origin = nullptr) const;

[Image_height]
SkImage
int height() const;

[Image_isAlphaOnly]
SkImage
bool isAlphaOnly() const;

[Image_isLazyGenerated_a]
[Image_isLazyGenerated_b]
SkImage
bool isLazyGenerated() const;

[Image_isOpaque]
SkImage
bool isOpaque() const;

[Image_isTextureBacked]
SkImage
bool isTextureBacked() const;

[Image_isValid]
SkImage
bool isValid(GrContext* context) const;

[Image_makeColorSpace]
SkImage
sk_sp<SkImage> makeColorSpace(sk_sp<SkColorSpace> target) const;

[Image_makeNonTextureImage]
SkImage
sk_sp<SkImage> makeNonTextureImage() const;

[Image_makeRasterImage]
SkImage
sk_sp<SkImage> makeRasterImage() const;

[Image_makeShader]
SkImage
sk_sp<SkShader> makeShader(SkShader::TileMode tileMode1, SkShader::TileMode tileMode2, const SkMatrix* localMatrix = nullptr) const;

[Image_makeShader_2]
SkImage
sk_sp<SkShader> makeShader(const SkMatrix* localMatrix = nullptr) const;

[Image_makeSubset]
SkImage
sk_sp<SkImage> makeSubset(const SkIRect& subset) const;

[Image_makeTextureImage]
SkImage
sk_sp<SkImage> makeTextureImage(GrContext* context, SkColorSpace* dstColorSpace, GrMipMapped mipMapped = GrMipMapped::kNo) const;

[Image_makeWithFilter]
SkImage
sk_sp<SkImage> makeWithFilter(const SkImageFilter* filter, const SkIRect& subset, const SkIRect& clipBounds, SkIRect* outSubset, SkIPoint* offset) const;

[Image_peekPixels]
SkImage
bool peekPixels(SkPixmap* pixmap) const;

[Image_readPixels]
SkImage
bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, int srcX, int srcY, CachingHint cachingHint = kAllow_CachingHint) const;

[Image_readPixels_2]
SkImage
bool readPixels(const SkPixmap& dst, int srcX, int srcY, CachingHint cachingHint = kAllow_CachingHint) const;

[Image_refColorSpace]
SkImage
sk_sp<SkColorSpace> refColorSpace() const;

[Image_refEncodedData]
SkImage
sk_sp<SkData> refEncodedData() const;

[Image_scalePixels]
SkImage
bool scalePixels(const SkPixmap& dst, SkFilterQuality filterQuality, CachingHint cachingHint = kAllow_CachingHint) const;

[Image_uniqueID]
SkImage
uint32_t uniqueID() const;

[Image_width]
SkImage
int width() const;

[ImageInfo_ByteSizeOverflowed]
SkImageInfo
static bool ByteSizeOverflowed(size_t byteSize);

[ImageInfo_Make]
SkImageInfo
static SkImageInfo Make(int width, int height, SkColorType ct, SkAlphaType at, sk_sp<SkColorSpace> cs = nullptr);

[ImageInfo_MakeA8]
SkImageInfo
static SkImageInfo MakeA8(int width, int height);

[ImageInfo_MakeN32]
SkImageInfo
static SkImageInfo MakeN32(int width, int height, SkAlphaType at, sk_sp<SkColorSpace> cs = nullptr);

[ImageInfo_MakeN32Premul_2]
SkImageInfo
static SkImageInfo MakeN32Premul(const SkISize& size);

[ImageInfo_MakeN32Premul]
SkImageInfo
static SkImageInfo MakeN32Premul(int width, int height, sk_sp<SkColorSpace> cs = nullptr);

[ImageInfo_MakeS32]
SkImageInfo
static SkImageInfo MakeS32(int width, int height, SkAlphaType at);

[ImageInfo_MakeUnknown_2]
SkImageInfo
static SkImageInfo MakeUnknown();

[ImageInfo_MakeUnknown]
SkImageInfo
static SkImageInfo MakeUnknown(int width, int height);

[ColorTypeBytesPerPixel]
SkImageInfo
int SkColorTypeBytesPerPixel(SkColorType ct);

[ColorTypeIsAlwaysOpaque]
SkImageInfo
bool SkColorTypeIsAlwaysOpaque(SkColorType ct);

[ColorTypeValidateAlphaType]
SkImageInfo
bool SkColorTypeValidateAlphaType(SkColorType colorType, SkAlphaType alphaType, SkAlphaType* canonical = nullptr);

[ImageInfo_empty_constructor]
SkImageInfo
SkImageInfo();

[ImageInfo_alphaType]
SkImageInfo
SkAlphaType alphaType() const;

[ImageInfo_bounds]
SkImageInfo
SkIRect bounds() const;

[ImageInfo_bytesPerPixel]
SkImageInfo
int bytesPerPixel() const;

[ImageInfo_colorSpace]
SkImageInfo
SkColorSpace* colorSpace() const;

[ImageInfo_colorType]
SkImageInfo
SkColorType colorType() const;

[ImageInfo_computeByteSize]
SkImageInfo
size_t computeByteSize(size_t rowBytes) const;

[ImageInfo_computeMinByteSize]
SkImageInfo
size_t computeMinByteSize() const;

[ImageInfo_computeOffset]
SkImageInfo
size_t computeOffset(int x, int y, size_t rowBytes) const;

[ImageInfo_dimensions]
SkImageInfo
SkISize dimensions() const;

[Alpha_Type_Opaque]
SkImageInfo
enum SkAlphaType { kUnknown_SkAlphaType, kOpaque_SkAlphaType, kPremul_SkAlphaType, kUnpremul_SkAlphaType, kLastEnum_SkAlphaType = kUnpremul_SkAlphaType, };

[Color_Type_ARGB_4444]
[Color_Type_Alpha_8]
[Color_Type_BGRA_8888]
[Color_Type_Gray_8]
[Color_Type_RGBA_1010102]
[Color_Type_RGBA_8888]
[Color_Type_RGBA_F16]
[Color_Type_RGB_101010]
[Color_Type_RGB_565]
[Color_Type_RGB_888]
SkImageInfo
enum SkColorType { kUnknown_SkColorType, kAlpha_8_SkColorType, kRGB_565_SkColorType, kARGB_4444_SkColorType, kRGBA_8888_SkColorType, kRGB_888x_SkColorType, kBGRA_8888_SkColorType, kRGBA_1010102_SkColorType, kRGB_101010x_SkColorType, kGray_8_SkColorType, kRGBA_F16_SkColorType, kRGBA_F32_SkColorType, kLastEnum_SkColorType = kRGBA_F32_SkColorType, kN32_SkColorType = kBGRA_8888_SkColorType, kN32_SkColorType = kRGBA_8888_SkColorType, };

[ImageInfo_gammaCloseToSRGB]
SkImageInfo
bool gammaCloseToSRGB() const;

[ImageInfo_height]
SkImageInfo
int height() const;

[ImageInfo_isEmpty]
SkImageInfo
bool isEmpty() const;

[ImageInfo_isOpaque]
SkImageInfo
bool isOpaque() const;

[ImageInfo_makeAlphaType]
SkImageInfo
SkImageInfo makeAlphaType(SkAlphaType newAlphaType) const;

[ImageInfo_makeColorSpace]
SkImageInfo
SkImageInfo makeColorSpace(sk_sp<SkColorSpace> cs) const;

[ImageInfo_makeColorType]
SkImageInfo
SkImageInfo makeColorType(SkColorType newColorType) const;

[ImageInfo_makeWH]
SkImageInfo
SkImageInfo makeWH(int newWidth, int newHeight) const;

[ImageInfo_minRowBytes]
SkImageInfo
size_t minRowBytes() const;

[ImageInfo_minRowBytes64]
SkImageInfo
uint64_t minRowBytes64() const;

[ImageInfo_notequal1_operator]
SkImageInfo
bool operator!=(const SkImageInfo& other) const;

[ImageInfo_equal1_operator]
SkImageInfo
bool operator==(const SkImageInfo& other) const;

[ImageInfo_refColorSpace]
SkImageInfo
sk_sp<SkColorSpace> refColorSpace() const;

[ImageInfo_reset]
SkImageInfo
void reset();

[ImageInfo_shiftPerPixel]
SkImageInfo
int shiftPerPixel() const;

[Alpha_Type_Premul]
SkImageInfo
stored color = original color * alpha / max alpha;

[Alpha_Type_Unpremul]
SkImageInfo
stored color = original color * alpha / max alpha;

[ImageInfo_validRowBytes]
SkImageInfo
bool validRowBytes(size_t rowBytes) const;

[ImageInfo_width]
SkImageInfo
int width() const;

[Matrix_Concat]
SkMatrix
static SkMatrix Concat(const SkMatrix& a, const SkMatrix& b);

[Matrix_I]
SkMatrix
static const SkMatrix& I();

[Matrix_063]
SkMatrix
| sx 0 0 | | J K L | | sx*J sx*K sx*L | I(divx, divy) * Matrix = | 0 sy 0 | | M N O | = | sy*M sy*N sy*O | | 0 0 1 | | P Q R | | P Q R |;

[Matrix_InvalidMatrix]
SkMatrix
static const SkMatrix& InvalidMatrix();

[Matrix_MakeAll]
SkMatrix
static SkMatrix MakeAll(SkScalar scaleX, SkScalar skewX, SkScalar transX, SkScalar skewY, SkScalar scaleY, SkScalar transY, SkScalar pers0, SkScalar pers1, SkScalar pers2);

[Matrix_MakeRectToRect]
SkMatrix
static SkMatrix MakeRectToRect(const SkRect& src, const SkRect& dst, ScaleToFit stf);

[Matrix_MakeScale_2]
SkMatrix
static SkMatrix MakeScale(SkScalar scale);

[Matrix_MakeScale]
SkMatrix
static SkMatrix MakeScale(SkScalar sx, SkScalar sy);

[Matrix_MakeTrans]
SkMatrix
static SkMatrix MakeTrans(SkScalar dx, SkScalar dy);

[Matrix_SetAffineIdentity]
SkMatrix
static void SetAffineIdentity(SkScalar affine[6]);

[Matrix_asAffine]
SkMatrix
bool asAffine(SkScalar affine[6]) const;

[Matrix_cheapEqualTo]
SkMatrix
bool cheapEqualTo(const SkMatrix& m) const;

[Matrix_decomposeScale]
SkMatrix
bool decomposeScale(SkSize* scale, SkMatrix* remaining = nullptr) const;

[Matrix_dirtyMatrixTypeCache]
SkMatrix
void dirtyMatrixTypeCache();

[Matrix_dump]
SkMatrix
void dump() const;

[Matrix_ScaleToFit]
SkMatrix
enum ScaleToFit { kFill_ScaleToFit, kStart_ScaleToFit, kCenter_ScaleToFit, kEnd_ScaleToFit, };

[Matrix_TypeMask]
SkMatrix
enum TypeMask { kIdentity_Mask = 0, kTranslate_Mask = 0x01, kScale_Mask = 0x02, kAffine_Mask = 0x04, kPerspective_Mask = 0x08, };

[Matrix_fixedStepInX]
SkMatrix
SkVector fixedStepInX(SkScalar y) const;

[Matrix_get]
SkMatrix
SkScalar get(int index) const;

[Matrix_get9]
SkMatrix
void get9(SkScalar buffer[9]) const;

[Matrix_getMaxScale]
SkMatrix
SkScalar getMaxScale() const;

[Matrix_getMinMaxScales]
SkMatrix
bool getMinMaxScales(SkScalar scaleFactors[2]) const;

[Matrix_getMinScale]
SkMatrix
SkScalar getMinScale() const;

[Matrix_getPerspX]
SkMatrix
SkScalar getPerspX() const;

[Matrix_getPerspY]
SkMatrix
SkScalar getPerspY() const;

[Matrix_getScaleX]
SkMatrix
SkScalar getScaleX() const;

[Matrix_getScaleY]
SkMatrix
SkScalar getScaleY() const;

[Matrix_getSkewX]
SkMatrix
SkScalar getSkewX() const;

[Matrix_getSkewY]
SkMatrix
SkScalar getSkewY() const;

[Matrix_getTranslateX]
SkMatrix
SkScalar getTranslateX() const;

[Matrix_getTranslateY]
SkMatrix
SkScalar getTranslateY() const;

[Matrix_getType]
SkMatrix
TypeMask getType() const;

[Matrix_hasPerspective]
SkMatrix
bool hasPerspective() const;

[Matrix_invert]
SkMatrix
bool invert(SkMatrix* inverse) const;

[Matrix_isFinite]
SkMatrix
bool isFinite() const;

[Matrix_isFixedStepInX]
SkMatrix
bool isFixedStepInX() const;

[Matrix_isIdentity]
SkMatrix
bool isIdentity() const;

[Matrix_isScaleTranslate]
SkMatrix
bool isScaleTranslate() const;

[Matrix_isSimilarity]
SkMatrix
bool isSimilarity(SkScalar tol = SK_ScalarNearlyZero) const;

[Matrix_isTranslate]
SkMatrix
bool isTranslate() const;

[Matrix_mapHomogeneousPoints]
SkMatrix
void mapHomogeneousPoints(SkPoint3 dst[], const SkPoint3 src[], int count) const;

[Matrix_mapPoints]
SkMatrix
void mapPoints(SkPoint dst[], const SkPoint src[], int count) const;

[Matrix_mapPoints_2]
SkMatrix
void mapPoints(SkPoint pts[], int count) const;

[Matrix_mapRadius]
SkMatrix
SkScalar mapRadius(SkScalar radius) const;

[Matrix_mapRect_3]
SkMatrix
SkRect mapRect(const SkRect& src) const;

[Matrix_mapRect]
SkMatrix
bool mapRect(SkRect* dst, const SkRect& src) const;

[Matrix_mapRect_2]
SkMatrix
bool mapRect(SkRect* rect) const;

[Matrix_mapRectScaleTranslate]
SkMatrix
void mapRectScaleTranslate(SkRect* dst, const SkRect& src) const;

[Matrix_mapRectToQuad]
SkMatrix
void mapRectToQuad(SkPoint dst[4], const SkRect& rect) const;

[Matrix_mapVector_2]
SkMatrix
SkVector mapVector(SkScalar dx, SkScalar dy) const;

[Matrix_mapVector]
SkMatrix
void mapVector(SkScalar dx, SkScalar dy, SkVector* result) const;

[Matrix_mapVectors]
SkMatrix
void mapVectors(SkVector dst[], const SkVector src[], int count) const;

[Matrix_mapVectors_2]
SkMatrix
void mapVectors(SkVector vecs[], int count) const;

[Matrix_mapXY_2]
SkMatrix
SkPoint mapXY(SkScalar x, SkScalar y) const;

[Matrix_mapXY]
SkMatrix
void mapXY(SkScalar x, SkScalar y, SkPoint* result) const;

[Matrix_notequal_operator]
SkMatrix
bool operator!=(const SkMatrix& a, const SkMatrix& b);

[Matrix_equal_operator]
SkMatrix
bool operator==(const SkMatrix& a, const SkMatrix& b);

[Matrix_array_operator]
SkMatrix
SkScalar operator[](int index) const;

[Matrix_dirtyMatrixTypeCache]
SkMatrix
SkScalar& operator[](int index);

[Matrix_postConcat]
SkMatrix
void postConcat(const SkMatrix& other);

[Matrix_postRotate_2]
SkMatrix
void postRotate(SkScalar degrees);

[Matrix_postRotate]
SkMatrix
void postRotate(SkScalar degrees, SkScalar px, SkScalar py);

[Matrix_postScale_2]
SkMatrix
void postScale(SkScalar sx, SkScalar sy);

[Matrix_postScale]
SkMatrix
void postScale(SkScalar sx, SkScalar sy, SkScalar px, SkScalar py);

[Matrix_postSkew_2]
SkMatrix
void postSkew(SkScalar kx, SkScalar ky);

[Matrix_postSkew]
SkMatrix
void postSkew(SkScalar kx, SkScalar ky, SkScalar px, SkScalar py);

[Matrix_postTranslate]
SkMatrix
void postTranslate(SkScalar dx, SkScalar dy);

[Matrix_preConcat]
SkMatrix
void preConcat(const SkMatrix& other);

[Matrix_preRotate_2]
SkMatrix
void preRotate(SkScalar degrees);

[Matrix_preRotate]
SkMatrix
void preRotate(SkScalar degrees, SkScalar px, SkScalar py);

[Matrix_preScale_2]
SkMatrix
void preScale(SkScalar sx, SkScalar sy);

[Matrix_preScale]
SkMatrix
void preScale(SkScalar sx, SkScalar sy, SkScalar px, SkScalar py);

[Matrix_preSkew_2]
SkMatrix
void preSkew(SkScalar kx, SkScalar ky);

[Matrix_preSkew]
SkMatrix
void preSkew(SkScalar kx, SkScalar ky, SkScalar px, SkScalar py);

[Matrix_preTranslate]
SkMatrix
void preTranslate(SkScalar dx, SkScalar dy);

[Matrix_preservesAxisAlignment]
SkMatrix
bool preservesAxisAlignment() const;

[Matrix_preservesRightAngles]
SkMatrix
bool preservesRightAngles(SkScalar tol = SK_ScalarNearlyZero) const;

[Matrix_rectStaysRect]
SkMatrix
bool rectStaysRect() const;

[Matrix_reset]
SkMatrix
void reset();

[Matrix_set]
SkMatrix
void set(int index, SkScalar value);

[Matrix_set9]
SkMatrix
void set9(const SkScalar buffer[9]);

[Matrix_setAffine]
SkMatrix
void setAffine(const SkScalar affine[6]);

[Matrix_setAll]
SkMatrix
void setAll(SkScalar scaleX, SkScalar skewX, SkScalar transX, SkScalar skewY, SkScalar scaleY, SkScalar transY, SkScalar persp0, SkScalar persp1, SkScalar persp2);

[Matrix_setConcat]
SkMatrix
void setConcat(const SkMatrix& a, const SkMatrix& b);

[Matrix_setIdentity]
SkMatrix
void setIdentity();

[Matrix_setPerspX]
SkMatrix
void setPerspX(SkScalar v);

[Matrix_setPerspY]
SkMatrix
void setPerspY(SkScalar v);

[Matrix_setPolyToPoly]
SkMatrix
bool setPolyToPoly(const SkPoint src[], const SkPoint dst[], int count);

[Matrix_setRSXform]
SkMatrix
SkMatrix& setRSXform(const SkRSXform& rsxForm);

[Matrix_setRectToRect]
SkMatrix
bool setRectToRect(const SkRect& src, const SkRect& dst, ScaleToFit stf);

[Matrix_setRotate_2]
SkMatrix
void setRotate(SkScalar degrees);

[Matrix_setRotate]
SkMatrix
void setRotate(SkScalar degrees, SkScalar px, SkScalar py);

[Matrix_setScale_2]
SkMatrix
void setScale(SkScalar sx, SkScalar sy);

[Matrix_setScale]
SkMatrix
void setScale(SkScalar sx, SkScalar sy, SkScalar px, SkScalar py);

[Matrix_setScaleTranslate]
SkMatrix
void setScaleTranslate(SkScalar sx, SkScalar sy, SkScalar tx, SkScalar ty);

[Matrix_setScaleX]
SkMatrix
void setScaleX(SkScalar v);

[Matrix_setScaleY]
SkMatrix
void setScaleY(SkScalar v);

[Matrix_setSinCos_2]
SkMatrix
void setSinCos(SkScalar sinValue, SkScalar cosValue);

[Matrix_setSinCos]
SkMatrix
void setSinCos(SkScalar sinValue, SkScalar cosValue, SkScalar px, SkScalar py);

[Matrix_setSkew_2]
SkMatrix
void setSkew(SkScalar kx, SkScalar ky);

[Matrix_setSkew]
SkMatrix
void setSkew(SkScalar kx, SkScalar ky, SkScalar px, SkScalar py);

[Matrix_setSkewX]
SkMatrix
void setSkewX(SkScalar v);

[Matrix_setSkewY]
SkMatrix
void setSkewY(SkScalar v);

[Matrix_setTranslate]
SkMatrix
void setTranslate(SkScalar dx, SkScalar dy);

[Matrix_setTranslate_2]
SkMatrix
void setTranslate(const SkVector& v);

[Matrix_setTranslateX]
SkMatrix
void setTranslateX(SkScalar v);

[Matrix_setTranslateY]
SkMatrix
void setTranslateY(SkScalar v);

[MemberIndex]
SkMatrix
static constexpr int kMScaleX = 0; static constexpr int kMSkewX = 1; static constexpr int kMTransX = 2; static constexpr int kMSkewY = 3; static constexpr int kMScaleY = 4; static constexpr int kMTransY = 5; static constexpr int kMPersp0 = 6; static constexpr int kMPersp1 = 7; static constexpr int kMPersp2 = 8;

[Paint_empty_constructor]
SkPaint
SkPaint();

[Paint_move_SkPaint]
SkPaint
SkPaint(SkPaint&& paint);

[Paint_copy_const_SkPaint]
SkPaint
SkPaint(const SkPaint& paint);

[Paint_containsText]
SkPaint
bool containsText(const void* text, size_t byteLength) const;

[Paint_countText]
SkPaint
int countText(const void* text, size_t byteLength) const;

[Paint_getAlpha]
SkPaint
uint8_t getAlpha() const;

[Paint_getBlendMode]
SkPaint
SkBlendMode getBlendMode() const;

[Paint_getColor]
SkPaint
SkColor getColor() const;

[Paint_getColor4f]
SkPaint
SkColor4f getColor4f() const;

[Paint_getColorFilter]
SkPaint
SkColorFilter* getColorFilter() const;

[Paint_getDrawLooper]
SkPaint
SkDrawLooper* getDrawLooper() const;

[Paint_getFillPath_2]
[Shader_Methods_a]
[Shader_Methods_b]
SkPaint
bool getFillPath(const SkPath& src, SkPath* dst) const;

[Paint_getFillPath]
SkPaint
bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect, SkScalar resScale = 1) const;

[Paint_getFilterQuality]
SkPaint
SkFilterQuality getFilterQuality() const;

[Paint_getFlags]
SkPaint
uint32_t getFlags() const;

[Paint_getFontMetrics]
SkPaint
SkScalar getFontMetrics(SkFontMetrics* metrics) const;

[Paint_getFontSpacing]
SkPaint
SkScalar getFontSpacing() const;

[Paint_getHash]
SkPaint
uint32_t getHash() const;

[Paint_getHinting]
SkPaint
SkFontHinting getHinting() const;

[Paint_getImageFilter]
SkPaint
SkImageFilter* getImageFilter() const;

[Paint_getMaskFilter]
SkPaint
SkMaskFilter* getMaskFilter() const;

[Paint_getPathEffect]
SkPaint
SkPathEffect* getPathEffect() const;

[Paint_getPosTextPath]
SkPaint
void getPosTextPath(const void* text, size_t length, const SkPoint pos[], SkPath* path) const;

[Paint_getShader]
SkPaint
SkShader* getShader() const;

[Paint_getStrokeCap]
SkPaint
Cap getStrokeCap() const;

[Paint_getStrokeJoin]
SkPaint
Join getStrokeJoin() const;

[Paint_getStrokeMiter]
SkPaint
SkScalar getStrokeMiter() const;

[Paint_getStrokeWidth]
SkPaint
SkScalar getStrokeWidth() const;

[Paint_getStyle]
SkPaint
Style getStyle() const;

[Paint_getTextEncoding]
SkPaint
SkTextEncoding getTextEncoding() const;

[Paint_getTextPath]
SkPaint
void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y, SkPath* path) const;

[Paint_getTextScaleX]
SkPaint
SkScalar getTextScaleX() const;

[Paint_getTextSize]
SkPaint
SkScalar getTextSize() const;

[Paint_getTextSkewX]
SkPaint
SkScalar getTextSkewX() const;

[Paint_getTextWidths]
SkPaint
int getTextWidths(const void* text, size_t byteLength, SkScalar widths[], SkRect bounds[] = nullptr) const;

[Paint_getTypeface]
SkPaint
SkTypeface* getTypeface() const;

[Paint_isAntiAlias]
SkPaint
bool isAntiAlias() const;

[Paint_isAutohinted]
SkPaint
bool isAutohinted() const;

[Paint_isDither]
SkPaint
bool isDither() const;

[Paint_isEmbeddedBitmapText]
SkPaint
bool isEmbeddedBitmapText() const;

[Paint_isFakeBoldText]
SkPaint
bool isFakeBoldText() const;

[Paint_isLCDRenderText]
SkPaint
bool isLCDRenderText() const;

[Paint_isLinearText]
SkPaint
bool isLinearText() const;

[Paint_setBlendMode]
SkPaint
bool isSrcOver() const;

[Paint_isSubpixelText]
SkPaint
bool isSubpixelText() const;

[Paint_measureText_2]
SkPaint
SkScalar measureText(const void* text, size_t length) const;

[Paint_measureText]
SkPaint
SkScalar measureText(const void* text, size_t length, SkRect* bounds) const;

[Paint_nothingToDraw]
SkPaint
bool nothingToDraw() const;

[Paint_notequal_operator]
SkPaint
bool operator!=(const SkPaint& a, const SkPaint& b);

[Paint_move_operator]
SkPaint
SkPaint& operator=(SkPaint&& paint);

[Paint_copy_operator]
SkPaint
SkPaint& operator=(const SkPaint& paint);

[Paint_equal_operator]
SkPaint
bool operator==(const SkPaint& a, const SkPaint& b);

[Paint_refColorFilter]
SkPaint
sk_sp<SkColorFilter> refColorFilter() const;

[Paint_refDrawLooper]
SkPaint
sk_sp<SkDrawLooper> refDrawLooper() const;

[Paint_refImageFilter]
SkPaint
sk_sp<SkImageFilter> refImageFilter() const;

[Paint_refMaskFilter]
SkPaint
sk_sp<SkMaskFilter> refMaskFilter() const;

[Paint_refPathEffect]
SkPaint
sk_sp<SkPathEffect> refPathEffect() const;

[Paint_refShader]
SkPaint
sk_sp<SkShader> refShader() const;

[Paint_refTypeface]
SkPaint
sk_sp<SkTypeface> refTypeface() const;

[Paint_reset]
SkPaint
void reset();

[Paint_setARGB]
SkPaint
void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b);

[Paint_setAlpha]
SkPaint
void setAlpha(U8CPU a);

[Dither_a]
[Dither_b]
[Paint_setAntiAlias]
SkPaint
void setAntiAlias(bool aa);

[Fake_Bold]
[Paint_setAutohinted]
SkPaint
void setAutohinted(bool useAutohinter);

[Paint_setBlendMode]
[Path_Effect_Methods]
SkPaint
void setBlendMode(SkBlendMode mode);

[Paint_setColor]
SkPaint
void setColor(SkColor color);

[Paint_setColor4f]
SkPaint
void setColor4f(const SkColor4f& color, SkColorSpace* colorSpace);

[Blend_Mode_Methods]
[Paint_setColorFilter]
SkPaint
void setColorFilter(sk_sp<SkColorFilter> colorFilter);

[Device_Text]
[Paint_setDither]
SkPaint
void setDither(bool dither);

[Paint_setDrawLooper]
[Text_Size]
SkPaint
void setDrawLooper(sk_sp<SkDrawLooper> drawLooper);

[Paint_setEmbeddedBitmapText]
SkPaint
void setEmbeddedBitmapText(bool useEmbeddedBitmapText);

[Filter_Quality_Methods]
[Paint_setFakeBoldText]
SkPaint
void setFakeBoldText(bool fakeBoldText);

[Color_Methods]
[Paint_setFilterQuality]
SkPaint
void setFilterQuality(SkFilterQuality quality);

[Anti_Alias]
[Paint_setFlags]
SkPaint
void setFlags(uint32_t flags);

[Paint_setHinting]
SkPaint
void setHinting(SkFontHinting hintingLevel);

[Draw_Looper_Methods]
[Paint_setImageFilter]
SkPaint
void setImageFilter(sk_sp<SkImageFilter> imageFilter);

[Paint_setLCDRenderText]
SkPaint
void setLCDRenderText(bool lcdText);

[Paint_setLinearText]
SkPaint
void setLinearText(bool linearText);

[Paint_setMaskFilter]
[Typeface_Methods]
SkPaint
void setMaskFilter(sk_sp<SkMaskFilter> maskFilter);

[Mask_Filter_Methods]
[Paint_setPathEffect]
SkPaint
void setPathEffect(sk_sp<SkPathEffect> pathEffect);

[Color_Filter_Methods]
[Paint_setShader]
SkPaint
void setShader(sk_sp<SkShader> shader);

[Paint_setStrokeCap_a]
[Paint_setStrokeCap_b]
SkPaint
void setStrokeCap(Cap cap);

[Paint_setStrokeJoin]
SkPaint
void setStrokeJoin(Join join);

[Paint_setStrokeMiter]
SkPaint
void setStrokeMiter(SkScalar miter);

[Miter_Limit]
[Paint_setStrokeWidth]
SkPaint
void setStrokeWidth(SkScalar width);

[Paint_setStyle]
[Stroke_Width]
SkPaint
void setStyle(Style style);

[Paint_setSubpixelText]
SkPaint
void setSubpixelText(bool subpixelText);

[Paint_setTextEncoding]
SkPaint
void setTextEncoding(SkTextEncoding encoding);

[Paint_setTextScaleX]
[Text_Skew_X]
SkPaint
void setTextScaleX(SkScalar scaleX);

[Paint_setTextSize]
[Text_Scale_X]
SkPaint
void setTextSize(SkScalar textSize);

[Paint_setTextSkewX]
[Text_Encoding]
SkPaint
void setTextSkewX(SkScalar skewX);

[Image_Filter_Methods]
[Paint_setTypeface]
SkPaint
void setTypeface(sk_sp<SkTypeface> typeface);

[Paint_053]
SkPaint
static constexpr int kCapCount = kLast_Cap + 1;

[Paint_057]
SkPaint
static constexpr int kJoinCount = kLast_Join + 1;

[Paint_textToGlyphs]
SkPaint
int textToGlyphs(const void* text, size_t byteLength, SkGlyphID glyphs[]) const;

[Path_ConvertConicToQuads]
SkPath
static int ConvertConicToQuads(const SkPoint& p0, const SkPoint& p1, const SkPoint& p2, SkScalar w, SkPoint pts[], int pow2);

[Path_ConvertToNonInverseFillType]
SkPath
static FillType ConvertToNonInverseFillType(FillType fill);

[Path_IsCubicDegenerate]
SkPath
static bool IsCubicDegenerate(const SkPoint& p1, const SkPoint& p2, const SkPoint& p3, const SkPoint& p4, bool exact);

[Path_IsInverseFillType]
SkPath
static bool IsInverseFillType(FillType fill);

[Path_IsLineDegenerate]
SkPath
static bool IsLineDegenerate(const SkPoint& p1, const SkPoint& p2, bool exact);

[Path_IsQuadDegenerate]
SkPath
static bool IsQuadDegenerate(const SkPoint& p1, const SkPoint& p2, const SkPoint& p3, bool exact);

[Path_Iter_Iter]
SkPath
Iter();

[Path_Iter_const_SkPath]
SkPath
Iter(const SkPath& path, bool forceClose);

[Path_empty_constructor]
SkPath
SkPath();

[Path_copy_const_SkPath]
SkPath
SkPath(const SkPath& path);

[Path_addArc]
SkPath
SkPath& addArc(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle);

[Path_addCircle]
SkPath
SkPath& addCircle(SkScalar x, SkScalar y, SkScalar radius, Direction dir = kCW_Direction);

[Path_addOval]
SkPath
SkPath& addOval(const SkRect& oval, Direction dir = kCW_Direction);

[Path_addOval_2]
SkPath
SkPath& addOval(const SkRect& oval, Direction dir, unsigned start);

[Path_addPath_2]
SkPath
SkPath& addPath(const SkPath& src, AddPathMode mode = kAppend_AddPathMode);

[Path_addPath]
SkPath
SkPath& addPath(const SkPath& src, SkScalar dx, SkScalar dy, AddPathMode mode = kAppend_AddPathMode);

[Path_addPath_3]
SkPath
SkPath& addPath(const SkPath& src, const SkMatrix& matrix, AddPathMode mode = kAppend_AddPathMode);

[Path_addPoly]
SkPath
SkPath& addPoly(const SkPoint pts[], int count, bool close);

[Path_addPoly_2]
SkPath
SkPath& addPoly(const std::initializer_list<SkPoint>& list, bool close);

[Path_addRRect]
SkPath
SkPath& addRRect(const SkRRect& rrect, Direction dir = kCW_Direction);

[Path_addRRect_2]
SkPath
SkPath& addRRect(const SkRRect& rrect, Direction dir, unsigned start);

[Path_addRect_3]
SkPath
SkPath& addRect(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom, Direction dir = kCW_Direction);

[Path_addRect]
SkPath
SkPath& addRect(const SkRect& rect, Direction dir = kCW_Direction);

[Path_addRect_2]
SkPath
SkPath& addRect(const SkRect& rect, Direction dir, unsigned start);

[Path_addRoundRect]
SkPath
SkPath& addRoundRect(const SkRect& rect, SkScalar rx, SkScalar ry, Direction dir = kCW_Direction);

[Path_addRoundRect_2]
SkPath
SkPath& addRoundRect(const SkRect& rect, const SkScalar radii[], Direction dir = kCW_Direction);

[Path_arcTo_4]
SkPath
SkPath& arcTo(SkScalar rx, SkScalar ry, SkScalar xAxisRotate, ArcSize largeArc, Direction sweep, SkScalar x, SkScalar y);

[Path_arcTo_2_a]
[Path_arcTo_2_b]
[Path_arcTo_2_c]
SkPath
SkPath& arcTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar radius);

[Path_arcTo_3]
SkPath
SkPath& arcTo(const SkPoint p1, const SkPoint p2, SkScalar radius);

[Path_rArcTo]
SkPath
SkPath& arcTo(const SkPoint r, SkScalar xAxisRotate, ArcSize largeArc, Direction sweep, const SkPoint xy);

[Path_arcTo]
SkPath
SkPath& arcTo(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool forceMoveTo);

[Path_close]
SkPath
SkPath& close();

[Path_computeTightBounds]
SkPath
SkRect computeTightBounds() const;

[Path_conicTo]
SkPath
SkPath& conicTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar w);

[Path_conicTo_2]
SkPath
SkPath& conicTo(const SkPoint& p1, const SkPoint& p2, SkScalar w);

[Path_Iter_conicWeight]
[Path_RawIter_conicWeight]
SkPath
SkScalar conicWeight() const;

[Path_conservativelyContainsRect]
SkPath
bool conservativelyContainsRect(const SkRect& rect) const;

[Path_contains]
SkPath
bool contains(SkScalar x, SkScalar y) const;

[Path_countPoints]
SkPath
int countPoints() const;

[Path_countVerbs]
SkPath
int countVerbs() const;

[Path_cubicTo]
SkPath
SkPath& cubicTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar x3, SkScalar y3);

[Path_cubicTo_2]
SkPath
SkPath& cubicTo(const SkPoint& p1, const SkPoint& p2, const SkPoint& p3);

[Path_dump_2]
SkPath
void dump() const;

[Path_dump]
SkPath
void dump(SkWStream* stream, bool forceClose, bool dumpAsHex) const;

[Path_dumpHex]
SkPath
void dumpHex() const;

[Path_AddPathMode]
SkPath
enum AddPathMode { kAppend_AddPathMode, kExtend_AddPathMode, };

[Path_ArcSize]
SkPath
enum ArcSize { kSmall_ArcSize, kLarge_ArcSize, };

[Path_Convexity]
SkPath
enum Convexity : uint8_t { kUnknown_Convexity, kConvex_Convexity, kConcave_Convexity, };

[Path_Direction]
SkPath
enum Direction : int { kCW_Direction, kCCW_Direction, };

[Path_FillType_a]
[Path_FillType_b]
SkPath
enum FillType { kWinding_FillType, kEvenOdd_FillType, kInverseWinding_FillType, kInverseEvenOdd_FillType, };

[Path_SegmentMask]
SkPath
enum SegmentMask { kLine_SegmentMask = 1 << 0, kQuad_SegmentMask = 1 << 1, kConic_SegmentMask = 1 << 2, kCubic_SegmentMask = 1 << 3, };

[Path_Verb]
SkPath
enum Verb { kMove_Verb, kLine_Verb, kQuad_Verb, kConic_Verb, kCubic_Verb, kClose_Verb, kDone_Verb, };

[Path_getBounds]
SkPath
const SkRect& getBounds() const;

[Path_getConvexity]
SkPath
Convexity getConvexity() const;

[Path_getConvexityOrUnknown]
SkPath
Convexity getConvexityOrUnknown() const;

[Path_getFillType]
SkPath
FillType getFillType() const;

[Path_getGenerationID]
SkPath
uint32_t getGenerationID() const;

[Path_getLastPt]
SkPath
bool getLastPt(SkPoint* lastPt) const;

[Path_getPoint]
SkPath
SkPoint getPoint(int index) const;

[Path_getPoints]
SkPath
int getPoints(SkPoint points[], int max) const;

[Path_getSegmentMasks]
SkPath
uint32_t getSegmentMasks() const;

[Path_getVerbs]
SkPath
int getVerbs(uint8_t verbs[], int max) const;

[Path_incReserve]
SkPath
void incReserve(int extraPtCount);

[Path_interpolate]
SkPath
bool interpolate(const SkPath& ending, SkScalar weight, SkPath* out) const;

[Path_Iter_isCloseLine]
SkPath
bool isCloseLine() const;

[Path_Iter_isClosedContour]
SkPath
bool isClosedContour() const;

[Path_Iter]
SkPath
class Iter { Iter(); Iter(const SkPath& path, bool forceClose); void setPath(const SkPath& path, bool forceClose); Verb next(SkPoint pts[4], bool doConsumeDegenerates = true, bool exact = false); SkScalar conicWeight() const; bool isCloseLine() const; bool isClosedContour() const; };

[Path_isConvex]
SkPath
bool isConvex() const;

[Path_isEmpty]
SkPath
bool isEmpty() const;

[Path_isFinite]
SkPath
bool isFinite() const;

[Path_isInterpolatable]
SkPath
bool isInterpolatable(const SkPath& compare) const;

[Path_isInverseFillType_2]
SkPath
bool isInverseFillType() const;

[Path_isLastContourClosed]
SkPath
bool isLastContourClosed() const;

[Path_isLine]
SkPath
bool isLine(SkPoint line[2]) const;

[Path_isNestedFillRects]
SkPath
bool isNestedFillRects(SkRect rect[2], Direction dirs[2] = nullptr) const;

[Path_isOval]
SkPath
bool isOval(SkRect* bounds) const;

[Path_isRRect]
SkPath
bool isRRect(SkRRect* rrect) const;

[Path_isRect]
SkPath
bool isRect(SkRect* rect, bool* isClosed = nullptr, Direction* direction = nullptr) const;

[Path_isVolatile]
SkPath
bool isVolatile() const;

[Path_lineTo]
SkPath
SkPath& lineTo(SkScalar x, SkScalar y);

[Path_lineTo_2]
SkPath
SkPath& lineTo(const SkPoint& p);

[Path_moveTo]
SkPath
SkPath& moveTo(SkScalar x, SkScalar y);

[Path_moveTo_2]
SkPath
SkPath& moveTo(const SkPoint& p);

[Path_RawIter_next]
SkPath
Verb next(SkPoint pts[4]);

[Path_Iter_next]
SkPath
Verb next(SkPoint pts[4], bool doConsumeDegenerates = true, bool exact = false);

[Path_offset_2]
SkPath
void offset(SkScalar dx, SkScalar dy);

[Path_offset]
SkPath
void offset(SkScalar dx, SkScalar dy, SkPath* dst) const;

[Path_notequal_operator]
SkPath
bool operator!=(const SkPath& a, const SkPath& b);

[Path_copy_operator]
SkPath
SkPath& operator=(const SkPath& path);

[Path_equal_operator]
SkPath
bool operator==(const SkPath& a, const SkPath& b);

[Path_RawIter_peek]
SkPath
Verb peek() const;

[Path_quadTo]
SkPath
SkPath& quadTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2);

[Path_quadTo_2]
SkPath
SkPath& quadTo(const SkPoint& p1, const SkPoint& p2);

[Path_rArcTo]
SkPath
SkPath& rArcTo(SkScalar rx, SkScalar ry, SkScalar xAxisRotate, ArcSize largeArc, Direction sweep, SkScalar dx, SkScalar dy);

[Cubic]
[Path_rConicTo]
SkPath
SkPath& rConicTo(SkScalar dx1, SkScalar dy1, SkScalar dx2, SkScalar dy2, SkScalar w);

[Arc]
[Path_rCubicTo]
SkPath
SkPath& rCubicTo(SkScalar dx1, SkScalar dy1, SkScalar dx2, SkScalar dy2, SkScalar dx3, SkScalar dy3);

[Path_rLineTo]
[Quad_a]
[Quad_b]
SkPath
SkPath& rLineTo(SkScalar dx, SkScalar dy);

[Path_rMoveTo]
SkPath
SkPath& rMoveTo(SkScalar dx, SkScalar dy);

[Conic_Weight_a]
[Conic_Weight_b]
[Conic_Weight_c]
[Path_rQuadTo]
SkPath
SkPath& rQuadTo(SkScalar dx1, SkScalar dy1, SkScalar dx2, SkScalar dy2);

[Path_readFromMemory]
SkPath
size_t readFromMemory(const void* buffer, size_t length);

[Path_reset]
SkPath
SkPath& reset();

[Path_reverseAddPath]
SkPath
SkPath& reverseAddPath(const SkPath& src);

[Path_rewind]
SkPath
SkPath& rewind();

[Path_serialize]
SkPath
sk_sp<SkData> serialize() const;

[Path_setConvexity]
SkPath
void setConvexity(Convexity convexity);

[Path_setFillType]
SkPath
void setFillType(FillType ft);

[Path_setIsVolatile]
SkPath
void setIsVolatile(bool isVolatile);

[Path_setLastPt]
SkPath
void setLastPt(SkScalar x, SkScalar y);

[Path_setLastPt_2]
SkPath
void setLastPt(const SkPoint& p);

[Path_Iter_setPath]
SkPath
void setPath(const SkPath& path, bool forceClose);

[Path_swap]
SkPath
void swap(SkPath& other);

[Path_toggleInverseFillType]
SkPath
void toggleInverseFillType();

[Path_transform_2]
SkPath
void transform(const SkMatrix& matrix);

[Path_transform]
SkPath
void transform(const SkMatrix& matrix, SkPath* dst) const;

[Path_updateBoundsCache]
SkPath
void updateBoundsCache() const;

[Path_writeToMemory]
SkPath
size_t writeToMemory(void* buffer) const;

[Path_destructor]
SkPath
~SkPath();

[Picture_MakeFromData]
SkPicture
static sk_sp<SkPicture> MakeFromData(const SkData* data, const SkDeserialProcs* procs = nullptr);

[Picture_serialize_2]
SkPicture
static sk_sp<SkPicture> MakeFromData(const void* data, size_t size, const SkDeserialProcs* procs = nullptr);

[Picture_MakeFromStream]
SkPicture
static sk_sp<SkPicture> MakeFromStream(SkStream* stream, const SkDeserialProcs* procs = nullptr);

[Picture_MakePlaceholder]
SkPicture
static sk_sp<SkPicture> MakePlaceholder(SkRect cull);

[Picture_AbortCallback_abort]
SkPicture
virtual bool abort() = 0;

[Picture_approximateBytesUsed]
SkPicture
virtual size_t approximateBytesUsed() const = 0;

[Picture_approximateOpCount]
SkPicture
virtual int approximateOpCount() const = 0;

[Picture_cullRect]
SkPicture
virtual SkRect cullRect() const = 0;

[Picture_playback]
SkPicture
virtual void playback(SkCanvas* canvas, AbortCallback* callback = nullptr) const = 0;

[Picture_serialize]
SkPicture
sk_sp<SkData> serialize(const SkSerialProcs* procs = nullptr) const;

[Picture_serialize_2]
SkPicture
void serialize(SkWStream* stream, const SkSerialProcs* procs = nullptr) const;

[Picture_uniqueID]
SkPicture
uint32_t uniqueID() const;

[Pixmap_empty_constructor]
SkPixmap
SkPixmap();

[Pixmap_const_SkImageInfo_const_star]
SkPixmap
SkPixmap(const SkImageInfo& info, const void* addr, size_t rowBytes);

[Pixmap_addr]
SkPixmap
const void* addr() const;

[Pixmap_addr_2]
SkPixmap
const void* addr(int x, int y) const;

[Pixmap_addr16]
SkPixmap
const uint16_t* addr16() const;

[Pixmap_addr16_2]
SkPixmap
const uint16_t* addr16(int x, int y) const;

[Pixmap_addr32]
SkPixmap
const uint32_t* addr32() const;

[Pixmap_addr32_2]
SkPixmap
const uint32_t* addr32(int x, int y) const;

[Pixmap_addr64]
SkPixmap
const uint64_t* addr64() const;

[Pixmap_addr64_2]
SkPixmap
const uint64_t* addr64(int x, int y) const;

[Pixmap_addr8]
SkPixmap
const uint8_t* addr8() const;

[Pixmap_addr8_2]
SkPixmap
const uint8_t* addr8(int x, int y) const;

[Pixmap_addrF16]
SkPixmap
const uint16_t* addrF16() const;

[Pixmap_addrF16_2]
SkPixmap
const uint16_t* addrF16(int x, int y) const;

[Pixmap_alphaType]
SkPixmap
SkAlphaType alphaType() const;

[Pixmap_bounds]
SkPixmap
SkIRect bounds() const;

[Pixmap_colorSpace]
SkPixmap
SkColorSpace* colorSpace() const;

[Pixmap_colorType]
SkPixmap
SkColorType colorType() const;

[Pixmap_computeByteSize]
SkPixmap
size_t computeByteSize() const;

[Pixmap_computeIsOpaque]
SkPixmap
bool computeIsOpaque() const;

[Pixmap_erase_2]
SkPixmap
bool erase(SkColor color) const;

[Pixmap_erase]
SkPixmap
bool erase(SkColor color, const SkIRect& subset) const;

[Pixmap_erase_3]
SkPixmap
bool erase(const SkColor4f& color, const SkIRect* subset = nullptr) const;

[Pixmap_extractSubset]
SkPixmap
bool extractSubset(SkPixmap* subset, const SkIRect& area) const;

[Pixmap_getColor]
SkPixmap
SkColor getColor(int x, int y) const;

[Pixmap_height]
SkPixmap
int height() const;

[Pixmap_info]
SkPixmap
const SkImageInfo& info() const;

[Pixmap_isOpaque]
SkPixmap
bool isOpaque() const;

[Pixmap_readPixels]
SkPixmap
bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes) const;

[Pixmap_readPixels_2]
SkPixmap
bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, int srcX, int srcY) const;

[Pixmap_readPixels_4]
SkPixmap
bool readPixels(const SkPixmap& dst) const;

[Pixmap_readPixels_3]
SkPixmap
bool readPixels(const SkPixmap& dst, int srcX, int srcY) const;

[Pixmap_reset]
SkPixmap
void reset();

[Pixmap_reset_2]
SkPixmap
void reset(const SkImageInfo& info, const void* addr, size_t rowBytes);

[Pixmap_rowBytes]
SkPixmap
size_t rowBytes() const;

[Pixmap_rowBytesAsPixels]
SkPixmap
int rowBytesAsPixels() const;

[Pixmap_scalePixels]
SkPixmap
bool scalePixels(const SkPixmap& dst, SkFilterQuality filterQuality) const;

[Pixmap_setColorSpace]
SkPixmap
void setColorSpace(sk_sp<SkColorSpace> colorSpace);

[Pixmap_shiftPerPixel]
SkPixmap
int shiftPerPixel() const;

[Pixmap_width]
SkPixmap
int width() const;

[Pixmap_writable_addr]
SkPixmap
void* writable_addr() const;

[Pixmap_writable_addr_2]
SkPixmap
void* writable_addr(int x, int y) const;

[Pixmap_writable_addr16]
SkPixmap
uint16_t* writable_addr16(int x, int y) const;

[Pixmap_writable_addr32]
SkPixmap
uint32_t* writable_addr32(int x, int y) const;

[Pixmap_writable_addr64]
SkPixmap
uint64_t* writable_addr64(int x, int y) const;

[Pixmap_writable_addr8]
SkPixmap
uint8_t* writable_addr8(int x, int y) const;

[Pixmap_writable_addrF16]
SkPixmap
uint16_t* writable_addrF16(int x, int y) const;

[Point_CrossProduct]
SkPoint
static SkScalar CrossProduct(const SkVector& a, const SkVector& b);

[Point_Distance]
SkPoint
static SkScalar Distance(const SkPoint& a, const SkPoint& b);

[Point_DotProduct]
SkPoint
static SkScalar DotProduct(const SkVector& a, const SkVector& b);

[Point_Length]
SkPoint
static SkScalar Length(SkScalar x, SkScalar y);

[Point_Make]
SkPoint
static constexpr SkPoint Make(SkScalar x, SkScalar y);

[Point_Normalize]
SkPoint
static SkScalar Normalize(SkVector* vec);

[Point_Offset_2]
SkPoint
static void Offset(SkPoint points[], int count, SkScalar dx, SkScalar dy);

[Point_Offset]
SkPoint
static void Offset(SkPoint points[], int count, const SkVector& offset);

[Point_cross]
SkPoint
SkScalar cross(const SkVector& vec) const;

[Point_distanceToOrigin]
SkPoint
SkScalar distanceToOrigin() const;

[Point_dot]
SkPoint
SkScalar dot(const SkVector& vec) const;

[Point_equals]
SkPoint
bool equals(SkScalar x, SkScalar y) const;

[Point_isFinite]
SkPoint
bool isFinite() const;

[Point_isZero]
SkPoint
bool isZero() const;

[Point_iset_2]
SkPoint
void iset(const SkIPoint& p);

[Point_iset]
SkPoint
void iset(int32_t x, int32_t y);

[Point_length_2]
SkPoint
SkScalar length() const;

[Point_negate]
SkPoint
void negate();

[Point_normalize_2]
SkPoint
bool normalize();

[Point_offset_3]
SkPoint
void offset(SkScalar dx, SkScalar dy);

[Point_notequal_operator]
SkPoint
bool operator!=(const SkPoint& a, const SkPoint& b);

[Point_multiply_operator]
SkPoint
SkPoint operator*(SkScalar scale) const;

[Point_multiplyby_operator]
SkPoint
SkPoint& operator*=(SkScalar scale);

[Point_add_operator]
SkPoint
SkPoint operator+(const SkPoint& a, const SkVector& b);

[Point_addto_operator]
SkPoint
void operator+=(const SkVector& v);

[Point_minus_operator]
SkPoint
SkPoint operator-() const;

[Point_subtract_operator]
SkPoint
SkVector operator-(const SkPoint& a, const SkPoint& b);

[Point_subtractfrom_operator]
SkPoint
void operator-=(const SkVector& v);

[Point_equal_operator]
SkPoint
bool operator==(const SkPoint& a, const SkPoint& b);

[Point_scale]
SkPoint
void scale(SkScalar scale, SkPoint* dst) const;

[Point_scale_2]
SkPoint
void scale(SkScalar value);

[Point_set]
SkPoint
void set(SkScalar x, SkScalar y);

[Point_setAbs]
SkPoint
void setAbs(const SkPoint& pt);

[Point_setLength]
SkPoint
bool setLength(SkScalar length);

[Point_setLength_2]
SkPoint
bool setLength(SkScalar x, SkScalar y, SkScalar length);

[Point_setNormalize]
SkPoint
bool setNormalize(SkScalar x, SkScalar y);

[Point_x]
SkPoint
SkScalar x() const;

[Point_y]
SkPoint
SkScalar y() const;

[RRect_MakeEmpty]
SkRRect
static SkRRect MakeEmpty();

[RRect_MakeOval]
SkRRect
static SkRRect MakeOval(const SkRect& oval);

[RRect_MakeRect]
SkRRect
static SkRRect MakeRect(const SkRect& r);

[RRect_MakeRectXY]
SkRRect
static SkRRect MakeRectXY(const SkRect& rect, SkScalar xRad, SkScalar yRad);

[RRect_empty_constructor]
SkRRect
SkRRect();

[RRect_copy_const_SkRRect]
SkRRect
SkRRect(const SkRRect& rrect);

[RRect_contains]
SkRRect
bool contains(const SkRect& rect) const;

[RRect_dump_2]
SkRRect
void dump() const;

[RRect_dump]
SkRRect
void dump(bool asHex) const;

[RRect_dumpHex]
SkRRect
void dumpHex() const;

[RRect_Corner]
SkRRect
enum Corner { kUpperLeft_Corner, kUpperRight_Corner, kLowerRight_Corner, kLowerLeft_Corner, };

[RRect_Type]
SkRRect
enum Type { kEmpty_Type, kRect_Type, kOval_Type, kSimple_Type, kNinePatch_Type, kComplex_Type, kLastType = kComplex_Type, };

[RRect_getBounds]
SkRRect
const SkRect& getBounds() const;

[RRect_getSimpleRadii]
SkRRect
SkVector getSimpleRadii() const;

[RRect_getType]
SkRRect
Type getType() const;

[RRect_height]
SkRRect
SkScalar height() const;

[RRect_inset_2]
SkRRect
void inset(SkScalar dx, SkScalar dy);

[RRect_inset]
SkRRect
void inset(SkScalar dx, SkScalar dy, SkRRect* dst) const;

[RRect_isComplex]
SkRRect
bool isComplex() const;

[RRect_isEmpty]
SkRRect
bool isEmpty() const;

[RRect_isNinePatch]
SkRRect
bool isNinePatch() const;

[RRect_isOval]
SkRRect
bool isOval() const;

[RRect_isRect]
SkRRect
bool isRect() const;

[RRect_isSimple]
SkRRect
bool isSimple() const;

[RRect_isValid]
SkRRect
bool isValid() const;

[RRect_makeOffset]
SkRRect
SkRRect makeOffset(SkScalar dx, SkScalar dy) const;

[RRect_offset]
SkRRect
void offset(SkScalar dx, SkScalar dy);

[RRect_notequal_operator]
SkRRect
bool operator!=(const SkRRect& a, const SkRRect& b);

[RRect_copy_operator]
SkRRect
SkRRect& operator=(const SkRRect& rrect);

[RRect_equal_operator]
SkRRect
bool operator==(const SkRRect& a, const SkRRect& b);

[RRect_outset_2]
SkRRect
void outset(SkScalar dx, SkScalar dy);

[RRect_outset]
SkRRect
void outset(SkScalar dx, SkScalar dy, SkRRect* dst) const;

[RRect_radii]
SkRRect
SkVector radii(Corner corner) const;

[RRect_readFromMemory]
SkRRect
size_t readFromMemory(const void* buffer, size_t length);

[RRect_rect]
SkRRect
const SkRect& rect() const;

[RRect_setEmpty]
SkRRect
void setEmpty();

[RRect_setNinePatch]
SkRRect
void setNinePatch(const SkRect& rect, SkScalar leftRad, SkScalar topRad, SkScalar rightRad, SkScalar bottomRad);

[RRect_setOval]
SkRRect
void setOval(const SkRect& oval);

[RRect_setRect]
SkRRect
void setRect(const SkRect& rect);

[RRect_setRectRadii]
SkRRect
void setRectRadii(const SkRect& rect, const SkVector radii[4]);

[RRect_setRectXY]
SkRRect
void setRectXY(const SkRect& rect, SkScalar xRad, SkScalar yRad);

[RRect_transform]
SkRRect
bool transform(const SkMatrix& matrix, SkRRect* dst) const;

[RRect_type_2]
SkRRect
Type type() const;

[RRect_width]
SkRRect
SkScalar width() const;

[RRect_writeToMemory]
SkRRect
size_t writeToMemory(void* buffer) const;

[Rect_Intersects]
SkRect
static bool Intersects(const SkRect& a, const SkRect& b);

[Rect_Make_2]
SkRect
static SkRect Make(const SkIRect& irect);

[Rect_Make]
SkRect
static SkRect Make(const SkISize& size);

[Rect_MakeEmpty]
SkRect
static constexpr SkRect MakeEmpty();

[Rect_MakeIWH]
SkRect
static SkRect MakeIWH(int w, int h);

[Rect_MakeLTRB]
SkRect
static constexpr SkRect MakeLTRB(SkScalar l, SkScalar t, SkScalar r, SkScalar b);

[Rect_MakeSize]
SkRect
static constexpr SkRect MakeSize(const SkSize& size);

[Rect_MakeWH]
SkRect
static constexpr SkRect MakeWH(SkScalar w, SkScalar h);

[Rect_MakeXYWH]
SkRect
static constexpr SkRect MakeXYWH(SkScalar x, SkScalar y, SkScalar w, SkScalar h);

[Rect_asScalars]
SkRect
const SkScalar* asScalars() const;

[Rect_bottom]
SkRect
SkScalar    bottom() const;

[Rect_centerX]
SkRect
SkScalar    centerX() const;

[Rect_centerY]
SkRect
SkScalar    centerY() const;

[Rect_contains]
SkRect
bool contains(SkScalar x, SkScalar y) const;

[Rect_contains_3]
SkRect
bool contains(const SkIRect& r) const;

[Rect_contains_2]
SkRect
bool contains(const SkRect& r) const;

[Rect_dump_2]
SkRect
void dump() const;

[Rect_dump]
SkRect
void dump(bool asHex) const;

[Rect_dumpHex]
SkRect
void dumpHex() const;

[Rect_height]
SkRect
SkScalar    height() const;

[Rect_inset]
SkRect
void inset(SkScalar dx, SkScalar dy);

[Rect_intersect_2]
SkRect
bool intersect(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom);

[Rect_intersect_3]
SkRect
bool intersect(const SkRect& a, const SkRect& b);

[Rect_intersect]
SkRect
bool intersect(const SkRect& r);

[Rect_intersects_3]
SkRect
bool intersects(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom) const;

[Rect_intersects_2]
SkRect
bool intersects(const SkRect& r) const;

[Rect_isEmpty]
SkRect
bool isEmpty() const;

[Rect_isFinite]
SkRect
bool isFinite() const;

[Rect_isSorted]
SkRect
bool isSorted() const;

[Rect_iset]
SkRect
void iset(int left, int top, int right, int bottom);

[Rect_isetWH]
SkRect
void isetWH(int width, int height);

[Rect_join]
SkRect
void join(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom);

[Rect_join_2]
SkRect
void join(const SkRect& r);

[Rect_joinNonEmptyArg]
SkRect
void joinNonEmptyArg(const SkRect& r);

[Rect_joinPossiblyEmptyRect]
SkRect
void joinPossiblyEmptyRect(const SkRect& r);

[Rect_left]
SkRect
SkScalar    left() const;

[Rect_makeInset]
SkRect
SkRect makeInset(SkScalar dx, SkScalar dy) const;

[Rect_makeOffset]
SkRect
SkRect makeOffset(SkScalar dx, SkScalar dy) const;

[Rect_makeOutset]
SkRect
SkRect makeOutset(SkScalar dx, SkScalar dy) const;

[Rect_makeSorted]
SkRect
SkRect makeSorted() const;

[Rect_offset]
SkRect
void offset(SkScalar dx, SkScalar dy);

[Rect_offset_2]
SkRect
void offset(const SkPoint& delta);

[Rect_offsetTo]
SkRect
void offsetTo(SkScalar newX, SkScalar newY);

[Rect_notequal_operator]
SkRect
bool operator!=(const SkRect& a, const SkRect& b);

[Rect_equal_operator]
SkRect
bool operator==(const SkRect& a, const SkRect& b);

[Rect_outset]
SkRect
void outset(SkScalar dx, SkScalar dy);

[Rect_right]
SkRect
SkScalar    right() const;

[Rect_round_2]
SkRect
SkIRect round() const;

[Rect_round]
SkRect
void round(SkIRect* dst) const;

[Rect_roundIn]
SkRect
void roundIn(SkIRect* dst) const;

[Rect_roundOut_3]
SkRect
SkIRect roundOut() const;

[Rect_roundOut]
SkRect
void roundOut(SkIRect* dst) const;

[Rect_roundOut_2]
SkRect
void roundOut(SkRect* dst) const;

[Rect_set_2]
SkRect
void set(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom);

[Rect_set]
SkRect
void set(const SkIRect& src);

[Rect_set_3]
SkRect
void set(const SkPoint pts[], int count);

[Rect_set_4]
SkRect
void set(const SkPoint& p0, const SkPoint& p1);

[Rect_setBounds]
SkRect
void setBounds(const SkPoint pts[], int count);

[Rect_setBoundsCheck]
SkRect
bool setBoundsCheck(const SkPoint pts[], int count);

[Rect_setBoundsNoCheck]
SkRect
void setBoundsNoCheck(const SkPoint pts[], int count);

[Rect_setEmpty]
SkRect
void setEmpty();

[Rect_setLTRB]
SkRect
void setLTRB(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom);

[Rect_setWH]
SkRect
void setWH(SkScalar width, SkScalar height);

[Rect_setXYWH]
SkRect
void setXYWH(SkScalar x, SkScalar y, SkScalar width, SkScalar height);

[Rect_sort]
SkRect
void sort();

[Rect_toQuad]
SkRect
void toQuad(SkPoint quad[4]) const;

[Rect_top]
SkRect
SkScalar    top() const;

[Rect_width]
SkRect
SkScalar    width() const;

[Rect_x]
SkRect
SkScalar    x() const;

[Rect_y]
SkRect
SkScalar    y() const;

[Region_Cliperator_const_SkRegion_const_SkIRect]
SkRegion
Cliperator(const SkRegion& region, const SkIRect& clip);

[Region_Iterator_Iterator]
SkRegion
Iterator();

[Region_Iterator_copy_const_SkRegion]
SkRegion
Iterator(const SkRegion& region);

[Region_copy_const_SkIRect]
SkRegion
explicit SkRegion(const SkIRect& rect);

[Region_empty_constructor]
SkRegion
SkRegion();

[Region_copy_const_SkRegion]
SkRegion
SkRegion(const SkRegion& region);

[Region_Spanerator_const_SkRegion_int_int_int]
SkRegion
Spanerator(const SkRegion& region, int y, int left, int right);

[Region_computeRegionComplexity]
SkRegion
int computeRegionComplexity() const;

[Region_contains_2]
SkRegion
bool contains(const SkIRect& other) const;

[Region_contains_3]
SkRegion
bool contains(const SkRegion& other) const;

[Region_contains]
SkRegion
bool contains(int32_t x, int32_t y) const;

[Region_Iterator_done]
SkRegion
bool done() const;

[Region_Cliperator_done]
SkRegion
bool done();

[Region_Op]
SkRegion
enum Op { kDifference_Op, kIntersect_Op, kUnion_Op, kXOR_Op, kReverseDifference_Op, kReplace_Op, kLastOp = kReplace_Op, };

[Region_getBoundaryPath]
SkRegion
bool getBoundaryPath(SkPath* path) const;

[Region_getBounds]
SkRegion
const SkIRect& getBounds() const;

[Region_intersects]
SkRegion
bool intersects(const SkIRect& rect) const;

[Region_intersects_2]
SkRegion
bool intersects(const SkRegion& other) const;

[Region_isComplex]
SkRegion
bool isComplex() const;

[Region_isEmpty]
SkRegion
bool isEmpty() const;

[Region_isRect]
SkRegion
bool isRect() const;

[Region_Spanerator_next]
SkRegion
bool next(int* left, int* right);

[Region_Cliperator_next]
SkRegion
void  next();

[Region_Iterator_next]
SkRegion
void next();

[Region_op_1]
SkRegion
bool op(const SkIRect& rect, Op op);

[Region_op_4]
SkRegion
bool op(const SkIRect& rect, const SkRegion& rgn, Op op);

[Region_op_3]
SkRegion
bool op(const SkRegion& rgn, Op op);

[Region_op_5]
SkRegion
bool op(const SkRegion& rgn, const SkIRect& rect, Op op);

[Region_op_6]
SkRegion
bool op(const SkRegion& rgna, const SkRegion& rgnb, Op op);

[Region_op_2]
SkRegion
bool op(int left, int top, int right, int bottom, Op op);

[Region_notequal1_operator]
SkRegion
bool operator!=(const SkRegion& other) const;

[Region_copy_operator]
SkRegion
SkRegion& operator=(const SkRegion& region);

[Region_equal1_operator]
SkRegion
bool operator==(const SkRegion& other) const;

[Region_quickContains]
SkRegion
bool quickContains(const SkIRect& r) const;

[Region_quickContains_2]
SkRegion
bool quickContains(int32_t left, int32_t top, int32_t right, int32_t bottom) const;

[Region_quickReject]
SkRegion
bool quickReject(const SkIRect& rect) const;

[Region_quickReject_2]
SkRegion
bool quickReject(const SkRegion& rgn) const;

[Region_readFromMemory]
SkRegion
size_t readFromMemory(const void* buffer, size_t length);

[Region_Cliperator_rect]
[Region_Iterator_rect]
SkRegion
const SkIRect& rect() const;

[Region_Iterator_reset]
SkRegion
void reset(const SkRegion& region);

[Region_Iterator_rewind]
SkRegion
bool rewind();

[Region_Iterator_rgn]
SkRegion
const SkRegion* rgn() const;

[Region_set]
SkRegion
bool set(const SkRegion& src);

[Region_setEmpty]
SkRegion
bool setEmpty();

[Region_setPath]
SkRegion
bool setPath(const SkPath& path, const SkRegion& clip);

[Region_setRect]
SkRegion
bool setRect(const SkIRect& rect);

[Region_setRect_2]
SkRegion
bool setRect(int32_t left, int32_t top, int32_t right, int32_t bottom);

[Region_setRects]
SkRegion
bool setRects(const SkIRect rects[], int count);

[Region_setRegion]
SkRegion
bool setRegion(const SkRegion& region);

[Region_swap]
SkRegion
void swap(SkRegion& other);

[Region_translate]
SkRegion
void translate(int dx, int dy);

[Region_translate_2]
SkRegion
void translate(int dx, int dy, SkRegion* dst) const;

[Region_writeToMemory]
SkRegion
size_t writeToMemory(void* buffer) const;

[Region_destructor]
SkRegion
~SkRegion();

[Surface_MakeFromBackendTexture]
SkSurface
static sk_sp<SkSurface> MakeFromBackendTexture(GrContext* context, const GrBackendTexture& backendTexture, GrSurfaceOrigin origin, int sampleCnt, SkColorType colorType, sk_sp<SkColorSpace> colorSpace, const SkSurfaceProps* surfaceProps);

[Surface_MakeFromBackendTextureAsRenderTarget]
SkSurface
static sk_sp<SkSurface> MakeFromBackendTextureAsRenderTarget(GrContext* context, const GrBackendTexture& backendTexture, GrSurfaceOrigin origin, int sampleCnt, SkColorType colorType, sk_sp<SkColorSpace> colorSpace, const SkSurfaceProps* surfaceProps);

[Surface_MakeNull]
SkSurface
static sk_sp<SkSurface> MakeNull(int width, int height);

[Surface_MakeRaster_2]
SkSurface
static sk_sp<SkSurface> MakeRaster(const SkImageInfo& imageInfo, const SkSurfaceProps* props = nullptr);

[Surface_MakeRaster]
SkSurface
static sk_sp<SkSurface> MakeRaster(const SkImageInfo& imageInfo, size_t rowBytes, const SkSurfaceProps* surfaceProps);

[Surface_MakeRasterDirect]
SkSurface
static sk_sp<SkSurface> MakeRasterDirect(const SkImageInfo& imageInfo, void* pixels, size_t rowBytes, const SkSurfaceProps* surfaceProps = nullptr);

[Surface_MakeRasterDirectReleaseProc]
SkSurface
static sk_sp<SkSurface> MakeRasterDirectReleaseProc(const SkImageInfo& imageInfo, void* pixels, size_t rowBytes, void (*releaseProc) (void* pixels, void* context) , void* context, const SkSurfaceProps* surfaceProps = nullptr);

[Surface_MakeRasterN32Premul]
SkSurface
static sk_sp<SkSurface> MakeRasterN32Premul(int width, int height, const SkSurfaceProps* surfaceProps = nullptr);

[Surface_MakeRenderTarget_3]
SkSurface
static sk_sp<SkSurface> MakeRenderTarget(GrContext* context, SkBudgeted budgeted, const SkImageInfo& imageInfo);

[Surface_MakeRenderTarget]
SkSurface
static sk_sp<SkSurface> MakeRenderTarget(GrContext* context, SkBudgeted budgeted, const SkImageInfo& imageInfo, int sampleCount, GrSurfaceOrigin surfaceOrigin, const SkSurfaceProps* surfaceProps, bool shouldCreateWithMips = false);

[Surface_MakeRenderTarget_2]
SkSurface
static sk_sp<SkSurface> MakeRenderTarget(GrContext* context, SkBudgeted budgeted, const SkImageInfo& imageInfo, int sampleCount, const SkSurfaceProps* props);

[Surface_characterize]
SkSurface
bool characterize(SkSurfaceCharacterization* characterization) const;

[Surface_draw_2]
SkSurface
bool draw(SkDeferredDisplayList* deferredDisplayList);

[Surface_draw]
SkSurface
void draw(SkCanvas* canvas, SkScalar x, SkScalar y, const SkPaint* paint);

[Surface_notifyContentWillChange]
SkSurface
uint32_t generationID();

[Surface_getCanvas]
SkSurface
SkCanvas* getCanvas();

[Surface_height]
SkSurface
int height() const;

[Surface_makeImageSnapshot]
SkSurface
sk_sp<SkImage> makeImageSnapshot();

[Surface_makeImageSnapshot_2]
SkSurface
sk_sp<SkImage> makeImageSnapshot(const SkIRect& bounds);

[Surface_makeSurface]
SkSurface
sk_sp<SkSurface> makeSurface(const SkImageInfo& imageInfo);

[Surface_notifyContentWillChange]
SkSurface
void notifyContentWillChange(ContentChangeMode mode);

[Surface_peekPixels]
SkSurface
bool peekPixels(SkPixmap* pixmap);

[Surface_props]
SkSurface
const SkSurfaceProps& props() const;

[Surface_readPixels_3]
SkSurface
bool readPixels(const SkBitmap& dst, int srcX, int srcY);

[Surface_readPixels_2]
SkSurface
bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, int srcX, int srcY);

[Surface_readPixels]
SkSurface
bool readPixels(const SkPixmap& dst, int srcX, int srcY);

[Surface_width]
SkSurface
int width() const;

[Surface_writePixels_2]
SkSurface
void writePixels(const SkBitmap& src, int dstX, int dstY);

[Surface_writePixels]
SkSurface
void writePixels(const SkPixmap& src, int dstX, int dstY);

[TextBlob_Deserialize]
SkTextBlob
static sk_sp<SkTextBlob> Deserialize(const void* data, size_t size, const SkDeserialProcs& procs);

[TextBlob_MakeFromString]
SkTextBlob
static sk_sp<SkTextBlob> MakeFromString(const char* string, const SkFont& font, SkTextEncoding encoding = SkTextEncoding::kUTF8);

[TextBlob_MakeFromText]
SkTextBlob
static sk_sp<SkTextBlob> MakeFromText(const void* text, size_t byteLength, const SkFont& font, SkTextEncoding encoding = SkTextEncoding::kUTF8);

[TextBlob_bounds]
SkTextBlob
const SkRect& bounds() const;

[TextBlob_getIntercepts]
SkTextBlob
int getIntercepts(const SkScalar bounds[2], SkScalar intervals[], const SkPaint* paint = nullptr) const;

[TextBlob_serialize]
SkTextBlob
size_t serialize(const SkSerialProcs& procs, void* memory, size_t memory_size) const;

[TextBlob_serialize_2]
SkTextBlob
sk_sp<SkData> serialize(const SkSerialProcs& procs) const;

[TextBlob_uniqueID]
SkTextBlob
uint32_t uniqueID() const;

[TextBlobBuilder_empty_constructor]
SkTextBlobBuilder
SkTextBlobBuilder();

[TextBlobBuilder_allocRun]
SkTextBlobBuilder
const RunBuffer& allocRun(const SkFont& font, int count, SkScalar x, SkScalar y, const SkRect* bounds = nullptr);

[TextBlobBuilder_allocRunPos]
SkTextBlobBuilder
const RunBuffer& allocRunPos(const SkFont& font, int count, const SkRect* bounds = nullptr);

[TextBlobBuilder_allocRunPosH]
SkTextBlobBuilder
const RunBuffer& allocRunPosH(const SkFont& font, int count, SkScalar y, const SkRect* bounds = nullptr);

[TextBlobBuilder_make]
SkTextBlobBuilder
sk_sp<SkTextBlob> make();

