
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_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_getColor]
SkPaint
SkColor getColor() const;

[Paint_getColor4f]
SkPaint
SkColor4f getColor4f() const;

[Paint_getColorFilter]
SkPaint
SkColorFilter* getColorFilter() 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_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_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_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);

[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]
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_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_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_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();

