aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Cary Clark <caryclark@skia.org>2017-11-27 10:44:06 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-11-27 16:12:56 +0000
commita560c4796f5b83a2e55cf564dc847ad6498164b0 (patch)
tree1e47f0055e1a19621046ecbc601e999e67c34465
parent56536c42f561f6d8902703a33cf178deb91f9d4d (diff)
bookmaker refresh
Add support for more operator overloads. Add SkSurface, SkPoint, SkIPoint, SkIPoint16 docs. (SkImage doc skeleton added, but not really started.) Force recompile all examples. Docs-Preview: https://skia.org/?cl=67726 Bug: skia:6898 Change-Id: If9e2d23f79d5db64146dd22588f5cac970614b8a Reviewed-on: https://skia-review.googlesource.com/67726 Commit-Queue: Cary Clark <caryclark@google.com> Reviewed-by: Cary Clark <caryclark@google.com>
-rw-r--r--BUILD.gn1
-rw-r--r--docs/SkBitmap_Reference.bmh77
-rw-r--r--docs/SkCanvas_Reference.bmh129
-rw-r--r--docs/SkIPoint16_Reference.bmh134
-rw-r--r--docs/SkIPoint_Reference.bmh452
-rw-r--r--docs/SkImage_Reference.bmh1334
-rw-r--r--docs/SkMatrix_Reference.bmh8
-rw-r--r--docs/SkPaint_Reference.bmh31
-rw-r--r--docs/SkPath_Reference.bmh14
-rw-r--r--docs/SkPoint_Reference.bmh1251
-rw-r--r--docs/SkRect_Reference.bmh4
-rw-r--r--docs/SkSurface_Reference.bmh1601
-rw-r--r--docs/undocumented.bmh285
-rw-r--r--site/user/api/SkBitmap_Reference.md573
-rw-r--r--site/user/api/SkCanvas_Reference.md782
-rw-r--r--site/user/api/SkIPoint16_Reference.md173
-rw-r--r--site/user/api/SkIPoint_Reference.md503
-rw-r--r--site/user/api/SkIRect_Reference.md144
-rw-r--r--site/user/api/SkImage_Reference.md1876
-rw-r--r--site/user/api/SkMatrix_Reference.md602
-rw-r--r--site/user/api/SkPaint_Reference.md438
-rw-r--r--site/user/api/SkPath_Reference.md656
-rw-r--r--site/user/api/SkPixmap_Reference.md251
-rw-r--r--site/user/api/SkPoint_Reference.md1313
-rw-r--r--site/user/api/SkRect_Reference.md226
-rw-r--r--site/user/api/SkSurface_Reference.md1541
-rw-r--r--site/user/api/catalog.htm1186
-rw-r--r--site/user/api/undocumented.md681
-rw-r--r--site/user/api/usingBookmaker.md22
-rw-r--r--tools/bookmaker/bookmaker.cpp975
-rw-r--r--tools/bookmaker/bookmaker.h194
-rw-r--r--tools/bookmaker/definition.cpp1274
-rw-r--r--tools/bookmaker/includeParser.cpp84
-rw-r--r--tools/bookmaker/includeWriter.cpp11
-rw-r--r--tools/bookmaker/mdOut.cpp50
-rw-r--r--tools/bookmaker/parserCommon.cpp28
-rw-r--r--tools/bookmaker/spellCheck.cpp6
37 files changed, 15329 insertions, 3581 deletions
diff --git a/BUILD.gn b/BUILD.gn
index e3cf512079..439f0a80a2 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -1268,6 +1268,7 @@ if (skia_enable_tools) {
sources = [
"tools/bookmaker/bookmaker.cpp",
"tools/bookmaker/cataloger.cpp",
+ "tools/bookmaker/definition.cpp",
"tools/bookmaker/fiddleParser.cpp",
"tools/bookmaker/includeParser.cpp",
"tools/bookmaker/includeWriter.cpp",
diff --git a/docs/SkBitmap_Reference.bmh b/docs/SkBitmap_Reference.bmh
index 7da6797dff..6f65688d2d 100644
--- a/docs/SkBitmap_Reference.bmh
+++ b/docs/SkBitmap_Reference.bmh
@@ -110,7 +110,7 @@ is useful to position one or more Bitmaps within a shared pixel array.
# getPixels # Returns address of pixels. ##
# getSubset # Returns bounds offset by origin. ##
# hasHardwareMipMap # Returns Mip_Map support present; Android only. ##
-# height # Returns pixel row count. ##
+# height() # Returns pixel row count. ##
# info() # Returns Image_Info. ##
# installMaskPixels # Creates Pixel_Ref from Mask. ##
# installPixels # Creates Pixel_Ref, with optional release function. ##
@@ -477,7 +477,7 @@ width: 56 height: 56 color: BGRA_8888 alpha: Opaque
#Method int width() const
-Returns pixel count in each pixel row. Should be equal or less than:
+Returns pixel count in each row. Should be equal or less than:
#Formula
rowBytes() / info().bytesPerPixel()
@@ -1385,7 +1385,6 @@ Color_Space values, rowBytes of zero is treated as imageInfo.minRowBytes.
Calls reset() and returns false if:
#List
# rowBytes exceeds 31 bits ##
-# imageInfo.width() times imageInfo.bytesPerPixel exceeds 31 bits ##
# imageInfo.width() is negative ##
# imageInfo.height() is negative ##
# rowBytes is positive and less than imageInfo.width() times imageInfo.bytesPerPixel ##
@@ -1446,8 +1445,7 @@ Sets Image_Info to info following the rules in setInfo and allocates pixel
memory. If flags is kZeroPixels_AllocFlag, memory is zeroed.
Returns false and calls reset() if Image_Info could not be set, or memory could
-not be allocated, or memory size exceeds 31 bits, or memory could not optionally
-be zeroed.
+not be allocated, or memory could not optionally be zeroed.
On most platforms, allocating pixel memory may succeed even though there is
not sufficient memory to hold pixels; allocation does not take place
@@ -1464,25 +1462,15 @@ eraseColor(SK_ColorTRANSPARENT).
#Return true if pixels allocation is successful ##
#Example
-#Description
-For width of 100,000, height of 100,000, and 4 bytes per pixel, Pixel_Ref
-requires 40,000,000,000 bytes of storage. Allocator implemented
-internally by SkMallocPixelRef::MakeZeroed limits the maximum memory allowed;
-the allocation must fit in 31 bits.
-##
SkBitmap bitmap;
- int loop = 0;
- while (++loop) {
- SkDebugf("attempt %d\n", loop);
- if (!bitmap.tryAllocPixelsFlags(SkImageInfo::MakeN32(100000, 100000, kOpaque_SkAlphaType),
- SkBitmap::kZeroPixels_AllocFlag)) {
- SkDebugf("failed!\n");
- break;
- }
+ if (!bitmap.tryAllocPixelsFlags(SkImageInfo::MakeN32(10000, 10000, kOpaque_SkAlphaType),
+ SkBitmap::kZeroPixels_AllocFlag)) {
+ SkDebugf("bitmap allocation failed!\n");
+ } else {
+ SkDebugf("bitmap allocation succeeded!\n");
}
#StdOut
-attempt 1
-failed!
+bitmap allocation succeeded!
##
##
@@ -1498,7 +1486,7 @@ Sets Image_Info to info following the rules in setInfo and allocates pixel
memory. If flags is kZeroPixels_AllocFlag, memory is zeroed.
Aborts execution if Image_Info could not be set, or memory could
-not be allocated, or memory size exceeds 31 bits, or memory could not optionally
+not be allocated, or memory could not optionally
be zeroed. Abort steps may be provided by the user at compile time by defining
SK_ABORT.
@@ -1593,7 +1581,7 @@ memory. rowBytes must equal or exceed info.width() times info.bytesPerPixel(),
or equal zero. Pass in zero for rowBytes to compute the minimum valid value.
Aborts execution if Image_Info could not be set, or memory could
-not be allocated, or memory size exceeds 31 bits. Abort steps may be provided by
+not be allocated. Abort steps may be provided by
the user at compile time by defining SK_ABORT.
On most platforms, allocating pixel memory may succeed even though there is
@@ -1665,7 +1653,7 @@ Sets Image_Info to info following the rules in setInfo and allocates pixel
memory.
Aborts execution if Image_Info could not be set, or memory could
-not be allocated, or memory size exceeds 31 bits. Abort steps may be provided by
+not be allocated. Abort steps may be provided by
the user at compile time by defining SK_ABORT.
On most platforms, allocating pixel memory may succeed even though there is
@@ -1695,7 +1683,7 @@ for (int y : { 0, 64, 128, 192 } ) {
#Method bool SK_WARN_UNUSED_RESULT tryAllocN32Pixels(int width, int height, bool isOpaque = false)
-Sets Image_Info to width, height, and the native Color_Type; and allocates
+Sets Image_Info to width, height, and Native_Color_Type; and allocates
pixel memory. If isOpaque is true, sets Image_Info to kOpaque_SkAlphaType;
otherwise, sets to kPremul_SkAlphaType.
@@ -1704,8 +1692,8 @@ or height is negative.
Returns false if allocation fails.
-Use to create Bitmap that matches native pixel arrangement on the platform,
-to draw without converting its pixel format.
+Use to create Bitmap that matches SkPMColor, the native pixel arrangement on
+the platform. Bitmap drawn to output device skips converting its pixel format.
#Param width pixel column count; must be zero or greater ##
#Param height pixel row count; must be zero or greater ##
@@ -1736,7 +1724,7 @@ to draw without converting its pixel format.
#Method void allocN32Pixels(int width, int height, bool isOpaque = false)
-Sets Image_Info to width, height, and the native Color_Type; and allocates
+Sets Image_Info to width, height, and the Native_Color_Type; and allocates
pixel memory. If isOpaque is true, sets Image_Info to kPremul_SkAlphaType;
otherwise, sets to kOpaque_SkAlphaType.
@@ -1744,8 +1732,8 @@ Aborts if width exceeds 29 bits or is negative, or height is negative, or
allocation fails. Abort steps may be provided by the user at compile time by
defining SK_ABORT.
-Use to create Bitmap that matches native pixel arrangement on the platform,
-to draw without converting its pixel format.
+Use to create Bitmap that matches SkPMColor, the native pixel arrangement on
+the platform. Bitmap drawn to output device skips converting its pixel format.
#Param width pixel column count; must be zero or greater ##
#Param height pixel row count; must be zero or greater ##
@@ -2004,8 +1992,7 @@ of Bitmap and Pixel_Ref.
Allocates pixel memory with HeapAllocator, and replaces existing Pixel_Ref.
The allocation size is determined by Image_Info width, height, and Color_Type.
-Returns false if info().colorType is kUnknown_SkColorType, or allocation exceeds
-31 bits, or allocation fails.
+Returns false if info().colorType is kUnknown_SkColorType, or allocation fails.
#Return true if the allocation succeeds
##
@@ -2041,8 +2028,8 @@ Pixel_Ref with set1.
Allocates pixel memory with HeapAllocator, and replaces existing Pixel_Ref.
The allocation size is determined by Image_Info width, height, and Color_Type.
-Aborts if info().colorType is kUnknown_SkColorType, or allocation exceeds
-31 bits, or allocation fails. Abort steps may be provided by the user at compile
+Aborts if info().colorType is kUnknown_SkColorType, or allocation fails.
+Abort steps may be provided by the user at compile
time by defining SK_ABORT.
#Example
@@ -3400,17 +3387,17 @@ pixmap contents become invalid on any future change to Bitmap.
}
}
#StdOut
- ------
- --xxx-
- -x--x-
- ----x-
- ---xx-
- --xx--
- --x---
- ------
- --x---
- --x---
- ------
+------
+-xxx--
+x---x-
+----x-
+---x--
+--x---
+--x---
+------
+--x---
+--x---
+------
#StdOut ##
##
diff --git a/docs/SkCanvas_Reference.bmh b/docs/SkCanvas_Reference.bmh
index aec7610739..55dc86ba35 100644
--- a/docs/SkCanvas_Reference.bmh
+++ b/docs/SkCanvas_Reference.bmh
@@ -109,7 +109,7 @@ when no Surface is required, and some helpers implicitly create Raster_Surface.
# drawLine # Draws line segment between two points.##
# drawOval # Draws Oval using Clip, Matrix, and Paint. ##
# drawPaint # Fills Clip with Paint. ##
-# drawPatch # Draws Coons patch. ##
+# drawPatch # Draws Coons_Patch. ##
# drawPath # Draws Path using Clip, Matrix, and Paint. ##
# drawPicture # Draws Picture using Clip and Matrix. ##
# drawPoint # Draws point at (x, y) position. ##
@@ -168,11 +168,11 @@ when no Surface is required, and some helpers implicitly create Raster_Surface.
# ------------------------------------------------------------------------------
-#Method static std::unique_ptr<SkCanvas> MakeRasterDirect(const SkImageInfo& info,
- void* pixels, size_t rowBytes)
+#Method static std::unique_ptr<SkCanvas> MakeRasterDirect(const SkImageInfo& info, void* pixels,
+ size_t rowBytes,
+ const SkSurfaceProps* props = nullptr)
Allocates raster Canvas that will draw directly into pixels.
-To access pixels after drawing, call flush() or peekPixels.
Canvas is returned if all parameters are valid.
Valid parameters include:
@@ -186,6 +186,8 @@ If rowBytes is greater than zero, it must be equal to or greater than
info width times bytes required for Image_Color_Type.
Pixel buffer size should be info height times computed rowBytes.
+Pixels are not initialized.
+To access pixels after drawing, call flush() or peekPixels.
#Param info width, height, Image_Color_Type, Image_Alpha_Type, Color_Space, of Raster_Surface;
width, or height, or both, may be zero
@@ -194,6 +196,9 @@ Pixel buffer size should be info height times computed rowBytes.
##
#Param rowBytes interval from one Surface row to the next, or zero
##
+#Param props LCD striping orientation and setting for device independent fonts;
+ may be nullptr
+##
#Return Canvas if all parameters are valid; otherwise, nullptr ##
@@ -205,7 +210,7 @@ Pixel buffer size should be info height times computed rowBytes.
void draw(SkCanvas* ) {
SkImageInfo info = SkImageInfo::MakeN32Premul(3, 3); // device aligned, 32 bpp, Premultiplied
const size_t minRowBytes = info.minRowBytes(); // bytes used by one bitmap row
- const size_t size = info.getSafeSize(minRowBytes); // bytes used by all rows
+ const size_t size = info.computeMinByteSize(); // bytes used by all rows
SkAutoTMalloc<SkPMColor> storage(size); // allocate storage for pixels
SkPMColor* pixels = storage.get(); // get pointer to allocated storage
// create a SkCanvas backed by a raster device, and delete it when the
@@ -1003,10 +1008,10 @@ Canvas or Surface call may invalidate the pixmap values.
int srcX, int srcY)
Copies Rect of pixels from Canvas into dstPixels. Matrix and Clip are
-ignored. Source Rect corners are (srcX, srcY) and
-(imageInfo().width(), imageInfo().height()).
+ignored.
-Destination Rect corners are (0, 0) and (bitmap.width(), bitmap.height()).
+Source Rect corners are (srcX, srcY) and (imageInfo().width(), imageInfo().height()).
+Destination Rect corners are (0, 0) and (dstInfo.width(), dstInfo.height()).
Copies each readable pixel intersecting both rectangles, without scaling,
converting to dstInfo.colorType() and dstInfo.alphaType() if required.
@@ -1046,7 +1051,7 @@ Does not copy, and returns false if:
#Description
A black circle drawn on a blue background provides an image to copy.
readPixels copies one quarter of the canvas into each of the four corners.
- The Layer draws over the image.
+ The copied quarter circles overdraw the original circle.
##
canvas->clear(SK_ColorBLUE);
SkPaint paint;
@@ -1095,10 +1100,10 @@ Does not copy, and returns false if:
#Method bool readPixels(const SkPixmap& pixmap, int srcX, int srcY)
Copies Rect of pixels from Canvas into pixmap. Matrix and Clip are
-ignored. Source Rect corners are (srcX, srcY) and
-(imageInfo().width(), imageInfo().height()).
+ignored.
-Destination Rect corners are (0, 0) and (bitmap.width(), bitmap.height()).
+Source Rect corners are (srcX, srcY) and (imageInfo().width(), imageInfo().height()).
+Destination Rect corners are (0, 0) and (pixmap.width(), pixmap.height()).
Copies each readable pixel intersecting both rectangles, without scaling,
converting to pixmap.colorType() and pixmap.alphaType() if required.
@@ -1158,9 +1163,9 @@ Does not copy, and returns false if:
#Method bool readPixels(const SkBitmap& bitmap, int srcX, int srcY)
Copies Rect of pixels from Canvas into bitmap. Matrix and Clip are
-ignored. Source Rect corners are (srcX, srcY) and
-(imageInfo().width(), imageInfo().height()).
+ignored.
+Source Rect corners are (srcX, srcY) and (imageInfo().width(), imageInfo().height()).
Destination Rect corners are (0, 0) and (bitmap.width(), bitmap.height()).
Copies each readable pixel intersecting both rectangles, without scaling,
converting to bitmap.colorType() and bitmap.alphaType() if required.
@@ -1583,7 +1588,7 @@ Canvas.
#Height 128
void draw(SkCanvas* canvas) {
SkPaint paint, blur;
- blur.setImageFilter(SkImageFilter::MakeBlur(3, 3, nullptr));
+ blur.setImageFilter(SkBlurImageFilter::Make(3, 3, nullptr));
canvas->saveLayer(nullptr, &blur);
SkRect rect = { 25, 25, 50, 50};
canvas->drawRect(rect, paint);
@@ -1631,7 +1636,7 @@ Image_Filter blurs past edge of Layer so red rectangle is blurred on all sides.
#Height 128
void draw(SkCanvas* canvas) {
SkPaint paint, blur;
- blur.setImageFilter(SkImageFilter::MakeBlur(3, 3, nullptr));
+ blur.setImageFilter(SkBlurImageFilter::Make(3, 3, nullptr));
canvas->saveLayer(SkRect::MakeWH(90, 90), &blur);
SkRect rect = { 25, 25, 50, 50};
canvas->drawRect(rect, paint);
@@ -1753,8 +1758,6 @@ Call restoreToCount with returned value to restore this and subsequent saves.
kInitWithPrevious_SaveLayerFlag = 1 << 2,
kDontClipToLayer_Legacy_SaveLayerFlag = kDontClipToLayer_PrivateSaveLayerFlag,
};
-
- typedef uint32_t SaveLayerFlags;
##
SaveLayerFlags provides options that may be used in any combination in SaveLayerRec,
@@ -1810,6 +1813,10 @@ void draw(SkCanvas* canvas) {
#Enum ##
+#Typedef uint32_t SaveLayerFlags
+
+##
+
#Struct SaveLayerRec
#Code
@@ -4421,7 +4428,7 @@ void draw(SkCanvas* canvas) {
Draw Bitmap bitmap, with its top-left corner at (left, top),
using Clip, Matrix, and optional Paint paint.
-If Paint paint is supplied, apply Color_Filter, Color_Alpha, Image_Filter,
+If Paint paint is not nullptr, apply Color_Filter, Color_Alpha, Image_Filter,
Blend_Mode, and Draw_Looper. If bitmap is kAlpha_8_SkColorType, apply Shader.
If paint contains Mask_Filter, generate mask from bitmap bounds.
@@ -5608,12 +5615,12 @@ void draw(SkCanvas* canvas) {
#Method void drawPatch(const SkPoint cubics[12], const SkColor colors[4],
const SkPoint texCoords[4], SkBlendMode mode, const SkPaint& paint)
-Draws a Coons patch: the interpolation of four cubics with shared corners,
+Draws a Coons_Patch: the interpolation of four cubics with shared corners,
associating a color, and optionally a texture coordinate, with each corner.
-The Coons patch uses Clip and Matrix, paint Shader, Color_Filter,
+Coons_Patch uses Clip and Matrix, paint Shader, Color_Filter,
Color_Alpha, Image_Filter, and Blend_Mode. If Shader is provided it is treated
-as the Coons patch texture; Blend_Mode mode combines Color colors and Shader if
+as Coons_Patch texture; Blend_Mode mode combines Color colors and Shader if
both are provided.
Point array cubics specifies four Cubics starting at the top-left corner,
@@ -5667,12 +5674,12 @@ void draw(SkCanvas* canvas) {
#Method void drawPatch(const SkPoint cubics[12], const SkColor colors[4],
const SkPoint texCoords[4], const SkPaint& paint)
-Draws Cubic Coons patch: the interpolation of four cubics with shared corners,
+Draws Cubic Coons_Patch: the interpolation of four cubics with shared corners,
associating a color, and optionally a texture coordinate, with each corner.
-The Coons patch uses Clip and Matrix, paint Shader, Color_Filter,
+Coons_Patch uses Clip and Matrix, paint Shader, Color_Filter,
Color_Alpha, Image_Filter, and Blend_Mode. If Shader is provided it is treated
-as the Coons patch texture; Blend_Mode mode combines Color colors and Shader if
+as Coons_Patch texture; Blend_Mode mode combines Color colors and Shader if
both are provided.
Point array cubics specifies four Cubics starting at the top-left corner,
@@ -6141,17 +6148,17 @@ Preserves Canvas save count. Optionally saves Canvas Clip and Matrix.
#Example
#Height 128
- SkPaint p;
- p.setAntiAlias(true);
- p.setTextSize(64);
- for (SkScalar sx : { -1, 1 } ) {
- for (SkScalar sy : { -1, 1 } ) {
- SkAutoCanvasRestore autoRestore(canvas, true);
- SkMatrix m = SkMatrix::MakeAll(sx, 1, 96, 0, sy, 64, 0, 0, 1);
- canvas->concat(m);
- canvas->drawString("R", 0, 0, p);
- }
- }
+ SkPaint p;
+ p.setAntiAlias(true);
+ p.setTextSize(64);
+ for (SkScalar sx : { -1, 1 } ) {
+ for (SkScalar sy : { -1, 1 } ) {
+ SkAutoCanvasRestore autoRestore(canvas, true);
+ SkMatrix m = SkMatrix::MakeAll(sx, 1, 96, 0, sy, 64, 0, 0, 1);
+ canvas->concat(m);
+ canvas->drawString("R", 0, 0, p);
+ }
+ }
##
#SeeAlso SkCanvas::save SkCanvas::restore
@@ -6176,31 +6183,31 @@ Restores Canvas to saved state immediately. Subsequent calls and
~SkAutoCanvasRestore have no effect.
#Example
-for (bool callRestore : { false, true } ) {
- for (bool saveCanvas : {false, true} ) {
- SkAutoCanvasRestore autoRestore(canvas, saveCanvas);
- if (!saveCanvas) {
- canvas->save();
- }
- SkDebugf("saveCanvas: %s before restore: %d\n",
- saveCanvas ? "true" : "false", canvas->getSaveCount());
- if (callRestore) autoRestore.restore();
- SkDebugf("saveCanvas: %s after restore: %d\n",
- saveCanvas ? "true" : "false", canvas->getSaveCount());
- }
-}
-SkDebugf("final count: %d\n", canvas->getSaveCount());
-#StdOut
-saveCanvas: false before restore: 2
-saveCanvas: false after restore: 2
-saveCanvas: true before restore: 2
-saveCanvas: true after restore: 2
-saveCanvas: false before restore: 2
-saveCanvas: false after restore: 1
-saveCanvas: true before restore: 2
-saveCanvas: true after restore: 1
-final count: 1
-##
+for (bool callRestore : { false, true } ) {
+ for (bool saveCanvas : {false, true} ) {
+ SkAutoCanvasRestore autoRestore(canvas, saveCanvas);
+ if (!saveCanvas) {
+ canvas->save();
+ }
+ SkDebugf("saveCanvas: %s before restore: %d\n",
+ saveCanvas ? "true" : "false", canvas->getSaveCount());
+ if (callRestore) autoRestore.restore();
+ SkDebugf("saveCanvas: %s after restore: %d\n",
+ saveCanvas ? "true" : "false", canvas->getSaveCount());
+ }
+}
+SkDebugf("final count: %d\n", canvas->getSaveCount());
+#StdOut
+saveCanvas: false before restore: 2
+saveCanvas: false after restore: 2
+saveCanvas: true before restore: 2
+saveCanvas: true after restore: 2
+saveCanvas: false before restore: 2
+saveCanvas: false after restore: 1
+saveCanvas: true before restore: 2
+saveCanvas: true after restore: 1
+final count: 1
+##
##
#SeeAlso SkCanvas::save SkCanvas::restore
diff --git a/docs/SkIPoint16_Reference.bmh b/docs/SkIPoint16_Reference.bmh
new file mode 100644
index 0000000000..b5c3cfee99
--- /dev/null
+++ b/docs/SkIPoint16_Reference.bmh
@@ -0,0 +1,134 @@
+#Topic IPoint16
+#Alias IPoint16_Reference
+
+#Struct SkIPoint16
+
+SkIPoint holds two 16 bit integer coordinates
+
+#Topic Overview
+
+#Subtopic Subtopics
+#ToDo manually add subtopics ##
+#Table
+#Legend
+# topics # description ##
+#Legend ##
+#Table ##
+##
+
+#Subtopic Member_Functions
+#Table
+#Legend
+# description # function ##
+#Legend ##
+# Make # Constructs from integer inputs. ##
+# set() # Sets to integer input. ##
+# x() # Returns fX. ##
+# y() # Returns fY. ##
+#Table ##
+#Subtopic ##
+
+#Topic ##
+
+#Member int16_t fX
+x-axis value used by IPoint16.
+##
+
+#Member int16_t fY
+y-axis value used by IPoint16.
+##
+
+# ------------------------------------------------------------------------------
+
+#Method static constexpr SkIPoint16 Make(int x, int y)
+
+Sets fX to x, fY to y. If SK_DEBUG is defined, asserts
+if x or y does not fit in 16 bits.
+
+#Param x integer x-axis value of constructed IPoint ##
+#Param y integer y-axis value of constructed IPoint ##
+
+#Return IPoint16 (x, y) ##
+
+#Example
+SkIPoint16 pt1 = {45, 66};
+SkIPoint16 pt2 = SkIPoint16::Make(45, 66);
+SkDebugf("pt1.fX %c= pt2.fX\n", pt1.fX == pt2.fX ? '=' : '!');
+SkDebugf("pt1.fY %c= pt2.fY\n", pt1.fY == pt2.fY ? '=' : '!');
+#StdOut
+pt1.fX == pt2.fX
+pt1.fY == pt2.fY
+##
+##
+
+#SeeAlso set() SkPoint::iset() SkIPoint::Make
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method int16_t x() const
+
+Returns x-axis value of IPoint16.
+
+#Return fX ##
+
+#Example
+SkIPoint16 pt1 = {45, 66};
+SkDebugf("pt1.fX %c= pt1.x()\n", pt1.fX == pt1.x() ? '=' : '!');
+#StdOut
+pt1.fX == pt1.x()
+##
+##
+
+#SeeAlso y() SkIPoint::x()
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method int16_t y() const
+
+Returns y-axis value of IPoint.
+
+#Return fY ##
+
+#Example
+SkIPoint16 pt1 = {45, 66};
+SkDebugf("pt1.fY %c= pt1.y()\n", pt1.fY == pt1.y() ? '=' : '!');
+#StdOut
+pt1.fY == pt1.y()
+##
+##
+
+#SeeAlso x() SkPoint::y() SkIPoint::y()
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method void set(int x, int y)
+
+Sets fX to x and fY to y.
+
+#Param x new value for fX ##
+#Param y new value for fY ##
+
+#Example
+SkIPoint16 pt1, pt2 = { SK_MinS16, SK_MaxS16 };
+pt1.set(SK_MinS16, SK_MaxS16);
+SkDebugf("pt1.fX %c= pt2.fX\n", pt1.fX == pt2.fX ? '=' : '!');
+SkDebugf("pt1.fY %c= pt2.fY\n", pt1.fY == pt2.fY ? '=' : '!');
+#StdOut
+pt1.fX == pt2.fX
+pt1.fY == pt2.fY
+##
+##
+
+#SeeAlso Make SkPoint::set
+
+#Method ##
+
+#Struct SkIPoint16 ##
+
+#Topic IPoint16 ##
diff --git a/docs/SkIPoint_Reference.bmh b/docs/SkIPoint_Reference.bmh
new file mode 100644
index 0000000000..178a14f2c3
--- /dev/null
+++ b/docs/SkIPoint_Reference.bmh
@@ -0,0 +1,452 @@
+#Topic IPoint
+#Alias IPoints
+#Alias IPoint_Reference
+
+#Struct SkIPoint
+
+SkIPoint holds two 32 bit integer coordinates
+
+#Topic Overview
+
+#Subtopic Subtopics
+#ToDo manually add subtopics ##
+#Table
+#Legend
+# topics # description ##
+#Legend ##
+#Table ##
+##
+
+#Subtopic Operators
+#Table
+#Legend
+# description # function ##
+#Legend ##
+# SkIPoint operator-()_const # Reverses sign of IPoint. ##
+# SkIPoint operator+(const SkIPoint& a, const SkIVector& b) # Returns IPoint offset by IVector. ##
+# SkIVector operator-(const SkIPoint& a, const SkIPoint& b) # Returns IVector between IPoints. ##
+# bool operator!=(const SkIPoint& a, const SkIPoint& b) # Returns true if IPoints are unequal. ##
+# bool operator==(const SkIPoint& a, const SkIPoint& b) # Returns true if IPoints are equal. ##
+# void operator+=(const SkIVector& v) # Adds IVector to IPoint. ##
+# void operator-=(const SkIVector& v) # Subtracts IVector from IPoint. ##
+#Table ##
+#Subtopic ##
+
+#Subtopic Member_Functions
+#Table
+#Legend
+# description # function ##
+#Legend ##
+# Make # Constructs from integer inputs. ##
+# equals() # Returns true if members are equal. ##
+# isZero # Returns true if both members equal zero. ##
+# set() # Sets to integer input. ##
+# x() # Returns fX. ##
+# y() # Returns fY. ##
+#Table ##
+#Subtopic ##
+
+#Topic ##
+
+#Member int32_t fX
+x-axis value used by IPoint.
+##
+
+#Member int32_t fY
+y-axis value used by IPoint.
+##
+
+# ------------------------------------------------------------------------------
+
+#Method static constexpr SkIPoint Make(int32_t x, int32_t y)
+
+Sets fX to x, fY to y.
+
+#Param x integer x-axis value of constructed IPoint ##
+#Param y integer y-axis value of constructed IPoint ##
+
+#Return IPoint (x, y) ##
+
+#Example
+SkIPoint pt1 = {45, 66};
+SkIPoint pt2 = SkIPoint::Make(45, 66);
+SkDebugf("pt1 %c= pt2\n", pt1 == pt2 ? '=' : '!');
+#StdOut
+pt1 == pt2
+##
+##
+
+#SeeAlso set() SkPoint::iset() SkPoint::Make SkIPoint16::Make
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method int32_t x() const
+
+Returns x-axis value of IPoint.
+
+#Return fX ##
+
+#Example
+SkIPoint pt1 = {45, 66};
+SkDebugf("pt1.fX %c= pt1.x()\n", pt1.fX == pt1.x() ? '=' : '!');
+#StdOut
+pt1.fX == pt1.x()
+##
+##
+
+#SeeAlso y() SkPoint::x() SkIPoint16::x()
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method int32_t y() const
+
+Returns y-axis value of IPoint.
+
+#Return fY ##
+
+#Example
+SkIPoint pt1 = {45, 66};
+SkDebugf("pt1.fY %c= pt1.y()\n", pt1.fY == pt1.y() ? '=' : '!');
+#StdOut
+pt1.fY == pt1.y()
+##
+##
+
+#SeeAlso x() SkPoint::y() SkIPoint16::y()
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool isZero() const
+
+Returns true if fX and fY are both zero.
+
+#Return true if fX is zero and fY is zero ##
+
+#Example
+SkIPoint pt = { 0, -0};
+SkDebugf("pt.isZero() == %s\n", pt.isZero() ? "true" : "false");
+#StdOut
+pt.isZero() == true
+##
+##
+
+#SeeAlso SkPoint::isZero
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method void set(int32_t x, int32_t y)
+
+Sets fX to x and fY to y.
+
+#Param x new value for fX ##
+#Param y new value for fY ##
+
+#Example
+SkIPoint pt1, pt2 = { SK_MinS32, SK_MaxS32 };
+pt1.set(SK_MinS32, SK_MaxS32);
+SkDebugf("pt1 %c= pt2\n", pt1 == pt2 ? '=' : '!');
+#StdOut
+pt1 == pt2
+##
+##
+
+#SeeAlso Make SkIPoint16::set
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method SkIPoint operator-()_const
+
+Returns IPoint changing the signs of fX and fY.
+
+#Return IPoint as (-fX, -fY) ##
+
+#Example
+SkIPoint test[] = { {0, -0}, {-1, -2},
+ { SK_MaxS32, SK_MinS32 },
+ { SK_NaN32, -SK_NaN32 } };
+for (const SkIPoint& pt : test) {
+ SkIPoint negPt = -pt;
+ SkDebugf("pt: %d, %d negate: %d, %d\n", pt.fX, pt.fY, negPt.fX, negPt.fY);
+}
+#StdOut
+pt: 0, 0 negate: 0, 0
+pt: -1, -2 negate: 1, 2
+pt: 2147483647, -2147483647 negate: -2147483647, 2147483647
+pt: -2147483648, -2147483648 negate: -2147483648, -2147483648
+##
+##
+
+#SeeAlso operator-(const SkIPoint& a, const SkIPoint& b) operator-=(const SkIVector& v) SkPoint::operator-()_const
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method void operator+=(const SkIVector& v)
+
+Offsets IPoint by IVector v. Sets IPoint to
+#Formula
+(fX + v.fX, fY + v.fY)
+##
+.
+
+#Param v IVector to add ##
+
+#Example
+#Height 64
+ auto draw_lines = [=](const SkIPoint pts[], size_t count, SkPaint& paint) -> void {
+ for (size_t i = 0; i < count - 1; ++i) {
+ SkPoint p0, p1;
+ p0.iset(pts[i]);
+ p1.iset(pts[i + 1]);
+ canvas->drawLine(p0, p1, paint);
+ }
+ };
+ SkIPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 } };
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ paint.setStyle(SkPaint::kStroke_Style);
+ canvas->scale(30, 15);
+ draw_lines(points, SK_ARRAY_COUNT(points), paint);
+ points[1] += {1, 1};
+ points[2] += {-1, -1};
+ paint.setColor(SK_ColorRED);
+ draw_lines(points, SK_ARRAY_COUNT(points), paint);
+##
+
+#SeeAlso operator+(const SkIPoint& a, const SkIVector& b) SkPoint::operator+=(const SkVector& v)
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method void operator-=(const SkIVector& v)
+
+Subtracts IVector v from IPoint. Sets IPoint to:
+#Formula
+(fX - v.fX, fY - v.fY)
+##
+.
+
+#Param v IVector to subtract ##
+
+#Example
+#Height 64
+ auto draw_lines = [=](const SkIPoint pts[], size_t count, SkPaint& paint) -> void {
+ for (size_t i = 0; i < count - 1; ++i) {
+ SkPoint p0, p1;
+ p0.iset(pts[i]);
+ p1.iset(pts[i + 1]);
+ canvas->drawLine(p0, p1, paint);
+ }
+ };
+ SkIPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 } };
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ paint.setStyle(SkPaint::kStroke_Style);
+ canvas->scale(30, 15);
+ draw_lines(points, SK_ARRAY_COUNT(points), paint);
+ points[1] -= {1, 1};
+ points[2] -= {-1, -1};
+ paint.setColor(SK_ColorRED);
+ draw_lines(points, SK_ARRAY_COUNT(points), paint);
+##
+
+#SeeAlso operator-(const SkIPoint& a, const SkIPoint& b) SkPoint::operator-=(const SkVector& v)
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool equals(int32_t x, int32_t y) const
+
+Returns true if IPoint is equivalent to IPoint constructed from (x, y).
+
+#Param x value compared with fX ##
+#Param y value compared with fY ##
+
+#Return true if IPoint equals (x, y) ##
+
+#Example
+SkIPoint test[] = { {0, -0}, {-1, -2}, {SK_MaxS32, -1}, {SK_NaN32, -1} };
+for (const SkIPoint& pt : test) {
+ SkDebugf("pt: %d, %d %c= pt\n", pt.fX, pt.fY, pt.equals(pt.fX, pt.fY) ? '=' : '!');
+}
+#StdOut
+pt: 0, 0 == pt
+pt: -1, -2 == pt
+pt: 2147483647, -1 == pt
+pt: -2147483648, -1 == pt
+##
+##
+
+#SeeAlso operator==(const SkIPoint& a, const SkIPoint& b)
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool operator==(const SkIPoint& a, const SkIPoint& b)
+
+Returns true if a is equivalent to b.
+
+#Param a IPoint to compare ##
+#Param b IPoint to compare ##
+
+#Return true if a.fX == b.fX and a.fY == b.fY ##
+
+#Example
+SkIPoint test[] = { {0, -0}, {-1, -2}, {SK_MaxS32, -1}, {SK_NaN32, -1} };
+for (const SkIPoint& pt : test) {
+ SkDebugf("pt: %d, %d %c= pt\n", pt.fX, pt.fY, pt == pt ? '=' : '!');
+}
+#StdOut
+pt: 0, 0 == pt
+pt: -1, -2 == pt
+pt: 2147483647, -1 == pt
+pt: -2147483648, -1 == pt
+##
+##
+
+#SeeAlso equals() operator!=(const SkIPoint& a, const SkIPoint& b)
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool operator!=(const SkIPoint& a, const SkIPoint& b)
+
+Returns true if a is not equivalent to b.
+
+#Param a IPoint to compare ##
+#Param b IPoint to compare ##
+
+#Return true if a.fX != b.fX or a.fY != b.fY ##
+
+#Example
+SkIPoint test[] = { {0, -0}, {-1, -2}, {SK_MaxS32, -1}, {SK_NaN32, -1} };
+for (const SkIPoint& pt : test) {
+ SkDebugf("pt: %d, %d %c= pt\n", pt.fX, pt.fY, pt != pt ? '!' : '=');
+}
+#StdOut
+pt: 0, 0 == pt
+pt: -1, -2 == pt
+pt: 2147483647, -1 == pt
+pt: -2147483648, -1 == pt
+##
+##
+
+#SeeAlso operator==(const SkIPoint& a, const SkIPoint& b) equals()
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method SkIVector operator-(const SkIPoint& a, const SkIPoint& b)
+
+Returns IVector from b to a; computed as
+#Formula
+(a.fX - b.fX, a.fY - b.fY)
+##
+.
+
+Can also be used to subtract IVector from IVector, returning IVector.
+
+#Param a IPoint or IVector to subtract from ##
+#Param b IVector to subtract ##
+
+#Return IVector from b to a ##
+
+#Example
+#Height 64
+ auto draw_lines = [=](const SkIPoint pts[], size_t count, SkPaint& paint) -> void {
+ for (size_t i = 0; i < count - 1; ++i) {
+ SkPoint p0, p1;
+ p0.iset(pts[i]);
+ p1.iset(pts[i + 1]);
+ canvas->drawLine(p0, p1, paint);
+ }
+ };
+ SkIPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 } };
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ paint.setStyle(SkPaint::kStroke_Style);
+ canvas->scale(30, 15);
+ draw_lines(points, SK_ARRAY_COUNT(points), paint);
+ points[1] += points[0] - points[3];
+ points[2] -= points[1] - points[0];
+ paint.setColor(SK_ColorRED);
+ draw_lines(points, SK_ARRAY_COUNT(points), paint);
+##
+
+#SeeAlso operator-=(const SkIVector& v)
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method SkIPoint operator+(const SkIPoint& a, const SkIVector& b)
+
+Returns IPoint resulting from IPoint a offset by IVector b, computed as:
+#Formula
+(a.fX + b.fX, a.fY + b.fY)
+##
+.
+
+Can also be used to offset IPoint b by IVector a, returning IPoint.
+Can also be used to add IVector to IVector, returning IVector.
+
+#Param a IPoint or IVector to add to ##
+#Param b IPoint or IVector to add ##
+
+#Return IPoint equal to a offset by b ##
+
+#Example
+#Height 128
+ auto draw_lines = [=](const SkIPoint pts[], size_t count, SkPaint& paint) -> void {
+ for (size_t i = 0; i < count - 1; ++i) {
+ SkPoint p0, p1;
+ p0.iset(pts[i]);
+ p1.iset(pts[i + 1]);
+ canvas->drawLine(p0, p1, paint);
+ }
+ };
+ SkIPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 } };
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ paint.setStyle(SkPaint::kStroke_Style);
+ canvas->scale(30, 15);
+ draw_lines(points, SK_ARRAY_COUNT(points), paint);
+ SkIPoint mod = {4, 1};
+ for (auto& point : points) {
+ point = point + mod;
+ mod.fX -= 1;
+ mod.fY += 1;
+ }
+ paint.setColor(SK_ColorRED);
+ draw_lines(points, SK_ARRAY_COUNT(points), paint);
+##
+
+#SeeAlso operator+=(const SkIVector& v)
+
+#Method ##
+
+#Struct SkIPoint ##
+
+#Topic IPoint ##
+
+#Topic IVector
+ #Alias IVectors
+ #Typedef SkIPoint SkIVector
+ #Typedef ##
+##
diff --git a/docs/SkImage_Reference.bmh b/docs/SkImage_Reference.bmh
new file mode 100644
index 0000000000..05d38ff522
--- /dev/null
+++ b/docs/SkImage_Reference.bmh
@@ -0,0 +1,1334 @@
+#Topic Image
+#Alias Image_Reference
+
+#Class SkImage
+
+SkImage is an abstraction for drawing a rectangle of pixels, though the
+particular type of image could be actually storing its data on the GPU, or
+as drawing commands (picture or PDF or otherwise), ready to be played back
+into another canvas.
+The content of SkImage is always immutable, though the actual storage may
+change, if for example that image can be re-created via encoded data or
+other means.
+SkImage always has a non-zero dimensions. If there is a request to create a new
+image, either directly or via SkSurface, and either of the requested dimensions
+are zero, then nullptr will be returned.
+
+#Topic Overview
+
+#Subtopic Subtopics
+#ToDo manually add subtopics ##
+#Table
+#Legend
+# topics # description ##
+#Legend ##
+#Table ##
+##
+
+#Subtopic Structs
+#Table
+#Legend
+# description # struct ##
+#Legend ##
+# DeferredTextureImageUsageParams # ##
+#Table ##
+#Subtopic ##
+
+#Subtopic Member_Functions
+#Table
+#Legend
+# description # function ##
+#Legend ##
+# MakeFromAHardwareBuffer # ##
+# MakeBackendTextureFromSkImage # ##
+# MakeCrossContextFromEncoded # ##
+# MakeFromAHardwareBuffer # ##
+# MakeFromAdoptedTexture # ##
+# MakeFromBitmap # ##
+# MakeFromDeferredTextureImageData # ##
+# MakeFromEncoded # ##
+# MakeFromGenerator # ##
+# MakeFromNV12TexturesCopy # ##
+# MakeFromPicture # ##
+# MakeFromRaster # ##
+# MakeFromTexture # ##
+# MakeFromYUVTexturesCopy # ##
+# MakeRasterCopy # ##
+# MakeRasterData # ##
+# alphaType # ##
+# asLegacyBitmap # ##
+# bounds # ##
+# colorSpace # ##
+# dimensions # ##
+# encodeToData # ##
+# getDeferredTextureImageData # ##
+# getTexture # ##
+# getTextureHandle # ##
+# height # ##
+# isAlphaOnly # ##
+# isLazyGenerated # ##
+# isOpaque # ##
+# isTextureBacked # ##
+# isValid # ##
+# makeColorSpace # ##
+# makeNonTextureImage # ##
+# makeShader # ##
+# makeSubset # ##
+# makeTextureImage # ##
+# makeWithFilter # ##
+# peekPixels # ##
+# readPixels # ##
+# refColorSpace # ##
+# refEncodedData # ##
+# scalePixels # ##
+# toString # ##
+# uniqueID # ##
+# width # ##
+#Table ##
+#Subtopic ##
+
+#Topic ##
+
+# ------------------------------------------------------------------------------
+
+#Struct DeferredTextureImageUsageParams
+
+#Code
+#ToDo fill this in manually ##
+##
+
+Drawing parameters for which a deferred texture image data should be optimized. */
+
+# ------------------------------------------------------------------------------
+
+#Method DeferredTextureImageUsageParams(const SkMatrix matrix, const SkFilterQuality quality,
+ int preScaleMipLevel)
+
+#Param matrix incomplete ##
+#Param quality incomplete ##
+#Param preScaleMipLevel incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+#Member SkMatrix fMatrix
+##
+
+#Member SkFilterQuality fQuality
+##
+
+#Member int fPreScaleMipLevel
+##
+
+#Struct DeferredTextureImageUsageParams ##
+
+#Typedef SkImageInfo Info
+
+##
+
+#Typedef void* ReleaseContext
+
+##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkImage> MakeRasterCopy(const SkPixmap& pixmap)
+
+#Param pixmap incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkImage> MakeRasterData(const Info& info, sk_sp<SkData> pixels, size_t rowBytes)
+
+#Param info incomplete ##
+#Param pixels incomplete ##
+#Param rowBytes incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Typedef void (*RasterReleaseProc)(const void* pixels, ReleaseContext)
+
+##
+
+#Method static sk_sp<SkImage> MakeFromRaster(const SkPixmap& pixmap,
+ RasterReleaseProc rasterReleaseProc,
+ ReleaseContext releaseContext)
+
+Return a new Image referencing the specified pixels. These must remain valid and unchanged
+until the specified release-proc is called, indicating that Skia no longer has a reference
+to the pixels.
+Returns nullptr if the requested pixmap info is unsupported.
+
+#Param pixmap incomplete ##
+#Param rasterReleaseProc incomplete ##
+#Param releaseContext incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkImage> MakeFromBitmap(const SkBitmap& bitmap)
+
+Construct a new image from the specified bitmap. If the bitmap is marked immutable, and
+its pixel memory is shareable, it may be shared instead of copied.
+
+#Param bitmap incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkImage> MakeFromGenerator(std::unique_ptr<SkImageGenerator> imageGenerator,
+ const SkIRect* subset = nullptr)
+
+Construct a new SkImage based on the given ImageGenerator. Returns nullptr on error.
+This function will always take ownership of the passed generator.
+If a subset is specified, it must be contained within the generator's bounds.
+
+#Param imageGenerator incomplete ##
+#Param subset incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkImage> MakeFromEncoded(sk_sp<SkData> encoded, const SkIRect* subset = nullptr)
+
+Construct a new SkImage based on the specified encoded data. Returns nullptr on failure,
+which can mean that the format of the encoded data was not recognized/supported.
+If a subset is specified, it must be contained within the encoded data's bounds.
+
+#Param encoded incomplete ##
+#Param subset incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Typedef void (*TextureReleaseProc)(ReleaseContext releaseContext)
+
+##
+
+#Method static sk_sp<SkImage> MakeFromTexture(GrContext* context,
+ const GrBackendTexture& backendTexture,
+ GrSurfaceOrigin origin,
+ SkAlphaType alphaType,
+ sk_sp<SkColorSpace> colorSpace)
+
+Create a new image from the specified descriptor. Note - the caller is responsible for
+managing the lifetime of the underlying platform texture.
+Will return nullptr if the specified back-end texture is unsupported.
+
+#Param context incomplete ##
+#Param backendTexture incomplete ##
+#Param origin incomplete ##
+#Param alphaType incomplete ##
+#Param colorSpace incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkImage> MakeFromTexture(GrContext* context,
+ const GrBackendTexture& backendTexture,
+ GrSurfaceOrigin origin,
+ SkAlphaType alphaType,
+ sk_sp<SkColorSpace> colorSpace,
+ TextureReleaseProc textureReleaseProc,
+ ReleaseContext releaseContext)
+
+Create a new image from the GrBackendTexture. The underlying platform texture must stay
+valid and unaltered until the specified release-proc is invoked, indicating that Skia
+no longer is holding a reference to it.
+Will return nullptr if the specified back-end texture is unsupported.
+
+#Param context incomplete ##
+#Param backendTexture incomplete ##
+#Param origin incomplete ##
+#Param alphaType incomplete ##
+#Param colorSpace incomplete ##
+#Param textureReleaseProc incomplete ##
+#Param releaseContext incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkImage> MakeCrossContextFromEncoded(GrContext* context, sk_sp<SkData> data,
+ bool buildMips,
+ SkColorSpace* dstColorSpace)
+
+Decodes and uploads the encoded data to a GPU backed image using the supplied GrContext.
+That image can be safely used by other GrContexts, across thread boundaries. The GrContext
+used here, and the ones used to draw this image later must be in the same OpenGL share group,
+or otherwise be able to share resources.
+When the image's ref count reaches zero, the original GrContext will destroy the texture,
+asynchronously.
+The texture will be decoded and uploaded to be suitable for use with surfaces that have the
+supplied destination color space. The color space of the image itself will be determined
+from the encoded data.
+
+#Param context incomplete ##
+#Param data incomplete ##
+#Param buildMips incomplete ##
+#Param dstColorSpace incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkImage> MakeFromAdoptedTexture(GrContext* context,
+ const GrBackendTexture& backendTexture,
+ GrSurfaceOrigin surfaceOrigin,
+ SkAlphaType alphaType = kPremul_SkAlphaType,
+ sk_sp<SkColorSpace> colorSpace = nullptr)
+
+Create a new image from the specified descriptor. Note - Skia will delete or recycle the
+texture when the image is released.
+Will return nullptr if the specified back-end texture is unsupported.
+
+#Param context incomplete ##
+#Param backendTexture incomplete ##
+#Param surfaceOrigin incomplete ##
+#Param alphaType incomplete ##
+#Param colorSpace incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkImage> MakeFromYUVTexturesCopy(GrContext* context, SkYUVColorSpace yuvColorSpace,
+ const GrBackendObject yuvTextureHandles[3],
+ const SkISize yuvSizes[3],
+ GrSurfaceOrigin surfaceOrigin,
+ sk_sp<SkColorSpace> colorSpace = nullptr)
+
+Create a new image by copying the pixels from the specified y, u, v textures. The data
+from the textures is immediately ingested into the image and the textures can be modified or
+deleted after the function returns. The image will have the dimensions of the y texture.
+
+#Param context incomplete ##
+#Param yuvColorSpace incomplete ##
+#Param yuvTextureHandles incomplete ##
+#Param yuvSizes incomplete ##
+#Param surfaceOrigin incomplete ##
+#Param colorSpace incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkImage> MakeFromNV12TexturesCopy(GrContext* context,
+ SkYUVColorSpace yuvColorSpace,
+ const GrBackendObject nv12TextureHandles[2],
+ const SkISize nv12Sizes[2],
+ GrSurfaceOrigin surfaceOrigin,
+ sk_sp<SkColorSpace> colorSpace = nullptr)
+
+Create a new image by copying the pixels from the specified y and UV_Mapping. The data
+from the textures is immediately ingested into the image and the textures can be modified or
+deleted after the function returns. The image will have the dimensions of the y texture.
+
+#Param context incomplete ##
+#Param yuvColorSpace incomplete ##
+#Param nv12TextureHandles incomplete ##
+#Param nv12Sizes incomplete ##
+#Param surfaceOrigin incomplete ##
+#Param colorSpace incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Enum BitDepth
+
+#Code
+ enum BitDepth {
+ kU8,
+ kF16,
+ };
+##
+
+#Const kU8 0
+##
+#Const kF16 1
+##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Enum ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkImage> MakeFromPicture(sk_sp<SkPicture> picture, const SkISize& dimensions,
+ const SkMatrix* matrix, const SkPaint* paint,
+ BitDepth bitDepth,
+ sk_sp<SkColorSpace> colorSpace)
+
+Create a new image from the specified picture.
+On creation of the SkImage, snap the SkPicture to a particular BitDepth and SkColorSpace.
+
+#Param picture incomplete ##
+#Param dimensions incomplete ##
+#Param matrix incomplete ##
+#Param paint incomplete ##
+#Param bitDepth incomplete ##
+#Param colorSpace incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkImage> MakeFromAHardwareBuffer(AHardwareBuffer* hardwareBuffer,
+ SkAlphaType alphaType = kPremul_SkAlphaType,
+ sk_sp<SkColorSpace> colorSpace = nullptr)
+
+ Create a new image from the an Android hardware buffer.
+ The new image takes a reference on the buffer.
+
+ Only available on Android, when __ANDROID_API__ is defined to be 26 or greater.
+
+#Param hardwareBuffer incomplete ##
+#Param alphaType incomplete ##
+#Param colorSpace incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkImage> MakeFromAHardwareBuffer(AHardwareBuffer* hardwareBuffer,
+ SkAlphaType alphaType = kPremul_SkAlphaType,
+ sk_sp<SkColorSpace> colorSpace = nullptr)
+
+Create a new image from the an Android hardware buffer.
+The new image takes a reference on the buffer.
+
+#Param hardwareBuffer incomplete ##
+#Param alphaType incomplete ##
+#Param colorSpace incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method int width() const
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method int height() const
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method SkISize dimensions() const
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method SkIRect bounds() const
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method uint32_t uniqueID() const
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method SkAlphaType alphaType() const
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method SkColorSpace* colorSpace() const
+
+Returns Color_Space of Image. Color_Space may have been a parameter when
+Image was created, or may have been parsed from encoded data. Skia may not be
+able to draw image respecting returned Color_Space or draw into Surface with
+returned Color_Space.
+
+#Return Color_Space Image was created with, or nullptr ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method sk_sp<SkColorSpace> refColorSpace() const
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool isAlphaOnly() const
+
+Returns true fi the image will be drawn as a mask, with no intrinsic color of its own.
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool isOpaque() const
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method sk_sp<SkShader> makeShader(SkShader::TileMode tileMode1, SkShader::TileMode tileMode2,
+ const SkMatrix* localMatrix = nullptr) const
+
+#Param tileMode1 incomplete ##
+#Param tileMode2 incomplete ##
+#Param localMatrix incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method sk_sp<SkShader> makeShader(const SkMatrix* localMatrix = nullptr) const
+
+Helper version of makeShader() that specifies SkShader::kClamp_TileMode.
+
+#Param localMatrix incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool peekPixels(SkPixmap* pixmap) const
+
+If the image has direct access to its pixels (i.e. they are in local RAM)
+return true, and if not null, return in the pixmap parameter the info about the
+images pixels.
+On failure, return false and ignore the pixmap parameter.
+
+#Param pixmap incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method GrTexture* getTexture() const
+
+DEPRECATED -
+#Private
+currently used by Canvas2DLayerBridge in Chromium.
+##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool isTextureBacked() const
+
+Returns true if the image is texture backed.
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool isValid(GrContext* context) const
+
+Returns true if Image can be drawn. If context
+is nullptr, tests if Image draws on Raster_Surface; Otherwise, tests if Image
+draws on GPU_Surface associated with context.
+
+Texture-backed images may become invalid if their underlying GrContext is abandoned. Some
+generator-backed images may be invalid for CPU and/or GPU.
+
+#Param context incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method GrBackendObject getTextureHandle(bool flushPendingGrContextIO,
+ GrSurfaceOrigin* origin = nullptr) const
+
+Retrieves the back-end API handle of the texture. If flushPendingGrContextIO then the
+GrContext will issue to the back-end API any deferred I/O operations on the texture before
+returning.
+If 'origin' is supplied it will be filled in with the origin of the content drawn
+into the image.
+
+#Param flushPendingGrContextIO incomplete ##
+#Param origin incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Enum CachingHint
+
+#Code
+ enum CachingHint {
+ kAllow_CachingHint,
+ kDisallow_CachingHint,
+ };
+##
+
+Hints to image calls where the system might cache computed intermediates (e.g. the results
+of decoding or a read-back from the GPU. Passing kAllow_CachingHint signals that the system's default
+behavior is fine. Passing kDisallow_CachingHint signals that caching should be avoided.
+
+#Const kAllow_CachingHint 0
+##
+#Const kDisallow_CachingHint 1
+##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Enum ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes,
+ int srcX, int srcY, CachingHint cachingHint = kAllow_CachingHint) const
+
+Copy the pixels from the image into the specified buffer (dstPixels + dstRowBytes),
+converting them into the requested format (dstInfo). The image pixels are read
+starting at the specified (srcX, srcY) location.
+dstInfo and (srcX, srcY) offset specifies a source rectangle:
+#Code
+SkRect srcR;
+srcR.setXYWH(srcX, srcY, dstInfo.width(), dstInfo.height());
+##
+
+The source rectangle is intersected with the bounds of the image. If this intersection is not empty,
+then we have two sets of pixels (of equal size). Replace dstPixels with the
+corresponding Image pixels, performing any Color_Type/Alpha_Type transformations needed
+(in the case where Image and dstInfo have different Color_Types or Alpha_Types).
+This call can fail, returning false, for several reasons:
+if source rectangle does not intersect the image bounds;
+if the requested Color_Type/Alpha_Type cannot be converted from the image's types.
+
+#Param dstInfo incomplete ##
+#Param dstPixels incomplete ##
+#Param dstRowBytes incomplete ##
+#Param srcX incomplete ##
+#Param srcY incomplete ##
+#Param cachingHint incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool readPixels(const SkPixmap& dst, int srcX, int srcY,
+ CachingHint cachingHint = kAllow_CachingHint) const
+
+#Param dst incomplete ##
+#Param srcX incomplete ##
+#Param srcY incomplete ##
+#Param cachingHint incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool scalePixels(const SkPixmap& dst, SkFilterQuality filterQuality,
+ CachingHint cachingHint = kAllow_CachingHint) const
+
+Copies Image pixels into dst, converting to dst Color_Type and Alpha_Type.
+If the conversion cannot be performed, false is returned.
+If dst dimensions differ from Image dimensions, Image is scaled, applying
+filterQuality.
+
+#Param dst incomplete ##
+#Param filterQuality incomplete ##
+#Param cachingHint incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method sk_sp<SkData> encodeToData(SkEncodedImageFormat encodedImageFormat, int quality) const
+
+Encode the image's pixels and return the result as SkData.
+If the image type cannot be encoded, or the requested encoder format is
+not supported, this will return nullptr.
+
+#Param encodedImageFormat incomplete ##
+#Param quality incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method sk_sp<SkData> encodeToData(SkPixelSerializer* pixelSerializer = nullptr) const
+
+Encodes Image and returns result as SkData. Will reuse existing encoded data
+if present, as returned by refEncodedData. pixelSerializer validates existing
+encoded data, and encodes Image when existing encoded data is missing or
+invalid.
+
+Passing nullptr for pixelSerializer selects default serialization which
+accepts all data and encodes to PNG.
+
+Returns nullptr if existing encoded data is missing or invalid and
+encoding fails.
+
+#Param pixelSerializer incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method sk_sp<SkData> refEncodedData() const
+
+If the image already has its contents in encoded form (e.g. PNG or JPEG), return that
+as SkData. If the image does not already has its contents in encoded form, return nullptr.
+
+To force the image to return its contents as encoded data, call encodeToData.
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method const char* toString(SkString* string) const
+
+#Param string incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method sk_sp<SkImage> makeSubset(const SkIRect& subset) const
+
+Return a new image that is a subset of this image. The underlying implementation may
+share the pixels, or it may make a copy.
+If subset does not intersect the bounds of this image, or the copy/share cannot be made,
+nullptr will be returned.
+
+#Param subset incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method sk_sp<SkImage> makeTextureImage(GrContext* context, SkColorSpace* dstColorSpace) const
+
+Ensures that an image is backed by a texture (when GrContext is non-null), suitable for use
+with surfaces that have the supplied destination color space. If no transformation is
+required, the returned image may be the same as this image. If this image is from a
+different GrContext, this will fail.
+
+#Param context incomplete ##
+#Param dstColorSpace incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method sk_sp<SkImage> makeNonTextureImage() const
+
+If the image is texture-backed this will make a raster copy of it (or nullptr if reading back
+the pixels fails). Otherwise, it returns the original image.
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method sk_sp<SkImage> makeWithFilter(const SkImageFilter* filter, const SkIRect& subset,
+ const SkIRect& clipBounds, SkIRect* outSubset,
+ SkIPoint* offset) const
+
+Apply a given image filter to this image, and return the filtered result.
+The subset represents the active portion of this image. The return value is similarly an
+SkImage, with an active subset (outSubset). This is usually used with texture-backed
+images, where the texture may be approx-match and thus larger than the required size.
+clipBounds constrains the device-space extent of the image, stored in outSubset.
+offset is storage, set to the amount to translate the result when drawn.
+If the result image cannot be created, or the result would be transparent black, null
+is returned, in which case the offset and outSubset parameters should be ignored by the
+caller.
+
+#Param filter incomplete ##
+#Param subset incomplete ##
+#Param clipBounds incomplete ##
+#Param outSubset incomplete ##
+#Param offset incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method size_t getDeferredTextureImageData(const GrContextThreadSafeProxy& contextThreadSafeProxy,
+ const DeferredTextureImageUsageParams deferredTextureImageUsageParams[],
+ int paramCnt,
+ void* buffer,
+ SkColorSpace* dstColorSpace = nullptr,
+ SkColorType dstColorType = kN32_SkColorType) const
+
+This method allows clients to capture the data necessary to turn a SkImage into a texture-
+backed image. If the original image is codec-backed this will decode into a format optimized
+for the context represented by the proxy. This method is thread safe with respect to the
+GrContext whence the proxy came. Clients allocate and manage the storage of the deferred
+texture data and control its lifetime. No cleanup is required, thus it is safe to simply free
+the memory out from under the data.
+
+The same method is used both for getting the size necessary for uploading
+and retrieving texture data. The deferredTextureImageUsageParams array represents the set of
+draws over which to optimize the texture data prior to uploading.
+
+When called with a null buffer this returns the size that the client must allocate in order
+to create deferred texture data for this image (or zero if this is an inappropriate
+candidate). The buffer allocated by the client should be 8 byte aligned.
+When buffer is not null this fills in the deferred texture data for this image in the
+provided buffer (assuming this is an appropriate candidate image and the buffer is
+appropriately aligned). Upon success the size written is returned, otherwise 0.
+dstColorSpace is the color space of the surface where this texture will ultimately be used.
+If the method determines that Mip_Maps are needed, this helps determine the correct strategy
+for building them (gamma-correct or not).
+
+dstColorType is the color type of the surface where this texture will ultimately be used.
+This determines the format with which the image will be uploaded to the GPU. If dstColorType
+does not support color spaces (low bit depth types such as kARGB_4444_SkColorType), then dstColorSpace
+must be null.
+
+#Param contextThreadSafeProxy incomplete ##
+#Param deferredTextureImageUsageParams incomplete ##
+#Param paramCnt incomplete ##
+#Param buffer incomplete ##
+#Param dstColorSpace incomplete ##
+#Param dstColorType incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkImage> MakeFromDeferredTextureImageData(GrContext* context, const void* data,
+ SkBudgeted budgeted)
+
+Returns a texture-backed image from data produced in SkImage::getDeferredTextureImageData.
+The context must be the context that provided the proxy passed to
+getDeferredTextureImageData.
+
+#Param context incomplete ##
+#Param data incomplete ##
+#Param budgeted incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+#Typedef std::function<void(GrBackendTexture)> BackendTextureReleaseProc
+
+##
+
+# ------------------------------------------------------------------------------
+
+#Method static bool MakeBackendTextureFromSkImage(GrContext* context,
+ sk_sp<SkImage> image,
+ GrBackendTexture* backendTexture,
+ BackendTextureReleaseProc* backendTextureReleaseProc)
+
+Creates a GrBackendTexture from the provided SkImage. Returns true on success. The
+GrBackendTexture and BackendTextureReleaseProc are populated on success. It is the callers
+responsibility to call the BackendTextureReleaseProc once they have deleted the texture.
+Note that the BackendTextureReleaseProc allows Skia to clean up auxiliary data related
+to the GrBackendTexture, and is not a substitute for the client deleting the GrBackendTexture
+themselves.
+
+If image is both texture backed and singly referenced; that is, its only
+reference was transferred using std::move(): image is returned in backendTexture
+without conversion or making a copy.
+
+If the SkImage is not texture backed, this function will generate a texture with the image's
+contents and return that.
+
+#Param context incomplete ##
+#Param image incomplete ##
+#Param backendTexture incomplete ##
+#Param backendTextureReleaseProc incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Enum LegacyBitmapMode
+
+#Code
+ enum LegacyBitmapMode {
+ kRO_LegacyBitmapMode,
+ kRW_LegacyBitmapMode,
+ };
+##
+
+Helper functions to convert to SkBitmap
+
+#Const kRO_LegacyBitmapMode 0
+##
+#Const kRW_LegacyBitmapMode 1
+##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Enum ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool asLegacyBitmap(SkBitmap* bitmap, LegacyBitmapMode legacyBitmapMode) const
+
+Attempt to create a bitmap with the same pixels as the image. The result will always be
+a raster-backed bitmap (texture-backed bitmaps are DEPRECATED, and not supported here).
+If the mode is kRO_LegacyBitmapMode (read-only), the resulting bitmap will be marked as immutable.
+On success, returns true. On failure, returns false and the bitmap parameter will be reset
+to empty.
+
+#Param bitmap incomplete ##
+#Param legacyBitmapMode incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool isLazyGenerated() const
+
+Returns true if Image is backed by an image-generator or other service that creates
+and caches its pixels or texture on-demand.
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method sk_sp<SkImage> makeColorSpace(sk_sp<SkColorSpace> target,
+ SkTransferFunctionBehavior premulBehavior) const
+
+If target is supported, returns an SkImage in target color space.
+Otherwise, returns nullptr.
+This will leave the image as is if it already in target color space.
+Otherwise, it will convert the pixels from Image color space to target
+color space. If this->colorSpace() is nullptr, Image color space will be
+treated as sRGB.
+
+If premulBehavior is SkTransferFunctionBehavior::kRespect: converts Image
+pixels to a linear space before converting to match destination Color_Type
+and Color_Space.
+If premulBehavior is SkTransferFunctionBehavior::kIgnore: Image
+pixels are treated as if they are linear, regardless of how they are encoded.
+
+#Param target incomplete ##
+#Param premulBehavior incomplete ##
+
+#Return incomplete ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso incomplete
+
+#Method ##
+
+#Class SkImage ##
+
+#Topic Image ##
diff --git a/docs/SkMatrix_Reference.bmh b/docs/SkMatrix_Reference.bmh
index 107457c5a6..81e95a2d0a 100644
--- a/docs/SkMatrix_Reference.bmh
+++ b/docs/SkMatrix_Reference.bmh
@@ -34,7 +34,7 @@ improve performance. Matrix is not thread safe unless getType is called first.
#Legend ##
# operator!=(const SkMatrix& a, const SkMatrix& b) # Returns true if members are unequal. ##
# operator==(const SkMatrix& a, const SkMatrix& b) # Returns true if members are equal. ##
-# operator[](int index) const # Returns Matrix value. ##
+# operator[](int index)_const # Returns Matrix value. ##
# operator[](int index) # Returns writable reference to Matrix value. ##
#Table ##
#Subtopic ##
@@ -614,7 +614,7 @@ degenerate forms that collapse to a line or point.
Describes that the Matrix makes rendering with and without the matrix are
visually alike; a transformed circle remains a circle. Mathematically, this is
-referred to as similarity of a Euclidean space, or a similarity transformation.
+referred to as similarity of a Euclidean_Space, or a similarity transformation.
Preserves right angles, keeping the arms of the angle equal lengths.
@@ -821,7 +821,7 @@ vertical translation
# ------------------------------------------------------------------------------
-#Method SkScalar operator[](int index) const
+#Method SkScalar operator[](int index)_const
Returns one matrix value. Asserts if index is out of range and SK_DEBUG is
defined.
@@ -3412,7 +3412,7 @@ Matrix * src = |D E F| |y| = |Ax+By+Cz Dx+Ey+Fz Gx+Hy+Iz|
canvas->translate(128, 128);
SkMatrix matrix;
matrix.setAll(15, 0, 0, 0, 15, 0, -0.08, 0.04, 1);
- matrix.mapHomogeneousPoints(&src[0].fX, &src[0].fX, count);
+ matrix.mapHomogeneousPoints(src, src, count);
debugster(src);
##
diff --git a/docs/SkPaint_Reference.bmh b/docs/SkPaint_Reference.bmh
index e9f568db59..8d3bd604c1 100644
--- a/docs/SkPaint_Reference.bmh
+++ b/docs/SkPaint_Reference.bmh
@@ -2504,18 +2504,18 @@ the following curve, the pair of curves meet at Stroke_Join.
#Example
#Height 200
- SkPaint paint;
- paint.setStyle(SkPaint::kStroke_Style);
- paint.setStrokeWidth(20);
- SkPath path;
- path.moveTo(30, 20);
- path.lineTo(40, 40);
- path.conicTo(70, 20, 100, 20, .707f);
- for (SkPaint::Join j : { SkPaint::kMiter_Join, SkPaint::kRound_Join, SkPaint::kBevel_Join } ) {
- paint.setStrokeJoin(j);
- canvas->drawPath(path, paint);
- canvas->translate(0, 70);
- }
+ SkPaint paint;
+ paint.setStyle(SkPaint::kStroke_Style);
+ paint.setStrokeWidth(20);
+ SkPath path;
+ path.moveTo(30, 20);
+ path.lineTo(40, 40);
+ path.conicTo(70, 20, 100, 20, .707f);
+ for (SkPaint::Join j : { SkPaint::kMiter_Join, SkPaint::kRound_Join, SkPaint::kBevel_Join } ) {
+ paint.setStrokeJoin(j);
+ canvas->drawPath(path, paint);
+ canvas->translate(0, 70);
+ }
##
#Enum Join
@@ -3109,7 +3109,8 @@ If Paint has no Path_Effect, the path geometry is unaltered when filled or strok
#Example
void draw(SkCanvas* canvas) {
SkPaint paint1, paint2;
- paint1.setPathEffect(SkArcToPathEffect::Make(10));
+ SkScalar intervals[] = {1, 2};
+ paint1.setPathEffect(SkDashPathEffect::Make(intervals, SK_ARRAY_COUNT(intervals), 10));
SkDebugf("path effect unique: %s\n", paint1.getPathEffect()->unique() ? "true" : "false");
paint2.setPathEffect(paint1.refPathEffect());
SkDebugf("path effect unique: %s\n", paint1.getPathEffect()->unique() ? "true" : "false");
@@ -3476,7 +3477,7 @@ Mask_Filter and Rasterizer.
SkRegion region;
region.op( 10, 10, 50, 50, SkRegion::kUnion_Op);
region.op( 10, 50, 90, 90, SkRegion::kUnion_Op);
- paint.setImageFilter(SkImageFilter::MakeBlur(5.0f, 5.0f, nullptr));
+ paint.setImageFilter(SkBlurImageFilter::Make(5.0f, 5.0f, nullptr));
canvas->drawRegion(region, paint);
paint.setImageFilter(nullptr);
paint.setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlurStyle, 5));
@@ -3496,7 +3497,7 @@ Mask_Filter and Rasterizer.
void draw(SkCanvas* canvas) {
SkPaint paint;
SkDebugf("nullptr %c= image filter\n", paint.getImageFilter() ? '!' : '=');
- paint.setImageFilter(SkImageFilter::MakeBlur(kOuter_SkBlurStyle, 3, nullptr, nullptr));
+ paint.setImageFilter(SkBlurImageFilter::Make(kOuter_SkBlurStyle, 3, nullptr, nullptr));
SkDebugf("nullptr %c= image filter\n", paint.getImageFilter() ? '!' : '=');
}
diff --git a/docs/SkPath_Reference.bmh b/docs/SkPath_Reference.bmh
index 1027a71fee..83943b0b6c 100644
--- a/docs/SkPath_Reference.bmh
+++ b/docs/SkPath_Reference.bmh
@@ -185,8 +185,8 @@ makes them visible.
#Class SkPath
Paths contain geometry. Paths may be empty, or contain one or more Verbs that
-outline a figure. Path always starts with a move verb to a Cartesian
-coordinate, and may be followed by additional verbs that add lines or curves.
+outline a figure. Path always starts with a move verb to a Cartesian_Coordinate,
+and may be followed by additional verbs that add lines or curves.
Adding a close verb makes the geometry into a continuous loop, a closed contour.
Paths may contain any number of contours, each beginning with a move verb.
@@ -376,8 +376,8 @@ manage Contour, and terminate Path.
##
#Const kCubic_Verb 4
Adds Cubic from Last_Point, using two control Points, and end Point.
- Cubic is a third-order Bezier section within tangents from Last_Point to
- first control Point, and from second control Point to end Point.
+ Cubic is a third-order Bezier_Curve section within tangents from Last_Point
+ to first control Point, and from second control Point to end Point.
##
#Const kClose_Verb 5
Closes Contour, connecting Last_Point to kMove_Verb Point.
@@ -1609,7 +1609,7 @@ line from (100,100) to (100.0001,100.0001) is not degenerate, exactly
#StdOut ##
##
-#SeeAlso IsQuadDegenerate IsCubicDegenerate SkPoint::equalsWithinTolerance
+#SeeAlso IsQuadDegenerate IsCubicDegenerate
##
# ------------------------------------------------------------------------------
@@ -1661,7 +1661,7 @@ quad (1100,1100), (1100,1100), (1100,1100) is degenerate, exactly
#StdOut ##
##
-#SeeAlso IsLineDegenerate IsCubicDegenerate SkPoint::equalsWithinTolerance
+#SeeAlso IsLineDegenerate IsCubicDegenerate
##
# ------------------------------------------------------------------------------
@@ -2858,7 +2858,7 @@ void draw(SkCanvas* canvas) {
#Alias Cubic_Bezier
#Alias Cubic_Beziers
-Cubic describes a Bezier curve segment described by a third-order polynomial.
+Cubic describes a Bezier_Curve segment described by a third-order polynomial.
Cubic begins at a start Point, curving towards the first control Point;
and curves from the end Point towards the second control Point.
diff --git a/docs/SkPoint_Reference.bmh b/docs/SkPoint_Reference.bmh
new file mode 100644
index 0000000000..bac5186f3b
--- /dev/null
+++ b/docs/SkPoint_Reference.bmh
@@ -0,0 +1,1251 @@
+#Topic Point
+#Alias Points
+#Alias Point_Reference
+
+#Struct SkPoint
+
+#Topic Overview
+
+#Subtopic Subtopics
+#ToDo manually add subtopics ##
+#Table
+#Legend
+# topics # description ##
+#Legend ##
+#Table ##
+##
+
+#Subtopic Operators
+#Table
+#Legend
+# description # function ##
+#Legend ##
+# SkPoint operator*(SkScalar scale)_const # Returns Point multiplied by scale. ##
+# SkPoint operator-()_const # Reverses sign of Point. ##
+# SkPoint& operator*=(SkScalar scale) # Multiplies Point by scale factor. ##
+# SkPoint operator+(const SkPoint& a, const SkVector& b) # Returns Point offset by Vector. ##
+# SkVector operator-(const SkPoint& a, const SkPoint& b) # Returns Vector between Points. ##
+# bool operator!=(const SkPoint& a, const SkPoint& b) # Returns true if Point are unequal. ##
+# bool operator==(const SkPoint& a, const SkPoint& b) # Returns true if Point are equal. ##
+# void operator+=(const SkVector& v) # Adds Vector to Point. ##
+# void operator-=(const SkVector& v) # Subtracts Vector from Point. ##
+#Table ##
+#Subtopic ##
+
+#Subtopic Member_Functions
+#Table
+#Legend
+# description # function ##
+#Legend ##
+# CrossProduct # Returns cross product. ##
+# Distance # Returns straight-line distance between points. ##
+# DotProduct # Returns dot product. ##
+# Length # Returns straight-line distance to origin. ##
+# Make # Constructs from SkScalar inputs. ##
+# Normalize # Sets length to one, and returns prior length. ##
+# Offset # Translates Point array. ##
+# cross() # Returns cross product. ##
+# distanceToOrigin # Returns straight-line distance to origin. ##
+# dot() # Returns dot product. ##
+# equals() # Returns true if Points are equal. ##
+# isFinite # Returns true if no member is infinite or NaN. ##
+# isZero # Returns true if both members equal zero. ##
+# iset() # Sets to integer input. ##
+# length() # Returns straight-line distance to origin. ##
+# negate() # Reverses the sign of both members. ##
+# normalize() # Sets length to one, preserving direction. ##
+# offset() # Translates Point. ##
+# scale() # Multiplies Point by scale factor. ##
+# set() # Sets to SkScalar input. ##
+# setAbs # Sets sign of both members to positive. ##
+# setLength # Sets straight-line distance to origin. ##
+# setNormalize # Sets length to one, in direction of (x, y). ##
+# x() # Returns fX. ##
+# y() # Returns fY. ##
+#Table ##
+#Subtopic ##
+
+#Topic ##
+
+#Member SkScalar fX
+x-axis value used by both Point and Vector. May contain any value, including
+infinities and NaN.
+##
+
+#Member SkScalar fY
+y-axis value used by both Point and Vector. May contain any value, including
+infinities and NaN.
+##
+
+# ------------------------------------------------------------------------------
+
+#Method static constexpr SkPoint Make(SkScalar x, SkScalar y)
+
+Sets fX to x, fY to y. Used both to set Point and Vector.
+
+#Param x SkScalar x-axis value of constructed Point or Vector ##
+#Param y SkScalar y-axis value of constructed Point or Vector ##
+
+#Return Point (x, y) ##
+
+#Example
+SkPoint pt1 = {45, 66};
+SkPoint pt2 = SkPoint::Make(45, 66);
+SkVector v1 = {45, 66};
+SkVector v2 = SkPoint::Make(45, 66);
+SkDebugf("all %s" "equal\n", pt1 == pt2 && pt2 == v1 && v1 == v2 ? "" : "not ");
+#StdOut
+all equal
+##
+##
+
+#SeeAlso set() iset() SkIPoint::Make
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method SkScalar x() const
+
+Returns x-axis value of Point or Vector.
+
+#Return fX ##
+
+#Example
+SkPoint pt1 = {45, 66};
+SkDebugf("pt1.fX %c= pt1.x()\n", pt1.fX == pt1.x() ? '=' : '!');
+#StdOut
+pt1.fX == pt1.x()
+##
+##
+
+#SeeAlso y() SkIPoint::x()
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method SkScalar y() const
+
+Returns y-axis value of Point or Vector.
+
+#Return fY ##
+
+#Example
+SkPoint pt1 = {45, 66};
+SkDebugf("pt1.fY %c= pt1.y()\n", pt1.fY == pt1.y() ? '=' : '!');
+#StdOut
+pt1.fY == pt1.y()
+##
+##
+
+#SeeAlso x() SkIPoint::y()
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool isZero() const
+
+Returns true if fX and fY are both zero.
+
+#Return true if fX is zero and fY is zero ##
+
+#Example
+SkPoint pt = { 0.f, -0.f};
+SkDebugf("pt.fX=%c%g pt.fY=%c%g\n", std::signbit(pt.fX) ? '-' : '+', fabsf(pt.fX),
+ std::signbit(pt.fY) ? '-' : '+', fabsf(pt.fY));
+SkDebugf("pt.isZero() == %s\n", pt.isZero() ? "true" : "false");
+#StdOut
+pt.fX=+0 pt.fY=-0
+pt.isZero() == true
+##
+##
+
+#SeeAlso isFinite SkIPoint::isZero
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method void set(SkScalar x, SkScalar y)
+
+Sets fX to x and fY to y.
+
+#Param x new value for fX ##
+#Param y new value for fY ##
+
+#Example
+SkPoint pt1, pt2 = { SK_ScalarPI, SK_ScalarSqrt2 };
+pt1.set(SK_ScalarPI, SK_ScalarSqrt2);
+SkDebugf("pt1 %c= pt2\n", pt1 == pt2 ? '=' : '!');
+#StdOut
+pt1 == pt2
+##
+##
+
+#SeeAlso iset() Make
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method void iset(int32_t x, int32_t y)
+
+Sets fX to x and fY to y, promoting integers to SkScalar values.
+
+Assigning a large integer value directly to fX or fY may cause a compiler
+error, triggered by narrowing conversion of int to SkScalar. This safely
+casts x and y to avoid the error.
+
+#Param x new value for fX ##
+#Param y new value for fY ##
+
+#Example
+SkPoint pt1, pt2 = { SK_MinS16, SK_MaxS16 };
+pt1.iset(SK_MinS16, SK_MaxS16);
+SkDebugf("pt1 %c= pt2\n", pt1 == pt2 ? '=' : '!');
+##
+
+#SeeAlso set Make SkIPoint::set
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method void iset(const SkIPoint& p)
+
+Sets fX to p.fX and fY to p.fY, promoting integers to SkScalar values.
+
+Assigning an IPoint containing a large integer value directly to fX or fY may
+cause a compiler error, triggered by narrowing conversion of int to SkScalar.
+This safely casts p.fX and p.fY to avoid the error.
+
+#Param p IPoint members promoted to SkScalar ##
+
+#Example
+SkIPoint iPt = { SK_MinS32, SK_MaxS32 };
+SkPoint fPt;
+fPt.iset(iPt);
+SkDebugf("iPt: %d, %d\n", iPt.fX, iPt.fY);
+SkDebugf("fPt: %g, %g\n", fPt.fX, fPt.fY);
+#StdOut
+iPt: -2147483647, 2147483647
+fPt: -2.14748e+09, 2.14748e+09
+##
+##
+
+#SeeAlso set Make SkIPoint::set
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method void setAbs(const SkPoint& pt)
+
+Sets fX to absolute value of pt.fX; and fY to absolute value of pt.fY.
+
+#Param pt members providing magnitude for fX and fY ##
+
+#Example
+SkPoint test[] = { {0.f, -0.f}, {-1, -2},
+ { SK_ScalarInfinity, SK_ScalarNegativeInfinity },
+ { SK_ScalarNaN, -SK_ScalarNaN } };
+for (const SkPoint& pt : test) {
+ SkPoint absPt;
+ absPt.setAbs(pt);
+ SkDebugf("pt: %g, %g abs: %g, %g\n", pt.fX, pt.fY, absPt.fX, absPt.fY);
+}
+#StdOut
+pt: 0, -0 abs: 0, 0
+pt: -1, -2 abs: 1, 2
+pt: inf, -inf abs: inf, inf
+pt: nan, -nan abs: nan, nan
+##
+##
+
+#SeeAlso set Make negate
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static void Offset(SkPoint points[], int count, const SkVector& offset)
+
+Adds offset to each Point in points array with count entries.
+
+#Param points Point array ##
+#Param count entries in array ##
+#Param offset Vector added to points ##
+
+#Example
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ SkPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 },
+ { 6, 4 }, { 7, 5 }, { 5, 7 },
+ { 4, 6 }, { 3, 7 }, { 1, 5 },
+ { 2, 4 }, { 1, 3 }, { 3, 1 } };
+ canvas->scale(30, 15);
+ paint.setStyle(SkPaint::kStroke_Style);
+ canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);
+ SkPoint::Offset(points, SK_ARRAY_COUNT(points), { 1, 9 } );
+ canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);
+##
+
+#SeeAlso offset operator+=(const SkVector& v)
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static void Offset(SkPoint points[], int count, SkScalar dx, SkScalar dy)
+
+Adds offset (dx, dy) to each Point in points array of length count.
+
+#Param points Point array ##
+#Param count entries in array ##
+#Param dx added to fX in points ##
+#Param dy added to fY in points ##
+
+#Example
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ SkPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 },
+ { 6, 4 }, { 7, 5 }, { 5, 7 },
+ { 4, 6 }, { 3, 7 }, { 1, 5 },
+ { 2, 4 }, { 1, 3 }, { 3, 1 } };
+ canvas->scale(30, 15);
+ paint.setStyle(SkPaint::kStroke_Style);
+ canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);
+ SkPoint::Offset(points, SK_ARRAY_COUNT(points), 1, 9);
+ canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);
+##
+
+#SeeAlso offset operator+=(const SkVector& v)
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method void offset(SkScalar dx, SkScalar dy)
+
+Adds offset (dx, dy) to Point.
+
+#Param dx added to fX ##
+#Param dy added to fY ##
+
+#Example
+#Height 128
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ SkPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 },
+ { 6, 4 }, { 7, 5 }, { 5, 7 },
+ { 4, 6 }, { 3, 7 }, { 1, 5 },
+ { 2, 4 }, { 1, 3 }, { 3, 1 } };
+ canvas->scale(30, 15);
+ paint.setStyle(SkPaint::kStroke_Style);
+ canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);
+ points[1].offset(1, 1);
+ paint.setColor(SK_ColorRED);
+ canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);
+##
+
+#SeeAlso Offset operator+=(const SkVector& v)
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method SkScalar length() const
+
+Returns the Euclidean_Distance from origin, computed as:
+#Code
+#Literal
+sqrt(fX * fX + fY * fY)
+##
+.
+
+#Return straight-line distance to origin ##
+
+#Example
+#Height 192
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ const SkPoint points[] = { { 90, 30 }, { 120, 150 }, { 150, 30 }, { 210, 90 } };
+ const SkPoint origin = {30, 140};
+ for (auto point : points) {
+ canvas->drawLine(origin, point, paint);
+ SkAutoCanvasRestore acr(canvas, true);
+ SkScalar angle = SkScalarATan2((point.fY - origin.fY), point.fX - origin.fX);
+ canvas->rotate(angle * 180 / SK_ScalarPI, origin.fX, origin.fY);
+ SkString length("length = ");
+ length.appendScalar(point.length());
+ canvas->drawString(length, origin.fX + 25, origin.fY - 4, paint);
+ }
+##
+
+#SeeAlso distanceToOrigin Length setLength Distance
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method SkScalar distanceToOrigin() const
+
+Returns the Euclidean_Distance from origin, computed as:
+#Code
+#Literal
+sqrt(fX * fX + fY * fY)
+##
+.
+
+#Return straight-line distance to origin ##
+
+#Example
+#Height 192
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ const SkPoint points[] = { { 60, -110 }, { 90, 10 }, { 120, -110 }, { 180, -50 } };
+ const SkPoint origin = {0, 0};
+ canvas->translate(30, 140);
+ for (auto point : points) {
+ canvas->drawLine(origin, point, paint);
+ SkAutoCanvasRestore acr(canvas, true);
+ SkScalar angle = SkScalarATan2((point.fY - origin.fY), point.fX - origin.fX);
+ canvas->rotate(angle * 180 / SK_ScalarPI, origin.fX, origin.fY);
+ SkString distance("distance = ");
+ distance.appendScalar(point.distanceToOrigin());
+ canvas->drawString(distance, origin.fX + 25, origin.fY - 4, paint);
+ }
+##
+
+#SeeAlso length Length setLength Distance
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool normalize()
+
+Scales (fX, fY) so that length() returns one, while preserving ratio of fX to fY,
+if possible. If prior length is nearly zero, sets Vector to (0, 0) and returns
+false; otherwise returns true.
+
+#Return true if former length is not zero or nearly zero ##
+
+#Example
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ const SkPoint lines[][2] = { {{ 30, 110 }, { 190, 30 }},
+ {{ 120, 140 }, { 30, 220 }}};
+ for (auto line : lines) {
+ canvas->drawLine(line[0], line[1], paint);
+ SkVector vector = line[1] - line[0];
+ if (vector.normalize()) {
+ SkVector rotate90 = { -vector.fY, vector.fX };
+ rotate90 *= 10.f;
+ canvas->drawLine(line[0] - rotate90, line[0] + rotate90, paint);
+ canvas->drawLine(line[1] - rotate90, line[1] + rotate90, paint);
+ }
+ }
+##
+
+#SeeAlso Normalize setLength length Length
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool setNormalize(SkScalar x, SkScalar y)
+
+Sets Vector to (x, y) scaled so length() returns one, and so that
+(fX, fY) is proportional to (x, y). If (x, y) length is nearly zero,
+sets Vector to (0, 0) and returns false; otherwise returns true.
+
+#Param x proportional value for fX ##
+#Param y proportional value for fY ##
+
+#Return true if (x, y) length is not zero or nearly zero ##
+
+#Example
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ const SkPoint points[] = { { 60, -110 }, { 90, 10 }, { 120, -110 }, { 180, -50 } };
+ const SkPoint origin = {0, 0};
+ canvas->translate(30, 140);
+ for (auto point : points) {
+ paint.setStrokeWidth(1);
+ paint.setColor(SK_ColorBLACK);
+ canvas->drawLine(origin, point, paint);
+ SkVector normal;
+ normal.setNormalize(point.fX, point.fY);
+ normal *= 100;
+ paint.setStrokeWidth(10);
+ paint.setColor(0x3f4512bf);
+ canvas->drawLine(origin, normal, paint);
+ }
+##
+
+#SeeAlso normalize setLength
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool setLength(SkScalar length)
+
+Scales Vector so that distanceToOrigin returns length, if possible. If former
+length is nearly zero, sets Vector to (0, 0) and return false; otherwise returns
+true.
+
+#Param length straight-line distance to origin ##
+
+#Return true if former length is not zero or nearly zero ##
+
+#Example
+#Height 160
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ const SkPoint points[] = { { 60, -110 }, { 90, 10 }, { 120, -110 }, { 180, -50 } };
+ const SkPoint origin = {0, 0};
+ canvas->translate(30, 140);
+ for (auto point : points) {
+ paint.setStrokeWidth(1);
+ paint.setColor(SK_ColorBLACK);
+ canvas->drawLine(origin, point, paint);
+ SkVector normal = point;
+ normal.setLength(100);
+ paint.setStrokeWidth(10);
+ paint.setColor(0x3f45bf12);
+ canvas->drawLine(origin, normal, paint);
+ }
+##
+
+#SeeAlso length Length setNormalize setAbs
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool setLength(SkScalar x, SkScalar y, SkScalar length)
+
+Sets Vector to (x, y) scaled to length, if possible. If former
+length is nearly zero, sets Vector to (0, 0) and return false; otherwise returns
+true.
+
+#Param x proportional value for fX ##
+#Param y proportional value for fY ##
+#Param length straight-line distance to origin ##
+
+#Return true if (x, y) length is not zero or nearly zero ##
+
+#Example
+#Height 160
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ const SkPoint points[] = { { 60, -110 }, { 90, 10 }, { 120, -110 }, { 180, -50 } };
+ const SkPoint origin = {0, 0};
+ canvas->translate(30, 140);
+ for (auto point : points) {
+ paint.setStrokeWidth(1);
+ paint.setColor(SK_ColorBLACK);
+ canvas->drawLine(origin, point, paint);
+ SkVector normal;
+ normal.setLength(point.fX, point.fY, 100);
+ paint.setStrokeWidth(10);
+ paint.setColor(0x3fbf4512);
+ canvas->drawLine(origin, normal, paint);
+ }
+##
+
+#SeeAlso length Length setNormalize setAbs
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method void scale(SkScalar scale, SkPoint* dst) const
+
+Sets dst to Point times scale. dst may be Point to modify Point in place.
+
+#Param scale factor to multiply Point by ##
+#Param dst storage for scaled Point ##
+
+#Example
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ SkPoint point = {40, -15}, scaled;
+ SkPoint origin = {30, 110};
+ for (auto scale : {1, 2, 3, 5}) {
+ paint.setStrokeWidth(scale * 5);
+ paint.setARGB(0x7f, 0x9f, 0xbf, 0x33 * scale);
+ point.scale(scale, &scaled);
+ canvas->drawLine(origin, origin + scaled, paint);
+ }
+##
+
+#SeeAlso operator*(SkScalar scale)_const operator*=(SkScalar scale) setLength
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method void scale(SkScalar value)
+
+Scales Point in place by scale.
+
+#Param value factor to multiply Point by ##
+
+#Example
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ SkPoint point = {40, -15};
+ SkPoint origin = {30, 110};
+ for (auto scale : {1, 2, 3, 5}) {
+ paint.setStrokeWidth(scale * 5);
+ paint.setARGB(0x7f, 0x9f, 0xbf, 0x33 * scale);
+ point.scale(scale);
+ canvas->drawLine(origin, origin + point, paint);
+ }
+##
+
+#SeeAlso operator*(SkScalar scale)_const operator*=(SkScalar scale) setLength
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method void negate()
+
+Changes the sign of fX and fY.
+
+#Example
+SkPoint test[] = { {0.f, -0.f}, {-1, -2},
+ { SK_ScalarInfinity, SK_ScalarNegativeInfinity },
+ { SK_ScalarNaN, -SK_ScalarNaN } };
+for (const SkPoint& pt : test) {
+ SkPoint negPt = pt;
+ negPt.negate();
+ SkDebugf("pt: %g, %g negate: %g, %g\n", pt.fX, pt.fY, negPt.fX, negPt.fY);
+}
+#StdOut
+pt: 0, -0 negate: -0, 0
+pt: -1, -2 negate: 1, 2
+pt: inf, -inf negate: -inf, inf
+pt: nan, -nan negate: -nan, nan
+##
+##
+
+#SeeAlso operator-()_const setAbs
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method SkPoint operator-()_const
+
+Returns Point changing the signs of fX and fY.
+
+#Return Point as (-fX, -fY) ##
+
+#Example
+SkPoint test[] = { {0.f, -0.f}, {-1, -2},
+ { SK_ScalarInfinity, SK_ScalarNegativeInfinity },
+ { SK_ScalarNaN, -SK_ScalarNaN } };
+for (const SkPoint& pt : test) {
+ SkPoint negPt = -pt;
+ SkDebugf("pt: %g, %g negate: %g, %g\n", pt.fX, pt.fY, negPt.fX, negPt.fY);
+}
+#StdOut
+pt: 0, -0 negate: -0, 0
+pt: -1, -2 negate: 1, 2
+pt: inf, -inf negate: -inf, inf
+pt: nan, -nan negate: -nan, nan
+##
+##
+
+#SeeAlso negate operator-(const SkPoint& a, const SkPoint& b) operator-=(const SkVector& v) SkIPoint::operator-()_const
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method void operator+=(const SkVector& v)
+
+Adds Vector v to Point. Sets Point to:
+#Formula
+(fX + v.fX, fY + v.fY)
+##
+.
+
+#Param v Vector to add ##
+
+#Example
+#Height 128
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ SkPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 },
+ { 6, 4 }, { 7, 5 }, { 5, 7 },
+ { 4, 6 }, { 3, 7 }, { 1, 5 },
+ { 2, 4 }, { 1, 3 }, { 3, 1 } };
+ canvas->scale(30, 15);
+ paint.setStyle(SkPaint::kStroke_Style);
+ canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);
+ points[1] += {1, 1};
+ points[2] += {-1, -1};
+ paint.setColor(SK_ColorRED);
+ canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);
+##
+
+#SeeAlso offset() operator+(const SkPoint& a, const SkVector& b) SkIPoint::operator+=(const SkIVector& v)
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method void operator-=(const SkVector& v)
+
+Subtracts Vector v from Point. Sets Point to:
+#Formula
+(fX - v.fX, fY - v.fY)
+##
+.
+
+#Param v Vector to subtract ##
+
+#Example
+#Height 128
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ SkPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 },
+ { 6, 4 }, { 7, 5 }, { 5, 7 },
+ { 4, 6 }, { 3, 7 }, { 1, 5 },
+ { 2, 4 }, { 1, 3 }, { 3, 1 } };
+ canvas->scale(30, 15);
+ paint.setStyle(SkPaint::kStroke_Style);
+ canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);
+ points[1] -= {1, 1};
+ points[2] -= {-1, -1};
+ paint.setColor(SK_ColorRED);
+ canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);
+##
+
+#SeeAlso offset() operator-(const SkPoint& a, const SkPoint& b) SkIPoint::operator-=(const SkIVector& v)
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method SkPoint operator*(SkScalar scale)_const
+
+Returns Point multiplied by scale.
+
+#Param scale Scalar to multiply by ##
+
+#Return Point as (fX * scale, fY * scale) ##
+
+#Example
+#Height 128
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ SkPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 },
+ { 6, 4 }, { 7, 5 }, { 5, 7 },
+ { 4, 6 }, { 3, 7 }, { 1, 5 },
+ { 2, 4 }, { 1, 3 }, { 3, 1 } };
+ canvas->scale(15, 10);
+ paint.setStyle(SkPaint::kStroke_Style);
+ canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);
+ for (auto& point : points) {
+ point = point * 1.5f;
+ }
+ paint.setColor(SK_ColorRED);
+ canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);
+##
+
+#SeeAlso operator*=(SkScalar scale) scale() setLength setNormalize
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method SkPoint& operator*=(SkScalar scale)
+
+Multiplies Point by scale. Sets Point to:
+#Formula
+(fX * scale, fY * scale)
+##
+
+#Param scale Scalar to multiply by ##
+
+#Return reference to Point ##
+
+#Example
+#Height 128
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ SkPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 },
+ { 6, 4 }, { 7, 5 }, { 5, 7 },
+ { 4, 6 }, { 3, 7 }, { 1, 5 },
+ { 2, 4 }, { 1, 3 }, { 3, 1 } };
+ canvas->scale(15, 10);
+ paint.setStyle(SkPaint::kStroke_Style);
+ canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);
+ for (auto& point : points) {
+ point *= 2;
+ }
+ paint.setColor(SK_ColorRED);
+ canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);
+##
+
+#SeeAlso operator*(SkScalar scale)_const scale() setLength setNormalize
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool isFinite() const
+
+Returns true if both fX and fY are measurable values.
+
+#Return true for values other than infinities and NaN ##
+
+#Example
+SkPoint test[] = { {0, -0.f}, {-1, -2}, {SK_ScalarInfinity, 1}, {SK_ScalarNaN, -1} };
+for (const SkPoint& pt : test) {
+ SkDebugf("pt: %g, %g finite: %s\n", pt.fX, pt.fY, pt.isFinite() ? "true" : "false");
+}
+#StdOut
+pt: 0, -0 finite: true
+pt: -1, -2 finite: true
+pt: inf, 1 finite: false
+pt: nan, -1 finite: false
+##
+##
+
+#SeeAlso SkRect::isFinite SkPath::isFinite
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool equals(SkScalar x, SkScalar y) const
+
+Returns true if Point is equivalent to Point constructed from (x, y).
+
+#Param x value compared with fX ##
+#Param y value compared with fY ##
+
+#Return true if Point equals (x, y) ##
+
+#Example
+SkPoint test[] = { {0, -0.f}, {-1, -2}, {SK_ScalarInfinity, 1}, {SK_ScalarNaN, -1} };
+for (const SkPoint& pt : test) {
+ SkDebugf("pt: %g, %g %c= pt\n", pt.fX, pt.fY, pt.equals(pt.fX, pt.fY) ? '=' : '!');
+}
+#StdOut
+pt: 0, -0 == pt
+pt: -1, -2 == pt
+pt: inf, 1 == pt
+pt: nan, -1 != pt
+##
+##
+
+#SeeAlso operator==(const SkPoint& a, const SkPoint& b)
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool operator==(const SkPoint& a, const SkPoint& b)
+
+Returns true if a is equivalent to b.
+
+#Param a Point to compare ##
+#Param b Point to compare ##
+
+#Return true if a.fX == b.fX and a.fY == b.fY ##
+
+#Example
+SkPoint test[] = { {0, -0.f}, {-1, -2}, {SK_ScalarInfinity, 1}, {SK_ScalarNaN, -1} };
+for (const SkPoint& pt : test) {
+ SkDebugf("pt: %g, %g %c= pt\n", pt.fX, pt.fY, pt == pt ? '=' : '!');
+}
+#StdOut
+pt: 0, -0 == pt
+pt: -1, -2 == pt
+pt: inf, 1 == pt
+pt: nan, -1 != pt
+##
+##
+
+#SeeAlso equals() operator!=(const SkPoint& a, const SkPoint& b)
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool operator!=(const SkPoint& a, const SkPoint& b)
+
+Returns true if a is not equivalent to b.
+
+#Param a Point to compare ##
+#Param b Point to compare ##
+
+#Return true if a.fX != b.fX or a.fY != b.fY ##
+
+#Example
+SkPoint test[] = { {0, -0.f}, {-1, -2}, {SK_ScalarInfinity, 1}, {SK_ScalarNaN, -1} };
+for (const SkPoint& pt : test) {
+ SkDebugf("pt: %g, %g %c= pt\n", pt.fX, pt.fY, pt != pt ? '!' : '=');
+}
+#StdOut
+pt: 0, -0 == pt
+pt: -1, -2 == pt
+pt: inf, 1 == pt
+pt: nan, -1 != pt
+##
+##
+
+#SeeAlso operator==(const SkPoint& a, const SkPoint& b) equals()
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method SkVector operator-(const SkPoint& a, const SkPoint& b)
+
+Returns Vector from b to a, computed as
+#Formula
+(a.fX - b.fX, a.fY - b.fY)
+##
+.
+
+Can also be used to subtract Vector from Point, returning Point.
+Can also be used to subtract Vector from Vector, returning Vector.
+
+#Param a Point to subtract from ##
+#Param b Point to subtract ##
+
+#Return Vector from b to a ##
+
+#Example
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ SkPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 },
+ { 6, 4 }, { 7, 5 }, { 5, 7 },
+ { 4, 6 }, { 3, 7 }, { 1, 5 },
+ { 2, 4 }, { 1, 3 }, { 3, 1 } };
+ canvas->scale(30, 15);
+ paint.setStyle(SkPaint::kStroke_Style);
+ canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);
+ points[1] += points[0] - points[2];
+ points[2] -= points[3] - points[5];
+ paint.setColor(SK_ColorRED);
+ canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);
+##
+
+#SeeAlso operator-=(const SkVector& v) offset()
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method SkPoint operator+(const SkPoint& a, const SkVector& b)
+
+Returns Point resulting from Point a offset by Vector b, computed as:
+#Formula
+(a.fX + b.fX, a.fY + b.fY)
+##
+.
+
+Can also be used to offset Point b by Vector a, returning Point.
+Can also be used to add Vector to Vector, returning Vector.
+
+#Param a Point or Vector to add to ##
+#Param b Point or Vector to add ##
+
+#Return Point equal to a offset by b ##
+
+#Example
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ SkPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 },
+ { 6, 4 }, { 7, 5 }, { 5, 7 },
+ { 4, 6 }, { 3, 7 }, { 1, 5 },
+ { 2, 4 }, { 1, 3 }, { 3, 1 } };
+ canvas->scale(30, 15);
+ paint.setStyle(SkPaint::kStroke_Style);
+ canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);
+ SkVector mod = {1, 1};
+ for (auto& point : points) {
+ point = point + mod;
+ mod.fX *= 1.1f;
+ mod.fY += .2f;
+ }
+ paint.setColor(SK_ColorRED);
+ canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);
+##
+
+#SeeAlso operator+=(const SkVector& v) offset()
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static SkScalar Length(SkScalar x, SkScalar y)
+
+Returns the Euclidean_Distance from origin, computed as:
+#Code
+#Literal
+sqrt(x * x + y * y)
+##
+.
+
+#Param x component of length ##
+#Param y component of length ##
+
+#Return straight-line distance to origin ##
+
+#Example
+#Height 192
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ const SkPoint points[] = { { 90, 30 }, { 120, 150 }, { 150, 30 }, { 210, 90 } };
+ const SkPoint origin = {30, 140};
+ for (auto point : points) {
+ canvas->drawLine(origin, point, paint);
+ SkAutoCanvasRestore acr(canvas, true);
+ SkScalar angle = SkScalarATan2((point.fY - origin.fY), point.fX - origin.fX);
+ canvas->rotate(angle * 180 / SK_ScalarPI, origin.fX, origin.fY);
+ SkString length("length = ");
+ length.appendScalar(SkPoint::Length(point.fX, point.fY));
+ canvas->drawString(length, origin.fX + 25, origin.fY - 4, paint);
+ }
+##
+
+#SeeAlso length() Distance setLength
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static SkScalar Normalize(SkVector* vec)
+
+Scales (vec->fX, vec->fY) so that length() returns one, while preserving ratio of vec->fX to vec->fY,
+if possible. If original length is nearly zero, sets vec to (0, 0) and returns zero;
+otherwise, returns length of vec before vec is scaled.
+
+Returned prior length may be SK_ScalarInfinity if it can not be represented by SkScalar.
+
+Note that normalize() is faster if prior length is not required.
+
+#Param vec normalized to unit length ##
+
+#Return original vec length ##
+
+#Example
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ const SkPoint lines[][2] = { {{ 30, 110 }, { 190, 30 }},
+ {{ 30, 220 }, { 120, 140 }}};
+ for (auto line : lines) {
+ canvas->drawLine(line[0], line[1], paint);
+ SkVector vector = line[1] - line[0];
+ SkScalar priorLength = SkPoint::Normalize(&vector);
+ SkVector rotate90 = { -vector.fY, vector.fX };
+ rotate90 *= 10.f;
+ canvas->drawLine(line[0] - rotate90, line[0] + rotate90, paint);
+ canvas->drawLine(line[1] - rotate90, line[1] + rotate90, paint);
+ SkString length("length = ");
+ length.appendScalar(priorLength);
+ canvas->drawString(length, line[0].fX + 25, line[0].fY - 4, paint);
+ }
+##
+
+#SeeAlso normalize() setLength Length
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static SkScalar Distance(const SkPoint& a, const SkPoint& b)
+
+Returns the Euclidean_Distance between a and b.
+
+#Param a line end point ##
+#Param b line end point ##
+
+#Return straight-line distance from a to b ##
+
+#Example
+#Height 192
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ const SkPoint lines[][2] = {{{-10, -10}, {90, 30}}, {{0, 0}, {150, 30}}, {{10, 25}, {120, 150}}};
+ const SkPoint origin = {30, 160};
+ for (auto line : lines) {
+ SkPoint a = origin + line[0];
+ const SkPoint& b = line[1];
+ canvas->drawLine(a, b, paint);
+ SkAutoCanvasRestore acr(canvas, true);
+ SkScalar angle = SkScalarATan2((b.fY - a.fY), b.fX - a.fX);
+ canvas->rotate(angle * 180 / SK_ScalarPI, a.fX, a.fY);
+ SkString distance("distance = ");
+ distance.appendScalar(SkPoint::Distance(a, b));
+ canvas->drawString(distance, a.fX + 25, a.fY - 4, paint);
+ }
+##
+
+#SeeAlso length() setLength
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static SkScalar DotProduct(const SkVector& a, const SkVector& b)
+
+Returns the dot product of Vector a and Vector b.
+
+#Param a left side of dot product ##
+#Param b right side of dot product ##
+
+#Return product of input magnitudes and cosine of the angle between them ##
+
+#Example
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ SkVector vectors[][2] = {{{50, 2}, {-14, 20}}, {{0, 50}, {-50, 0}}, {{-20, 25}, {25, -20}},
+ {{-20, -24}, {-24, -20}}};
+ SkPoint center[] = {{32, 32}, {160, 32}, {32, 160}, {160, 160}};
+ paint.setStrokeWidth(2);
+ for (size_t i = 0; i < 4; ++i) {
+ canvas->drawLine(center[i], center[i] + vectors[i][0], paint);
+ canvas->drawLine(center[i], center[i] + vectors[i][1], paint);
+ SkString str;
+ str.printf("dot = %g", SkPoint::DotProduct(vectors[i][0], vectors[i][1]));
+ canvas->drawString(str, center[i].fX, center[i].fY, paint);
+ }
+##
+
+#SeeAlso dot CrossProduct
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static SkScalar CrossProduct(const SkVector& a, const SkVector& b)
+
+Returns the cross product of Vector a and Vector b.
+
+a and b form three-dimensional vectors with z equal to zero. The cross product
+is a three-dimensional vector with x and y equal to zero. The cross product z
+term equals the returned value.
+
+#Param a left side of cross product ##
+#Param b right side of cross product ##
+
+#Return area spanned by Vectors signed by angle direction ##
+
+#Example
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ SkVector vectors[][2] = {{{50, 2}, {-14, 20}}, {{0, 50}, {-50, 0}}, {{-20, 25}, {25, -20}},
+ {{-20, -24}, {-24, -20}}};
+ SkPoint center[] = {{32, 32}, {160, 32}, {32, 160}, {160, 160}};
+ paint.setStrokeWidth(2);
+ for (size_t i = 0; i < 4; ++i) {
+ paint.setColor(SK_ColorRED);
+ canvas->drawLine(center[i], center[i] + vectors[i][0], paint);
+ paint.setColor(SK_ColorBLUE);
+ canvas->drawLine(center[i], center[i] + vectors[i][1], paint);
+ SkString str;
+ SkScalar cross = SkPoint::CrossProduct(vectors[i][1], vectors[i][0]);
+ str.printf("cross = %g", cross);
+ paint.setColor(cross >= 0 ? SK_ColorRED : SK_ColorBLUE);
+ canvas->drawString(str, center[i].fX, center[i].fY, paint);
+ }
+##
+
+#SeeAlso cross DotProduct
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method SkScalar cross(const SkVector& vec) const
+
+Returns the cross product of Vector and vec.
+
+Vector and vec form three-dimensional vectors with z equal to zero. The
+cross product is a three-dimensional vector with x and y equal to zero.
+The cross product z term equals the returned value.
+
+#Param vec right side of cross product ##
+
+#Return area spanned by Vectors signed by angle direction ##
+
+#Example
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ SkVector vectors[][2] = {{{50, 2}, {-14, 20}}, {{0, 50}, {-50, 0}}, {{-20, 25}, {25, -20}},
+ {{-20, -24}, {-24, -20}}};
+ SkPoint center[] = {{32, 32}, {160, 32}, {32, 160}, {160, 160}};
+ paint.setStrokeWidth(2);
+ for (size_t i = 0; i < 4; ++i) {
+ paint.setColor(SK_ColorRED);
+ canvas->drawLine(center[i], center[i] + vectors[i][0], paint);
+ paint.setColor(SK_ColorBLUE);
+ canvas->drawLine(center[i], center[i] + vectors[i][1], paint);
+ SkString str;
+ SkScalar cross = vectors[i][0].cross(vectors[i][1]);
+ str.printf("cross = %g", cross);
+ paint.setColor(cross >= 0 ? SK_ColorRED : SK_ColorBLUE);
+ canvas->drawString(str, center[i].fX, center[i].fY, paint);
+ }
+##
+
+#SeeAlso CrossProduct dot
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method SkScalar dot(const SkVector& vec) const
+
+Returns the dot product of Vector and Vector vec.
+
+#Param vec right side of dot product ##
+
+#Return product of input magnitudes and cosine of the angle between them ##
+
+#Example
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ SkVector vectors[][2] = {{{50, 2}, {-14, 20}}, {{0, 50}, {-50, 0}}, {{-20, 25}, {25, -20}},
+ {{-20, -24}, {-24, -20}}};
+ SkPoint center[] = {{32, 32}, {160, 32}, {32, 160}, {160, 160}};
+ paint.setStrokeWidth(2);
+ for (size_t i = 0; i < 4; ++i) {
+ canvas->drawLine(center[i], center[i] + vectors[i][0], paint);
+ canvas->drawLine(center[i], center[i] + vectors[i][1], paint);
+ SkString str;
+ str.printf("dot = %g", vectors[i][0].dot(vectors[i][1]));
+ canvas->drawString(str, center[i].fX, center[i].fY, paint);
+ }
+##
+
+#SeeAlso DotProduct cross
+
+#Method ##
+
+#Struct SkPoint ##
+
+#Topic Point ##
+
+# ------------------------------------------------------------------------------
+
+#Topic Vector
+ #Alias Vectors
+ #Typedef SkPoint SkVector
+ #Typedef ##
+##
diff --git a/docs/SkRect_Reference.bmh b/docs/SkRect_Reference.bmh
index 1a28f1bd12..d803c9373a 100644
--- a/docs/SkRect_Reference.bmh
+++ b/docs/SkRect_Reference.bmh
@@ -30,8 +30,8 @@ integer input cannot convert to SkScalar without loss of precision.
#Legend
# description # function ##
#Legend ##
-# bool operator!=(const SkRect& a, const SkRect& b) # Returns true if member bits are unequal. ##
-# bool operator==(const SkRect& a, const SkRect& b) # Returns true if member bits are equal. ##
+# bool operator!=(const SkRect& a, const SkRect& b) # Returns true if members are unequal. ##
+# bool operator==(const SkRect& a, const SkRect& b) # Returns true if members are equal. ##
#Table ##
#Subtopic ##
diff --git a/docs/SkSurface_Reference.bmh b/docs/SkSurface_Reference.bmh
new file mode 100644
index 0000000000..c6cbbbb7aa
--- /dev/null
+++ b/docs/SkSurface_Reference.bmh
@@ -0,0 +1,1601 @@
+#Topic Surface
+#Alias Surface_Reference
+
+#Class SkSurface
+
+SkSurface is responsible for managing the pixels that a canvas draws into. The pixels can be
+allocated either in CPU memory (a raster surface) or on the GPU (a GrRenderTarget surface).
+SkSurface takes care of allocating a SkCanvas that will draw into the surface. Call
+surface->getCanvas() to use that canvas (but don't delete it, it is owned by the surface).
+SkSurface always has non-zero dimensions. If there is a request for a new surface, and either
+of the requested dimensions are zero, then nullptr will be returned.
+
+#Topic Overview
+
+#Subtopic Subtopics
+#ToDo manually add subtopics ##
+#Table
+#Legend
+# topics # description ##
+#Legend ##
+#Table ##
+##
+
+#Subtopic Member_Functions
+#Table
+#Legend
+# description # function ##
+#Legend ##
+# MakeFromBackendRenderTarget # Creates Surface from GPU memory buffer. ##
+# MakeFromBackendTexture # Creates Surface from GPU-backed texture. ##
+# MakeFromBackendTextureAsRenderTarget # Creates Surface from GPU-backed texture. ##
+# MakeNull # Creates Surface without backing pixels. ##
+# MakeRaster # Creates Surface from SkImageInfo. ##
+# MakeRasterDirect # Creates Surface from SkImageInfo and Pixel_Storage. ##
+# MakeRasterDirectReleaseProc # Creates Surface from SkImageInfo and Pixel_Storage. ##
+# MakeRasterN32Premul # Creates Surface from width, height matching output. ##
+# MakeRenderTarget # Creates Surface pointing to new GPU memory buffer. ##
+# characterize() # Set up Surface_Characterization for threaded pre-processing. ##
+# draw() # Draws Surface contents to canvas. ##
+# flush() # Resolve pending I/O. ##
+# flushAndSignalSemaphores # Resolve pending I/O, and signal. ##
+# generationID # Returns unique ID. ##
+# getCanvas # Returns Canvas that draws into Surface. ##
+# getRenderTargetHandle # Returns the GPU reference to render target. ##
+# getTextureHandle # Returns the GPU reference to texture. ##
+# height() # Returns pixel row count. ##
+# makeImageSnapshot # Returns Image capturing Surface contents. ##
+# makeSurface # Returns a compatible Surface. ##
+# notifyContentWillChange # Notifies that contents will be changed outside of Skia. ##
+# peekPixels # Copies Surface parameters to Pixmap. ##
+# prepareForExternalIO # To be deprecated. ##
+# props() # Returns Surface_Properties. ##
+# readPixels # Copies Rect of pixels. ##
+# wait() # Pause commands until signaled. ##
+# width() # Returns pixel column count. ##
+#Table ##
+#Subtopic ##
+
+#Topic ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkSurface> MakeRasterDirect(const SkImageInfo& imageInfo, void* pixels,
+ size_t rowBytes,
+ const SkSurfaceProps* surfaceProps = nullptr)
+
+Allocates raster Surface. Canvas returned by Surface draws directly into pixels.
+
+Surface is returned if all parameters are valid.
+Valid parameters include:
+info dimensions are greater than zero;
+info contains Image_Color_Type and Image_Alpha_Type supported by Raster_Surface;
+pixels is not nullptr;
+rowBytes is large enough to contain info width pixels of Image_Color_Type.
+
+Pixel buffer size should be info height times computed rowBytes.
+Pixels are not initialized.
+To access pixels after drawing, call flush() or peekPixels.
+
+#Param imageInfo width, height, Image_Color_Type, Image_Alpha_Type, Color_Space,
+ of Raster_Surface; width and height must be greater than zero
+##
+#Param pixels pointer to destination pixels buffer ##
+#Param rowBytes interval from one Surface row to the next ##
+#Param surfaceProps LCD striping orientation and setting for device independent fonts;
+ may be nullptr
+##
+
+#Return Surface if all parameters are valid; otherwise, nullptr ##
+
+#Example
+void draw(SkCanvas* ) {
+ SkImageInfo info = SkImageInfo::MakeN32Premul(3, 3);
+ const size_t size = info.computeMinByteSize();
+ SkAutoTMalloc<SkPMColor> storage(size);
+ SkPMColor* pixels = storage.get();
+ sk_sp<SkSurface> surface(SkSurface::MakeRasterDirect(info, pixels, info.minRowBytes()));
+ SkCanvas* canvas = surface->getCanvas();
+ canvas->clear(SK_ColorWHITE);
+ SkPMColor pmWhite = pixels[0];
+ SkPaint paint;
+ canvas->drawPoint(1, 1, paint);
+ canvas->flush(); // ensure that point was drawn
+ for (int y = 0; y < info.height(); ++y) {
+ for (int x = 0; x < info.width(); ++x) {
+ SkDebugf("%c", *pixels++ == pmWhite ? '-' : 'x');
+ }
+ SkDebugf("\n");
+ }
+}
+ #StdOut
+ ---
+ -x-
+ ---
+ ##
+##
+
+#SeeAlso MakeRasterDirectReleaseProc MakeRaster MakeRasterN32Premul SkCanvas::MakeRasterDirect
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method 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)
+
+Allocates raster Surface. Canvas returned by Surface draws directly into pixels.
+releaseProc is called with pixels and context when Surface is deleted.
+
+Surface is returned if all parameters are valid.
+Valid parameters include:
+info dimensions are greater than zero;
+info contains Image_Color_Type and Image_Alpha_Type supported by Raster_Surface;
+pixels is not nullptr;
+rowBytes is large enough to contain info width pixels of Image_Color_Type.
+
+Pixel buffer size should be info height times computed rowBytes.
+Pixels are not initialized.
+To access pixels after drawing, call flush() or peekPixels.
+
+#Param imageInfo width, height, Image_Color_Type, Image_Alpha_Type, Color_Space,
+ of Raster_Surface; width and height must be greater than zero
+##
+#Param pixels pointer to destination pixels buffer ##
+#Param rowBytes interval from one Surface row to the next ##
+#Param releaseProc called when Surface is deleted; may be nullptr ##
+#Param context passed to releaseProc; may be nullptr ##
+#Param surfaceProps LCD striping orientation and setting for device independent fonts;
+ may be nullptr
+##
+
+#Return Surface if all parameters are valid; otherwise, nullptr ##
+
+#Example
+#Function
+static void release_direct_surface_storage(void* pixels, void* context) {
+ if (pixels == context) {
+ SkDebugf("expected release context\n");
+ }
+ sk_free(pixels);
+}
+
+##
+void draw(SkCanvas* ) {
+ SkImageInfo info = SkImageInfo::MakeN32Premul(3, 3);
+ const size_t rowBytes = info.minRowBytes();
+ void* pixels = sk_malloc_throw(info.computeByteSize(rowBytes));
+ sk_sp<SkSurface> surface(SkSurface::MakeRasterDirectReleaseProc(info, pixels, rowBytes,
+ release_direct_surface_storage, pixels));
+ SkCanvas* canvas = surface->getCanvas();
+ canvas->clear(SK_ColorWHITE);
+ SkPMColor* colorPtr = (SkPMColor*) pixels;
+ SkPMColor pmWhite = colorPtr[0];
+ SkPaint paint;
+ canvas->drawPoint(1, 1, paint);
+ canvas->flush(); // ensure that point was drawn
+ for (int y = 0; y < info.height(); ++y) {
+ for (int x = 0; x < info.width(); ++x) {
+ SkDebugf("%c", *colorPtr++ == pmWhite ? '-' : 'x');
+ }
+ SkDebugf("\n");
+ }
+}
+#StdOut
+---
+-x-
+---
+expected release context
+##
+##
+
+#SeeAlso MakeRasterDirect MakeRasterN32Premul MakeRaster
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkSurface> MakeRaster(const SkImageInfo& imageInfo, size_t rowBytes,
+ const SkSurfaceProps* surfaceProps)
+
+Allocates raster Surface. Canvas returned by Surface draws directly into pixels.
+Allocates and zeroes pixel memory. Pixel memory size is imageInfo.height() times
+rowBytes, or times imageInfo.minRowBytes() if rowBytes is zero.
+Pixel memory is deleted when Surface is deleted.
+
+Surface is returned if all parameters are valid.
+Valid parameters include:
+info dimensions are greater than zero;
+info contains Image_Color_Type and Image_Alpha_Type supported by Raster_Surface;
+rowBytes is large enough to contain info width pixels of Image_Color_Type, or is zero.
+
+If rowBytes is not zero, subsequent images returned by makeImageSnapshot
+have the same rowBytes.
+
+#Param imageInfo width, height, Image_Color_Type, Image_Alpha_Type, Color_Space,
+ of Raster_Surface; width and height must be greater than zero
+##
+#Param rowBytes interval from one Surface row to the next; may be zero ##
+#Param surfaceProps LCD striping orientation and setting for device independent fonts;
+ may be nullptr
+##
+
+#Return Surface if all parameters are valid; otherwise, nullptr ##
+
+#Example
+void draw(SkCanvas* ) {
+ SkImageInfo info = SkImageInfo::MakeN32Premul(3, 3);
+ const size_t rowBytes = 64;
+ sk_sp<SkSurface> surface(SkSurface::MakeRaster(info, rowBytes, nullptr));
+ SkCanvas* canvas = surface->getCanvas();
+ canvas->clear(SK_ColorWHITE);
+ SkPixmap pixmap;
+ if (surface->peekPixels(&pixmap)) {
+ const uint32_t* colorPtr = pixmap.addr32();
+ SkPMColor pmWhite = colorPtr[0];
+ SkPaint paint;
+ canvas->drawPoint(1, 1, paint);
+ canvas->flush(); // ensure that point was drawn
+ for (int y = 0; y < info.height(); ++y) {
+ for (int x = 0; x < info.width(); ++x) {
+ SkDebugf("%c", colorPtr[x] == pmWhite ? '-' : 'x');
+ }
+ colorPtr += rowBytes / sizeof(colorPtr[0]);
+ SkDebugf("\n");
+ }
+ }
+}
+#StdOut
+---
+-x-
+---
+##
+##
+
+#SeeAlso MakeRasterDirect MakeRasterN32Premul MakeRasterDirectReleaseProc
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkSurface> MakeRaster(const SkImageInfo& imageInfo,
+ const SkSurfaceProps* props = nullptr)
+
+Allocates raster Surface. Canvas returned by Surface draws directly into pixels.
+Allocates and zeroes pixel memory. Pixel memory size is imageInfo.height() times
+imageInfo.minRowBytes().
+Pixel memory is deleted when Surface is deleted.
+
+Surface is returned if all parameters are valid.
+Valid parameters include:
+info dimensions are greater than zero;
+info contains Image_Color_Type and Image_Alpha_Type supported by Raster_Surface.
+
+#Param imageInfo width, height, Image_Color_Type, Image_Alpha_Type, Color_Space,
+ of Raster_Surface; width and height must be greater than zero
+##
+#Param props LCD striping orientation and setting for device independent fonts;
+ may be nullptr
+##
+
+#Return Surface if all parameters are valid; otherwise, nullptr ##
+
+#Example
+void draw(SkCanvas* ) {
+ SkImageInfo info = SkImageInfo::MakeN32Premul(3, 3);
+ sk_sp<SkSurface> surface(SkSurface::MakeRaster(info));
+ SkCanvas* canvas = surface->getCanvas();
+ canvas->clear(SK_ColorWHITE);
+ SkPixmap pixmap;
+ if (surface->peekPixels(&pixmap)) {
+ const uint32_t* colorPtr = pixmap.addr32();
+ SkPMColor pmWhite = colorPtr[0];
+ SkPaint paint;
+ canvas->drawPoint(1, 1, paint);
+ canvas->flush(); // ensure that point was drawn
+ for (int y = 0; y < info.height(); ++y) {
+ for (int x = 0; x < info.width(); ++x) {
+ SkDebugf("%c", colorPtr[x] == pmWhite ? '-' : 'x');
+ }
+ colorPtr += info.width();
+ SkDebugf("\n");
+ }
+ }
+}
+##
+
+#SeeAlso MakeRasterDirect MakeRasterN32Premul MakeRasterDirectReleaseProc
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkSurface> MakeRasterN32Premul(int width, int height,
+ const SkSurfaceProps* surfaceProps = nullptr)
+
+Allocates raster Surface. Canvas returned by Surface draws directly into pixels.
+Allocates and zeroes pixel memory. Pixel memory size is height times width times
+four. Pixel memory is deleted when Surface is deleted.
+
+Internally, sets Image_Info to width, height, Native_Color_Type, and
+kPremul_SkAlphaType.
+
+Surface is returned if width and height are greater than zero.
+
+Use to create Surface that matches SkPMColor, the native pixel arrangement on
+the platform. Surface drawn to output device skips converting its pixel format.
+
+#Param width pixel column count; must be greater than zero ##
+#Param height pixel row count; must be greater than zero ##
+#Param surfaceProps LCD striping orientation and setting for device independent
+ fonts; may be nullptr
+##
+
+#Return Surface if all parameters are valid; otherwise, nullptr ##
+
+#Example
+void draw(SkCanvas* ) {
+ sk_sp<SkSurface> surface(SkSurface::MakeRasterN32Premul(3, 3));
+ SkCanvas* canvas = surface->getCanvas();
+ canvas->clear(SK_ColorWHITE);
+ SkPixmap pixmap;
+ if (surface->peekPixels(&pixmap)) {
+ const uint32_t* colorPtr = pixmap.addr32();
+ SkPMColor pmWhite = colorPtr[0];
+ SkPaint paint;
+ canvas->drawPoint(1, 1, paint);
+ canvas->flush(); // ensure that point was drawn
+ for (int y = 0; y < surface->height(); ++y) {
+ for (int x = 0; x < surface->width(); ++x) {
+ SkDebugf("%c", colorPtr[x] == pmWhite ? '-' : 'x');
+ }
+ colorPtr += surface->width();
+ SkDebugf("\n");
+ }
+ }
+}
+#StdOut
+---
+-x-
+---
+##
+##
+
+#SeeAlso MakeRasterDirect MakeRasterN32Premul MakeRasterDirectReleaseProc
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkSurface> MakeFromBackendTexture(GrContext* context,
+ const GrBackendTexture& backendTexture,
+ GrSurfaceOrigin origin, int sampleCnt,
+ sk_sp<SkColorSpace> colorSpace,
+ const SkSurfaceProps* surfaceProps)
+
+Wraps a GPU-backed texture into Surface. Caller must ensure the texture is
+valid for the lifetime of returned Surface. If sampleCnt greater than zero,
+creates an intermediate MSAA Surface which is used for drawing backendTexture.
+
+Surface is returned if all parameters are valid. backendTexture is valid if
+its pixel configuration agrees with colorSpace and context; for instance, if
+backendTexture has an sRGB configuration, then context must support sRGB,
+and colorSpace must be present. Further, backendTexture width and height must
+not exceed context capabilities, and the context must be able to support
+back-end textures.
+
+If SK_SUPPORT_GPU is defined as zero, has no effect and returns nullptr.
+
+#Param context GPU_Context ##
+#Param backendTexture texture residing on GPU ##
+#Param origin one of: kBottomLeft_GrSurfaceOrigin, kTopLeft_GrSurfaceOrigin ##
+#Param sampleCnt samples per pixel, or 0 to disable full scene anti-aliasing ##
+#Param colorSpace range of colors ##
+#Param surfaceProps LCD striping orientation and setting for device independent
+ fonts; may be nullptr
+##
+
+#Return Surface if all parameters are valid; otherwise, nullptr ##
+
+#Example
+#ToDo remove !fiddle below once backEndTextureRenderTarget is available ##
+#Platform !fiddle gpu cpu
+ SkPaint paint;
+ paint.setTextSize(32);
+ GrContext* context = canvas->getGrContext();
+ if (!context) {
+ canvas->drawString("GPU only!", 20, 40, paint);
+ return;
+ }
+ sk_sp<SkSurface> gpuSurface = SkSurface::MakeFromBackendTexture(context,
+ backEndTextureRenderTarget, kTopLeft_GrSurfaceOrigin, 0, nullptr, nullptr);
+ auto surfaceCanvas = gpuSurface->getCanvas();
+ surfaceCanvas->clear(SK_ColorWHITE);
+ surfaceCanvas->drawString("GPU rocks!", 20, 40, paint);
+ sk_sp<SkImage> image(gpuSurface->makeImageSnapshot());
+ canvas->drawImage(image, 0, 0);
+##
+
+#SeeAlso GrBackendTexture MakeFromBackendRenderTarget MakeRenderTarget
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkSurface> MakeFromBackendRenderTarget(GrContext* context,
+ const GrBackendRenderTarget& backendRenderTarget,
+ GrSurfaceOrigin origin,
+ sk_sp<SkColorSpace> colorSpace,
+ const SkSurfaceProps* surfaceProps)
+
+Wraps a GPU-backed buffer into Surface. Caller must ensure render target is
+valid for the lifetime of returned Surface.
+
+Surface is returned if all parameters are valid. backendRenderTarget is valid if
+its pixel configuration agrees with colorSpace and context; for instance, if
+backendRenderTarget has an sRGB configuration, then context must support sRGB,
+and colorSpace must be present. Further, backendRenderTarget width and height must
+not exceed context capabilities, and the context must be able to support
+back-end render targets.
+
+If SK_SUPPORT_GPU is defined as zero, has no effect and returns nullptr.
+
+#Param context GPU_Context ##
+#Param backendRenderTarget GPU intermediate memory buffer ##
+#Param origin one of: kBottomLeft_GrSurfaceOrigin, kTopLeft_GrSurfaceOrigin ##
+#Param colorSpace range of colors ##
+#Param surfaceProps LCD striping orientation and setting for device independent
+ fonts; may be nullptr
+##
+
+#Return Surface if all parameters are valid; otherwise, nullptr ##
+
+#Example
+#ToDo remove !fiddle below once backEndTextureRenderTarget is available ##
+#Platform !fiddle gpu
+ SkPaint paint;
+ paint.setTextSize(32);
+ GrContext* context = canvas->getGrContext();
+ if (!context) {
+ canvas->drawString("GPU only!", 20, 40, paint);
+ return;
+ }
+ sk_sp<SkSurface> gpuSurface = SkSurface::MakeFromBackendRenderTarget(context,
+ backEndRenderTarget, kTopLeft_GrSurfaceOrigin, nullptr, nullptr);
+ auto surfaceCanvas = gpuSurface->getCanvas();
+ surfaceCanvas->clear(SK_ColorWHITE);
+ surfaceCanvas->drawString("GPU rocks!", 20, 40, paint);
+ sk_sp<SkImage> image(gpuSurface->makeImageSnapshot());
+ canvas->drawImage(image, 0, 0);
+##
+
+#SeeAlso MakeFromBackendTexture MakeRenderTarget
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkSurface> MakeFromBackendTextureAsRenderTarget(GrContext* context,
+ const GrBackendTexture& backendTexture,
+ GrSurfaceOrigin origin,
+ int sampleCnt,
+ sk_sp<SkColorSpace> colorSpace,
+ const SkSurfaceProps* surfaceProps)
+
+Used to wrap a GPU-backed texture as a SkSurface. Skia will treat the texture as
+a rendering target only, but unlike NewFromBackendRenderTarget, Skia will manage and own
+the associated render target objects (but not the provided texture). Skia will not assume
+ownership of the texture and the client must ensure the texture is valid for the lifetime
+of the SkSurface.
+
+If SK_SUPPORT_GPU is defined as zero, has no effect and returns nullptr.
+
+#Param context GPU_Context ##
+#Param backendTexture texture residing on GPU ##
+#Param origin one of: kBottomLeft_GrSurfaceOrigin, kTopLeft_GrSurfaceOrigin ##
+#Param sampleCnt samples per pixel, or 0 to disable full scene anti-aliasing ##
+#Param colorSpace range of colors ##
+#Param surfaceProps LCD striping orientation and setting for device independent
+ fonts; may be nullptr
+##
+
+#Return Surface if all parameters are valid; otherwise, nullptr ##
+
+#Example
+#Platform !fiddle gpu
+ SkPaint paint;
+ paint.setTextSize(32);
+ GrContext* context = canvas->getGrContext();
+ if (!context) {
+ canvas->drawString("GPU only!", 20, 40, paint);
+ return;
+ }
+ sk_sp<SkSurface> gpuSurface = SkSurface::MakeFromBackendTextureAsRenderTarget(
+ context, backEndTextureRenderTarget, kTopLeft_GrSurfaceOrigin, 0,
+ nullptr, nullptr);
+ auto surfaceCanvas = gpuSurface->getCanvas();
+ surfaceCanvas->clear(SK_ColorWHITE);
+ surfaceCanvas->drawString("GPU rocks!", 20, 40, paint);
+ sk_sp<SkImage> image(gpuSurface->makeImageSnapshot());
+ canvas->drawImage(image, 0, 0);
+##
+
+#SeeAlso MakeFromBackendRenderTarget MakeRenderTarget
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkSurface> MakeRenderTarget(GrContext* context, SkBudgeted budgeted,
+ const SkImageInfo& imageInfo,
+ int sampleCount, GrSurfaceOrigin surfaceOrigin,
+ const SkSurfaceProps* surfaceProps,
+ bool shouldCreateWithMips = false)
+
+Returns offscreen Surface on GPU indicated by context. Allocates memory for
+pixels, based on the width, height, and Image_Color_Type in ImageInfo. budgeted
+selects whether allocation for offscreen pixels is tracked by context. imageInfo
+describes the pixel format in Image_Color_Type, and transparency in
+Image_Alpha_Type, and color matching in Color_Space.
+
+sampleCount requests the number of samples per pixel.
+Pass zero to disable Multi_Sample_Anti_Aliasing. The request is rounded
+up to the next supported count, or rounded down if it is larger than the
+maximum supported count.
+
+surfaceOrigin pins either the top-left or the bottom-left corner to the origin.
+
+shouldCreateWithMips hints that Image returned by makeImageSnapshot is Mip_Map.
+
+If SK_SUPPORT_GPU is defined as zero, has no effect and returns nullptr.
+
+#Param context GPU_Context ##
+#Param budgeted one of: SkBudgeted::kNo, SkBudgeted::kYes ##
+#Param imageInfo width, height, Image_Color_Type, Image_Alpha_Type, Color_Space;
+ width, or height, or both, may be zero
+##
+#Param sampleCount samples per pixel, or 0 to disable full scene anti-aliasing ##
+#Param surfaceOrigin one of: kBottomLeft_GrSurfaceOrigin, kTopLeft_GrSurfaceOrigin ##
+#Param surfaceProps LCD striping orientation and setting for device independent
+ fonts; may be nullptr
+##
+#Param shouldCreateWithMips hint that Surface will host Mip_Map images ##
+
+#Return Surface if all parameters are valid; otherwise, nullptr ##
+
+#ToDo not sure that this example is relevant; surfaceOrigin doesn't appear to do anything ##
+#Example
+#Platform gpu
+#Height 64
+ SkPaint paint;
+ paint.setTextSize(32);
+ GrContext* context = canvas->getGrContext();
+ if (!context) {
+ canvas->drawString("GPU only!", 20, 40, paint);
+ return;
+ }
+ SkImageInfo info = SkImageInfo::MakeN32(256, 64, kOpaque_SkAlphaType);
+ for (auto surfaceOrigin : { kTopLeft_GrSurfaceOrigin, kBottomLeft_GrSurfaceOrigin } ) {
+ auto gpuSurface(SkSurface::MakeRenderTarget(context, SkBudgeted::kNo, info, 0,
+ surfaceOrigin, nullptr));
+ auto surfaceCanvas = gpuSurface->getCanvas();
+ surfaceCanvas->clear(SK_ColorWHITE);
+ surfaceCanvas->drawString("GPU rocks!", 20, 40, paint);
+ sk_sp<SkImage> image(gpuSurface->makeImageSnapshot());
+ canvas->drawImage(image, 0, 0);
+ canvas->translate(0, 128);
+ }
+##
+
+#SeeAlso MakeFromBackendRenderTarget MakeFromBackendTextureAsRenderTarget
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkSurface> MakeRenderTarget(GrContext* context, SkBudgeted budgeted,
+ const SkImageInfo& imageInfo, int sampleCount,
+ const SkSurfaceProps* props)
+
+Returns offscreen Surface on GPU indicated by context. Allocates memory for
+pixels, based on the width, height, and Image_Color_Type in ImageInfo. budgeted
+selects whether allocation for offscreen pixels is tracked by context. imageInfo
+describes the pixel format in Image_Color_Type, and transparency in
+Image_Alpha_Type, and color matching in Color_Space.
+
+sampleCount requests the number of samples per pixel.
+Pass zero to disable Multi_Sample_Anti_Aliasing. The request is rounded
+up to the next supported count, or rounded down if it is larger than the
+maximum supported count.
+
+Surface bottom-left corner is pinned to the origin.
+
+#Param context GPU_Context ##
+#Param budgeted one of: SkBudgeted::kNo, SkBudgeted::kYes ##
+#Param imageInfo width, height, Image_Color_Type, Image_Alpha_Type, Color_Space,
+ of Raster_Surface; width, or height, or both, may be zero
+##
+#Param sampleCount samples per pixel, or 0 to disable Multi_Sample_Anti_Aliasing ##
+#Param props LCD striping orientation and setting for device independent
+ fonts; may be nullptr
+##
+
+#Return Surface if all parameters are valid; otherwise, nullptr ##
+
+#Example
+#Description
+LCD text takes advantage of raster striping to improve resolution. Only one of
+the four combinations is correct, depending on whether the monitor's LCD is
+horizontal or vertical, and whether the order of the stripes is red blue green
+or red green blue.
+##
+void draw(SkCanvas* canvas) {
+ auto test_draw = [](SkCanvas* surfaceCanvas) -> void {
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ paint.setLCDRenderText(true);
+ paint.setColor(0xFFBBBBBB);
+ surfaceCanvas->drawRect(SkRect::MakeWH(128, 64), paint);
+ paint.setColor(SK_ColorWHITE);
+ paint.setTextSize(32);
+ surfaceCanvas->drawString("Pest", 0, 25, paint);
+ };
+ GrContext* context = canvas->getGrContext();
+ SkImageInfo info = SkImageInfo::MakeN32(128, 64, kOpaque_SkAlphaType);
+ SkAutoTMalloc<SkPMColor> storage(info.computeMinByteSize());
+ SkBitmap bitmap;
+ bitmap.installPixels(info, storage.get(), info.minRowBytes());
+ int y = 0;
+ for (auto geometry : { kRGB_H_SkPixelGeometry, kBGR_H_SkPixelGeometry,
+ kRGB_V_SkPixelGeometry, kBGR_V_SkPixelGeometry } ) {
+ SkSurfaceProps props(0, geometry);
+ std::unique_ptr<SkCanvas> offscreen = SkCanvas::MakeRasterDirect(info, storage.get(),
+ info.minRowBytes(), &props);
+ sk_sp<SkSurface> surface = context ? SkSurface::MakeRenderTarget(
+ context, SkBudgeted::kNo, info, 0, &props) : SkSurface::MakeRaster(info, &props);
+ test_draw(surface->getCanvas());
+ surface->draw(canvas, 0, y, nullptr);
+ surface->draw(offscreen.get(), 0, 0, nullptr);
+ SkAutoCanvasRestore acr(canvas, true);
+ canvas->scale(8, 8);
+ canvas->drawBitmap(bitmap, 12, y / 8);
+ y += 64;
+ }
+}
+##
+
+#SeeAlso MakeFromBackendRenderTarget MakeFromBackendTextureAsRenderTarget
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkSurface> MakeRenderTarget(GrContext* context, SkBudgeted budgeted,
+ const SkImageInfo& imageInfo)
+
+Returns offscreen Surface on GPU indicated by context. Allocates memory for
+pixels, based on the width, height, and Image_Color_Type in ImageInfo. budgeted
+selects whether allocation for offscreen pixels is tracked by context. imageInfo
+describes the pixel format in Image_Color_Type, and transparency in
+Image_Alpha_Type, and color matching in Color_Space.
+
+Surface bottom-left corner is pinned to the origin.
+
+#Param context GPU_Context ##
+#Param budgeted one of: SkBudgeted::kNo, SkBudgeted::kYes ##
+#Param imageInfo width, height, Image_Color_Type, Image_Alpha_Type, Color_Space,
+ of Raster_Surface; width, or height, or both, may be zero
+##
+
+#Return Surface if all parameters are valid; otherwise, nullptr ##
+
+#Example
+#Platform gpu
+ SkPaint paint;
+ paint.setTextSize(32);
+ GrContext* context = canvas->getGrContext();
+ if (!context) {
+ canvas->drawString("GPU only!", 20, 40, paint);
+ return;
+ }
+ SkImageInfo info = SkImageInfo::MakeN32(256, 64, kOpaque_SkAlphaType);
+ auto gpuSurface(SkSurface::MakeRenderTarget(context, SkBudgeted::kNo, info));
+ auto surfaceCanvas = gpuSurface->getCanvas();
+ surfaceCanvas->clear(SK_ColorWHITE);
+ surfaceCanvas->drawString("GPU rocks!", 20, 40, paint);
+ sk_sp<SkImage> image(gpuSurface->makeImageSnapshot());
+ canvas->drawImage(image, 0, 0);
+##
+
+#SeeAlso MakeFromBackendRenderTarget MakeFromBackendTextureAsRenderTarget
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method static sk_sp<SkSurface> MakeNull(int width, int height)
+
+Returns Surface without backing pixels. Drawing to Canvas returned from Surface
+has no effect. Calling makeImageSnapshot() on returned Surface returns nullptr.
+
+#Param width one or greater ##
+#Param height one or greater ##
+
+#Return Surface if width and height are positive; otherwise, nullptr ##
+
+#Example
+ SkDebugf("SkSurface::MakeNull(0, 0) %c= nullptr\n", SkSurface::MakeNull(0, 0) == nullptr ?
+ '=' : '!');
+ const int w = 37;
+ const int h = 1000;
+ auto surf = SkSurface::MakeNull(w, h);
+ auto nullCanvas = surf->getCanvas();
+ nullCanvas->drawPaint(SkPaint()); // does not crash, nothing draws
+ SkDebugf("surf->makeImageSnapshot() %c= nullptr\n", surf->makeImageSnapshot() == nullptr ?
+ '=' : '!');
+#StdOut
+SkSurface::MakeNull(0, 0) == nullptr
+surf->makeImageSnapshot() == nullptr
+##
+##
+
+#SeeAlso MakeRaster MakeRenderTarget
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method int width() const
+
+Returns pixel count in each row; may be zero or greater.
+
+#Return number of pixel columns ##
+
+#Example
+ const int width = 37;
+ const int height = 1000;
+ auto surf = SkSurface::MakeNull(width, height);
+ auto nullCanvas = surf->getCanvas();
+ SkDebugf("surface width=%d canvas width=%d\n", surf->width(),
+ nullCanvas->getBaseLayerSize().fWidth);
+#StdOut
+surface width=37 canvas width=37
+##
+##
+
+#SeeAlso height()
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method int height() const
+
+Returns pixel row count; may be zero or greater.
+
+#Return number of pixel rows ##
+
+#Example
+ const int width = 37;
+ const int height = 1000;
+ auto surf = SkSurface::MakeNull(width, height);
+ auto nullCanvas = surf->getCanvas();
+ SkDebugf("surface height=%d canvas height=%d\n", surf->height(),
+ nullCanvas->getBaseLayerSize().fHeight);
+#StdOut
+surface height=1000 canvas height=1000
+##
+##
+
+#SeeAlso width()
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method uint32_t generationID()
+
+Returns unique value identifying the content of Surface. Returned value changes
+each time the content changes. Content is changed by drawing, or by calling
+notifyContentWillChange.
+
+#Return unique content identifier ##
+
+#Example
+ auto surface = SkSurface::MakeRasterN32Premul(1, 1);
+ for (int i = 0; i < 3; ++i) {
+ SkDebugf("surface generationID: %d\n", surface->generationID());
+ if (0 == i) {
+ surface->getCanvas()->drawColor(SK_ColorBLACK);
+ } else {
+ surface->notifyContentWillChange(SkSurface::kDiscard_ContentChangeMode);
+ }
+ }
+#StdOut
+surface generationID: 1
+surface generationID: 2
+surface generationID: 3
+##
+##
+
+#SeeAlso notifyContentWillChange ContentChangeMode getCanvas
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Enum ContentChangeMode
+
+#Code
+ enum ContentChangeMode {
+ kDiscard_ContentChangeMode,
+ kRetain_ContentChangeMode,
+ };
+##
+
+ContentChangeMode members are parameters to notifyContentWillChange.
+
+#Const kDiscard_ContentChangeMode
+Pass to notifyContentWillChange to discard surface contents when
+the surface is cleared or overwritten.
+##
+#Const kRetain_ContentChangeMode
+Pass to notifyContentWillChange when to preserve surface contents.
+If a snapshot has been generated, this copies the Surface contents.
+##
+
+#SeeAlso notifyContentWillChange generationID
+
+#Enum ##
+
+# ------------------------------------------------------------------------------
+
+#Method void notifyContentWillChange(ContentChangeMode mode)
+
+Notifies that Surface contents will be changed by code outside of Skia.
+Subsequent calls to generationID return a different value.
+
+mode is normally passed as kRetain_ContentChangeMode.
+
+#Private
+CAN WE DEPRECATE THIS?
+##
+
+#Param mode one of: kDiscard_ContentChangeMode, kRetain_ContentChangeMode ##
+
+#Example
+ auto surface = SkSurface::MakeRasterN32Premul(1, 1);
+ for (int i = 0; i < 3; ++i) {
+ SkDebugf("surface generationID: %d\n", surface->generationID());
+ if (0 == i) {
+ surface->getCanvas()->drawColor(SK_ColorBLACK);
+ } else {
+ surface->notifyContentWillChange(SkSurface::kDiscard_ContentChangeMode);
+ }
+ }
+##
+
+#SeeAlso ContentChangeMode generationID
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Enum BackendHandleAccess
+
+#Code
+ enum BackendHandleAccess {
+ kFlushRead_BackendHandleAccess,
+ kFlushWrite_BackendHandleAccess,
+ kDiscardWrite_BackendHandleAccess,
+ };
+##
+
+#Const kFlushRead_BackendHandleAccess
+Caller may read from the back-end object.
+##
+#Const kFlushWrite_BackendHandleAccess
+Caller may write to the back-end object.
+##
+#Const kDiscardWrite_BackendHandleAccess
+Caller must overwrite the entire back-end object.
+##
+
+#Example
+#Platform gpu
+ SkPaint paint;
+ paint.setTextSize(32);
+ GrContext* context = canvas->getGrContext();
+ if (!context) {
+ canvas->drawString("GPU only!", 20, 40, paint);
+ return;
+ }
+ sk_sp<SkSurface> gpuSurface = SkSurface::MakeRenderTarget(
+ context, SkBudgeted::kYes, SkImageInfo::MakeN32Premul(10, 10));
+ int y = 20;
+ SkString str;
+ paint.setTextSize(16);
+ for (auto access : { SkSurface::kFlushRead_BackendHandleAccess,
+ SkSurface::kFlushWrite_BackendHandleAccess,
+ SkSurface::kDiscardWrite_BackendHandleAccess } ) {
+ sk_sp<SkImage> image(gpuSurface->makeImageSnapshot());
+ str.printf("uniqueID=%d", image->uniqueID());
+ canvas->drawString(str, 20, y += 20, paint);
+ GrBackendObject backendObject = gpuSurface->getTextureHandle(access);
+ str.printf("backendObject %c= 0", backendObject != 0 ? '!' : '=');
+ canvas->drawString(str, 20, y += 20, paint);
+ }
+ sk_sp<SkImage> image(gpuSurface->makeImageSnapshot());
+ str.printf("final image uniqueID=%d", image->uniqueID());
+ canvas->drawString(str, 20, y += 20, paint);
+##
+
+#SeeAlso getTextureHandle getRenderTargetHandle
+
+#Enum ##
+
+# ------------------------------------------------------------------------------
+
+#Method GrBackendObject getTextureHandle(BackendHandleAccess backendHandleAccess)
+
+Returns the GPU back-end reference of the texture used by Surface, or zero
+if Surface is not backed by a GPU texture.
+
+The returned texture handle is only valid until the next draw into Surface,
+or when Surface is deleted.
+
+#Param backendHandleAccess one of: kFlushRead_BackendHandleAccess,
+ kFlushWrite_BackendHandleAccess, kDiscardWrite_BackendHandleAccess
+##
+
+#Return GPU texture reference ##
+
+#Example
+#Platform gpu
+#Height 64
+ SkPaint paint;
+ paint.setTextSize(32);
+ GrContext* context = canvas->getGrContext();
+ if (!context) {
+ canvas->drawString("GPU only!", 20, 40, paint);
+ return;
+ }
+ sk_sp<SkSurface> gpuSurface = SkSurface::MakeRenderTarget(
+ context, SkBudgeted::kYes, SkImageInfo::MakeN32Premul(10, 10));
+ GrBackendObject backendObject = gpuSurface->getTextureHandle(
+ SkSurface::kFlushRead_BackendHandleAccess);
+ if (backendObject) {
+ SkString str;
+ str.printf("backendObject=%08x", backendObject);
+ paint.setTextSize(16);
+ canvas->drawString(str, 20, 40, paint);
+ }
+##
+
+#SeeAlso getRenderTargetHandle GrBackendObject BackendHandleAccess
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool getRenderTargetHandle(GrBackendObject* backendObject,
+ BackendHandleAccess backendHandleAccess)
+
+Returns true and stores the GPU back-end reference of the render target used
+by Surface in backendObject.
+
+Return false if Surface is not backed by a GPU render target, and leaves
+backendObject unchanged.
+
+The returned render target handle is only valid until the next draw into Surface,
+or when Surface is deleted.
+
+In OpenGL this returns the frame buffer object ID.
+
+#Param backendObject GPU intermediate memory buffer ##
+#Param backendHandleAccess one of: kFlushRead_BackendHandleAccess,
+ kFlushWrite_BackendHandleAccess, kDiscardWrite_BackendHandleAccess
+##
+
+#Return true if Surface is backed by GPU texture ##
+
+#Example
+#Platform gpu
+#Height 64
+ SkPaint paint;
+ paint.setTextSize(32);
+ GrContext* context = canvas->getGrContext();
+ if (!context) {
+ canvas->drawString("GPU only!", 20, 40, paint);
+ return;
+ }
+ sk_sp<SkSurface> gpuSurface = SkSurface::MakeRenderTarget(
+ context, SkBudgeted::kYes, SkImageInfo::MakeN32Premul(10, 10));
+ GrBackendObject backendObject;
+ if (gpuSurface->getRenderTargetHandle(&backendObject,
+ SkSurface::kFlushRead_BackendHandleAccess)) {
+ SkString str;
+ str.printf("backendObject=%d", backendObject);
+ paint.setTextSize(16);
+ canvas->drawString(str, 20, 40, paint);
+ }
+##
+
+#SeeAlso getTextureHandle GrBackendObject BackendHandleAccess
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method SkCanvas* getCanvas()
+
+Returns Canvas that draws into Surface. Subsequent calls return the same Canvas.
+Canvas returned is managed and owned by Surface, and is deleted when Surface
+is deleted.
+
+#Return drawing Canvas for Surface ##
+
+#Example
+#Height 64
+ sk_sp<SkSurface> surface(SkSurface::MakeRasterN32Premul(64, 64));
+ SkCanvas* surfaceCanvas = surface->getCanvas();
+ surfaceCanvas->clear(SK_ColorBLUE);
+ SkPaint paint;
+ paint.setTextSize(40);
+ surfaceCanvas->drawString("\xF0\x9F\x98\x81", 12, 45, paint);
+ surface->draw(canvas, 0, 0, nullptr);
+##
+
+#SeeAlso makeSurface makeImageSnapshot draw()
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method sk_sp<SkSurface> makeSurface(const SkImageInfo& imageInfo)
+
+Returns a compatible Surface, or nullptr. Returned Surface contains
+the same raster, GPU, or null properties as the original. Returned Surface
+does not share the same pixels.
+
+Returns nullptr if imageInfo width or height are zero, or if imageInfo
+is incompatible with Surface.
+
+#Param imageInfo width, height, Image_Color_Type, Image_Alpha_Type, Color_Space,
+ of Surface; width and height must be greater than zero
+##
+
+#Return compatible Surface or nullptr ##
+
+#Example
+#Height 96
+ sk_sp<SkSurface> big(SkSurface::MakeRasterN32Premul(64, 64));
+ sk_sp<SkSurface> lil(big->makeSurface(SkImageInfo::MakeN32(32, 32, kPremul_SkAlphaType)));
+ big->getCanvas()->clear(SK_ColorRED);
+ lil->getCanvas()->clear(SK_ColorBLACK);
+ SkPixmap pixmap;
+ if (big->peekPixels(&pixmap)) {
+ SkBitmap bigBits;
+ bigBits.installPixels(pixmap);
+ canvas->drawBitmap(bigBits, 0, 0);
+ }
+ if (lil->peekPixels(&pixmap)) {
+ SkBitmap lilBits;
+ lilBits.installPixels(pixmap);
+ canvas->drawBitmap(lilBits, 64, 64);
+ }
+##
+
+#SeeAlso makeImageSnapshot getCanvas draw()
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method sk_sp<SkImage> makeImageSnapshot()
+
+Returns Image capturing Surface contents. Subsequent drawing to Surface contents
+are not captured. Image allocation is accounted for if Surface was created with
+SkBudgeted::kYes.
+
+#Return Image initialized with Surface contents ##
+
+#Example
+#Height 64
+ sk_sp<SkSurface> big(SkSurface::MakeRasterN32Premul(64, 64));
+ sk_sp<SkSurface> lil(big->makeSurface(SkImageInfo::MakeN32(32, 32, kPremul_SkAlphaType)));
+ big->getCanvas()->clear(SK_ColorRED);
+ lil->getCanvas()->clear(SK_ColorBLACK);
+ sk_sp<SkImage> early(big->makeImageSnapshot());
+ lil->draw(big->getCanvas(), 16, 16, nullptr);
+ sk_sp<SkImage> later(big->makeImageSnapshot());
+ canvas->drawImage(early, 0, 0);
+ canvas->drawImage(later, 128, 0);
+##
+
+#SeeAlso draw getCanvas
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method void draw(SkCanvas* canvas, SkScalar x, SkScalar y, const SkPaint* paint)
+
+Draws Surface contents to canvas, with its top-left corner at (x, y).
+
+If Paint paint is not nullptr, apply Color_Filter, Color_Alpha, Image_Filter,
+Blend_Mode, and Draw_Looper.
+
+#Param canvas Canvas drawn into ##
+#Param x horizontal offset in Canvas ##
+#Param y vertical offset in Canvas ##
+#Param paint Paint containing Blend_Mode, Color_Filter, Image_Filter,
+ and so on; or nullptr
+##
+
+#Example
+#Height 64
+ sk_sp<SkSurface> big(SkSurface::MakeRasterN32Premul(64, 64));
+ sk_sp<SkSurface> lil(big->makeSurface(SkImageInfo::MakeN32(32, 32, kPremul_SkAlphaType)));
+ big->getCanvas()->clear(SK_ColorRED);
+ lil->getCanvas()->clear(SK_ColorBLACK);
+ lil->draw(big->getCanvas(), 16, 16, nullptr);
+ SkPixmap pixmap;
+ if (big->peekPixels(&pixmap)) {
+ SkBitmap bigBits;
+ bigBits.installPixels(pixmap);
+ canvas->drawBitmap(bigBits, 0, 0);
+ }
+##
+
+#SeeAlso makeImageSnapshot getCanvas
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool peekPixels(SkPixmap* pixmap)
+
+Copies Surface pixel address, row bytes, and Image_Info to Pixmap, if address
+is available, and returns true. If pixel address is not available, return
+false and leave Pixmap unchanged.
+
+pixmap contents become invalid on any future change to Surface.
+
+#Param pixmap storage for pixel state if pixels are readable; otherwise, ignored ##
+
+#Return true if Surface has direct access to pixels ##
+
+#Example
+#Height 64
+ sk_sp<SkSurface> surf(SkSurface::MakeRasterN32Premul(64, 64));
+ auto surfCanvas = surf->getCanvas();
+ surfCanvas->clear(SK_ColorRED);
+ SkPaint paint;
+ paint.setTextSize(40);
+ surfCanvas->drawString("&", 16, 48, paint);
+ SkPixmap pixmap;
+ if (surf->peekPixels(&pixmap)) {
+ SkBitmap surfBits;
+ surfBits.installPixels(pixmap);
+ canvas->drawBitmap(surfBits, 0, 0);
+ }
+##
+
+#SeeAlso readPixels
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool readPixels(const SkPixmap& dst, int srcX, int srcY)
+
+Copies Rect of pixels to dst.
+
+Source Rect corners are (srcX, srcY) and (this->width(), this->height()).
+Destination Rect corners are (0, 0) and (dst.width(), dst.height()).
+Copies each readable pixel intersecting both rectangles, without scaling,
+converting to dst.colorType() and dst.alphaType() if required.
+
+Pixels are readable when Surface is raster, or backed by a GPU.
+
+The destination pixel storage must be allocated by the caller.
+
+Pixel values are converted only if Image_Color_Type and Image_Alpha_Type
+do not match. Only pixels within both source and destination rectangles
+are copied. dst contents outside Rect intersection are unchanged.
+
+Pass negative values for srcX or srcY to offset pixels across or down destination.
+
+Does not copy, and returns false if:
+
+#List
+# Source and destination rectangles do not intersect. ##
+# Pixmap pixels could not be allocated. ##
+# dst.rowBytes() is too small to contain one row of pixels. ##
+##
+
+#Param dst storage for pixels copied from Surface ##
+#Param srcX offset into readable pixels in x; may be negative ##
+#Param srcY offset into readable pixels in y; may be negative ##
+
+#Return true if pixels were copied ##
+
+#Example
+#Height 32
+ sk_sp<SkSurface> surf(SkSurface::MakeRasterN32Premul(64, 64));
+ auto surfCanvas = surf->getCanvas();
+ surfCanvas->clear(SK_ColorRED);
+ SkPaint paint;
+ paint.setTextSize(40);
+ surfCanvas->drawString("&", 0, 32, paint);
+ std::vector<SkPMColor> storage;
+ storage.resize(surf->width() * surf->height());
+ SkPixmap pixmap(SkImageInfo::MakeN32Premul(32, 32), &storage.front(),
+ surf->width() * sizeof(storage[0]));
+ if (surf->readPixels(pixmap, 0, 0)) {
+ SkBitmap surfBits;
+ surfBits.installPixels(pixmap);
+ canvas->drawBitmap(surfBits, 0, 0);
+ }
+##
+
+#SeeAlso peekPixels
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes,
+ int srcX, int srcY)
+
+Copies Rect of pixels from Canvas into dstPixels.
+
+Source Rect corners are (srcX, srcY) and (this->width(), this->height()).
+Destination Rect corners are (0, 0) and (dstInfo.width(), dstInfo.height()).
+Copies each readable pixel intersecting both rectangles, without scaling,
+converting to dstInfo.colorType() and dstInfo.alphaType() if required.
+
+Pixels are readable when Surface is raster, or backed by a GPU.
+
+The destination pixel storage must be allocated by the caller.
+
+Pixel values are converted only if Image_Color_Type and Image_Alpha_Type
+do not match. Only pixels within both source and destination rectangles
+are copied. dstPixels contents outside Rect intersection are unchanged.
+
+Pass negative values for srcX or srcY to offset pixels across or down destination.
+
+Does not copy, and returns false if:
+
+#List
+# Source and destination rectangles do not intersect. ##
+# Surface pixels could not be converted to dstInfo.colorType() or dstInfo.alphaType(). ##
+# dstRowBytes is too small to contain one row of pixels. ##
+##
+
+#Param dstInfo width, height, Image_Color_Type, and Image_Alpha_Type of dstPixels ##
+#Param dstPixels storage for pixels; dstInfo.height() times dstRowBytes, or larger ##
+#Param dstRowBytes size of one destination row; dstInfo.width() times pixel size, or larger ##
+#Param srcX offset into readable pixels in x; may be negative ##
+#Param srcY offset into readable pixels in y; may be negative ##
+
+#Return true if pixels were copied ##
+
+#Example
+#Height 64
+#Description
+ A black oval drawn on a red background provides an image to copy.
+ readPixels copies one quarter of the Surface into each of the four corners.
+ The copied quarter ovals overdraw the original oval.
+##
+ sk_sp<SkSurface> surf(SkSurface::MakeRasterN32Premul(64, 64));
+ auto surfCanvas = surf->getCanvas();
+ surfCanvas->clear(SK_ColorRED);
+ SkPaint paint;
+ surfCanvas->drawOval({4, 8, 58, 54}, paint);
+ SkImageInfo info = SkImageInfo::Make(64, 64, kBGRA_8888_SkColorType, kPremul_SkAlphaType);
+ sk_sp<SkData> data(SkData::MakeUninitialized(info.minRowBytes() * info.height()));
+ sk_bzero(data->writable_data(), info.minRowBytes() * info.height());
+ for (int x : { 32, -32 } ) {
+ for (int y : { 32, -32 } ) {
+ surf->readPixels(info, data->writable_data(), info.minRowBytes(), x, y);
+ }
+ }
+ sk_sp<SkImage> image = SkImage::MakeRasterData(info, data, info.minRowBytes());
+ canvas->drawImage(image, 0, 0);
+##
+
+#SeeAlso peekPixels
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool readPixels(const SkBitmap& dst, int srcX, int srcY)
+
+Copies Rect of pixels from Surface into bitmap.
+
+Source Rect corners are (srcX, srcY) and (this->width(), this->height()).
+Destination Rect corners are (0, 0) and (bitmap.width(), bitmap.height()).
+Copies each readable pixel intersecting both rectangles, without scaling,
+converting to bitmap.colorType() and bitmap.alphaType() if required.
+
+Pixels are readable when Surface is raster, or backed by a GPU.
+
+The destination pixel storage must be allocated by the caller.
+
+Pixel values are converted only if Image_Color_Type and Image_Alpha_Type
+do not match. Only pixels within both source and destination rectangles
+are copied. dst contents outside Rect intersection are unchanged.
+
+Pass negative values for srcX or srcY to offset pixels across or down destination.
+
+Does not copy, and returns false if:
+
+#List
+# Source and destination rectangles do not intersect. ##
+# Surface pixels could not be converted to dst.colorType() or dst.alphaType(). ##
+# dst pixels could not be allocated. ##
+# dst.rowBytes() is too small to contain one row of pixels. ##
+##
+
+#Param dst storage for pixels copied from Surface ##
+#Param srcX offset into readable pixels in x; may be negative ##
+#Param srcY offset into readable pixels in y; may be negative ##
+
+#Return true if pixels were copied ##
+
+#Example
+ sk_sp<SkSurface> surf(SkSurface::MakeRasterN32Premul(64, 64));
+ auto surfCanvas = surf->getCanvas();
+ surfCanvas->clear(SK_ColorGREEN);
+ SkPaint paint;
+ surfCanvas->drawOval({2, 10, 58, 54}, paint);
+ SkImageInfo info = SkImageInfo::Make(64, 64, kBGRA_8888_SkColorType, kPremul_SkAlphaType);
+ SkBitmap bitmap;
+ bitmap.setInfo(info);
+ bitmap.allocPixels();
+ for (int x : { 32, -32 } ) {
+ for (int y : { 32, -32 } ) {
+ surf->readPixels(bitmap, x, y);
+ }
+ }
+ canvas->drawBitmap(bitmap, 0, 0);
+##
+
+#SeeAlso peekPixels
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method const SkSurfaceProps& props() const
+
+Returns Surface_Properties for surface.
+
+#Return LCD striping orientation and setting for device independent fonts ##
+
+#Example
+ const char* names[] = { "Unknown", "RGB_H", "BGR_H", "RGB_V", "BGR_V" };
+ sk_sp<SkSurface> surf(SkSurface::MakeRasterN32Premul(64, 64));
+ SkDebugf("surf.props(): k%s_SkPixelGeometry\n", names[surf->props().pixelGeometry()]);
+#StdOut
+surf.props(): kRGB_H_SkPixelGeometry
+##
+##
+
+#SeeAlso SkSurfaceProps
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method void prepareForExternalIO()
+
+To be deprecated.
+
+#NoExample
+##
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method void flush()
+
+Issues pending Surface commands to the GPU-backed API and resolves any Surface MSAA.
+
+Skia flushes as needed, so it is not necessary to call this if Skia manages
+drawing and object lifetime. Call when interleaving Skia calls with native
+GPU calls.
+
+#NoExample
+##
+
+#SeeAlso GrBackendSemaphore
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method GrSemaphoresSubmitted flushAndSignalSemaphores(int numSemaphores,
+ GrBackendSemaphore signalSemaphores[])
+
+Issues pending Surface commands to the GPU-backed API and resolves any Surface MSAA.
+After issuing all commands, signalSemaphores of count numSemaphores semaphores
+are signaled by the GPU.
+
+For each GrBackendSemaphore in signalSemaphores:
+if GrBackendSemaphore is initialized, the GPU back-end uses the semaphore as is;
+otherwise, a new semaphore is created and initializes GrBackendSemaphore.
+
+The caller must delete the semaphores created and returned in signalSemaphores.
+GrBackendSemaphore can be deleted as soon as this function returns.
+
+If the back-end API is OpenGL only uninitialized GrBackendSemaphores are supported.
+
+If the back-end API is Vulkan semaphores may be initialized or uninitialized.
+If uninitialized, created semaphores are valid only with the VkDevice
+with which they were created.
+
+If GrSemaphoresSubmitted::kNo is returned, the GPU back-end did not create or
+add any semaphores to signal on the GPU; the caller should not instruct the GPU
+to wait on any of the semaphores.
+
+Pending surface commands are flushed regardless of the return result.
+
+#Param numSemaphores size of signalSemaphores array ##
+#Param signalSemaphores array of semaphore containers ##
+
+#Return one of: GrSemaphoresSubmitted::kYes, GrSemaphoresSubmitted::kNo ##
+
+#NoExample
+##
+
+#SeeAlso wait GrBackendSemaphore
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool wait(int numSemaphores, const GrBackendSemaphore* waitSemaphores)
+
+Inserts a list of GPU semaphores that the current GPU-backed API must wait on before
+executing any more commands on the GPU for this surface. Skia will take ownership of the
+underlying semaphores and delete them once they have been signaled and waited on.
+If this call returns false, then the GPU back-end will not wait on any passed in semaphores,
+and the client will still own the semaphores.
+
+#Param numSemaphores size of waitSemaphores array ##
+#Param waitSemaphores array of semaphore containers ##
+
+#Return true if GPU is waiting on semaphores ##
+
+#Example
+#ToDo this is copy and paste silliness masquerading as an example. Probably need gpu
+ globals and definitely need gpu expertise to make a real example out of this
+ ##
+#Platform !fiddle gpu
+#Height 64
+ SkPaint paint;
+ paint.setTextSize(32);
+ GrContext* context = canvas->getGrContext();
+ if (!context) {
+ canvas->drawString("GPU only!", 20, 40, paint);
+ return;
+ }
+ GrBackendSemaphore semaphore;
+ sk_sp<SkSurface> surface = SkSurface::MakeRenderTarget(
+ context, SkBudgeted::kYes, SkImageInfo::MakeN32Premul(64, 64));
+ surface->flushAndSignalSemaphores(1, &semaphore);
+ sk_sp<SkImage> image = surface->makeImageSnapshot();
+ GrBackendObject backendImage = image->getTextureHandle(false); // unused
+ SkASSERT(backendImage);
+ const SkImageInfo childImageInfo = SkImageInfo::Make(64, 64,
+ kRGBA_8888_SkColorType, kPremul_SkAlphaType);
+ sk_sp<SkSurface> childSurface(SkSurface::MakeRenderTarget(context, SkBudgeted::kNo,
+ childImageInfo, 0, kTopLeft_GrSurfaceOrigin, nullptr));
+ GrBackendTexture backendTexture;
+ sk_sp<SkImage> childImage = SkImage::MakeFromTexture(context,
+ backendTexture, // undefined
+ kTopLeft_GrSurfaceOrigin, kPremul_SkAlphaType, nullptr);
+ SkCanvas* childCanvas = childSurface->getCanvas();
+ childCanvas->clear(SK_ColorRED);
+ childSurface->wait(1, &semaphore);
+ childCanvas->drawImage(childImage, 32, 0);
+ childSurface->draw(canvas, 0, 0, nullptr);
+##
+
+#SeeAlso flushAndSignalSemaphores GrBackendSemaphore
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method bool characterize(SkSurfaceCharacterization* characterization) const
+
+Initializes Surface_Characterization that can be used to perform GPU back-end
+pre-processing in a separate thread. Typically this is used to divide drawing
+into multiple tiles. DeferredDisplayListRecorder records the drawing commands
+for each tile.
+
+Return true if Surface supports characterization. Raster_Surface returns false.
+
+#Param characterization properties for parallel drawing ##
+
+#Return true if supported ##
+
+#Example
+#Platform gpu
+#Height 64
+ SkPaint paint;
+ paint.setTextSize(32);
+ GrContext* context = canvas->getGrContext();
+ if (!context) {
+ canvas->drawString("GPU only!", 20, 40, paint);
+ return;
+ }
+ sk_sp<SkSurface> gpuSurface = SkSurface::MakeRenderTarget(
+ context, SkBudgeted::kYes, SkImageInfo::MakeN32Premul(64, 64));
+ SkSurfaceCharacterization characterization;
+ if (!gpuSurface->characterize(&characterization)) {
+ canvas->drawString("characterization unsupported", 20, 40, paint);
+ return;
+ }
+ // start of threadable work
+ SkDeferredDisplayListRecorder recorder(characterization);
+ SkCanvas* subCanvas = recorder.getCanvas();
+ subCanvas->clear(SK_ColorGREEN);
+ std::unique_ptr<SkDeferredDisplayList> displayList = recorder.detach();
+ // end of threadable work
+ gpuSurface->draw(displayList.get());
+ sk_sp<SkImage> img = gpuSurface->makeImageSnapshot();
+ canvas->drawImage(std::move(img), 0, 0);
+##
+
+#SeeAlso draw() SkSurfaceCharacterization SkDeferredDisplayList
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
+#Method void draw(SkDeferredDisplayList* deferredDisplayList)
+
+Draws deferred display list created using SkDeferredDisplayListRecorder.
+The draw has no effect if Surface_Characterization stored in deferredDisplayList
+is not compatible with Surface.
+
+#Param deferredDisplayList drawing commands ##
+
+#Example
+#Height 64
+#Platform gpu cpu
+ SkPaint paint;
+ paint.setTextSize(16);
+ sk_sp<SkSurface> gpuSurface = SkSurface::MakeRasterN32Premul(64, 64);
+ SkSurfaceCharacterization characterization;
+ if (!gpuSurface->characterize(&characterization)) {
+ canvas->drawString("characterization unsupported", 20, 40, paint);
+ return;
+ }
+ // start of threadable work
+ SkDeferredDisplayListRecorder recorder(characterization);
+ SkCanvas* subCanvas = recorder.getCanvas();
+ subCanvas->clear(SK_ColorGREEN);
+ std::unique_ptr<SkDeferredDisplayList> displayList = recorder.detach();
+ // end of threadable work
+ gpuSurface->draw(displayList.get());
+ sk_sp<SkImage> img = gpuSurface->makeImageSnapshot();
+ canvas->drawImage(std::move(img), 0, 0);
+##
+
+#SeeAlso characterize() SkSurfaceCharacterization SkDeferredDisplayList
+
+#Method ##
+
+#Class SkSurface ##
+
+#Topic Surface ##
diff --git a/docs/undocumented.bmh b/docs/undocumented.bmh
index 8cb21282a0..4163b43e89 100644
--- a/docs/undocumented.bmh
+++ b/docs/undocumented.bmh
@@ -1,19 +1,18 @@
# external references that will be documented eventually ...
#External
- DirectWrite TrueType Windows Linux Android iOS
+ DirectWrite TrueType Windows Linux Android iOS __ANDROID_API__
FreeType FreeType-based Harfbuzz
Descenders Kerning Unhinted
- LCD RGB
+ LCD RGB sRGB
Unicode Unicode5 UTF-8 UTF-16 UTF-32 ASCII Unichar
API
CPU
- GPU GPU-backed OpenGL Vulkan
+ GPU GPU-backed OpenGL Vulkan I/O MSAA UV_Mapping Multi_Sample_Anti_Aliasing
PDF XPS
RFC
NaN NaNs
- Bezier Coons Cartesian Euclidean
+ Bezier_Curve Coons_Patch Cartesian_Coordinate Euclidean_Distance Euclidean_Space
C C++ Destructor Subclasses
- SaveLayerFlags # not external; need to add typedef support
SkUserConfig # not external, but still thinking about how markup refers to this
SkXXX.h # ditto
SkXXX_Reference # ditto
@@ -26,6 +25,7 @@
SK_SUPPORT_LEGACY_PAINT_TEXTDECORATION # ditto
SK_BUILD_FOR_ANDROID_FRAMEWORK # ditto
SK_IGNORE_TO_STRING # ditto
+ SK_SUPPORT_GPU # ditto
# FreeType related
FT_LOAD_TARGET_LIGHT
@@ -51,6 +51,12 @@ FT_Load_Glyph
#Alias Arcs
#Topic ##
+#Topic Backend_Semaphore
+#Class GrBackendSemaphore
+#Alias GrBackendSemaphores
+##
+##
+
#Topic BBH_Factory
#Class SkBBHFactory
##
@@ -81,7 +87,10 @@ FT_Load_Glyph
##
#Topic Color
- #Typedef SkColor
+ #Typedef uint32_t SkColor
+ #Typedef ##
+
+ #Typedef uint32_t SkPMColor
#Typedef ##
# fixme: defines, not methods, need new markup type
@@ -174,6 +183,8 @@ FT_Load_Glyph
##
#Topic Data
+#Class SkData
+##
##
#Topic Debugging
@@ -181,6 +192,15 @@ FT_Load_Glyph
##
##
+#Topic Deferred_Display_List
+#Class SkDeferredDisplayList
+##
+#Subtopic Recorder
+#Class SkDeferredDisplayListRecorder
+##
+##
+##
+
#Topic Device
#Class SkBaseDevice
##
@@ -262,6 +282,9 @@ FT_Load_Glyph
#Topic GPU_Context
#Substitute GPU context
+#Subtopic Resource_Cache_Limits
+#Alias Resource_Cache_Limits
+##
#Class GrContext
#Method void flush()
##
@@ -279,95 +302,84 @@ FT_Load_Glyph
##
##
-#Topic Image
- #Subtopic Alpha_Type
- #Alias Alpha_Type
- #Enum SkAlphaType
- #Const kUnknown_SkAlphaType 0
- ##
- #Const kOpaque_SkAlphaType 1
- ##
- #Const kPremul_SkAlphaType 2
- ##
- #Const kUnpremul_SkAlphaType 3
- ##
+#Topic Image_Alpha_Type
+#Alias Alpha_Type
+#Alias Alpha_Types
+ #Enum SkAlphaType
+ #Const kUnknown_SkAlphaType 0
##
- #Subtopic ##
- #Subtopic Color_Type
- #Alias Color_Type
- #Alias Color_Types
- #Enum SkColorType
- #Const kUnknown_SkColorType 0
- ##
- #Const kAlpha_8_SkColorType 1
- ##
- #Const kRGB_565_SkColorType 2
- ##
- #Const kARGB_4444_SkColorType 3
- ##
- #Const kRGBA_8888_SkColorType 4
- ##
- #Const kBGRA_8888_SkColorType 5
- ##
- #Const kIndex_8_SkColorType 6
- ##
- #Const kGray_8_SkColorType 7
- ##
- #Const kRGBA_F16_SkColorType 8
- ##
- #ToDo this is a lie; need to not require values for consts ##
- #Const kN32_SkColorType 4
- ##
- #Enum ##
- #Subtopic ##
- #Subtopic Info
- #Struct SkImageInfo
- #Method SkImageInfo()
- ##
- #Method static SkImageInfo MakeN32Premul(int width, int height, sk_sp<SkColorSpace> cs = nullptr)
- ##
- #Method SkImageInfo makeColorSpace(sk_sp<SkColorSpace> cs) const
- ##
- #Method size_t minRowBytes() const
- ##
- #Method bool isOpaque() const
- ##
- #Method int bytesPerPixel() const
- ##
- #Method int height() const
- ##
- #Method int width() const
- ##
- #Method SkColorType colorType() const
- ##
- #Method SkAlphaType alphaType() const
- ##
- #Method SkColorSpace* colorSpace() const
- ##
- #Method bool isOpaque() const
- ##
- #Method size_t minRowBytes() const
- ##
- #Method size_t computeByteSize(size_t rowBytes) const
- ##
- #Method void validate() const
- ##
- ##
- #Subtopic ##
- #Class SkImage
- #Method sk_sp<SkShader> makeShader(SkShader::TileMode, SkShader::TileMode,
- const SkMatrix* localMatrix = nullptr) const
+ #Const kOpaque_SkAlphaType 1
##
- #Method static sk_sp<SkImage> MakeRasterCopy(const SkPixmap&)
+ #Const kPremul_SkAlphaType 2
##
- #Method bool readPixels(const SkPixmap& dst, int srcX, int srcY,
- CachingHint = kAllow_CachingHint) const
+ #Const kUnpremul_SkAlphaType 3
##
- #Method bool scalePixels(const SkPixmap& dst, SkFilterQuality, CachingHint = kAllow_CachingHint) const
+ ##
+#Topic ##
+#Topic Image_Color_Type
+#Subtopic Native_Color_Type
+#Alias Native_Color_Type
+#Substitute native SkColorType
+##
+#Alias Color_Type
+#Alias Color_Types
+ #Enum SkColorType
+ #Const kUnknown_SkColorType 0
##
- #Method bool peekPixels(SkPixmap* pixmap) const
+ #Const kAlpha_8_SkColorType 1
##
- ##
+ #Const kRGB_565_SkColorType 2
+ ##
+ #Const kARGB_4444_SkColorType 3
+ ##
+ #Const kRGBA_8888_SkColorType 4
+ ##
+ #Const kBGRA_8888_SkColorType 5
+ ##
+ #Const kIndex_8_SkColorType 6
+ ##
+ #Const kGray_8_SkColorType 7
+ ##
+ #Const kRGBA_F16_SkColorType 8
+ ##
+ #ToDo this is a lie; need to not require values for consts ##
+ #Const kN32_SkColorType 4
+ ##
+ #Enum ##
+#Topic ##
+#Topic Image_Info
+ #Struct SkImageInfo
+ #Method SkImageInfo()
+ ##
+ #Method static SkImageInfo MakeN32Premul(int width, int height, sk_sp<SkColorSpace> cs = nullptr)
+ ##
+ #Method SkImageInfo makeColorSpace(sk_sp<SkColorSpace> cs) const
+ ##
+ #Method size_t minRowBytes() const
+ ##
+ #Method bool isOpaque() const
+ ##
+ #Method int bytesPerPixel() const
+ ##
+ #Method int height() const
+ ##
+ #Method int width() const
+ ##
+ #Method SkColorType colorType() const
+ ##
+ #Method SkAlphaType alphaType() const
+ ##
+ #Method SkColorSpace* colorSpace() const
+ ##
+ #Method bool isOpaque() const
+ ##
+ #Method size_t minRowBytes() const
+ ##
+ #Method size_t computeByteSize(size_t rowBytes) const
+ ##
+ #Method void validate() const
+ ##
+ ##
#Topic ##
#Topic Image_Filter
@@ -462,17 +474,18 @@ FT_Load_Glyph
##
#Topic Mip_Map
+#Alias Mip_Maps
##
#Topic Nine_Patch
##
#Topic Number_Types
- #Typedef SkGlyphID
+ #Typedef uint16_t SkGlyphID
#Typedef ##
#Topic Scalar
#Alias Scalar
- #Typedef SkScalar
+ #Typedef float SkScalar
#Typedef ##
##
#Const SK_MinS32FitsInFloat
@@ -502,9 +515,9 @@ FT_Load_Glyph
#Const SK_MaxS32
to be written
##
- #Typedef SkUnichar
+ #Typedef int32_t SkUnichar
#Typedef ##
- #Typedef U8CPU
+ #Typedef unsigned U8CPU
#Typedef ##
#Topic ##
@@ -583,19 +596,17 @@ FT_Load_Glyph
##
##
+#Topic Pixel_Serializer
+#Class SkPixelSerializer
+##
+##
+
#Enum SkPixelGeometry
##
-#Topic Point
-#Alias Points
- #Struct SkPoint
- #Method bool equalsWithinTolerance(const SkPoint& p) const
- ##
- #Struct ##
- #Subtopic Array
- #Substitute SkPoint arrays
- #Subtopic ##
-#Topic ##
+# Topic Point_Array
+# Substitute SkPoint arrays
+# Topic ##
#Topic Point3
#Struct SkPoint3
@@ -648,6 +659,11 @@ FT_Load_Glyph
##
#Topic ##
+#Topic Render_Target
+#Class GrRenderTarget
+##
+##
+
#Topic Right_Side_Bearing
##
@@ -701,25 +717,12 @@ FT_Load_Glyph
#Topic Supersampling
##
-#Topic Surface
-#Class SkSurface
- #Method static sk_sp<SkSurface> MakeRasterDirect(const SkImageInfo&, void* pixels, size_t rowBytes,
- const SkSurfaceProps* = nullptr)
- ##
- #Method bool readPixels(const SkPixmap& dst, int srcX, int srcY);
- ##
- #Method SkCanvas* getCanvas()
- ##
- #Method void flush()
- ##
- #Method void prepareForExternalIO()
- ##
- #Method sk_sp<SkSurface> makeSurface(const SkImageInfo&)
- ##
- #Method bool peekPixels(SkPixmap*)
- ##
+#Topic Surface_Characterization
+#Class SkSurfaceCharacterization
+##
##
-#Subtopic Properties
+
+#Topic Surface_Properties
#Class SkSurfaceProps
#Topic Legacy_Font_Host
#Enum InitType
@@ -729,7 +732,6 @@ FT_Load_Glyph
#Topic ##
##
##
-##
#Topic SVG
#Subtopic Canvas
@@ -746,21 +748,48 @@ FT_Load_Glyph
#Class ##
#Topic ##
+#Topic Texture
+#Class GrBackendTexture
+##
+##
+
#Topic Typeface
#Class SkTypeface
#Class ##
#Topic ##
+#Topic Types
+ #Typedef intptr_t GrBackendObject
+ #Typedef ##
+
+ #Enum GrSurfaceOrigin
+ #Const kBottomLeft_GrSurfaceOrigin 0
+ ##
+ #Const kTopLeft_GrSurfaceOrigin 1
+ ##
+ #Enum ##
+
+ #Subtopic Budgeted
+ #EnumClass SkBudgeted
+ #Const kNo 0
+ ##
+ #Const kYes 1
+ ##
+ #EnumClass ##
+ ##
+
+ #EnumClass GrSemaphoresSubmitted
+ #Const kNo 0
+ ##
+ #Const kYes 1
+ ##
+ #EnumClass ##
+#Topic ##
+
#Topic Unpremultiply
#Alias Unpremultiplied
##
-#Topic Vector
-#Alias Vectors
-#Struct SkVector
-##
-##
-
#Topic Vertices
#Subtopic Colors
##
diff --git a/site/user/api/SkBitmap_Reference.md b/site/user/api/SkBitmap_Reference.md
index 824da343c7..e3c194bc43 100644
--- a/site/user/api/SkBitmap_Reference.md
+++ b/site/user/api/SkBitmap_Reference.md
@@ -5,19 +5,19 @@ SkBitmap Reference
# <a name="SkBitmap"></a> Class SkBitmap
<a href="#Bitmap">Bitmap</a> describes a two-dimensional raster pixel array. <a href="#Bitmap">Bitmap</a> is built on
-<a href="#Info">Image Info</a>, containing integer <a href="#SkBitmap_width">width</a> and <a href="#SkBitmap_height">height</a>, <a href="undocumented#Color_Type">Color Type</a> and <a href="undocumented#Alpha_Type">Alpha Type</a>
+<a href="undocumented#Image_Info">Image Info</a>, containing integer <a href="#SkBitmap_width">width</a> and <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Color_Type">Color Type</a> and <a href="undocumented#Image_Alpha_Type">Alpha Type</a>
describing the pixel format, and <a href="undocumented#Color_Space">Color Space</a> describing the range of colors.
<a href="#Bitmap">Bitmap</a> points to <a href="undocumented#Pixel_Ref">Pixel Ref</a>, which describes the physical array of pixels.
-<a href="#Info">Image Info</a> <a href="#SkBitmap_bounds">bounds</a> may be located anywhere fully inside <a href="undocumented#Pixel_Ref">Pixel Ref</a> <a href="#SkBitmap_bounds">bounds</a>.
+<a href="undocumented#Image_Info">Image Info</a> <a href="#SkBitmap_bounds">bounds</a> may be located anywhere fully inside <a href="undocumented#Pixel_Ref">Pixel Ref</a> <a href="#SkBitmap_bounds">bounds</a>.
<a href="#Bitmap">Bitmap</a> can be drawn using <a href="SkCanvas_Reference#Canvas">Canvas</a>. <a href="#Bitmap">Bitmap</a> can be a drawing destination for <a href="SkCanvas_Reference#Canvas">Canvas</a>
draw methods. <a href="#Bitmap">Bitmap</a> flexibility as a pixel container limits some optimizations
available to the target platform.
-If pixel array is primarily read-only, use <a href="undocumented#Image">Image</a> for better performance.
-If pixel array is primarily written to, use <a href="undocumented#Surface">Surface</a> for better performance.
+If pixel array is primarily read-only, use <a href="SkImage_Reference#Image">Image</a> for better performance.
+If pixel array is primarily written to, use <a href="SkSurface_Reference#Surface">Surface</a> for better performance.
-Declaring <a href="#SkBitmap">SkBitmap</a> const prevents altering <a href="#Info">Image Info</a>: the <a href="#Bitmap">Bitmap</a> <a href="#SkBitmap_height">height</a>, <a href="#SkBitmap_width">width</a>,
+Declaring <a href="#SkBitmap">SkBitmap</a> const prevents altering <a href="undocumented#Image_Info">Image Info</a>: the <a href="#Bitmap">Bitmap</a> <a href="#SkBitmap_height">height</a>, <a href="#SkBitmap_width">width</a>,
and so on cannot change. It does not affect <a href="undocumented#Pixel_Ref">Pixel Ref</a>: a caller may write its
pixels. Declaring <a href="#SkBitmap">SkBitmap</a> const affects <a href="#Bitmap">Bitmap</a> configuration, not its contents.
@@ -58,8 +58,8 @@ is useful to position one or more <a href="#Bitmap">Bitmaps</a> within a shared
| description | function |
| --- | --- |
-| <a href="#SkBitmap">SkBitmap</a>& <a href="#SkBitmap_move_assignment_operator">operator=(SkBitmap&& src)</a> | Takes ownership of pixels. |
-| <a href="#SkBitmap">SkBitmap</a>& <a href="#SkBitmap_copy_assignment_operator">operator=(const SkBitmap& src)</a> | Shares ownership of pixels. |
+| <a href="#SkBitmap">SkBitmap</a>& <a href="#SkBitmap_move_operator">operator=(SkBitmap&& src)</a> | Takes ownership of pixels. |
+| <a href="#SkBitmap">SkBitmap</a>& <a href="#SkBitmap_copy_operator">operator=(const SkBitmap& src)</a> | Shares ownership of pixels. |
## <a name="Member_Functions"></a> Member Functions
@@ -67,17 +67,17 @@ is useful to position one or more <a href="#Bitmap">Bitmaps</a> within a shared
| --- | --- |
| <a href="#SkBitmap_ComputeIsOpaque">ComputeIsOpaque</a> | Returns true if all pixels are opaque. |
| <a href="#SkBitmap_allocN32Pixels">allocN32Pixels</a> | Allocates compatible <a href="#ARGB">Color ARGB</a> pixels, or aborts. |
-| <a href="#SkBitmap_allocPixels">allocPixels</a> | Allocates pixels from <a href="#Info">Image Info</a>, or aborts. |
-| <a href="#SkBitmap_allocPixelsFlags">allocPixelsFlags</a> | Allocates pixels from <a href="#Info">Image Info</a> with options, or aborts. |
-| <a href="#SkBitmap_alphaType">alphaType</a> | Returns <a href="#Info">Image Info</a> <a href="undocumented#Alpha_Type">Alpha Type</a>. |
+| <a href="#SkBitmap_allocPixels">allocPixels</a> | Allocates pixels from <a href="undocumented#Image_Info">Image Info</a>, or aborts. |
+| <a href="#SkBitmap_allocPixelsFlags">allocPixelsFlags</a> | Allocates pixels from <a href="undocumented#Image_Info">Image Info</a> with options, or aborts. |
+| <a href="#SkBitmap_alphaType">alphaType</a> | Returns <a href="undocumented#Image_Info">Image Info</a> <a href="undocumented#Image_Alpha_Type">Alpha Type</a>. |
| <a href="#SkBitmap_bounds">bounds</a> | Returns <a href="#SkBitmap_width">width</a> and <a href="#SkBitmap_height">height</a> as Rectangle. |
-| <a href="#SkBitmap_bytesPerPixel">bytesPerPixel</a> | Returns number of bytes in pixel based on <a href="undocumented#Color_Type">Color Type</a>. |
-| <a href="#SkBitmap_colorSpace">colorSpace</a> | Returns <a href="#Info">Image Info</a> <a href="undocumented#Color_Space">Color Space</a>. |
-| <a href="#SkBitmap_colorType">colorType</a> | Returns <a href="#Info">Image Info</a> <a href="undocumented#Color_Type">Color Type</a>. |
+| <a href="#SkBitmap_bytesPerPixel">bytesPerPixel</a> | Returns number of bytes in pixel based on <a href="undocumented#Image_Color_Type">Color Type</a>. |
+| <a href="#SkBitmap_colorSpace">colorSpace</a> | Returns <a href="undocumented#Image_Info">Image Info</a> <a href="undocumented#Color_Space">Color Space</a>. |
+| <a href="#SkBitmap_colorType">colorType</a> | Returns <a href="undocumented#Image_Info">Image Info</a> <a href="undocumented#Image_Color_Type">Color Type</a>. |
| <a href="#SkBitmap_computeByteSize">computeByteSize</a> | Returns size required for pixels. |
| <a href="#SkBitmap_dimensions">dimensions</a> | Returns <a href="#SkBitmap_width">width</a> and <a href="#SkBitmap_height">height</a>. |
| <a href="#SkBitmap_drawsNothing">drawsNothing</a> | Returns true if no <a href="#SkBitmap_width">width</a>, no <a href="#SkBitmap_height">height</a>, or no <a href="undocumented#Pixel_Ref">Pixel Ref</a>. |
-| <a href="#SkBitmap_empty">empty</a> | Returns true if <a href="#Info">Image Info</a> has zero <a href="#SkBitmap_width">width</a> or <a href="#SkBitmap_height">height</a>. |
+| <a href="#SkBitmap_empty">empty</a> | Returns true if <a href="undocumented#Image_Info">Image Info</a> has zero <a href="#SkBitmap_width">width</a> or <a href="#SkBitmap_height">height</a>. |
| <a href="#SkBitmap_erase">erase</a> | Writes <a href="undocumented#Color">Color</a> to rectangle of pixels. |
| <a href="#SkBitmap_eraseARGB">eraseARGB</a> | Writes <a href="undocumented#Color">Color</a> to pixels. |
| <a href="#SkBitmap_eraseArea">eraseArea</a> | Deprecated |
@@ -96,12 +96,12 @@ is useful to position one or more <a href="#Bitmap">Bitmaps</a> within a shared
| <a href="#SkBitmap_getSubset">getSubset</a> | Returns <a href="#SkBitmap_bounds">bounds</a> offset by origin. |
| <a href="#SkBitmap_hasHardwareMipMap">hasHardwareMipMap</a> | Returns <a href="undocumented#Mip_Map">Mip Map</a> support present; <a href="undocumented#Android">Android</a> only. |
| <a href="#SkBitmap_height">height</a> | Returns pixel row count. |
-| <a href="#SkBitmap_info">info</a> | Returns <a href="#Info">Image Info</a>. |
+| <a href="#SkBitmap_info">info</a> | Returns <a href="undocumented#Image_Info">Image Info</a>. |
| <a href="#SkBitmap_installMaskPixels">installMaskPixels</a> | Creates <a href="undocumented#Pixel_Ref">Pixel Ref</a> from <a href="undocumented#Mask">Mask</a>. |
| <a href="#SkBitmap_installPixels">installPixels</a> | Creates <a href="undocumented#Pixel_Ref">Pixel Ref</a>, with optional release function. |
| <a href="#SkBitmap_isImmutable">isImmutable</a> | Returns true if pixels will not change. |
| <a href="#SkBitmap_isNull">isNull</a> | Returns true if <a href="undocumented#Pixel_Ref">Pixel Ref</a> is nullptr. |
-| <a href="#SkBitmap_isOpaque">isOpaque</a> | Returns true if <a href="#Info">Image Info</a> describes opaque pixels. |
+| <a href="#SkBitmap_isOpaque">isOpaque</a> | Returns true if <a href="undocumented#Image_Info">Image Info</a> describes opaque pixels. |
| <a href="#SkBitmap_isVolatile">isVolatile</a> | Returns true if pixels should not be cached. |
| <a href="#SkBitmap_notifyPixelsChanged">notifyPixelsChanged</a> | Marks pixels as changed, altering the unique ID. |
| <a href="#SkBitmap_peekPixels">peekPixels</a> | Returns <a href="SkPixmap_Reference#Pixmap">Pixmap</a> if possible. |
@@ -109,14 +109,14 @@ is useful to position one or more <a href="#Bitmap">Bitmaps</a> within a shared
| <a href="#SkBitmap_pixelRefOrigin">pixelRefOrigin</a> | Returns offset within <a href="undocumented#Pixel_Ref">Pixel Ref</a>. |
| <a href="#SkBitmap_readPixels">readPixels</a> | Copies and converts pixels. |
| <a href="#SkBitmap_readyToDraw">readyToDraw</a> | Returns true if address of pixels is not nullptr. |
-| <a href="#SkBitmap_refColorSpace">refColorSpace</a> | Returns <a href="#Info">Image Info</a> <a href="undocumented#Color_Space">Color Space</a>. |
+| <a href="#SkBitmap_refColorSpace">refColorSpace</a> | Returns <a href="undocumented#Image_Info">Image Info</a> <a href="undocumented#Color_Space">Color Space</a>. |
| <a href="#SkBitmap_reset">reset</a> | Sets to default values, releases pixel ownership. |
| <a href="#SkBitmap_rowBytes">rowBytes</a> | Returns interval between rows in bytes. |
| <a href="#SkBitmap_rowBytesAsPixels">rowBytesAsPixels</a> | Returns interval between rows in pixels. |
-| <a href="#SkBitmap_setAlphaType">setAlphaType</a> | Sets <a href="undocumented#Alpha_Type">Alpha Type</a> of shared pixels. |
+| <a href="#SkBitmap_setAlphaType">setAlphaType</a> | Sets <a href="undocumented#Image_Alpha_Type">Alpha Type</a> of shared pixels. |
| <a href="#SkBitmap_setHasHardwareMipMap">setHasHardwareMipMap</a> | Sets <a href="undocumented#Mip_Map">Mip Map</a> support present; <a href="undocumented#Android">Android</a> only. |
| <a href="#SkBitmap_setImmutable">setImmutable</a> | Marks that pixels will not change. |
-| <a href="#SkBitmap_setInfo">setInfo</a> | Sets <a href="#SkBitmap_height">height</a>, <a href="#SkBitmap_width">width</a>, <a href="undocumented#Color_Type">Color Type</a>, and so on, releasing pixels. |
+| <a href="#SkBitmap_setInfo">setInfo</a> | Sets <a href="#SkBitmap_height">height</a>, <a href="#SkBitmap_width">width</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, and so on, releasing pixels. |
| <a href="#SkBitmap_setIsVolatile">setIsVolatile</a> | Marks if pixels should not be cached. |
| <a href="#SkBitmap_setPixelRef">setPixelRef</a> | Sets <a href="undocumented#Pixel_Ref">Pixel Ref</a> and offset. |
| <a href="#SkBitmap_setPixels">setPixels</a> | Sets <a href="undocumented#Pixel_Ref">Pixel Ref</a> without an offset. |
@@ -124,15 +124,15 @@ is useful to position one or more <a href="#Bitmap">Bitmaps</a> within a shared
| <a href="#SkBitmap_swap">swap</a> | Exchanges <a href="#Bitmap">Bitmap</a> pair. |
| <a href="#SkBitmap_toString">toString</a> | Converts <a href="#Bitmap">Bitmap</a> to machine readable form. |
| <a href="#SkBitmap_tryAllocN32Pixels">tryAllocN32Pixels</a> | Allocates compatible <a href="#ARGB">Color ARGB</a> pixels if possible. |
-| <a href="#SkBitmap_tryAllocPixels">tryAllocPixels</a> | Allocates pixels from <a href="#Info">Image Info</a> if possible. |
-| <a href="#SkBitmap_tryAllocPixelsFlags">tryAllocPixelsFlags</a> | Allocates pixels from <a href="#Info">Image Info</a> with options if possible. |
+| <a href="#SkBitmap_tryAllocPixels">tryAllocPixels</a> | Allocates pixels from <a href="undocumented#Image_Info">Image Info</a> if possible. |
+| <a href="#SkBitmap_tryAllocPixelsFlags">tryAllocPixelsFlags</a> | Allocates pixels from <a href="undocumented#Image_Info">Image Info</a> with options if possible. |
| <a href="#SkBitmap_validate">validate</a> | Asserts if <a href="#Bitmap">Bitmap</a> is invalid (debug only). |
| <a href="#SkBitmap_width">width</a> | Returns pixel column count. |
| <a href="#SkBitmap_writePixels">writePixels</a> | Copies and converts pixels. |
# <a name="SkBitmap::Allocator"></a> Class SkBitmap::Allocator
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
class <a href="#SkBitmap_Allocator">Allocator</a> : public <a href="undocumented#SkRefCnt">SkRefCnt</a> {
public:
virtual bool <a href="#SkBitmap_Allocator_allocPixelRef">allocPixelRef(SkBitmap* bitmap)</a> = 0;
@@ -143,18 +143,18 @@ Abstract subclass of <a href="#SkBitmap_HeapAllocator">HeapAllocator</a>.
<a name="SkBitmap_Allocator_allocPixelRef"></a>
## allocPixelRef
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
virtual bool allocPixelRef(SkBitmap* bitmap) = 0
</pre>
Allocates the pixel memory for the <a href="#SkBitmap_Allocator_allocPixelRef_bitmap">bitmap</a>, given its <a href="#SkBitmap_dimensions">dimensions</a> and
-<a href="undocumented#Color_Type">Color Type</a>. Returns true on success, where success means either <a href="#SkBitmap_setPixels">setPixels</a>
+<a href="undocumented#Image_Color_Type">Color Type</a>. Returns true on success, where success means either <a href="#SkBitmap_setPixels">setPixels</a>
or <a href="#SkBitmap_setPixelRef">setPixelRef</a> was called.
### Parameters
<table> <tr> <td><a name="SkBitmap_Allocator_allocPixelRef_bitmap"> <code><strong>bitmap </strong></code> </a></td> <td>
-<a href="#Bitmap">Bitmap</a> containing <a href="#Info">Image Info</a> as input, and <a href="undocumented#Pixel_Ref">Pixel Ref</a> as output</td>
+<a href="#Bitmap">Bitmap</a> containing <a href="undocumented#Image_Info">Image Info</a> as input, and <a href="undocumented#Pixel_Ref">Pixel Ref</a> as output</td>
</tr>
</table>
@@ -170,7 +170,7 @@ true if <a href="undocumented#Pixel_Ref">Pixel Ref</a> was allocated
# <a name="SkBitmap::HeapAllocator"></a> Class SkBitmap::HeapAllocator
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
class <a href="#SkBitmap_HeapAllocator">HeapAllocator</a> : public <a href="#SkBitmap_Allocator">Allocator</a> {
public:
bool <a href="#SkBitmap_HeapAllocator_allocPixelRef">allocPixelRef(SkBitmap* bitmap)</a> override;
@@ -183,18 +183,18 @@ memory from the heap. This is the default <a href="#SkBitmap_Allocator">Allocato
<a name="SkBitmap_HeapAllocator_allocPixelRef"></a>
## allocPixelRef
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool allocPixelRef(SkBitmap* bitmap) override
</pre>
Allocates the pixel memory for the <a href="#SkBitmap_HeapAllocator_allocPixelRef_bitmap">bitmap</a>, given its <a href="#SkBitmap_dimensions">dimensions</a> and
-<a href="undocumented#Color_Type">Color Type</a>. Returns true on success, where success means either <a href="#SkBitmap_setPixels">setPixels</a>
+<a href="undocumented#Image_Color_Type">Color Type</a>. Returns true on success, where success means either <a href="#SkBitmap_setPixels">setPixels</a>
or <a href="#SkBitmap_setPixelRef">setPixelRef</a> was called.
### Parameters
<table> <tr> <td><a name="SkBitmap_HeapAllocator_allocPixelRef_bitmap"> <code><strong>bitmap </strong></code> </a></td> <td>
-<a href="#Bitmap">Bitmap</a> containing <a href="#Info">Image Info</a> as input, and <a href="undocumented#Pixel_Ref">Pixel Ref</a> as output</td>
+<a href="#Bitmap">Bitmap</a> containing <a href="undocumented#Image_Info">Image Info</a> as input, and <a href="undocumented#Pixel_Ref">Pixel Ref</a> as output</td>
</tr>
</table>
@@ -225,7 +225,7 @@ pixel address = 0x560ddd0ac670
<a name="SkBitmap_empty_constructor"></a>
## SkBitmap
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkBitmap()
</pre>
@@ -262,7 +262,7 @@ width: 25 height: 35 color: kRGBA_8888_SkColorType alpha: kOpaque_SkAlphaType
<a name="SkBitmap_copy_const_SkBitmap"></a>
## SkBitmap
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkBitmap(const SkBitmap& src)
</pre>
@@ -272,7 +272,7 @@ allocated, so both bitmaps reference the same pixels.
### Parameters
<table> <tr> <td><a name="SkBitmap_copy_const_SkBitmap_src"> <code><strong>src </strong></code> </a></td> <td>
-<a href="#Bitmap">Bitmap</a> to copy <a href="#Info">Image Info</a>, and share <a href="undocumented#Pixel_Ref">Pixel Ref</a></td>
+<a href="#Bitmap">Bitmap</a> to copy <a href="undocumented#Image_Info">Image Info</a>, and share <a href="undocumented#Pixel_Ref">Pixel Ref</a></td>
</tr>
</table>
@@ -303,7 +303,7 @@ copy has pixels: true
<a name="SkBitmap_move_SkBitmap"></a>
## SkBitmap
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkBitmap(SkBitmap&& src)
</pre>
@@ -313,7 +313,7 @@ Copies settings from <a href="#SkBitmap_move_SkBitmap_src">src</a> to returned <
### Parameters
<table> <tr> <td><a name="SkBitmap_move_SkBitmap_src"> <code><strong>src </strong></code> </a></td> <td>
-<a href="#Bitmap">Bitmap</a> to copy <a href="#Info">Image Info</a>, and reassign <a href="undocumented#Pixel_Ref">Pixel Ref</a></td>
+<a href="#Bitmap">Bitmap</a> to copy <a href="undocumented#Image_Info">Image Info</a>, and reassign <a href="undocumented#Pixel_Ref">Pixel Ref</a></td>
</tr>
</table>
@@ -344,7 +344,7 @@ copy has pixels: true
<a name="SkBitmap_destructor"></a>
## ~SkBitmap
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
~SkBitmap()
</pre>
@@ -356,26 +356,26 @@ Decrements <a href="undocumented#Pixel_Ref">Pixel Ref</a> reference count, if <a
---
-<a name="SkBitmap_copy_assignment_operator"></a>
+<a name="SkBitmap_copy_operator"></a>
## operator=
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkBitmap& operator=(const SkBitmap& src)
</pre>
-Copies settings from <a href="#SkBitmap_copy_assignment_operator_src">src</a> to returned <a href="#Bitmap">Bitmap</a>. Shares pixels if <a href="#SkBitmap_copy_assignment_operator_src">src</a> has pixels
+Copies settings from <a href="#SkBitmap_copy_operator_src">src</a> to returned <a href="#Bitmap">Bitmap</a>. Shares pixels if <a href="#SkBitmap_copy_operator_src">src</a> has pixels
allocated, so both bitmaps reference the same pixels.
### Parameters
-<table> <tr> <td><a name="SkBitmap_copy_assignment_operator_src"> <code><strong>src </strong></code> </a></td> <td>
-<a href="#Bitmap">Bitmap</a> to copy <a href="#Info">Image Info</a>, and share <a href="undocumented#Pixel_Ref">Pixel Ref</a></td>
+<table> <tr> <td><a name="SkBitmap_copy_operator_src"> <code><strong>src </strong></code> </a></td> <td>
+<a href="#Bitmap">Bitmap</a> to copy <a href="undocumented#Image_Info">Image Info</a>, and share <a href="undocumented#Pixel_Ref">Pixel Ref</a></td>
</tr>
</table>
### Return Value
-copy of <a href="#SkBitmap_copy_assignment_operator_src">src</a>
+copy of <a href="#SkBitmap_copy_operator_src">src</a>
### Example
@@ -397,26 +397,26 @@ copy has pixels: true
---
-<a name="SkBitmap_move_assignment_operator"></a>
+<a name="SkBitmap_move_operator"></a>
## operator=
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkBitmap& operator=(SkBitmap&& src)
</pre>
-Copies settings from <a href="#SkBitmap_move_assignment_operator_src">src</a> to returned <a href="#Bitmap">Bitmap</a>. Moves ownership of <a href="#SkBitmap_move_assignment_operator_src">src</a> pixels to
+Copies settings from <a href="#SkBitmap_move_operator_src">src</a> to returned <a href="#Bitmap">Bitmap</a>. Moves ownership of <a href="#SkBitmap_move_operator_src">src</a> pixels to
<a href="#Bitmap">Bitmap</a>.
### Parameters
-<table> <tr> <td><a name="SkBitmap_move_assignment_operator_src"> <code><strong>src </strong></code> </a></td> <td>
-<a href="#Bitmap">Bitmap</a> to copy <a href="#Info">Image Info</a>, and reassign <a href="undocumented#Pixel_Ref">Pixel Ref</a></td>
+<table> <tr> <td><a name="SkBitmap_move_operator_src"> <code><strong>src </strong></code> </a></td> <td>
+<a href="#Bitmap">Bitmap</a> to copy <a href="undocumented#Image_Info">Image Info</a>, and reassign <a href="undocumented#Pixel_Ref">Pixel Ref</a></td>
</tr>
</table>
### Return Value
-copy of <a href="#SkBitmap_move_assignment_operator_src">src</a>
+copy of <a href="#SkBitmap_move_operator_src">src</a>
### Example
@@ -441,7 +441,7 @@ copy has pixels: true
<a name="SkBitmap_swap"></a>
## swap
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void swap(SkBitmap& other)
</pre>
@@ -471,22 +471,22 @@ two width:1 height:1 colorType:kRGBA_8888_SkColorType alphaType:kOpaque_SkAlphaT
### See Also
-<a href="#SkBitmap_move_SkBitmap">SkBitmap(SkBitmap&& src)</a> <a href="#SkBitmap_move_assignment_operator">operator=(SkBitmap&& src)</a>
+<a href="#SkBitmap_move_SkBitmap">SkBitmap(SkBitmap&& src)</a> <a href="#SkBitmap_move_operator">operator=(SkBitmap&& src)</a>
---
<a name="SkBitmap_info"></a>
## info
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
const SkImageInfo& info() const
</pre>
-Returns <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Type">Color Type</a>, and <a href="undocumented#Color_Space">Color Space</a>.
+Returns <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, and <a href="undocumented#Color_Space">Color Space</a>.
### Return Value
-reference to <a href="#Info">Image Info</a>
+reference to <a href="undocumented#Image_Info">Image Info</a>
### Example
@@ -502,18 +502,18 @@ width: 56 height: 56 color: BGRA_8888 alpha: Opaque
### See Also
-<a href="#Info">Image Info</a>
+<a href="undocumented#Image_Info">Image Info</a>
---
<a name="SkBitmap_width"></a>
## width
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int width() const
</pre>
-Returns pixel count in each pixel row. Should be equal or less than:
+Returns pixel count in each row. Should be equal or less than:
<a href="#SkBitmap_rowBytes">rowBytes</a> / <a href="#SkBitmap_info">info</a>.<a href="#SkBitmap_bytesPerPixel">bytesPerPixel</a>.
@@ -522,7 +522,7 @@ Maybe be less than <a href="#SkBitmap_pixelRef">pixelRef</a>.<a href="#SkBitmap_
### Return Value
-pixel <a href="#SkBitmap_width">width</a> in <a href="#Info">Image Info</a>
+pixel <a href="#SkBitmap_width">width</a> in <a href="undocumented#Image_Info">Image Info</a>
### Example
@@ -545,7 +545,7 @@ bitmap width: 16 info width: 16
<a name="SkBitmap_height"></a>
## height
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int height() const
</pre>
@@ -556,7 +556,7 @@ Maybe be less than <a href="#SkBitmap_pixelRef">pixelRef</a>.<a href="#SkBitmap_
### Return Value
-pixel <a href="#SkBitmap_height">height</a> in <a href="#Info">Image Info</a>
+pixel <a href="#SkBitmap_height">height</a> in <a href="undocumented#Image_Info">Image Info</a>
### Example
@@ -579,17 +579,17 @@ bitmap height: 32 info height: 32
<a name="SkBitmap_colorType"></a>
## colorType
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkColorType colorType() const
</pre>
-Returns <a href="undocumented#Color_Type">Color Type</a>, one of: <a href="undocumented#SkColorType">kUnknown SkColorType</a>, <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>,
+Returns <a href="undocumented#Image_Color_Type">Color Type</a>, one of: <a href="undocumented#SkColorType">kUnknown SkColorType</a>, <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>,
<a href="undocumented#SkColorType">kRGB 565 SkColorType</a>, <a href="undocumented#SkColorType">kARGB 4444 SkColorType</a>, <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a>,
<a href="undocumented#SkColorType">kBGRA 8888 SkColorType</a>, <a href="undocumented#SkColorType">kGray 8 SkColorType</a>, <a href="undocumented#SkColorType">kRGBA F16 SkColorType</a>.
### Return Value
-<a href="undocumented#Color_Type">Color Type</a> in <a href="#Info">Image Info</a>
+<a href="undocumented#Image_Color_Type">Color Type</a> in <a href="undocumented#Image_Info">Image Info</a>
### Example
@@ -612,16 +612,16 @@ color type: kAlpha_SkColorType
<a name="SkBitmap_alphaType"></a>
## alphaType
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkAlphaType alphaType() const
</pre>
-Returns <a href="undocumented#Alpha_Type">Alpha Type</a>, one of: <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a>, <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>,
+Returns <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, one of: <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a>, <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>,
<a href="undocumented#SkAlphaType">kPremul SkAlphaType</a>, <a href="undocumented#SkAlphaType">kUnpremul SkAlphaType</a>.
### Return Value
-<a href="undocumented#Alpha_Type">Alpha Type</a> in <a href="#Info">Image Info</a>
+<a href="undocumented#Image_Alpha_Type">Alpha Type</a> in <a href="undocumented#Image_Info">Image Info</a>
### Example
@@ -644,22 +644,22 @@ alpha type: kPremul_SkAlphaType
<a name="SkBitmap_colorSpace"></a>
## colorSpace
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkColorSpace* colorSpace() const
</pre>
-Returns <a href="undocumented#Color_Space">Color Space</a>, the range of colors, associated with <a href="#Info">Image Info</a>. The
+Returns <a href="undocumented#Color_Space">Color Space</a>, the range of colors, associated with <a href="undocumented#Image_Info">Image Info</a>. The
reference count of <a href="undocumented#Color_Space">Color Space</a> is unchanged. The returned <a href="undocumented#Color_Space">Color Space</a> is
immutable.
### Return Value
-<a href="undocumented#Color_Space">Color Space</a> in <a href="#Info">Image Info</a>
+<a href="undocumented#Color_Space">Color Space</a> in <a href="undocumented#Image_Info">Image Info</a>
### Example
<div><fiddle-embed name="7ade8a1a21ea5197e565c86740b47b73"><div><a href="#SkColorSpace_MakeSRGBLinear">SkColorSpace::MakeSRGBLinear</a> creates <a href="undocumented#Color_Space">Color Space</a> with linear gamma
-and an sRGB gamut. This <a href="undocumented#Color_Space">Color Space</a> gamma is not close to sRGB gamma.</div>
+and an <a href="undocumented#sRGB">sRGB</a> gamut. This <a href="undocumented#Color_Space">Color Space</a> gamma is not close to <a href="undocumented#sRGB">sRGB</a> gamma.</div>
#### Example Output
@@ -678,19 +678,19 @@ gammaCloseToSRGB: false gammaIsLinear: true isSRGB: false
<a name="SkBitmap_refColorSpace"></a>
## refColorSpace
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
sk_sp&lt;SkColorSpace&gt; refColorSpace() const
</pre>
Returns a smart pointer to <a href="undocumented#Color_Space">Color Space</a>, the range of colors, associated with
-<a href="#Info">Image Info</a>. The smart pointer tracks the number of objects sharing this
+<a href="undocumented#Image_Info">Image Info</a>. The smart pointer tracks the number of objects sharing this
<a href="undocumented#Color_Space">Color Space</a> reference so the memory is released when the owners destruct.
The returned <a href="undocumented#Color_Space">Color Space</a> is immutable.
### Return Value
-<a href="undocumented#Color_Space">Color Space</a> in <a href="#Info">Image Info</a> wrapped in a smart pointer
+<a href="undocumented#Color_Space">Color Space</a> in <a href="undocumented#Image_Info">Image Info</a> wrapped in a smart pointer
### Example
@@ -713,11 +713,11 @@ gammaCloseToSRGB: false gammaIsLinear: true isSRGB: false
<a name="SkBitmap_bytesPerPixel"></a>
## bytesPerPixel
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int bytesPerPixel() const
</pre>
-Returns number of bytes per pixel required by <a href="undocumented#Color_Type">Color Type</a>.
+Returns number of bytes per pixel required by <a href="undocumented#Image_Color_Type">Color Type</a>.
Returns zero if <a href="#SkBitmap_colorType">colorType</a>( is <a href="undocumented#SkColorType">kUnknown SkColorType</a>.
### Return Value
@@ -752,7 +752,7 @@ color: kRGBA_F16_SkColorType bytesPerPixel: 8
<a name="SkBitmap_rowBytesAsPixels"></a>
## rowBytesAsPixels
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int rowBytesAsPixels() const
</pre>
@@ -788,7 +788,7 @@ rowBytes: 8 rowBytesAsPixels: 2
<a name="SkBitmap_shiftPerPixel"></a>
## shiftPerPixel
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int shiftPerPixel() const
</pre>
@@ -827,7 +827,7 @@ color: kRGBA_F16_SkColorType shiftPerPixel: 3
<a name="SkBitmap_empty"></a>
## empty
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool empty() const
</pre>
@@ -864,7 +864,7 @@ width: 2 height: 2 empty: false
<a name="SkBitmap_isNull"></a>
## isNull
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isNull() const
</pre>
@@ -900,7 +900,7 @@ allocated bitmap does have pixels
<a name="SkBitmap_drawsNothing"></a>
## drawsNothing
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool drawsNothing() const
</pre>
@@ -935,7 +935,7 @@ empty:false isNull:false drawsNothing:false
<a name="SkBitmap_rowBytes"></a>
## rowBytes
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
size_t rowBytes() const
</pre>
@@ -971,31 +971,31 @@ setInfo returned:true rowBytes:8
<a name="SkBitmap_setAlphaType"></a>
## setAlphaType
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool setAlphaType(SkAlphaType alphaType)
</pre>
-Sets <a href="undocumented#Alpha_Type">Alpha Type</a>, if <a href="#SkBitmap_alphaType">alphaType</a> is compatible with <a href="undocumented#Color_Type">Color Type</a>.
-Returns true unless <a href="#SkBitmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a> and current <a href="undocumented#Alpha_Type">Alpha Type</a>
+Sets <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, if <a href="#SkBitmap_alphaType">alphaType</a> is compatible with <a href="undocumented#Image_Color_Type">Color Type</a>.
+Returns true unless <a href="#SkBitmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a> and current <a href="undocumented#Image_Alpha_Type">Alpha Type</a>
is not <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a>.
-Returns true if <a href="undocumented#Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kUnknown SkColorType</a>. <a href="#SkBitmap_alphaType">alphaType</a> is ignored, and
-<a href="undocumented#Alpha_Type">Alpha Type</a> remains <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a>.
+Returns true if <a href="undocumented#Image_Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kUnknown SkColorType</a>. <a href="#SkBitmap_alphaType">alphaType</a> is ignored, and
+<a href="undocumented#Image_Alpha_Type">Alpha Type</a> remains <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a>.
-Returns true if <a href="undocumented#Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kRGB 565 SkColorType</a> or <a href="undocumented#SkColorType">kGray 8 SkColorType</a>.
-<a href="#SkBitmap_alphaType">alphaType</a> is ignored, and <a href="undocumented#Alpha_Type">Alpha Type</a> remains <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>.
+Returns true if <a href="undocumented#Image_Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kRGB 565 SkColorType</a> or <a href="undocumented#SkColorType">kGray 8 SkColorType</a>.
+<a href="#SkBitmap_alphaType">alphaType</a> is ignored, and <a href="undocumented#Image_Alpha_Type">Alpha Type</a> remains <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>.
-If <a href="undocumented#Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kARGB 4444 SkColorType</a>, <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a>,
+If <a href="undocumented#Image_Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kARGB 4444 SkColorType</a>, <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a>,
<a href="undocumented#SkColorType">kBGRA 8888 SkColorType</a>, or <a href="undocumented#SkColorType">kRGBA F16 SkColorType</a>: returns true unless
-<a href="#SkBitmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a> and <a href="undocumented#Alpha_Type">Alpha Type</a> is not <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a>.
-If <a href="undocumented#Alpha_Type">Alpha Type</a> is <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a>, <a href="#SkBitmap_alphaType">alphaType</a> is ignored.
+<a href="#SkBitmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a> and <a href="undocumented#Image_Alpha_Type">Alpha Type</a> is not <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a>.
+If <a href="undocumented#Image_Alpha_Type">Alpha Type</a> is <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a>, <a href="#SkBitmap_alphaType">alphaType</a> is ignored.
-If <a href="undocumented#Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>, returns true unless
-<a href="#SkBitmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a> and <a href="undocumented#Alpha_Type">Alpha Type</a> is not <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a>.
-If <a href="undocumented#Alpha_Type">Alpha Type</a> is <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a>, <a href="#SkBitmap_alphaType">alphaType</a> is ignored. If <a href="#SkBitmap_alphaType">alphaType</a> is
+If <a href="undocumented#Image_Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>, returns true unless
+<a href="#SkBitmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a> and <a href="undocumented#Image_Alpha_Type">Alpha Type</a> is not <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a>.
+If <a href="undocumented#Image_Alpha_Type">Alpha Type</a> is <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a>, <a href="#SkBitmap_alphaType">alphaType</a> is ignored. If <a href="#SkBitmap_alphaType">alphaType</a> is
<a href="undocumented#SkAlphaType">kUnpremul SkAlphaType</a>, it is treated as <a href="undocumented#SkAlphaType">kPremul SkAlphaType</a>.
-This changes <a href="undocumented#Alpha_Type">Alpha Type</a> in <a href="undocumented#Pixel_Ref">Pixel Ref</a>; all bitmaps sharing <a href="undocumented#Pixel_Ref">Pixel Ref</a>
+This changes <a href="undocumented#Image_Alpha_Type">Alpha Type</a> in <a href="undocumented#Pixel_Ref">Pixel Ref</a>; all bitmaps sharing <a href="undocumented#Pixel_Ref">Pixel Ref</a>
are affected.
### Parameters
@@ -1008,7 +1008,7 @@ one of: <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a>, <a href="un
### Return Value
-true if <a href="undocumented#Alpha_Type">Alpha Type</a> is set
+true if <a href="undocumented#Image_Alpha_Type">Alpha Type</a> is set
### Example
@@ -1016,14 +1016,14 @@ true if <a href="undocumented#Alpha_Type">Alpha Type</a> is set
### See Also
-<a href="undocumented#Alpha_Type">Alpha Type</a> <a href="undocumented#Color_Type">Color Type</a> <a href="#Info">Image Info</a> <a href="#SkBitmap_setInfo">setInfo</a>
+<a href="undocumented#Image_Alpha_Type">Alpha Type</a> <a href="undocumented#Image_Color_Type">Color Type</a> <a href="undocumented#Image_Info">Image Info</a> <a href="#SkBitmap_setInfo">setInfo</a>
---
<a name="SkBitmap_getPixels"></a>
## getPixels
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void* getPixels() const
</pre>
@@ -1055,7 +1055,7 @@ bitmap.getColor(0, 0) == 0xFFFFFFFF
<a name="SkBitmap_computeByteSize"></a>
## computeByteSize
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
size_t computeByteSize() const
</pre>
@@ -1098,7 +1098,7 @@ width: 1000000 height: 1000000 computeByteSize: 4999999000000
<a name="SkBitmap_isImmutable"></a>
## isImmutable
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isImmutable() const
</pre>
@@ -1125,14 +1125,14 @@ copy is immutable
### See Also
-<a href="#SkBitmap_setImmutable">setImmutable</a> <a href="#SkPixelRef_isImmutable">SkPixelRef::isImmutable</a> <a href="undocumented#SkImage">SkImage</a>
+<a href="#SkBitmap_setImmutable">setImmutable</a> <a href="#SkPixelRef_isImmutable">SkPixelRef::isImmutable</a> <a href="SkImage_Reference#SkImage">SkImage</a>
---
<a name="SkBitmap_setImmutable"></a>
## setImmutable
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setImmutable()
</pre>
@@ -1148,24 +1148,24 @@ Writing to immutable <a href="#Bitmap">Bitmap</a> pixels triggers an assert on d
### See Also
-<a href="#SkBitmap_isImmutable">isImmutable</a> <a href="#SkPixelRef_setImmutable">SkPixelRef::setImmutable</a> <a href="undocumented#SkImage">SkImage</a>
+<a href="#SkBitmap_isImmutable">isImmutable</a> <a href="#SkPixelRef_setImmutable">SkPixelRef::setImmutable</a> <a href="SkImage_Reference#SkImage">SkImage</a>
---
<a name="SkBitmap_isOpaque"></a>
## isOpaque
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isOpaque() const
</pre>
-Returns true if <a href="undocumented#Alpha_Type">Alpha Type</a> is <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>.
-Does not check if <a href="undocumented#Color_Type">Color Type</a> allows <a href="#Alpha">Alpha</a>, or if any pixel value has
+Returns true if <a href="undocumented#Image_Alpha_Type">Alpha Type</a> is <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>.
+Does not check if <a href="undocumented#Image_Color_Type">Color Type</a> allows <a href="#Alpha">Alpha</a>, or if any pixel value has
transparency.
### Return Value
-true if <a href="#Info">Image Info</a> describes opaque <a href="#Alpha">Alpha</a>
+true if <a href="undocumented#Image_Info">Image Info</a> describes opaque <a href="#Alpha">Alpha</a>
### Example
@@ -1191,7 +1191,7 @@ isOpaque: true
<a name="SkBitmap_isVolatile"></a>
## isVolatile
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isVolatile() const
</pre>
@@ -1226,7 +1226,7 @@ copy is not volatile
<a name="SkBitmap_setIsVolatile"></a>
## setIsVolatile
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setIsVolatile(bool isVolatile)
</pre>
@@ -1257,7 +1257,7 @@ true if backing pixels are temporary</td>
<a name="SkBitmap_reset"></a>
## reset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void reset()
</pre>
@@ -1292,19 +1292,19 @@ width:0 height:0 isNull:true
<a name="SkBitmap_ComputeIsOpaque"></a>
## ComputeIsOpaque
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static bool ComputeIsOpaque(const SkBitmap& bm)
</pre>
-Returns true if all pixels are opaque. <a href="undocumented#Color_Type">Color Type</a> determines how pixels
-are encoded, and whether pixel describes <a href="#Alpha">Alpha</a>. Returns true for <a href="undocumented#Color_Type">Color Types</a>
-without alpha in each pixel; for other <a href="undocumented#Color_Type">Color Types</a>, returns true if all
+Returns true if all pixels are opaque. <a href="undocumented#Image_Color_Type">Color Type</a> determines how pixels
+are encoded, and whether pixel describes <a href="#Alpha">Alpha</a>. Returns true for <a href="undocumented#Image_Color_Type">Color Types</a>
+without alpha in each pixel; for other <a href="undocumented#Image_Color_Type">Color Types</a>, returns true if all
pixels have alpha values equivalent to 1.0 or greater.
-For <a href="undocumented#Color_Type">Color Types</a> <a href="undocumented#SkColorType">kRGB 565 SkColorType</a> or <a href="undocumented#SkColorType">kGray 8 SkColorType</a>: always
-returns true. For <a href="undocumented#Color_Type">Color Types</a> <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>, <a href="undocumented#SkColorType">kBGRA 8888 SkColorType</a>,
+For <a href="undocumented#Image_Color_Type">Color Types</a> <a href="undocumented#SkColorType">kRGB 565 SkColorType</a> or <a href="undocumented#SkColorType">kGray 8 SkColorType</a>: always
+returns true. For <a href="undocumented#Image_Color_Type">Color Types</a> <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>, <a href="undocumented#SkColorType">kBGRA 8888 SkColorType</a>,
<a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a>: returns true if all pixel <a href="#Alpha">Alpha</a> values are 255.
-For <a href="undocumented#Color_Type">Color Type</a> <a href="undocumented#SkColorType">kARGB 4444 SkColorType</a>: returns true if all pixel <a href="#Alpha">Alpha</a> values are 15.
+For <a href="undocumented#Image_Color_Type">Color Type</a> <a href="undocumented#SkColorType">kARGB 4444 SkColorType</a>: returns true if all pixel <a href="#Alpha">Alpha</a> values are 15.
For <a href="undocumented#SkColorType">kRGBA F16 SkColorType</a>: returns true if all pixel <a href="#Alpha">Alpha</a> values are 1.0 or
greater.
@@ -1319,7 +1319,7 @@ Returns false for <a href="undocumented#SkColorType">kUnknown SkColorType</a>.
### Return Value
-true if all pixels have opaque values or <a href="undocumented#Color_Type">Color Type</a> is opaque
+true if all pixels have opaque values or <a href="undocumented#Image_Color_Type">Color Type</a> is opaque
### Example
@@ -1338,14 +1338,14 @@ computeIsOpaque: true
### See Also
-<a href="#SkBitmap_isOpaque">isOpaque</a> <a href="undocumented#Color_Type">Color Type</a> <a href="#Alpha">Alpha</a>
+<a href="#SkBitmap_isOpaque">isOpaque</a> <a href="undocumented#Image_Color_Type">Color Type</a> <a href="#Alpha">Alpha</a>
---
<a name="SkBitmap_getBounds"></a>
## getBounds
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void getBounds(SkRect* bounds) const
</pre>
@@ -1368,7 +1368,7 @@ container for floating point rectangle</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void getBounds(SkIRect* bounds) const
</pre>
@@ -1394,7 +1394,7 @@ container for integral rectangle</td>
<a name="SkBitmap_bounds"></a>
## bounds
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkIRect bounds() const
</pre>
@@ -1417,7 +1417,7 @@ integral rectangle from origin to <a href="#SkBitmap_width">width</a> and <a hre
<a name="SkBitmap_dimensions"></a>
## dimensions
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkISize dimensions() const
</pre>
@@ -1440,7 +1440,7 @@ integral size of <a href="#SkBitmap_width">width</a> and <a href="#SkBitmap_heig
<a name="SkBitmap_getSubset"></a>
## getSubset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkIRect getSubset() const
</pre>
@@ -1472,11 +1472,11 @@ subset: 100, 100, 412, 412
<a name="SkBitmap_setInfo"></a>
## setInfo
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool setInfo(const SkImageInfo& imageInfo, size_t rowBytes = 0)
</pre>
-Sets <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a>, and optional
+Sets <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a>, and optional
<a href="#SkBitmap_rowBytes">rowBytes</a>. Frees pixels, and returns true if successful.
<a href="#SkBitmap_setInfo_imageInfo">imageInfo</a>.<a href="#SkBitmap_alphaType">alphaType</a> may be altered to a value permitted by <a href="#SkBitmap_setInfo_imageInfo">imageInfo</a>.<a href="#SkBitmap_colorSpace">colorSpace</a>.
@@ -1498,7 +1498,6 @@ Calls <a href="#SkBitmap_reset">reset</a> and returns false if:
<table> <tr>
<td><a href="#SkBitmap_rowBytes">rowBytes</a> exceeds 31 bits</td> </tr> <tr>
- <td><a href="#SkBitmap_setInfo_imageInfo">imageInfo</a>.<a href="#SkBitmap_width">width</a> times <a href="#SkBitmap_setInfo_imageInfo">imageInfo</a>.<a href="#SkBitmap_bytesPerPixel">bytesPerPixel</a> exceeds 31 bits</td> </tr> <tr>
<td><a href="#SkBitmap_setInfo_imageInfo">imageInfo</a>.<a href="#SkBitmap_width">width</a> is negative</td> </tr> <tr>
<td><a href="#SkBitmap_setInfo_imageInfo">imageInfo</a>.<a href="#SkBitmap_height">height</a> is negative</td> </tr> <tr>
<td><a href="#SkBitmap_rowBytes">rowBytes</a> is positive and less than <a href="#SkBitmap_setInfo_imageInfo">imageInfo</a>.<a href="#SkBitmap_width">width</a> times <a href="#SkBitmap_setInfo_imageInfo">imageInfo</a>.<a href="#SkBitmap_bytesPerPixel">bytesPerPixel</a></td> </tr>
@@ -1507,7 +1506,7 @@ Calls <a href="#SkBitmap_reset">reset</a> and returns false if:
### Parameters
<table> <tr> <td><a name="SkBitmap_setInfo_imageInfo"> <code><strong>imageInfo </strong></code> </a></td> <td>
-contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
+contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
</tr> <tr> <td><a name="SkBitmap_setInfo_rowBytes"> <code><strong>rowBytes </strong></code> </a></td> <td>
<a href="#SkBitmap_setInfo_imageInfo">imageInfo</a>.<a href="undocumented#SkImageInfo">minRowBytes</a> or larger; or zero</td>
</tr>
@@ -1515,7 +1514,7 @@ contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height<
### Return Value
-true if <a href="#Info">Image Info</a> set successfully
+true if <a href="undocumented#Image_Info">Image Info</a> set successfully
### Example
@@ -1523,13 +1522,13 @@ true if <a href="#Info">Image Info</a> set successfully
### See Also
-<a href="undocumented#Alpha_Type">Alpha Type</a> <a href="undocumented#Color_Type">Color Type</a> <a href="undocumented#Color_Space">Color Space</a> <a href="#SkBitmap_height">height</a> <a href="#SkBitmap_rowBytes">rowBytes</a> <a href="#SkBitmap_width">width</a>
+<a href="undocumented#Image_Alpha_Type">Alpha Type</a> <a href="undocumented#Image_Color_Type">Color Type</a> <a href="undocumented#Color_Space">Color Space</a> <a href="#SkBitmap_height">height</a> <a href="#SkBitmap_rowBytes">rowBytes</a> <a href="#SkBitmap_width">width</a>
---
## <a name="SkBitmap_AllocFlags"></a> Enum SkBitmap::AllocFlags
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#SkBitmap_AllocFlags">AllocFlags</a> {
<a href="#SkBitmap_kZeroPixels_AllocFlag">kZeroPixels AllocFlag</a> = 1 << 0,
};</pre>
@@ -1553,17 +1552,15 @@ enum <a href="#SkBitmap_AllocFlags">AllocFlags</a> {
<a name="SkBitmap_tryAllocPixelsFlags"></a>
## tryAllocPixelsFlags
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool SK_WARN_UNUSED_RESULT tryAllocPixelsFlags(const SkImageInfo& info,
- uint32_t flags)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool SK_WARN_UNUSED_RESULT tryAllocPixelsFlags(const SkImageInfo& info, uint32_t flags)
</pre>
-Sets <a href="#Info">Image Info</a> to <a href="#SkBitmap_info">info</a> following the rules in <a href="#SkBitmap_setInfo">setInfo</a> and allocates pixel
+Sets <a href="undocumented#Image_Info">Image Info</a> to <a href="#SkBitmap_info">info</a> following the rules in <a href="#SkBitmap_setInfo">setInfo</a> and allocates pixel
memory. If <a href="#SkBitmap_tryAllocPixelsFlags_flags">flags</a> is <a href="#SkBitmap_kZeroPixels_AllocFlag">kZeroPixels AllocFlag</a>, memory is zeroed.
-Returns false and calls <a href="#SkBitmap_reset">reset</a> if <a href="#Info">Image Info</a> could not be set, or memory could
-not be allocated, or memory size exceeds 31 bits, or memory could not optionally
-be zeroed.
+Returns false and calls <a href="#SkBitmap_reset">reset</a> if <a href="undocumented#Image_Info">Image Info</a> could not be set, or memory could
+not be allocated, or memory could not optionally be zeroed.
On most platforms, allocating pixel memory may succeed even though there is
not sufficient memory to hold pixels; allocation does not take place
@@ -1576,7 +1573,7 @@ Passing <a href="#SkBitmap_kZeroPixels_AllocFlag">kZeroPixels AllocFlag</a> is u
### Parameters
<table> <tr> <td><a name="SkBitmap_tryAllocPixelsFlags_info"> <code><strong>info </strong></code> </a></td> <td>
-contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
+contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
</tr> <tr> <td><a name="SkBitmap_tryAllocPixelsFlags_flags"> <code><strong>flags </strong></code> </a></td> <td>
<a href="#SkBitmap_kZeroPixels_AllocFlag">kZeroPixels AllocFlag</a>, or zero</td>
</tr>
@@ -1588,16 +1585,12 @@ true if pixels allocation is successful
### Example
-<div><fiddle-embed name="01e11c52fe4a3dc7ee800ce8e925b973"><div>For <a href="#SkBitmap_width">width</a> of 100,000, <a href="#SkBitmap_height">height</a> of 100,000, and 4 bytes per pixel, <a href="undocumented#Pixel_Ref">Pixel Ref</a>
-requires 40,000,000,000 bytes of storage. <a href="#SkBitmap_Allocator">Allocator</a> implemented
-internally by <a href="#SkMallocPixelRef_MakeZeroed">SkMallocPixelRef::MakeZeroed</a> limits the maximum memory allowed;
-the allocation must fit in 31 bits.</div>
+<div><fiddle-embed name="4fff5f5034ced615ad5a1d50c40aeff3">
#### Example Output
~~~~
-attempt 1
-failed!
+bitmap allocation succeeded!
~~~~
</fiddle-embed></div>
@@ -1611,15 +1604,15 @@ failed!
<a name="SkBitmap_allocPixelsFlags"></a>
## allocPixelsFlags
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void allocPixelsFlags(const SkImageInfo& info, uint32_t flags)
</pre>
-Sets <a href="#Info">Image Info</a> to <a href="#SkBitmap_info">info</a> following the rules in <a href="#SkBitmap_setInfo">setInfo</a> and allocates pixel
+Sets <a href="undocumented#Image_Info">Image Info</a> to <a href="#SkBitmap_info">info</a> following the rules in <a href="#SkBitmap_setInfo">setInfo</a> and allocates pixel
memory. If <a href="#SkBitmap_allocPixelsFlags_flags">flags</a> is <a href="#SkBitmap_kZeroPixels_AllocFlag">kZeroPixels AllocFlag</a>, memory is zeroed.
-Aborts execution if <a href="#Info">Image Info</a> could not be set, or memory could
-not be allocated, or memory size exceeds 31 bits, or memory could not optionally
+Aborts execution if <a href="undocumented#Image_Info">Image Info</a> could not be set, or memory could
+not be allocated, or memory could not optionally
be zeroed. Abort steps may be provided by the user at compile time by defining
<a href="undocumented#SK_ABORT">SK ABORT</a>.
@@ -1634,7 +1627,7 @@ Passing <a href="#SkBitmap_kZeroPixels_AllocFlag">kZeroPixels AllocFlag</a> is u
### Parameters
<table> <tr> <td><a name="SkBitmap_allocPixelsFlags_info"> <code><strong>info </strong></code> </a></td> <td>
-contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
+contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
</tr> <tr> <td><a name="SkBitmap_allocPixelsFlags_flags"> <code><strong>flags </strong></code> </a></td> <td>
<a href="#SkBitmap_kZeroPixels_AllocFlag">kZeroPixels AllocFlag</a>, or zero</td>
</tr>
@@ -1654,16 +1647,15 @@ lets the first draw show through.</div></fiddle-embed></div>
<a name="SkBitmap_tryAllocPixels"></a>
## tryAllocPixels
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool SK_WARN_UNUSED_RESULT tryAllocPixels(const SkImageInfo& info,
- size_t rowBytes)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool SK_WARN_UNUSED_RESULT tryAllocPixels(const SkImageInfo& info, size_t rowBytes)
</pre>
-Sets <a href="#Info">Image Info</a> to <a href="#SkBitmap_info">info</a> following the rules in <a href="#SkBitmap_setInfo">setInfo</a> and allocates pixel
+Sets <a href="undocumented#Image_Info">Image Info</a> to <a href="#SkBitmap_info">info</a> following the rules in <a href="#SkBitmap_setInfo">setInfo</a> and allocates pixel
memory. <a href="#SkBitmap_rowBytes">rowBytes</a> must equal or exceed <a href="#SkBitmap_info">info</a>.<a href="#SkBitmap_width">width</a> times <a href="#SkBitmap_info">info</a>.<a href="#SkBitmap_bytesPerPixel">bytesPerPixel</a>,
or equal zero. Pass in zero for <a href="#SkBitmap_rowBytes">rowBytes</a> to compute the minimum valid value.
-Returns false and calls <a href="#SkBitmap_reset">reset</a> if <a href="#Info">Image Info</a> could not be set, or memory could
+Returns false and calls <a href="#SkBitmap_reset">reset</a> if <a href="undocumented#Image_Info">Image Info</a> could not be set, or memory could
not be allocated.
On most platforms, allocating pixel memory may succeed even though there is
@@ -1674,7 +1666,7 @@ implementation of malloc().
### Parameters
<table> <tr> <td><a name="SkBitmap_tryAllocPixels_info"> <code><strong>info </strong></code> </a></td> <td>
-contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
+contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
</tr> <tr> <td><a name="SkBitmap_tryAllocPixels_rowBytes"> <code><strong>rowBytes </strong></code> </a></td> <td>
size of pixel row or larger; may be zero</td>
</tr>
@@ -1697,16 +1689,16 @@ true if pixel storage is allocated
<a name="SkBitmap_allocPixels"></a>
## allocPixels
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void allocPixels(const SkImageInfo& info, size_t rowBytes)
</pre>
-Sets <a href="#Info">Image Info</a> to <a href="#SkBitmap_info">info</a> following the rules in <a href="#SkBitmap_setInfo">setInfo</a> and allocates pixel
+Sets <a href="undocumented#Image_Info">Image Info</a> to <a href="#SkBitmap_info">info</a> following the rules in <a href="#SkBitmap_setInfo">setInfo</a> and allocates pixel
memory. <a href="#SkBitmap_rowBytes">rowBytes</a> must equal or exceed <a href="#SkBitmap_info">info</a>.<a href="#SkBitmap_width">width</a> times <a href="#SkBitmap_info">info</a>.<a href="#SkBitmap_bytesPerPixel">bytesPerPixel</a>,
or equal zero. Pass in zero for <a href="#SkBitmap_rowBytes">rowBytes</a> to compute the minimum valid value.
-Aborts execution if <a href="#Info">Image Info</a> could not be set, or memory could
-not be allocated, or memory size exceeds 31 bits. Abort steps may be provided by
+Aborts execution if <a href="undocumented#Image_Info">Image Info</a> could not be set, or memory could
+not be allocated. Abort steps may be provided by
the user at compile time by defining <a href="undocumented#SK_ABORT">SK ABORT</a>.
On most platforms, allocating pixel memory may succeed even though there is
@@ -1717,7 +1709,7 @@ implementation of malloc().
### Parameters
<table> <tr> <td><a name="SkBitmap_allocPixels_info"> <code><strong>info </strong></code> </a></td> <td>
-contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
+contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
</tr> <tr> <td><a name="SkBitmap_allocPixels_rowBytes"> <code><strong>rowBytes </strong></code> </a></td> <td>
size of pixel row or larger; may be zero</td>
</tr>
@@ -1733,14 +1725,14 @@ size of pixel row or larger; may be zero</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool SK_WARN_UNUSED_RESULT tryAllocPixels(const SkImageInfo& info)
</pre>
-Sets <a href="#Info">Image Info</a> to <a href="#SkBitmap_info">info</a> following the rules in <a href="#SkBitmap_setInfo">setInfo</a> and allocates pixel
+Sets <a href="undocumented#Image_Info">Image Info</a> to <a href="#SkBitmap_info">info</a> following the rules in <a href="#SkBitmap_setInfo">setInfo</a> and allocates pixel
memory.
-Returns false and calls <a href="#SkBitmap_reset">reset</a> if <a href="#Info">Image Info</a> could not be set, or memory could
+Returns false and calls <a href="#SkBitmap_reset">reset</a> if <a href="undocumented#Image_Info">Image Info</a> could not be set, or memory could
not be allocated.
On most platforms, allocating pixel memory may succeed even though there is
@@ -1751,7 +1743,7 @@ implementation of malloc().
### Parameters
<table> <tr> <td><a name="SkBitmap_tryAllocPixels_2_info"> <code><strong>info </strong></code> </a></td> <td>
-contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
+contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
</tr>
</table>
@@ -1769,15 +1761,15 @@ true if pixel storage is allocated
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void allocPixels(const SkImageInfo& info)
</pre>
-Sets <a href="#Info">Image Info</a> to <a href="#SkBitmap_info">info</a> following the rules in <a href="#SkBitmap_setInfo">setInfo</a> and allocates pixel
+Sets <a href="undocumented#Image_Info">Image Info</a> to <a href="#SkBitmap_info">info</a> following the rules in <a href="#SkBitmap_setInfo">setInfo</a> and allocates pixel
memory.
-Aborts execution if <a href="#Info">Image Info</a> could not be set, or memory could
-not be allocated, or memory size exceeds 31 bits. Abort steps may be provided by
+Aborts execution if <a href="undocumented#Image_Info">Image Info</a> could not be set, or memory could
+not be allocated. Abort steps may be provided by
the user at compile time by defining <a href="undocumented#SK_ABORT">SK ABORT</a>.
On most platforms, allocating pixel memory may succeed even though there is
@@ -1788,7 +1780,7 @@ implementation of malloc().
### Parameters
<table> <tr> <td><a name="SkBitmap_allocPixels_2_info"> <code><strong>info </strong></code> </a></td> <td>
-contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
+contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
</tr>
</table>
@@ -1805,13 +1797,12 @@ contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height<
<a name="SkBitmap_tryAllocN32Pixels"></a>
## tryAllocN32Pixels
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool SK_WARN_UNUSED_RESULT tryAllocN32Pixels(int width, int height,
- bool isOpaque = false)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool SK_WARN_UNUSED_RESULT tryAllocN32Pixels(int width, int height, bool isOpaque = false)
</pre>
-Sets <a href="#Info">Image Info</a> to <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, and the native <a href="undocumented#Color_Type">Color Type</a>; and allocates
-pixel memory. If <a href="#SkBitmap_isOpaque">isOpaque</a> is true, sets <a href="#Info">Image Info</a> to <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>;
+Sets <a href="undocumented#Image_Info">Image Info</a> to <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, and <a href="undocumented#Native_Color_Type">Native Color Type</a>; and allocates
+pixel memory. If <a href="#SkBitmap_isOpaque">isOpaque</a> is true, sets <a href="undocumented#Image_Info">Image Info</a> to <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>;
otherwise, sets to <a href="undocumented#SkAlphaType">kPremul SkAlphaType</a>.
Calls <a href="#SkBitmap_reset">reset</a> and returns false if <a href="#SkBitmap_width">width</a> exceeds 29 bits or is negative,
@@ -1819,8 +1810,8 @@ or <a href="#SkBitmap_height">height</a> is negative.
Returns false if allocation fails.
-Use to create <a href="#Bitmap">Bitmap</a> that matches native pixel arrangement on the platform,
-to draw without converting its pixel format.
+Use to create <a href="#Bitmap">Bitmap</a> that matches <a href="undocumented#SkPMColor">SkPMColor</a>, the native pixel arrangement on
+the platform. <a href="#Bitmap">Bitmap</a> drawn to output device skips converting its pixel format.
### Parameters
@@ -1850,20 +1841,20 @@ true if pixel storage is allocated
<a name="SkBitmap_allocN32Pixels"></a>
## allocN32Pixels
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void allocN32Pixels(int width, int height, bool isOpaque = false)
</pre>
-Sets <a href="#Info">Image Info</a> to <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, and the native <a href="undocumented#Color_Type">Color Type</a>; and allocates
-pixel memory. If <a href="#SkBitmap_isOpaque">isOpaque</a> is true, sets <a href="#Info">Image Info</a> to <a href="undocumented#SkAlphaType">kPremul SkAlphaType</a>;
+Sets <a href="undocumented#Image_Info">Image Info</a> to <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, and the <a href="undocumented#Native_Color_Type">Native Color Type</a>; and allocates
+pixel memory. If <a href="#SkBitmap_isOpaque">isOpaque</a> is true, sets <a href="undocumented#Image_Info">Image Info</a> to <a href="undocumented#SkAlphaType">kPremul SkAlphaType</a>;
otherwise, sets to <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>.
Aborts if <a href="#SkBitmap_width">width</a> exceeds 29 bits or is negative, or <a href="#SkBitmap_height">height</a> is negative, or
allocation fails. Abort steps may be provided by the user at compile time by
defining <a href="undocumented#SK_ABORT">SK ABORT</a>.
-Use to create <a href="#Bitmap">Bitmap</a> that matches native pixel arrangement on the platform,
-to draw without converting its pixel format.
+Use to create <a href="#Bitmap">Bitmap</a> that matches <a href="undocumented#SkPMColor">SkPMColor</a>, the native pixel arrangement on
+the platform. <a href="#Bitmap">Bitmap</a> drawn to output device skips converting its pixel format.
### Parameters
@@ -1889,30 +1880,30 @@ true if pixels do not have transparency</td>
<a name="SkBitmap_installPixels"></a>
## installPixels
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool installPixels(const SkImageInfo& info, void* pixels, size_t rowBytes,
- void (*releaseProc) (void* addr, void* context) , void* context)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool installPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, void (*releaseProc)
+ (void* addr, void* context) , void* context)
</pre>
-Sets <a href="#Info">Image Info</a> to <a href="#SkBitmap_info">info</a> following the rules in <a href="#SkBitmap_setInfo">setInfo</a>, and creates <a href="undocumented#Pixel_Ref">Pixel Ref</a>
+Sets <a href="undocumented#Image_Info">Image Info</a> to <a href="#SkBitmap_info">info</a> following the rules in <a href="#SkBitmap_setInfo">setInfo</a>, and creates <a href="undocumented#Pixel_Ref">Pixel Ref</a>
containing <a href="#SkBitmap_installPixels_pixels">pixels</a> and <a href="#SkBitmap_rowBytes">rowBytes</a>. <a href="#SkBitmap_installPixels_releaseProc">releaseProc</a>, if not nullptr, is called
immediately on failure or when <a href="#SkBitmap_installPixels_pixels">pixels</a> are no longer referenced. <a href="#SkBitmap_installPixels_context">context</a> may be
nullptr.
-If <a href="#Info">Image Info</a> could not be set, or <a href="#SkBitmap_rowBytes">rowBytes</a> is less than <a href="#SkBitmap_info">info</a>.<a href="undocumented#SkImageInfo">minRowBytes</a>:
+If <a href="undocumented#Image_Info">Image Info</a> could not be set, or <a href="#SkBitmap_rowBytes">rowBytes</a> is less than <a href="#SkBitmap_info">info</a>.<a href="undocumented#SkImageInfo">minRowBytes</a>:
calls <a href="#SkBitmap_installPixels_releaseProc">releaseProc</a> if present, calls <a href="#SkBitmap_reset">reset</a>, and returns false.
-Otherwise, if <a href="#SkBitmap_installPixels_pixels">pixels</a> equals nullptr: sets <a href="#Info">Image Info</a>, calls <a href="#SkBitmap_installPixels_releaseProc">releaseProc</a> if
+Otherwise, if <a href="#SkBitmap_installPixels_pixels">pixels</a> equals nullptr: sets <a href="undocumented#Image_Info">Image Info</a>, calls <a href="#SkBitmap_installPixels_releaseProc">releaseProc</a> if
present, returns true.
-If <a href="#Info">Image Info</a> is set, <a href="#SkBitmap_installPixels_pixels">pixels</a> is not nullptr, and <a href="#SkBitmap_installPixels_releaseProc">releaseProc</a> is not nullptr:
+If <a href="undocumented#Image_Info">Image Info</a> is set, <a href="#SkBitmap_installPixels_pixels">pixels</a> is not nullptr, and <a href="#SkBitmap_installPixels_releaseProc">releaseProc</a> is not nullptr:
when <a href="#SkBitmap_installPixels_pixels">pixels</a> are no longer referenced, calls <a href="#SkBitmap_installPixels_releaseProc">releaseProc</a> with <a href="#SkBitmap_installPixels_pixels">pixels</a> and <a href="#SkBitmap_installPixels_context">context</a>
as parameters.
### Parameters
<table> <tr> <td><a name="SkBitmap_installPixels_info"> <code><strong>info </strong></code> </a></td> <td>
-contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
+contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
</tr> <tr> <td><a name="SkBitmap_installPixels_pixels"> <code><strong>pixels </strong></code> </a></td> <td>
address or pixel storage; may be nullptr</td>
</tr> <tr> <td><a name="SkBitmap_installPixels_rowBytes"> <code><strong>rowBytes </strong></code> </a></td> <td>
@@ -1926,7 +1917,7 @@ caller state passed to <a href="#SkBitmap_installPixels_releaseProc">releaseProc
### Return Value
-true if <a href="#Info">Image Info</a> is set to <a href="#SkBitmap_info">info</a>
+true if <a href="undocumented#Image_Info">Image Info</a> is set to <a href="#SkBitmap_info">info</a>
### Example
@@ -1948,24 +1939,24 @@ install not successful
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool installPixels(const SkImageInfo& info, void* pixels, size_t rowBytes)
</pre>
-Sets <a href="#Info">Image Info</a> to <a href="#SkBitmap_info">info</a> following the rules in <a href="#SkBitmap_setInfo">setInfo</a>, and creates <a href="undocumented#Pixel_Ref">Pixel Ref</a>
+Sets <a href="undocumented#Image_Info">Image Info</a> to <a href="#SkBitmap_info">info</a> following the rules in <a href="#SkBitmap_setInfo">setInfo</a>, and creates <a href="undocumented#Pixel_Ref">Pixel Ref</a>
containing <a href="#SkBitmap_installPixels_2_pixels">pixels</a> and <a href="#SkBitmap_rowBytes">rowBytes</a>.
-If <a href="#Info">Image Info</a> could not be set, or <a href="#SkBitmap_rowBytes">rowBytes</a> is less than <a href="#SkBitmap_info">info</a>.<a href="undocumented#SkImageInfo">minRowBytes</a>:
+If <a href="undocumented#Image_Info">Image Info</a> could not be set, or <a href="#SkBitmap_rowBytes">rowBytes</a> is less than <a href="#SkBitmap_info">info</a>.<a href="undocumented#SkImageInfo">minRowBytes</a>:
calls <a href="#SkBitmap_reset">reset</a>, and returns false.
-Otherwise, if <a href="#SkBitmap_installPixels_2_pixels">pixels</a> equals nullptr: sets <a href="#Info">Image Info</a>, returns true.
+Otherwise, if <a href="#SkBitmap_installPixels_2_pixels">pixels</a> equals nullptr: sets <a href="undocumented#Image_Info">Image Info</a>, returns true.
Caller must ensure that <a href="#SkBitmap_installPixels_2_pixels">pixels</a> are valid for the lifetime of <a href="#Bitmap">Bitmap</a> and <a href="undocumented#Pixel_Ref">Pixel Ref</a>.
### Parameters
<table> <tr> <td><a name="SkBitmap_installPixels_2_info"> <code><strong>info </strong></code> </a></td> <td>
-contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
+contains <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
</tr> <tr> <td><a name="SkBitmap_installPixels_2_pixels"> <code><strong>pixels </strong></code> </a></td> <td>
address or pixel storage; may be nullptr</td>
</tr> <tr> <td><a name="SkBitmap_installPixels_2_rowBytes"> <code><strong>rowBytes </strong></code> </a></td> <td>
@@ -1975,7 +1966,7 @@ size of pixel row or larger</td>
### Return Value
-true if <a href="#Info">Image Info</a> is set to <a href="#SkBitmap_info">info</a>
+true if <a href="undocumented#Image_Info">Image Info</a> is set to <a href="#SkBitmap_info">info</a>
### Example
@@ -1987,30 +1978,30 @@ true if <a href="#Info">Image Info</a> is set to <a href="#SkBitmap_info">info</
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool installPixels(const SkPixmap& pixmap)
</pre>
-Sets <a href="#Info">Image Info</a> to <a href="#SkBitmap_installPixels_3_pixmap">pixmap</a>.<a href="#SkBitmap_info">info</a> following the rules in <a href="#SkBitmap_setInfo">setInfo</a>, and creates
+Sets <a href="undocumented#Image_Info">Image Info</a> to <a href="#SkBitmap_installPixels_3_pixmap">pixmap</a>.<a href="#SkBitmap_info">info</a> following the rules in <a href="#SkBitmap_setInfo">setInfo</a>, and creates
<a href="undocumented#Pixel_Ref">Pixel Ref</a> containing <a href="#SkBitmap_installPixels_3_pixmap">pixmap</a>.addr() and <a href="#SkBitmap_installPixels_3_pixmap">pixmap</a>.<a href="#SkBitmap_rowBytes">rowBytes</a>.
-If <a href="#Info">Image Info</a> could not be set, or <a href="#SkBitmap_installPixels_3_pixmap">pixmap</a>.<a href="#SkBitmap_rowBytes">rowBytes</a> is less than
+If <a href="undocumented#Image_Info">Image Info</a> could not be set, or <a href="#SkBitmap_installPixels_3_pixmap">pixmap</a>.<a href="#SkBitmap_rowBytes">rowBytes</a> is less than
<a href="#SkImageInfo_minRowBytes">SkImageInfo::minRowBytes</a>: calls <a href="#SkBitmap_reset">reset</a>, and returns false.
-Otherwise, if <a href="#SkBitmap_installPixels_3_pixmap">pixmap</a>.addr() equals nullptr: sets <a href="#Info">Image Info</a>, returns true.
+Otherwise, if <a href="#SkBitmap_installPixels_3_pixmap">pixmap</a>.addr() equals nullptr: sets <a href="undocumented#Image_Info">Image Info</a>, returns true.
Caller must ensure that <a href="#SkBitmap_installPixels_3_pixmap">pixmap</a> is valid for the lifetime of <a href="#Bitmap">Bitmap</a> and <a href="undocumented#Pixel_Ref">Pixel Ref</a>.
### Parameters
<table> <tr> <td><a name="SkBitmap_installPixels_3_pixmap"> <code><strong>pixmap </strong></code> </a></td> <td>
-<a href="#Info">Image Info</a>, pixel address, and <a href="#SkBitmap_rowBytes">rowBytes</a></td>
+<a href="undocumented#Image_Info">Image Info</a>, pixel address, and <a href="#SkBitmap_rowBytes">rowBytes</a></td>
</tr>
</table>
### Return Value
-true if <a href="#Info">Image Info</a> was set to <a href="#SkBitmap_installPixels_3_pixmap">pixmap</a>.<a href="#SkBitmap_info">info</a>
+true if <a href="undocumented#Image_Info">Image Info</a> was set to <a href="#SkBitmap_installPixels_3_pixmap">pixmap</a>.<a href="#SkBitmap_info">info</a>
### Example
@@ -2025,11 +2016,11 @@ true if <a href="#Info">Image Info</a> was set to <a href="#SkBitmap_installPixe
<a name="SkBitmap_installMaskPixels"></a>
## installMaskPixels
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool installMaskPixels(const SkMask& mask)
</pre>
-Sets <a href="#Info">Image Info</a> to <a href="#SkBitmap_installMaskPixels_mask">mask</a> <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_installMaskPixels_mask">mask</a> <a href="#SkBitmap_height">height</a>, <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>, and
+Sets <a href="undocumented#Image_Info">Image Info</a> to <a href="#SkBitmap_installMaskPixels_mask">mask</a> <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_installMaskPixels_mask">mask</a> <a href="#SkBitmap_height">height</a>, <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>, and
<a href="undocumented#SkAlphaType">kPremul SkAlphaType</a>. Sets <a href="undocumented#Pixel_Ref">Pixel Ref</a> to <a href="#SkBitmap_installMaskPixels_mask">mask</a> image and <a href="#SkBitmap_installMaskPixels_mask">mask</a> <a href="#SkBitmap_rowBytes">rowBytes</a>.
Returns false and calls <a href="#SkBitmap_reset">reset</a> if <a href="#SkBitmap_installMaskPixels_mask">mask</a> format is not <a href="#SkMask_kA8_Format">SkMask::kA8 Format</a>,
@@ -2047,7 +2038,7 @@ Caller must ensure that <a href="#SkBitmap_installMaskPixels_mask">mask</a> is v
### Return Value
-true if <a href="#Info">Image Info</a> and <a href="undocumented#Pixel_Ref">Pixel Ref</a> refer to <a href="#SkBitmap_installMaskPixels_mask">mask</a>
+true if <a href="undocumented#Image_Info">Image Info</a> and <a href="undocumented#Pixel_Ref">Pixel Ref</a> refer to <a href="#SkBitmap_installMaskPixels_mask">mask</a>
### Example
@@ -2062,11 +2053,11 @@ true if <a href="#Info">Image Info</a> and <a href="undocumented#Pixel_Ref">Pixe
<a name="SkBitmap_setPixels"></a>
## setPixels
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setPixels(void* pixels)
</pre>
-Replaces <a href="undocumented#Pixel_Ref">Pixel Ref</a> with <a href="#SkBitmap_setPixels_pixels">pixels</a>, preserving <a href="#Info">Image Info</a> and <a href="#SkBitmap_rowBytes">rowBytes</a>.
+Replaces <a href="undocumented#Pixel_Ref">Pixel Ref</a> with <a href="#SkBitmap_setPixels_pixels">pixels</a>, preserving <a href="undocumented#Image_Info">Image Info</a> and <a href="#SkBitmap_rowBytes">rowBytes</a>.
Sets <a href="undocumented#Pixel_Ref">Pixel Ref</a> origin to (0, 0).
If <a href="#SkBitmap_setPixels_pixels">pixels</a> is nullptr, or if <a href="#SkBitmap_info">info</a>.<a href="#SkBitmap_colorType">colorType</a> equals <a href="undocumented#SkColorType">kUnknown SkColorType</a>;
@@ -2092,15 +2083,14 @@ address of pixel storage, managed by caller</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool SK_WARN_UNUSED_RESULT tryAllocPixels()
</pre>
Allocates pixel memory with <a href="#SkBitmap_HeapAllocator">HeapAllocator</a>, and replaces existing <a href="undocumented#Pixel_Ref">Pixel Ref</a>.
-The allocation size is determined by <a href="#Info">Image Info</a> <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, and <a href="undocumented#Color_Type">Color Type</a>.
+The allocation size is determined by <a href="undocumented#Image_Info">Image Info</a> <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, and <a href="undocumented#Image_Color_Type">Color Type</a>.
-Returns false if <a href="#SkBitmap_info">info</a>.<a href="#SkBitmap_colorType">colorType</a> is <a href="undocumented#SkColorType">kUnknown SkColorType</a>, or allocation exceeds
-31 bits, or allocation fails.
+Returns false if <a href="#SkBitmap_info">info</a>.<a href="#SkBitmap_colorType">colorType</a> is <a href="undocumented#SkColorType">kUnknown SkColorType</a>, or allocation fails.
### Return Value
@@ -2118,15 +2108,15 @@ and erases it to black, but does not alter set1. <a href="#SkBitmap_setPixels">s
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void allocPixels()
</pre>
Allocates pixel memory with <a href="#SkBitmap_HeapAllocator">HeapAllocator</a>, and replaces existing <a href="undocumented#Pixel_Ref">Pixel Ref</a>.
-The allocation size is determined by <a href="#Info">Image Info</a> <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, and <a href="undocumented#Color_Type">Color Type</a>.
+The allocation size is determined by <a href="undocumented#Image_Info">Image Info</a> <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, and <a href="undocumented#Image_Color_Type">Color Type</a>.
-Aborts if <a href="#SkBitmap_info">info</a>.<a href="#SkBitmap_colorType">colorType</a> is <a href="undocumented#SkColorType">kUnknown SkColorType</a>, or allocation exceeds
-31 bits, or allocation fails. Abort steps may be provided by the user at compile
+Aborts if <a href="#SkBitmap_info">info</a>.<a href="#SkBitmap_colorType">colorType</a> is <a href="undocumented#SkColorType">kUnknown SkColorType</a>, or allocation fails.
+Abort steps may be provided by the user at compile
time by defining <a href="undocumented#SK_ABORT">SK ABORT</a>.
### Example
@@ -2141,12 +2131,12 @@ and erases it to black, but does not alter set1. <a href="#SkBitmap_setPixels">s
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool SK_WARN_UNUSED_RESULT tryAllocPixels(Allocator* allocator)
</pre>
Allocates pixel memory with <a href="#SkBitmap_tryAllocPixels_4_allocator">allocator</a>, and replaces existing <a href="undocumented#Pixel_Ref">Pixel Ref</a>.
-The allocation size is determined by <a href="#Info">Image Info</a> <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, and <a href="undocumented#Color_Type">Color Type</a>.
+The allocation size is determined by <a href="undocumented#Image_Info">Image Info</a> <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, and <a href="undocumented#Image_Color_Type">Color Type</a>.
If <a href="#SkBitmap_tryAllocPixels_4_allocator">allocator</a> is nullptr, use <a href="#SkBitmap_HeapAllocator">HeapAllocator</a> instead.
Returns false if <a href="#SkBitmap_tryAllocPixels_4_allocator">allocator</a> <a href="#SkBitmap_HeapAllocator_allocPixelRef">allocPixelRef</a> return false.
@@ -2175,12 +2165,12 @@ sufficient memory.</div></fiddle-embed></div>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void allocPixels(Allocator* allocator)
</pre>
Allocates pixel memory with <a href="#SkBitmap_allocPixels_4_allocator">allocator</a>, and replaces existing <a href="undocumented#Pixel_Ref">Pixel Ref</a>.
-The allocation size is determined by <a href="#Info">Image Info</a> <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, and <a href="undocumented#Color_Type">Color Type</a>.
+The allocation size is determined by <a href="undocumented#Image_Info">Image Info</a> <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, and <a href="undocumented#Image_Color_Type">Color Type</a>.
If <a href="#SkBitmap_allocPixels_4_allocator">allocator</a> is nullptr, use <a href="#SkBitmap_HeapAllocator">HeapAllocator</a> instead.
Aborts if <a href="#SkBitmap_allocPixels_4_allocator">allocator</a> <a href="#SkBitmap_HeapAllocator_allocPixelRef">allocPixelRef</a> return false. Abort steps may be provided by
@@ -2206,7 +2196,7 @@ instance of <a href="#SkBitmap_Allocator">SkBitmap::Allocator</a> instantiation<
<a name="SkBitmap_pixelRef"></a>
## pixelRef
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkPixelRef* pixelRef() const
</pre>
@@ -2232,7 +2222,7 @@ If <a href="undocumented#Pixel_Ref">Pixel Ref</a> has not been set, returns null
<a name="SkBitmap_pixelRefOrigin"></a>
## pixelRefOrigin
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkIPoint pixelRefOrigin() const
</pre>
@@ -2271,7 +2261,7 @@ subset origin: 32, 64
<a name="SkBitmap_setPixelRef"></a>
## setPixelRef
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setPixelRef(sk_sp&lt;SkPixelRef&gt; pixelRef, int dx, int dy)
</pre>
@@ -2282,7 +2272,7 @@ Asserts in debug builds if <a href="#SkBitmap_setPixelRef_dx">dx</a> or <a href=
to legal range in release builds.
The caller is responsible for ensuring that the pixels match the
-<a href="undocumented#Color_Type">Color Type</a> and <a href="undocumented#Alpha_Type">Alpha Type</a> in <a href="#Info">Image Info</a>.
+<a href="undocumented#Image_Color_Type">Color Type</a> and <a href="undocumented#Image_Alpha_Type">Alpha Type</a> in <a href="undocumented#Image_Info">Image Info</a>.
### Parameters
@@ -2308,7 +2298,7 @@ row offset in <a href="undocumented#Pixel_Ref">Pixel Ref</a> for bitmap origin</
<a name="SkBitmap_readyToDraw"></a>
## readyToDraw
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool readyToDraw() const
</pre>
@@ -2331,7 +2321,7 @@ true if <a href="#SkBitmap_getPixels">getPixels</a> is not nullptr
<a name="SkBitmap_getGenerationID"></a>
## getGenerationID
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
uint32_t getGenerationID() const
</pre>
@@ -2369,7 +2359,7 @@ erase id 6
<a name="SkBitmap_notifyPixelsChanged"></a>
## notifyPixelsChanged
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void notifyPixelsChanged() const
</pre>
@@ -2389,7 +2379,7 @@ Marks that pixels in <a href="undocumented#Pixel_Ref">Pixel Ref</a> have changed
<a name="SkBitmap_eraseColor"></a>
## eraseColor
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void eraseColor(SkColor c) const
</pre>
@@ -2418,7 +2408,7 @@ then <a href="#RGB">Color RGB</a> is ignored.
<a name="SkBitmap_eraseARGB"></a>
## eraseARGB
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void eraseARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b) const
</pre>
@@ -2454,7 +2444,7 @@ amount of <a href="#RGB_Blue">Color RGB Blue</a>, from no blue (0) to full blue
<a name="SkBitmap_eraseRGB"></a>
## eraseRGB
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void eraseRGB(U8CPU r, U8CPU g, U8CPU b) const
</pre>
@@ -2480,7 +2470,7 @@ amount of blue</td>
<a name="SkBitmap_erase"></a>
## erase
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void erase(SkColor c, const SkIRect& area) const
</pre>
@@ -2513,7 +2503,7 @@ rectangle to fill</td>
<a name="SkBitmap_eraseArea"></a>
## eraseArea
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void eraseArea(const SkIRect& area, SkColor c) const
</pre>
@@ -2524,19 +2514,19 @@ Legacy call to be deprecated.
<a name="SkBitmap_getColor"></a>
## getColor
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkColor getColor(int x, int y) const
</pre>
Returns pixel at (<a href="#SkBitmap_getColor_x">x</a>, <a href="#SkBitmap_getColor_y">y</a>) as <a href="#Unpremultiply">Unpremultiplied</a> <a href="undocumented#Color">Color</a>.
-Returns black with <a href="#Alpha">Alpha</a> if <a href="undocumented#Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>.
+Returns black with <a href="#Alpha">Alpha</a> if <a href="undocumented#Image_Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>.
Input is not validated: out of <a href="#SkBitmap_bounds">bounds</a> values of <a href="#SkBitmap_getColor_x">x</a> or <a href="#SkBitmap_getColor_y">y</a> trigger an assert() if
built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined; and returns undefined values or may crash if
-<a href="undocumented#SK_RELEASE">SK RELEASE</a> is defined. Fails if <a href="undocumented#Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kUnknown SkColorType</a> or
+<a href="undocumented#SK_RELEASE">SK RELEASE</a> is defined. Fails if <a href="undocumented#Image_Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kUnknown SkColorType</a> or
pixel address is nullptr.
-<a href="undocumented#Color_Space">Color Space</a> in <a href="#Info">Image Info</a> is ignored. Some <a href="undocumented#Color">Color</a> precision may be lost in the
+<a href="undocumented#Color_Space">Color Space</a> in <a href="undocumented#Image_Info">Image Info</a> is ignored. Some <a href="undocumented#Color">Color</a> precision may be lost in the
conversion to <a href="#Unpremultiply">Unpremultiplied</a> <a href="undocumented#Color">Color</a>; original pixel data may have additional
precision.
@@ -2583,7 +2573,7 @@ Unpremultiplied:
<a name="SkBitmap_getAddr"></a>
## getAddr
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void* getAddr(int x, int y) const
</pre>
@@ -2591,7 +2581,7 @@ Returns pixel address at (<a href="#SkBitmap_getAddr_x">x</a>, <a href="#SkBitma
Input is not validated: out of <a href="#SkBitmap_bounds">bounds</a> values of <a href="#SkBitmap_getAddr_x">x</a> or <a href="#SkBitmap_getAddr_y">y</a>, or <a href="undocumented#SkColorType">kUnknown SkColorType</a>,
trigger an assert() if built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined. Returns nullptr if
-<a href="undocumented#Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kUnknown SkColorType</a>, or <a href="undocumented#Pixel_Ref">Pixel Ref</a> is nullptr.
+<a href="undocumented#Image_Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kUnknown SkColorType</a>, or <a href="undocumented#Pixel_Ref">Pixel Ref</a> is nullptr.
Performs a lookup of pixel size; for better performance, call
one of: <a href="#SkBitmap_getAddr8">getAddr8</a>, <a href="#SkBitmap_getAddr16">getAddr16</a>, or <a href="#SkBitmap_getAddr32">getAddr32</a>.
@@ -2630,7 +2620,7 @@ addr interval == rowBytes
<a name="SkBitmap_getAddr32"></a>
## getAddr32
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
inline uint32_t* getAddr32(int x, int y) const
</pre>
@@ -2679,7 +2669,7 @@ addr interval == rowBytes
<a name="SkBitmap_getAddr16"></a>
## getAddr16
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
inline uint16_t* getAddr16(int x, int y) const
</pre>
@@ -2728,7 +2718,7 @@ addr interval == rowBytes
<a name="SkBitmap_getAddr8"></a>
## getAddr8
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
inline uint8_t* getAddr8(int x, int y) const
</pre>
@@ -2777,7 +2767,7 @@ unsigned 8-bit pointer to pixel at (<a href="#SkBitmap_getAddr8_x">x</a>, <a hre
<a name="SkBitmap_extractSubset"></a>
## extractSubset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool extractSubset(SkBitmap* dst, const SkIRect& subset) const
</pre>
@@ -2844,15 +2834,15 @@ subset: 1000, 100, 1000, 200 success; false
<a name="SkBitmap_readPixels"></a>
## readPixels
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes,
- int srcX, int srcY, SkTransferFunctionBehavior behavior) const
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, int srcX, int srcY,
+ SkTransferFunctionBehavior behavior) const
</pre>
Copies a <a href="SkRect_Reference#Rect">Rect</a> of pixels to <a href="#SkBitmap_readPixels_dstPixels">dstPixels</a>. Copy starts at (<a href="#SkBitmap_readPixels_srcX">srcX</a>, <a href="#SkBitmap_readPixels_srcY">srcY</a>), and does not exceed
(this-><a href="#SkBitmap_width">width</a>, this-><a href="#SkBitmap_height">height</a>).
-<a href="#SkBitmap_readPixels_dstInfo">dstInfo</a> specifies <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, and
+<a href="#SkBitmap_readPixels_dstInfo">dstInfo</a> specifies <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, and
<a href="undocumented#Color_Space">Color Space</a> of destination. <a href="#SkBitmap_readPixels_dstRowBytes">dstRowBytes</a> specifics the gap from one destination
row to the next. Returns true if pixels are copied. Returns false if:
@@ -2881,7 +2871,7 @@ pixels are treated as if they are linear, regardless of how they are encoded.
### Parameters
<table> <tr> <td><a name="SkBitmap_readPixels_dstInfo"> <code><strong>dstInfo </strong></code> </a></td> <td>
-destination <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
+destination <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
</tr> <tr> <td><a name="SkBitmap_readPixels_dstPixels"> <code><strong>dstPixels </strong></code> </a></td> <td>
destination pixel storage</td>
</tr> <tr> <td><a name="SkBitmap_readPixels_dstRowBytes"> <code><strong>dstRowBytes </strong></code> </a></td> <td>
@@ -2910,15 +2900,14 @@ true if pixels are copied to <a href="#SkBitmap_readPixels_dstPixels">dstPixels<
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes,
- int srcX, int srcY) const
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, int srcX, int srcY) const
</pre>
Copies a <a href="SkRect_Reference#Rect">Rect</a> of pixels to <a href="#SkBitmap_readPixels_2_dstPixels">dstPixels</a>. Copy starts at (<a href="#SkBitmap_readPixels_2_srcX">srcX</a>, <a href="#SkBitmap_readPixels_2_srcY">srcY</a>), and does not exceed
(this-><a href="#SkBitmap_width">width</a>, this-><a href="#SkBitmap_height">height</a>).
-<a href="#SkBitmap_readPixels_2_dstInfo">dstInfo</a> specifies <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, and
+<a href="#SkBitmap_readPixels_2_dstInfo">dstInfo</a> specifies <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, and
<a href="undocumented#Color_Space">Color Space</a> of destination. <a href="#SkBitmap_readPixels_2_dstRowBytes">dstRowBytes</a> specifics the gap from one destination
row to the next. Returns true if pixels are copied. Returns false if:
@@ -2942,7 +2931,7 @@ or ifabs(srcY) >= this-><a href="#SkBitmap_height">height</a>.
### Parameters
<table> <tr> <td><a name="SkBitmap_readPixels_2_dstInfo"> <code><strong>dstInfo </strong></code> </a></td> <td>
-destination <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
+destination <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
</tr> <tr> <td><a name="SkBitmap_readPixels_2_dstPixels"> <code><strong>dstPixels </strong></code> </a></td> <td>
destination pixel storage</td>
</tr> <tr> <td><a name="SkBitmap_readPixels_2_dstRowBytes"> <code><strong>dstRowBytes </strong></code> </a></td> <td>
@@ -2969,14 +2958,14 @@ creates visible banding.</div></fiddle-embed></div>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool readPixels(const SkPixmap& dst, int srcX, int srcY) const
</pre>
Copies a <a href="SkRect_Reference#Rect">Rect</a> of pixels to <a href="#SkBitmap_readPixels_3_dst">dst</a>. Copy starts at (<a href="#SkBitmap_readPixels_3_srcX">srcX</a>, <a href="#SkBitmap_readPixels_3_srcY">srcY</a>), and does not exceed
(this-><a href="#SkBitmap_width">width</a>, this-><a href="#SkBitmap_height">height</a>).
-<a href="#SkBitmap_readPixels_3_dst">dst</a> specifies <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>, pixel storage,
+<a href="#SkBitmap_readPixels_3_dst">dst</a> specifies <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>, pixel storage,
and row bytes of destination. <a href="#SkBitmap_readPixels_3_dst">dst</a>.<a href="#SkBitmap_rowBytes">rowBytes</a> specifics the gap from one destination
row to the next. Returns true if pixels are copied. Returns false if:
@@ -2987,9 +2976,9 @@ row to the next. Returns true if pixels are copied. Returns false if:
</table>
Pixels are copied only if pixel conversion is possible. If this-><a href="#SkBitmap_colorType">colorType</a> is
-<a href="undocumented#SkColorType">kGray 8 SkColorType</a>, or <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>; <a href="#SkBitmap_readPixels_3_dst">dst</a> <a href="undocumented#Color_Type">Color Type</a> must match.
+<a href="undocumented#SkColorType">kGray 8 SkColorType</a>, or <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>; <a href="#SkBitmap_readPixels_3_dst">dst</a> <a href="undocumented#Image_Color_Type">Color Type</a> must match.
If this-><a href="#SkBitmap_colorType">colorType</a> is <a href="undocumented#SkColorType">kGray 8 SkColorType</a>, <a href="#SkBitmap_readPixels_3_dst">dst</a> <a href="undocumented#Color_Space">Color Space</a> must match.
-If this-><a href="#SkBitmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>, <a href="#SkBitmap_readPixels_3_dst">dst</a> <a href="undocumented#Alpha_Type">Alpha Type</a> must
+If this-><a href="#SkBitmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>, <a href="#SkBitmap_readPixels_3_dst">dst</a> <a href="undocumented#Image_Alpha_Type">Alpha Type</a> must
match. If this-><a href="#SkBitmap_colorSpace">colorSpace</a> is nullptr, <a href="#SkBitmap_readPixels_3_dst">dst</a> <a href="undocumented#Color_Space">Color Space</a> must match. Returns
false if pixel conversion is not possible.
<a href="#SkBitmap_readPixels_3_srcX">srcX</a> and <a href="#SkBitmap_readPixels_3_srcY">srcY</a> may be negative to copy only top or left of source. Returns
@@ -3000,7 +2989,7 @@ or ifabs(srcY) >= this-><a href="#SkBitmap_height">height</a>.
### Parameters
<table> <tr> <td><a name="SkBitmap_readPixels_3_dst"> <code><strong>dst </strong></code> </a></td> <td>
-destination <a href="SkPixmap_Reference#Pixmap">Pixmap</a>: <a href="#Info">Image Info</a>, pixels, row bytes</td>
+destination <a href="SkPixmap_Reference#Pixmap">Pixmap</a>: <a href="undocumented#Image_Info">Image Info</a>, pixels, row bytes</td>
</tr> <tr> <td><a name="SkBitmap_readPixels_3_srcX"> <code><strong>srcX </strong></code> </a></td> <td>
column index whose absolute value is less than <a href="#SkBitmap_width">width</a></td>
</tr> <tr> <td><a name="SkBitmap_readPixels_3_srcY"> <code><strong>srcY </strong></code> </a></td> <td>
@@ -3022,14 +3011,14 @@ true if pixels are copied to <a href="#SkBitmap_readPixels_3_dst">dst</a>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool readPixels(const SkPixmap& dst) const
</pre>
Copies a <a href="SkRect_Reference#Rect">Rect</a> of pixels to <a href="#SkBitmap_readPixels_4_dst">dst</a>. Copy starts at (0, 0), and does not exceed
(this-><a href="#SkBitmap_width">width</a>, this-><a href="#SkBitmap_height">height</a>).
-<a href="#SkBitmap_readPixels_4_dst">dst</a> specifies <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>, pixel storage,
+<a href="#SkBitmap_readPixels_4_dst">dst</a> specifies <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>, pixel storage,
and row bytes of destination. <a href="#SkBitmap_readPixels_4_dst">dst</a>.<a href="#SkBitmap_rowBytes">rowBytes</a> specifics the gap from one destination
row to the next. Returns true if pixels are copied. Returns false if:
@@ -3040,16 +3029,16 @@ row to the next. Returns true if pixels are copied. Returns false if:
</table>
Pixels are copied only if pixel conversion is possible. If this-><a href="#SkBitmap_colorType">colorType</a> is
-<a href="undocumented#SkColorType">kGray 8 SkColorType</a>, or <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>; <a href="#SkBitmap_readPixels_4_dst">dst</a> <a href="undocumented#Color_Type">Color Type</a> must match.
+<a href="undocumented#SkColorType">kGray 8 SkColorType</a>, or <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>; <a href="#SkBitmap_readPixels_4_dst">dst</a> <a href="undocumented#Image_Color_Type">Color Type</a> must match.
If this-><a href="#SkBitmap_colorType">colorType</a> is <a href="undocumented#SkColorType">kGray 8 SkColorType</a>, <a href="#SkBitmap_readPixels_4_dst">dst</a> <a href="undocumented#Color_Space">Color Space</a> must match.
-If this-><a href="#SkBitmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>, <a href="#SkBitmap_readPixels_4_dst">dst</a> <a href="undocumented#Alpha_Type">Alpha Type</a> must
+If this-><a href="#SkBitmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>, <a href="#SkBitmap_readPixels_4_dst">dst</a> <a href="undocumented#Image_Alpha_Type">Alpha Type</a> must
match. If this-><a href="#SkBitmap_colorSpace">colorSpace</a> is nullptr, <a href="#SkBitmap_readPixels_4_dst">dst</a> <a href="undocumented#Color_Space">Color Space</a> must match. Returns
false if pixel conversion is not possible.
### Parameters
<table> <tr> <td><a name="SkBitmap_readPixels_4_dst"> <code><strong>dst </strong></code> </a></td> <td>
-destination <a href="SkPixmap_Reference#Pixmap">Pixmap</a>: <a href="#Info">Image Info</a>, pixels, row bytes</td>
+destination <a href="SkPixmap_Reference#Pixmap">Pixmap</a>: <a href="undocumented#Image_Info">Image Info</a>, pixels, row bytes</td>
</tr>
</table>
@@ -3070,14 +3059,14 @@ true if pixels are copied to <a href="#SkBitmap_readPixels_4_dst">dst</a>
<a name="SkBitmap_writePixels"></a>
## writePixels
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool writePixels(const SkPixmap& src, int dstX, int dstY)
</pre>
Copies a <a href="SkRect_Reference#Rect">Rect</a> of pixels from <a href="#SkBitmap_writePixels_src">src</a>. Copy starts at (<a href="#SkBitmap_writePixels_dstX">dstX</a>, <a href="#SkBitmap_writePixels_dstY">dstY</a>), and does not exceed
(<a href="#SkBitmap_writePixels_src">src</a>.<a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_writePixels_src">src</a>.<a href="#SkBitmap_height">height</a>).
-<a href="#SkBitmap_writePixels_src">src</a> specifies <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>, pixel storage,
+<a href="#SkBitmap_writePixels_src">src</a> specifies <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>, pixel storage,
and row bytes of source. <a href="#SkBitmap_writePixels_src">src</a>.<a href="#SkBitmap_rowBytes">rowBytes</a> specifics the gap from one source
row to the next. Returns true if pixels are copied. Returns false if:
@@ -3088,9 +3077,9 @@ row to the next. Returns true if pixels are copied. Returns false if:
</table>
Pixels are copied only if pixel conversion is possible. If this-><a href="#SkBitmap_colorType">colorType</a> is
-<a href="undocumented#SkColorType">kGray 8 SkColorType</a>, or <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>; <a href="#SkBitmap_writePixels_src">src</a> <a href="undocumented#Color_Type">Color Type</a> must match.
+<a href="undocumented#SkColorType">kGray 8 SkColorType</a>, or <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>; <a href="#SkBitmap_writePixels_src">src</a> <a href="undocumented#Image_Color_Type">Color Type</a> must match.
If this-><a href="#SkBitmap_colorType">colorType</a> is <a href="undocumented#SkColorType">kGray 8 SkColorType</a>, <a href="#SkBitmap_writePixels_src">src</a> <a href="undocumented#Color_Space">Color Space</a> must match.
-If this-><a href="#SkBitmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>, <a href="#SkBitmap_writePixels_src">src</a> <a href="undocumented#Alpha_Type">Alpha Type</a> must
+If this-><a href="#SkBitmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>, <a href="#SkBitmap_writePixels_src">src</a> <a href="undocumented#Image_Alpha_Type">Alpha Type</a> must
match. If this-><a href="#SkBitmap_colorSpace">colorSpace</a> is nullptr, <a href="#SkBitmap_writePixels_src">src</a> <a href="undocumented#Color_Space">Color Space</a> must match. Returns
false if pixel conversion is not possible.
<a href="#SkBitmap_writePixels_dstX">dstX</a> and <a href="#SkBitmap_writePixels_dstY">dstY</a> may be negative to copy only top or left of source. Returns
@@ -3101,7 +3090,7 @@ or ifabs(dstY) >= this-><a href="#SkBitmap_height">height</a>.
### Parameters
<table> <tr> <td><a name="SkBitmap_writePixels_src"> <code><strong>src </strong></code> </a></td> <td>
-source <a href="SkPixmap_Reference#Pixmap">Pixmap</a>: <a href="#Info">Image Info</a>, pixels, row bytes</td>
+source <a href="SkPixmap_Reference#Pixmap">Pixmap</a>: <a href="undocumented#Image_Info">Image Info</a>, pixels, row bytes</td>
</tr> <tr> <td><a name="SkBitmap_writePixels_dstX"> <code><strong>dstX </strong></code> </a></td> <td>
column index whose absolute value is less than <a href="#SkBitmap_width">width</a></td>
</tr> <tr> <td><a name="SkBitmap_writePixels_dstY"> <code><strong>dstY </strong></code> </a></td> <td>
@@ -3123,14 +3112,14 @@ true if <a href="#SkBitmap_writePixels_src">src</a> pixels are copied to <a href
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool writePixels(const SkPixmap& src)
</pre>
Copies a <a href="SkRect_Reference#Rect">Rect</a> of pixels from <a href="#SkBitmap_writePixels_2_src">src</a>. Copy starts at (0, 0), and does not exceed
(<a href="#SkBitmap_writePixels_2_src">src</a>.<a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_writePixels_2_src">src</a>.<a href="#SkBitmap_height">height</a>).
-<a href="#SkBitmap_writePixels_2_src">src</a> specifies <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>, pixel storage,
+<a href="#SkBitmap_writePixels_2_src">src</a> specifies <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>, pixel storage,
and row bytes of source. <a href="#SkBitmap_writePixels_2_src">src</a>.<a href="#SkBitmap_rowBytes">rowBytes</a> specifics the gap from one source
row to the next. Returns true if pixels are copied. Returns false if:
@@ -3141,16 +3130,16 @@ row to the next. Returns true if pixels are copied. Returns false if:
</table>
Pixels are copied only if pixel conversion is possible. If this-><a href="#SkBitmap_colorType">colorType</a> is
-<a href="undocumented#SkColorType">kGray 8 SkColorType</a>, or <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>; <a href="#SkBitmap_writePixels_2_src">src</a> <a href="undocumented#Color_Type">Color Type</a> must match.
+<a href="undocumented#SkColorType">kGray 8 SkColorType</a>, or <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>; <a href="#SkBitmap_writePixels_2_src">src</a> <a href="undocumented#Image_Color_Type">Color Type</a> must match.
If this-><a href="#SkBitmap_colorType">colorType</a> is <a href="undocumented#SkColorType">kGray 8 SkColorType</a>, <a href="#SkBitmap_writePixels_2_src">src</a> <a href="undocumented#Color_Space">Color Space</a> must match.
-If this-><a href="#SkBitmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>, <a href="#SkBitmap_writePixels_2_src">src</a> <a href="undocumented#Alpha_Type">Alpha Type</a> must
+If this-><a href="#SkBitmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>, <a href="#SkBitmap_writePixels_2_src">src</a> <a href="undocumented#Image_Alpha_Type">Alpha Type</a> must
match. If this-><a href="#SkBitmap_colorSpace">colorSpace</a> is nullptr, <a href="#SkBitmap_writePixels_2_src">src</a> <a href="undocumented#Color_Space">Color Space</a> must match. Returns
false if pixel conversion is not possible.
### Parameters
<table> <tr> <td><a name="SkBitmap_writePixels_2_src"> <code><strong>src </strong></code> </a></td> <td>
-source <a href="SkPixmap_Reference#Pixmap">Pixmap</a>: <a href="#Info">Image Info</a>, pixels, row bytes</td>
+source <a href="SkPixmap_Reference#Pixmap">Pixmap</a>: <a href="undocumented#Image_Info">Image Info</a>, pixels, row bytes</td>
</tr>
</table>
@@ -3168,15 +3157,14 @@ true if <a href="#SkBitmap_writePixels_2_src">src</a> pixels are copied to <a hr
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool writePixels(const SkPixmap& src, int x, int y,
- SkTransferFunctionBehavior behavior)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool writePixels(const SkPixmap& src, int x, int y, SkTransferFunctionBehavior behavior)
</pre>
Copies a <a href="SkRect_Reference#Rect">Rect</a> of pixels from <a href="#SkBitmap_writePixels_3_src">src</a>. Copy starts at (0, 0), and does not exceed
(<a href="#SkBitmap_writePixels_3_src">src</a>.<a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_writePixels_3_src">src</a>.<a href="#SkBitmap_height">height</a>).
-<a href="#SkBitmap_writePixels_3_src">src</a> specifies <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>, pixel storage,
+<a href="#SkBitmap_writePixels_3_src">src</a> specifies <a href="#SkBitmap_width">width</a>, <a href="#SkBitmap_height">height</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>, pixel storage,
and row bytes of source. <a href="#SkBitmap_writePixels_3_src">src</a>.<a href="#SkBitmap_rowBytes">rowBytes</a> specifics the gap from one source
row to the next. Returns true if pixels are copied. Returns false if:
@@ -3187,22 +3175,22 @@ row to the next. Returns true if pixels are copied. Returns false if:
</table>
Pixels are copied only if pixel conversion is possible. If this-><a href="#SkBitmap_colorType">colorType</a> is
-<a href="undocumented#SkColorType">kGray 8 SkColorType</a>, or <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>; <a href="#SkBitmap_writePixels_3_src">src</a> <a href="undocumented#Color_Type">Color Type</a> must match.
+<a href="undocumented#SkColorType">kGray 8 SkColorType</a>, or <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>; <a href="#SkBitmap_writePixels_3_src">src</a> <a href="undocumented#Image_Color_Type">Color Type</a> must match.
If this-><a href="#SkBitmap_colorType">colorType</a> is <a href="undocumented#SkColorType">kGray 8 SkColorType</a>, <a href="#SkBitmap_writePixels_3_src">src</a> <a href="undocumented#Color_Space">Color Space</a> must match.
-If this-><a href="#SkBitmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>, <a href="#SkBitmap_writePixels_3_src">src</a> <a href="undocumented#Alpha_Type">Alpha Type</a> must
+If this-><a href="#SkBitmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>, <a href="#SkBitmap_writePixels_3_src">src</a> <a href="undocumented#Image_Alpha_Type">Alpha Type</a> must
match. If this-><a href="#SkBitmap_colorSpace">colorSpace</a> is nullptr, <a href="#SkBitmap_writePixels_3_src">src</a> <a href="undocumented#Color_Space">Color Space</a> must match. Returns
false if pixel conversion is not possible. Returns false if <a href="#SkBitmap_width">width</a> or <a href="#SkBitmap_height">height</a>
is zero or negative.
If <a href="#SkBitmap_writePixels_3_behavior">behavior</a> is <a href="#SkTransferFunctionBehavior_kRespect">SkTransferFunctionBehavior::kRespect</a>: converts <a href="#SkBitmap_writePixels_3_src">src</a>
-pixels to a linear space before converting to <a href="#Info">Image Info</a>.
+pixels to a linear space before converting to <a href="undocumented#Image_Info">Image Info</a>.
If <a href="#SkBitmap_writePixels_3_behavior">behavior</a> is <a href="#SkTransferFunctionBehavior_kIgnore">SkTransferFunctionBehavior::kIgnore</a>: <a href="#SkBitmap_writePixels_3_src">src</a>
pixels are treated as if they are linear, regardless of how they are encoded.
### Parameters
<table> <tr> <td><a name="SkBitmap_writePixels_3_src"> <code><strong>src </strong></code> </a></td> <td>
-source <a href="SkPixmap_Reference#Pixmap">Pixmap</a>: <a href="#Info">Image Info</a>, pixels, row bytes</td>
+source <a href="SkPixmap_Reference#Pixmap">Pixmap</a>: <a href="undocumented#Image_Info">Image Info</a>, pixels, row bytes</td>
</tr> <tr> <td><a name="SkBitmap_writePixels_3_x"> <code><strong>x </strong></code> </a></td> <td>
column index whose absolute value is less than <a href="#SkBitmap_width">width</a></td>
</tr> <tr> <td><a name="SkBitmap_writePixels_3_y"> <code><strong>y </strong></code> </a></td> <td>
@@ -3230,7 +3218,7 @@ true if <a href="#SkBitmap_writePixels_3_src">src</a> pixels are copied to <a hr
<a name="SkBitmap_hasHardwareMipMap"></a>
## hasHardwareMipMap
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool hasHardwareMipMap() const
</pre>
@@ -3247,7 +3235,7 @@ true if <a href="#SkBitmap_setHasHardwareMipMap">setHasHardwareMipMap</a> has be
<a name="SkBitmap_setHasHardwareMipMap"></a>
## setHasHardwareMipMap
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setHasHardwareMipMap(bool hasHardwareMipMap)
</pre>
@@ -3267,7 +3255,7 @@ sets state</td>
<a name="SkBitmap_extractAlpha"></a>
## extractAlpha
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool extractAlpha(SkBitmap* dst) const
</pre>
@@ -3297,7 +3285,7 @@ true if <a href="#Alpha">Alpha</a> layer was constructed in <a href="#SkBitmap_e
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool extractAlpha(SkBitmap* dst, const SkPaint* paint, SkIPoint* offset) const
</pre>
@@ -3334,9 +3322,8 @@ true if <a href="#Alpha">Alpha</a> layer was constructed in <a href="#SkBitmap_e
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool extractAlpha(SkBitmap* dst, const SkPaint* paint, Allocator* allocator,
- SkIPoint* offset) const
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool extractAlpha(SkBitmap* dst, const SkPaint* paint, Allocator* allocator, SkIPoint* offset) const
</pre>
Sets <a href="#SkBitmap_extractAlpha_3_dst">dst</a> to <a href="#Alpha">Alpha</a> described by pixels. Returns false if <a href="#SkBitmap_extractAlpha_3_dst">dst</a> cannot be written to
@@ -3378,11 +3365,11 @@ true if <a href="#Alpha">Alpha</a> layer was constructed in <a href="#SkBitmap_e
<a name="SkBitmap_peekPixels"></a>
## peekPixels
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool peekPixels(SkPixmap* pixmap) const
</pre>
-Copies <a href="#Bitmap">Bitmap</a> pixel address, row bytes, and <a href="#Info">Image Info</a> to <a href="#SkBitmap_peekPixels_pixmap">pixmap</a>, if address
+Copies <a href="#Bitmap">Bitmap</a> pixel address, row bytes, and <a href="undocumented#Image_Info">Image Info</a> to <a href="#SkBitmap_peekPixels_pixmap">pixmap</a>, if address
is available, and returns true. If pixel address is not available, return
false and leave <a href="#SkBitmap_peekPixels_pixmap">pixmap</a> unchanged.
@@ -3407,11 +3394,11 @@ true if <a href="#Bitmap">Bitmap</a> has direct access to pixels
~~~~
------
---xxx-
--x--x-
+-xxx--
+x---x-
----x-
----xx-
---xx--
+---x--
+--x---
--x---
------
--x---
@@ -3430,7 +3417,7 @@ true if <a href="#Bitmap">Bitmap</a> has direct access to pixels
<a name="SkBitmap_validate"></a>
## validate
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void validate() const;
</pre>
@@ -3446,7 +3433,7 @@ Asserts if internal values are illegal or inconsistent. Only available if
<a name="SkBitmap_toString"></a>
## toString
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void toString(SkString* str) const;
</pre>
diff --git a/site/user/api/SkCanvas_Reference.md b/site/user/api/SkCanvas_Reference.md
index 33ce63104b..d712dc631c 100644
--- a/site/user/api/SkCanvas_Reference.md
+++ b/site/user/api/SkCanvas_Reference.md
@@ -7,14 +7,14 @@ SkCanvas Reference
<a href="#Canvas">Canvas</a> provides an interface for drawing, and how the drawing is clipped and transformed.
<a href="#Canvas">Canvas</a> contains a stack of <a href="#Matrix">Matrix</a> and <a href="#Clip">Clip</a> values.
-<a href="#Canvas">Canvas</a> and <a href="SkPaint_Reference#Paint">Paint</a> together provide the state to draw into <a href="undocumented#Surface">Surface</a> or <a href="undocumented#Device">Device</a>.
+<a href="#Canvas">Canvas</a> and <a href="SkPaint_Reference#Paint">Paint</a> together provide the state to draw into <a href="SkSurface_Reference#Surface">Surface</a> or <a href="undocumented#Device">Device</a>.
Each <a href="#Canvas">Canvas</a> draw call transforms the geometry of the object by the concatenation of all
<a href="#Matrix">Matrix</a> values in the stack. The transformed geometry is clipped by the intersection
of all of <a href="#Clip">Clip</a> values in the stack. The <a href="#Canvas">Canvas</a> draw calls use <a href="SkPaint_Reference#Paint">Paint</a> to supply drawing
state such as <a href="undocumented#Color">Color</a>, <a href="undocumented#Typeface">Typeface</a>, text size, stroke width, <a href="undocumented#Shader">Shader</a> and so on.
To draw to a pixel-based destination, create <a href="undocumented#Raster_Surface">Raster Surface</a> or <a href="undocumented#GPU_Surface">GPU Surface</a>.
-Request <a href="#Canvas">Canvas</a> from <a href="undocumented#Surface">Surface</a> to obtain the interface to draw.
+Request <a href="#Canvas">Canvas</a> from <a href="SkSurface_Reference#Surface">Surface</a> to obtain the interface to draw.
<a href="#Canvas">Canvas</a> generated by <a href="undocumented#Raster_Surface">Raster Surface</a> draws to memory visible to the <a href="undocumented#CPU">CPU</a>.
<a href="#Canvas">Canvas</a> generated by <a href="undocumented#GPU_Surface">GPU Surface</a> uses <a href="undocumented#Vulkan">Vulkan</a> or <a href="undocumented#OpenGL">OpenGL</a> to draw to the <a href="undocumented#GPU">GPU</a>.
@@ -38,28 +38,28 @@ This approach may be deprecated in the future.
| --- | --- |
| <a href="#SkCanvas_Lattice_Flags">Lattice::Flags</a> | Controls <a href="#SkCanvas_Lattice">Lattice</a> transparency. |
| <a href="#SkCanvas_PointMode">PointMode</a> | Sets <a href="#SkCanvas_drawPoints">drawPoints</a> options. |
-| <a href="undocumented#SaveLayerFlags">SaveLayerFlags</a> | Sets <a href="#SkCanvas_SaveLayerRec">SaveLayerRec</a> options. |
+| SaveLayerFlags | Sets <a href="#SkCanvas_SaveLayerRec">SaveLayerRec</a> options. |
| <a href="#SkCanvas_SrcRectConstraint">SrcRectConstraint</a> | Sets <a href="#SkCanvas_drawImageRect">drawImageRect</a> options. |
## <a name="Structs"></a> Structs
| struct | description |
| --- | --- |
-| <a href="#SkCanvas_Lattice">Lattice</a> | Divides <a href="SkBitmap_Reference#Bitmap">Bitmap</a>, <a href="undocumented#Image">Image</a> into a rectangular grid. |
+| <a href="#SkCanvas_Lattice">Lattice</a> | Divides <a href="SkBitmap_Reference#Bitmap">Bitmap</a>, <a href="SkImage_Reference#Image">Image</a> into a rectangular grid. |
| <a href="#SkCanvas_SaveLayerRec">SaveLayerRec</a> | Contains state to create <a href="#Layer">Layer</a>. |
## <a name="Constructors"></a> Constructors
-Create the desired type of <a href="undocumented#Surface">Surface</a> to obtain its <a href="#Canvas">Canvas</a> when possible. <a href="#Overview_Constructors">Constructors</a> are useful
-when no <a href="undocumented#Surface">Surface</a> is required, and some helpers implicitly create <a href="undocumented#Raster_Surface">Raster Surface</a>.
+Create the desired type of <a href="SkSurface_Reference#Surface">Surface</a> to obtain its <a href="#Canvas">Canvas</a> when possible. <a href="#Overview_Constructors">Constructors</a> are useful
+when no <a href="SkSurface_Reference#Surface">Surface</a> is required, and some helpers implicitly create <a href="undocumented#Raster_Surface">Raster Surface</a>.
| | description |
| --- | --- |
-| <a href="#SkCanvas_empty_constructor">SkCanvas()</a> | No <a href="undocumented#Surface">Surface</a>, no dimensions. |
-| <a href="#SkCanvas_int_int_const_SkSurfaceProps_star">SkCanvas(int width, int height, const SkSurfaceProps* props = nullptr)</a> | No <a href="undocumented#Surface">Surface</a>, set dimensions, <a href="#Properties">Surface Properties</a>. |
+| <a href="#SkCanvas_empty_constructor">SkCanvas()</a> | No <a href="SkSurface_Reference#Surface">Surface</a>, no dimensions. |
+| <a href="#SkCanvas_int_int_const_SkSurfaceProps_star">SkCanvas(int width, int height, const SkSurfaceProps* props = nullptr)</a> | No <a href="SkSurface_Reference#Surface">Surface</a>, set dimensions, <a href="undocumented#Surface_Properties">Surface Properties</a>. |
| <a href="#SkCanvas_copy_SkBaseDevice_star">SkCanvas(SkBaseDevice* device)</a> | Existing <a href="undocumented#Device">Device</a>. (<a href="undocumented#SkBaseDevice">SkBaseDevice</a> is private.) |
| <a href="#SkCanvas_copy_const_SkBitmap">SkCanvas(const SkBitmap& bitmap)</a> | Uses existing <a href="SkBitmap_Reference#Bitmap">Bitmap</a>. |
-| <a href="#SkCanvas_const_SkBitmap_const_SkSurfaceProps">SkCanvas(const SkBitmap& bitmap, const SkSurfaceProps& props)</a> | Uses existing <a href="SkBitmap_Reference#Bitmap">Bitmap</a> and <a href="#Properties">Surface Properties</a>. |
+| <a href="#SkCanvas_const_SkBitmap_const_SkSurfaceProps">SkCanvas(const SkBitmap& bitmap, const SkSurfaceProps& props)</a> | Uses existing <a href="SkBitmap_Reference#Bitmap">Bitmap</a> and <a href="undocumented#Surface_Properties">Surface Properties</a>. |
| <a href="#SkCanvas_MakeRasterDirect">MakeRasterDirect</a> | Creates from <a href="undocumented#SkImageInfo">SkImageInfo</a> and <a href="#Storage">Pixel Storage</a>. |
| <a href="#SkCanvas_MakeRasterDirectN32">MakeRasterDirectN32</a> | Creates from image data and <a href="#Storage">Pixel Storage</a>. |
@@ -88,14 +88,14 @@ when no <a href="undocumented#Surface">Surface</a> is required, and some helpers
| <a href="#SkCanvas_drawDRRect">drawDRRect</a> | Draws double <a href="undocumented#Round_Rect">Round Rect</a> stroked or filled. |
| <a href="#SkCanvas_drawDrawable">drawDrawable</a> | Draws <a href="undocumented#Drawable">Drawable</a>, encapsulated drawing commands. |
| <a href="#SkCanvas_drawIRect">drawIRect</a> | Draws <a href="SkIRect_Reference#IRect">IRect</a> using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and <a href="SkPaint_Reference#Paint">Paint</a>. |
-| <a href="#SkCanvas_drawImage">drawImage</a> | Draws <a href="undocumented#Image">Image</a> at (x, y) position. |
-| <a href="#SkCanvas_drawImageLattice">drawImageLattice</a> | Draws proportionally stretched <a href="undocumented#Image">Image</a>. |
-| <a href="#SkCanvas_drawImageNine">drawImageNine</a> | Draws <a href="undocumented#Nine_Patch">Nine Patch</a> <a href="undocumented#Image">Image</a>. |
-| <a href="#SkCanvas_drawImageRect">drawImageRect</a> | Draws <a href="undocumented#Image">Image</a>, source <a href="SkRect_Reference#Rect">Rect</a> to destination <a href="SkRect_Reference#Rect">Rect</a>. |
+| <a href="#SkCanvas_drawImage">drawImage</a> | Draws <a href="SkImage_Reference#Image">Image</a> at (x, y) position. |
+| <a href="#SkCanvas_drawImageLattice">drawImageLattice</a> | Draws proportionally stretched <a href="SkImage_Reference#Image">Image</a>. |
+| <a href="#SkCanvas_drawImageNine">drawImageNine</a> | Draws <a href="undocumented#Nine_Patch">Nine Patch</a> <a href="SkImage_Reference#Image">Image</a>. |
+| <a href="#SkCanvas_drawImageRect">drawImageRect</a> | Draws <a href="SkImage_Reference#Image">Image</a>, source <a href="SkRect_Reference#Rect">Rect</a> to destination <a href="SkRect_Reference#Rect">Rect</a>. |
| <a href="#SkCanvas_drawLine">drawLine</a> | Draws line segment between two points. |
| <a href="#SkCanvas_drawOval">drawOval</a> | Draws <a href="undocumented#Oval">Oval</a> using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and <a href="SkPaint_Reference#Paint">Paint</a>. |
| <a href="#SkCanvas_drawPaint">drawPaint</a> | Fills <a href="#Clip">Clip</a> with <a href="SkPaint_Reference#Paint">Paint</a>. |
-| <a href="#SkCanvas_drawPatch">drawPatch</a> | Draws <a href="undocumented#Coons">Coons</a> patch. |
+| <a href="#SkCanvas_drawPatch">drawPatch</a> | Draws <a href="undocumented#Coons_Patch">Coons Patch</a>. |
| <a href="#SkCanvas_drawPath">drawPath</a> | Draws <a href="SkPath_Reference#Path">Path</a> using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and <a href="SkPaint_Reference#Paint">Paint</a>. |
| <a href="#SkCanvas_drawPicture">drawPicture</a> | Draws <a href="undocumented#Picture">Picture</a> using <a href="#Clip">Clip</a> and <a href="#Matrix">Matrix</a>. |
| <a href="#SkCanvas_drawPoint">drawPoint</a> | Draws point at (x, y) position. |
@@ -120,15 +120,15 @@ when no <a href="undocumented#Surface">Surface</a> is required, and some helpers
| <a href="#SkCanvas_getGrContext">getGrContext</a> | Returns <a href="undocumented#GPU_Context">GPU Context</a> of the <a href="undocumented#GPU_Surface">GPU Surface</a>. |
| <a href="#SkCanvas_getLocalClipBounds">getLocalClipBounds</a> | Returns <a href="#Clip">Clip</a> bounds in source coordinates. |
| <a href="#SkCanvas_getMetaData">getMetaData</a> | Associates additional data with the canvas. |
-| <a href="#SkCanvas_getProps">getProps</a> | Copies <a href="#Properties">Surface Properties</a> if available. |
+| <a href="#SkCanvas_getProps">getProps</a> | Copies <a href="undocumented#Surface_Properties">Surface Properties</a> if available. |
| <a href="#SkCanvas_getSaveCount">getSaveCount</a> | Returns depth of stack containing <a href="#Clip">Clip</a> and <a href="#Matrix">Matrix</a>. |
| <a href="#SkCanvas_getTotalMatrix">getTotalMatrix</a> | Returns <a href="#Matrix">Matrix</a>. |
-| <a href="#SkCanvas_imageInfo">imageInfo</a> | Returns <a href="#Info">Image Info</a> for <a href="#Canvas">Canvas</a>. |
+| <a href="#SkCanvas_imageInfo">imageInfo</a> | Returns <a href="undocumented#Image_Info">Image Info</a> for <a href="#Canvas">Canvas</a>. |
| <a href="#SkCanvas_isClipEmpty">isClipEmpty</a> | Returns if <a href="#Clip">Clip</a> is empty. |
| <a href="#SkCanvas_isClipRect">isClipRect</a> | Returns if <a href="#Clip">Clip</a> is <a href="SkRect_Reference#Rect">Rect</a> and not empty. |
| <a href="#SkCanvas_MakeRasterDirect">MakeRasterDirect</a> | Creates <a href="#Canvas">Canvas</a> from <a href="undocumented#SkImageInfo">SkImageInfo</a> and pixel data. |
| <a href="#SkCanvas_MakeRasterDirectN32">MakeRasterDirectN32</a> | Creates <a href="#Canvas">Canvas</a> from image specifications and pixel data. |
-| <a href="#SkCanvas_makeSurface">makeSurface</a> | Creates <a href="undocumented#Surface">Surface</a> matching <a href="undocumented#SkImageInfo">SkImageInfo</a> and <a href="undocumented#SkSurfaceProps">SkSurfaceProps</a>. |
+| <a href="#SkCanvas_makeSurface">makeSurface</a> | Creates <a href="SkSurface_Reference#Surface">Surface</a> matching <a href="undocumented#SkImageInfo">SkImageInfo</a> and <a href="undocumented#SkSurfaceProps">SkSurfaceProps</a>. |
| <a href="#SkCanvas_peekPixels">peekPixels</a> | Returns if <a href="#Canvas">Canvas</a> has direct access to its pixels. |
| <a href="#SkCanvas_quickReject">quickReject</a> | Returns if <a href="SkRect_Reference#Rect">Rect</a> is outside <a href="#Clip">Clip</a>. |
| <a href="#SkCanvas_readPixels">readPixels</a> | Copies and converts rectangle of pixels from <a href="#Canvas">Canvas</a>. |
@@ -150,36 +150,41 @@ when no <a href="undocumented#Surface">Surface</a> is required, and some helpers
<a name="SkCanvas_MakeRasterDirect"></a>
## MakeRasterDirect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-static std::unique_ptr&lt;SkCanvas&gt; MakeRasterDirect(const SkImageInfo& info,
- void* pixels, size_t rowBytes)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static std::unique_ptr&lt;SkCanvas&gt; MakeRasterDirect(const SkImageInfo& info, void* pixels,
+ size_t rowBytes,
+ const SkSurfaceProps* props = nullptr)
</pre>
Allocates raster <a href="#Canvas">Canvas</a> that will draw directly into <a href="#SkCanvas_MakeRasterDirect_pixels">pixels</a>.
-To access <a href="#SkCanvas_MakeRasterDirect_pixels">pixels</a> after drawing, call <a href="#SkCanvas_flush">flush</a> or <a href="#SkCanvas_peekPixels">peekPixels</a>.
<a href="#Canvas">Canvas</a> is returned if all parameters are valid.
Valid parameters include:
<a href="#SkCanvas_MakeRasterDirect_info">info</a> dimensions are zero or positive;
-<a href="#SkCanvas_MakeRasterDirect_info">info</a> contains <a href="#Color_Type">Image Color Type</a> and <a href="#Alpha_Type">Image Alpha Type</a> supported by <a href="undocumented#Raster_Surface">Raster Surface</a>;
+<a href="#SkCanvas_MakeRasterDirect_info">info</a> contains <a href="undocumented#Image_Color_Type">Image Color Type</a> and <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a> supported by <a href="undocumented#Raster_Surface">Raster Surface</a>;
<a href="#SkCanvas_MakeRasterDirect_pixels">pixels</a> is not nullptr;
-<a href="#SkCanvas_MakeRasterDirect_rowBytes">rowBytes</a> is zero or large enough to contain <a href="#SkCanvas_MakeRasterDirect_info">info</a> width <a href="#SkCanvas_MakeRasterDirect_pixels">pixels</a> of <a href="#Color_Type">Image Color Type</a>.
+<a href="#SkCanvas_MakeRasterDirect_rowBytes">rowBytes</a> is zero or large enough to contain <a href="#SkCanvas_MakeRasterDirect_info">info</a> width <a href="#SkCanvas_MakeRasterDirect_pixels">pixels</a> of <a href="undocumented#Image_Color_Type">Image Color Type</a>.
Pass zero for <a href="#SkCanvas_MakeRasterDirect_rowBytes">rowBytes</a> to compute <a href="#SkCanvas_MakeRasterDirect_rowBytes">rowBytes</a> from <a href="#SkCanvas_MakeRasterDirect_info">info</a> width and size of pixel.
If <a href="#SkCanvas_MakeRasterDirect_rowBytes">rowBytes</a> is greater than zero, it must be equal to or greater than
-<a href="#SkCanvas_MakeRasterDirect_info">info</a> width times bytes required for <a href="#Color_Type">Image Color Type</a>.
+<a href="#SkCanvas_MakeRasterDirect_info">info</a> width times bytes required for <a href="undocumented#Image_Color_Type">Image Color Type</a>.
<a href="undocumented#Pixel">Pixel</a> buffer size should be <a href="#SkCanvas_MakeRasterDirect_info">info</a> height times computed <a href="#SkCanvas_MakeRasterDirect_rowBytes">rowBytes</a>.
+Pixels are not initialized.
+To access <a href="#SkCanvas_MakeRasterDirect_pixels">pixels</a> after drawing, call <a href="#SkCanvas_flush">flush</a> or <a href="#SkCanvas_peekPixels">peekPixels</a>.
### Parameters
<table> <tr> <td><a name="SkCanvas_MakeRasterDirect_info"> <code><strong>info </strong></code> </a></td> <td>
-width, height, <a href="#Color_Type">Image Color Type</a>, <a href="#Alpha_Type">Image Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>, of <a href="undocumented#Raster_Surface">Raster Surface</a>;
+width, height, <a href="undocumented#Image_Color_Type">Image Color Type</a>, <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>, of <a href="undocumented#Raster_Surface">Raster Surface</a>;
width, or height, or both, may be zero</td>
</tr> <tr> <td><a name="SkCanvas_MakeRasterDirect_pixels"> <code><strong>pixels </strong></code> </a></td> <td>
pointer to destination <a href="#SkCanvas_MakeRasterDirect_pixels">pixels</a> buffer</td>
</tr> <tr> <td><a name="SkCanvas_MakeRasterDirect_rowBytes"> <code><strong>rowBytes </strong></code> </a></td> <td>
-interval from one <a href="undocumented#Surface">Surface</a> row to the next, or zero</td>
+interval from one <a href="SkSurface_Reference#Surface">Surface</a> row to the next, or zero</td>
+ </tr> <tr> <td><a name="SkCanvas_MakeRasterDirect_props"> <code><strong>props </strong></code> </a></td> <td>
+<a href="undocumented#LCD">LCD</a> striping orientation and setting for device independent fonts;
+may be nullptr</td>
</tr>
</table>
@@ -189,7 +194,7 @@ interval from one <a href="undocumented#Surface">Surface</a> row to the next, or
### Example
-<div><fiddle-embed name="11be884b8b4213a450b6dc43673bf807"><div>Allocates a three by three bitmap, clears it to white, and draws a black pixel
+<div><fiddle-embed name="525285073aae7e53eb8f454a398f880c"><div>Allocates a three by three bitmap, clears it to white, and draws a black pixel
in the center.</div>
#### Example Output
@@ -211,16 +216,15 @@ in the center.</div>
<a name="SkCanvas_MakeRasterDirectN32"></a>
## MakeRasterDirectN32
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-static std::unique_ptr&lt;SkCanvas&gt; MakeRasterDirectN32(int width, int height,
- SkPMColor* pixels,
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static std::unique_ptr&lt;SkCanvas&gt; MakeRasterDirectN32(int width, int height, SkPMColor* pixels,
size_t rowBytes)
</pre>
Allocates raster <a href="#Canvas">Canvas</a> specified by inline image specification. Subsequent <a href="#Canvas">Canvas</a>
calls draw into <a href="#SkCanvas_MakeRasterDirectN32_pixels">pixels</a>.
-<a href="#Color_Type">Image Color Type</a> is set to <a href="undocumented#SkColorType">kN32 SkColorType</a>.
-<a href="#Alpha_Type">Image Alpha Type</a> is set to <a href="undocumented#SkAlphaType">kPremul SkAlphaType</a>.
+<a href="undocumented#Image_Color_Type">Image Color Type</a> is set to <a href="undocumented#SkColorType">kN32 SkColorType</a>.
+<a href="undocumented#Image_Alpha_Type">Image Alpha Type</a> is set to <a href="undocumented#SkAlphaType">kPremul SkAlphaType</a>.
To access <a href="#SkCanvas_MakeRasterDirectN32_pixels">pixels</a> after drawing, call <a href="#SkCanvas_flush">flush</a> or <a href="#SkCanvas_peekPixels">peekPixels</a>.
<a href="#Canvas">Canvas</a> is returned if all parameters are valid.
@@ -231,7 +235,7 @@ Valid parameters include:
Pass zero for <a href="#SkCanvas_MakeRasterDirectN32_rowBytes">rowBytes</a> to compute <a href="#SkCanvas_MakeRasterDirectN32_rowBytes">rowBytes</a> from <a href="#SkCanvas_MakeRasterDirectN32_width">width</a> and size of pixel.
If <a href="#SkCanvas_MakeRasterDirectN32_rowBytes">rowBytes</a> is greater than zero, it must be equal to or greater than
-<a href="#SkCanvas_MakeRasterDirectN32_width">width</a> times bytes required for <a href="#Color_Type">Image Color Type</a>.
+<a href="#SkCanvas_MakeRasterDirectN32_width">width</a> times bytes required for <a href="undocumented#Image_Color_Type">Image Color Type</a>.
<a href="undocumented#Pixel">Pixel</a> buffer size should be <a href="#SkCanvas_MakeRasterDirectN32_height">height</a> times <a href="#SkCanvas_MakeRasterDirectN32_rowBytes">rowBytes</a>.
@@ -245,7 +249,7 @@ pixel row count on <a href="undocumented#Raster_Surface">Raster Surface</a> crea
pointer to destination <a href="#SkCanvas_MakeRasterDirectN32_pixels">pixels</a> buffer; buffer size should be <a href="#SkCanvas_MakeRasterDirectN32_height">height</a>
times <a href="#SkCanvas_MakeRasterDirectN32_rowBytes">rowBytes</a></td>
</tr> <tr> <td><a name="SkCanvas_MakeRasterDirectN32_rowBytes"> <code><strong>rowBytes </strong></code> </a></td> <td>
-interval from one <a href="undocumented#Surface">Surface</a> row to the next, or zero</td>
+interval from one <a href="SkSurface_Reference#Surface">Surface</a> row to the next, or zero</td>
</tr>
</table>
@@ -277,7 +281,7 @@ in the center.</div>
<a name="SkCanvas_empty_constructor"></a>
## SkCanvas
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkCanvas()
</pre>
@@ -311,15 +315,15 @@ paint draws text top to bottom
<a name="SkCanvas_int_int_const_SkSurfaceProps_star"></a>
## SkCanvas
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkCanvas(int width, int height, const SkSurfaceProps* props = nullptr)
</pre>
-Creates <a href="#Canvas">Canvas</a> of the specified dimensions without a <a href="undocumented#Surface">Surface</a>.
+Creates <a href="#Canvas">Canvas</a> of the specified dimensions without a <a href="SkSurface_Reference#Surface">Surface</a>.
Used by <a href="undocumented#Subclasses">Subclasses</a> with custom implementations for draw methods.
-If <a href="#SkCanvas_int_int_const_SkSurfaceProps_star_props">props</a> equals nullptr, <a href="#Properties">Surface Properties</a> are created with
-<a href="#Properties_Legacy_Font_Host">Surface Properties Legacy Font Host</a> settings, which choose the pixel striping
+If <a href="#SkCanvas_int_int_const_SkSurfaceProps_star_props">props</a> equals nullptr, <a href="undocumented#Surface_Properties">Surface Properties</a> are created with
+<a href="undocumented#Surface_Properties_Legacy_Font_Host">Surface Properties Legacy Font Host</a> settings, which choose the pixel striping
direction and order. Since a platform may dynamically change its direction when
the device is rotated, and since a platform may have multiple monitors with
different characteristics, it is best not to rely on this legacy behavior.
@@ -361,7 +365,7 @@ canvas is empty
<a name="SkCanvas_copy_SkBaseDevice_star"></a>
## SkCanvas
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
explicit SkCanvas(SkBaseDevice* device)
</pre>
@@ -392,12 +396,12 @@ specifies a <a href="#SkCanvas_copy_SkBaseDevice_star_device">device</a> for the
<a name="SkCanvas_copy_const_SkBitmap"></a>
## SkCanvas
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
explicit SkCanvas(const SkBitmap& bitmap)
</pre>
Construct a canvas that draws into <a href="#SkCanvas_copy_const_SkBitmap_bitmap">bitmap</a>.
-Sets <a href="#SkSurfaceProps_kLegacyFontHost_InitType">SkSurfaceProps::kLegacyFontHost InitType</a> in constructed <a href="undocumented#Surface">Surface</a>.
+Sets <a href="#SkSurfaceProps_kLegacyFontHost_InitType">SkSurfaceProps::kLegacyFontHost InitType</a> in constructed <a href="SkSurface_Reference#Surface">Surface</a>.
<a href="SkBitmap_Reference#Bitmap">Bitmap</a> is copied so that subsequently editing <a href="#SkCanvas_copy_const_SkBitmap_bitmap">bitmap</a> will not affect
constructed <a href="#Canvas">Canvas</a>.
@@ -407,7 +411,7 @@ May be deprecated in the future.
### Parameters
<table> <tr> <td><a name="SkCanvas_copy_const_SkBitmap_bitmap"> <code><strong>bitmap </strong></code> </a></td> <td>
-width, height, <a href="#Color_Type">Image Color Type</a>, <a href="#Alpha_Type">Image Alpha Type</a>, and pixel
+width, height, <a href="undocumented#Image_Color_Type">Image Color Type</a>, <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>, and pixel
storage of <a href="undocumented#Raster_Surface">Raster Surface</a></td>
</tr>
</table>
@@ -446,7 +450,7 @@ storage of <a href="undocumented#Raster_Surface">Raster Surface</a></td>
## <a name="SkCanvas_ColorBehavior"></a> Enum SkCanvas::ColorBehavior
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum class <a href="#SkCanvas_ColorBehavior">ColorBehavior</a> {
<a href="#SkCanvas_ColorBehavior_kLegacy">kLegacy</a>,
};</pre>
@@ -463,7 +467,7 @@ enum class <a href="#SkCanvas_ColorBehavior">ColorBehavior</a> {
<a name="SkCanvas_const_SkBitmap"></a>
## SkCanvas
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkCanvas(const SkBitmap& bitmap, ColorBehavior behavior)
</pre>
@@ -485,7 +489,7 @@ specializes this constructor; value is unused</td>
<a name="SkCanvas_const_SkBitmap_const_SkSurfaceProps"></a>
## SkCanvas
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkCanvas(const SkBitmap& bitmap, const SkSurfaceProps& props)
</pre>
@@ -498,7 +502,7 @@ constructed <a href="#Canvas">Canvas</a>.
### Parameters
<table> <tr> <td><a name="SkCanvas_const_SkBitmap_const_SkSurfaceProps_bitmap"> <code><strong>bitmap </strong></code> </a></td> <td>
-width, height, <a href="#Color_Type">Image Color Type</a>, <a href="#Alpha_Type">Image Alpha Type</a>,
+width, height, <a href="undocumented#Image_Color_Type">Image Color Type</a>, <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>,
and pixel storage of <a href="undocumented#Raster_Surface">Raster Surface</a></td>
</tr> <tr> <td><a name="SkCanvas_const_SkBitmap_const_SkSurfaceProps_props"> <code><strong>props </strong></code> </a></td> <td>
order and orientation of <a href="undocumented#RGB">RGB</a> striping; and whether to use
@@ -541,7 +545,7 @@ device independent fonts</td>
<a name="SkCanvas_destructor"></a>
## ~SkCanvas
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
virtual ~SkCanvas()
</pre>
@@ -564,7 +568,7 @@ transparent letters.</div></fiddle-embed></div>
<a name="SkCanvas_getMetaData"></a>
## getMetaData
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkMetaData& getMetaData()
</pre>
@@ -598,16 +602,16 @@ after: (null)
<a name="SkCanvas_imageInfo"></a>
## imageInfo
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkImageInfo imageInfo() const
</pre>
-Returns <a href="#Info">Image Info</a> for <a href="#Canvas">Canvas</a>. If <a href="#Canvas">Canvas</a> is not associated with <a href="undocumented#Raster_Surface">Raster Surface</a> or
-<a href="undocumented#GPU_Surface">GPU Surface</a>, returned <a href="#Color_Type">Image Color Type</a> is set to <a href="undocumented#SkColorType">kUnknown SkColorType</a>.
+Returns <a href="undocumented#Image_Info">Image Info</a> for <a href="#Canvas">Canvas</a>. If <a href="#Canvas">Canvas</a> is not associated with <a href="undocumented#Raster_Surface">Raster Surface</a> or
+<a href="undocumented#GPU_Surface">GPU Surface</a>, returned <a href="undocumented#Image_Color_Type">Image Color Type</a> is set to <a href="undocumented#SkColorType">kUnknown SkColorType</a>.
### Return Value
-dimensions and <a href="#Color_Type">Image Color Type</a> of <a href="#Canvas">Canvas</a>
+dimensions and <a href="undocumented#Image_Color_Type">Image Color Type</a> of <a href="#Canvas">Canvas</a>
### Example
@@ -630,12 +634,12 @@ emptyInfo == canvasInfo
<a name="SkCanvas_getProps"></a>
## getProps
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool getProps(SkSurfaceProps* props) const
</pre>
If <a href="#Canvas">Canvas</a> is associated with <a href="undocumented#Raster_Surface">Raster Surface</a> or
-<a href="undocumented#GPU_Surface">GPU Surface</a>, copies <a href="#Properties">Surface Properties</a> and returns true. Otherwise,
+<a href="undocumented#GPU_Surface">GPU Surface</a>, copies <a href="undocumented#Surface_Properties">Surface Properties</a> and returns true. Otherwise,
return false and leave <a href="#SkCanvas_getProps_props">props</a> unchanged.
### Parameters
@@ -647,7 +651,7 @@ storage for writable <a href="undocumented#SkSurfaceProps">SkSurfaceProps</a></t
### Return Value
-true if <a href="#Properties">Surface Properties</a> was copied
+true if <a href="undocumented#Surface_Properties">Surface Properties</a> was copied
### Example
@@ -671,7 +675,7 @@ isRGB:1
<a name="SkCanvas_flush"></a>
## flush
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void flush()
</pre>
@@ -693,7 +697,7 @@ operations are never deferred.
<a name="SkCanvas_getBaseLayerSize"></a>
## getBaseLayerSize
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
virtual SkISize getBaseLayerSize() const
</pre>
@@ -727,29 +731,28 @@ size=20,30
<a name="SkCanvas_makeSurface"></a>
## makeSurface
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-sk_sp&lt;SkSurface&gt; makeSurface(const SkImageInfo& info,
- const SkSurfaceProps* props = nullptr)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+sk_sp&lt;SkSurface&gt; makeSurface(const SkImageInfo& info, const SkSurfaceProps* props = nullptr)
</pre>
-Creates <a href="undocumented#Surface">Surface</a> matching <a href="#SkCanvas_makeSurface_info">info</a> and <a href="#SkCanvas_makeSurface_props">props</a>, and associates it with <a href="#Canvas">Canvas</a>.
+Creates <a href="SkSurface_Reference#Surface">Surface</a> matching <a href="#SkCanvas_makeSurface_info">info</a> and <a href="#SkCanvas_makeSurface_props">props</a>, and associates it with <a href="#Canvas">Canvas</a>.
Returns nullptr if no match found.
-If <a href="#SkCanvas_makeSurface_props">props</a> is nullptr, matches <a href="#Properties">Surface Properties</a> in <a href="#Canvas">Canvas</a>. If <a href="#SkCanvas_makeSurface_props">props</a> is nullptr and <a href="#Canvas">Canvas</a>
-does not have <a href="#Properties">Surface Properties</a>, creates <a href="undocumented#Surface">Surface</a> with default <a href="#Properties">Surface Properties</a>.
+If <a href="#SkCanvas_makeSurface_props">props</a> is nullptr, matches <a href="undocumented#Surface_Properties">Surface Properties</a> in <a href="#Canvas">Canvas</a>. If <a href="#SkCanvas_makeSurface_props">props</a> is nullptr and <a href="#Canvas">Canvas</a>
+does not have <a href="undocumented#Surface_Properties">Surface Properties</a>, creates <a href="SkSurface_Reference#Surface">Surface</a> with default <a href="undocumented#Surface_Properties">Surface Properties</a>.
### Parameters
<table> <tr> <td><a name="SkCanvas_makeSurface_info"> <code><strong>info </strong></code> </a></td> <td>
-width, height, <a href="#Color_Type">Image Color Type</a>, <a href="#Alpha_Type">Image Alpha Type</a>, and <a href="undocumented#Color_Space">Color Space</a></td>
+width, height, <a href="undocumented#Image_Color_Type">Image Color Type</a>, <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>, and <a href="undocumented#Color_Space">Color Space</a></td>
</tr> <tr> <td><a name="SkCanvas_makeSurface_props"> <code><strong>props </strong></code> </a></td> <td>
-<a href="#Properties">Surface Properties</a> to match; may be nullptr to match <a href="#Canvas">Canvas</a></td>
+<a href="undocumented#Surface_Properties">Surface Properties</a> to match; may be nullptr to match <a href="#Canvas">Canvas</a></td>
</tr>
</table>
### Return Value
-<a href="undocumented#Surface">Surface</a> matching <a href="#SkCanvas_makeSurface_info">info</a> and <a href="#SkCanvas_makeSurface_props">props</a>, or nullptr if no match is available
+<a href="SkSurface_Reference#Surface">Surface</a> matching <a href="#SkCanvas_makeSurface_info">info</a> and <a href="#SkCanvas_makeSurface_props">props</a>, or nullptr if no match is available
### Example
@@ -766,14 +769,14 @@ size = 3, 4
### See Also
-<a href="undocumented#SkSurface">SkSurface</a> <a href="#SkSurface_makeSurface">SkSurface::makeSurface</a> <a href="undocumented#SkImageInfo">SkImageInfo</a> <a href="undocumented#SkSurfaceProps">SkSurfaceProps</a>
+<a href="SkSurface_Reference#SkSurface">SkSurface</a> <a href="#SkSurface_makeSurface">SkSurface::makeSurface</a> <a href="undocumented#SkImageInfo">SkImageInfo</a> <a href="undocumented#SkSurfaceProps">SkSurfaceProps</a>
---
<a name="SkCanvas_getGrContext"></a>
## getGrContext
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
virtual GrContext* getGrContext()
</pre>
@@ -796,14 +799,13 @@ Returns <a href="undocumented#GPU_Context">GPU Context</a> of the <a href="undoc
<a name="SkCanvas_accessTopLayerPixels"></a>
## accessTopLayerPixels
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void* accessTopLayerPixels(SkImageInfo* info, size_t* rowBytes,
- SkIPoint* origin = nullptr)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void* accessTopLayerPixels(SkImageInfo* info, size_t* rowBytes, SkIPoint* origin = nullptr)
</pre>
-Returns the pixel base address, <a href="#Info">Image Info</a>, <a href="#SkCanvas_accessTopLayerPixels_rowBytes">rowBytes</a>, and <a href="#SkCanvas_accessTopLayerPixels_origin">origin</a> if the pixels
+Returns the pixel base address, <a href="undocumented#Image_Info">Image Info</a>, <a href="#SkCanvas_accessTopLayerPixels_rowBytes">rowBytes</a>, and <a href="#SkCanvas_accessTopLayerPixels_origin">origin</a> if the pixels
can be read directly. The returned address is only valid
-while <a href="#Canvas">Canvas</a> is in scope and unchanged. Any <a href="#Canvas">Canvas</a> call or <a href="undocumented#Surface">Surface</a> call
+while <a href="#Canvas">Canvas</a> is in scope and unchanged. Any <a href="#Canvas">Canvas</a> call or <a href="SkSurface_Reference#Surface">Surface</a> call
may invalidate the returned address and other returned values.
If pixels are inaccessible, <a href="#SkCanvas_accessTopLayerPixels_info">info</a>, <a href="#SkCanvas_accessTopLayerPixels_rowBytes">rowBytes</a>, and <a href="#SkCanvas_accessTopLayerPixels_origin">origin</a> are unchanged.
@@ -811,7 +813,7 @@ If pixels are inaccessible, <a href="#SkCanvas_accessTopLayerPixels_info">info</
### Parameters
<table> <tr> <td><a name="SkCanvas_accessTopLayerPixels_info"> <code><strong>info </strong></code> </a></td> <td>
-storage for writable pixels' <a href="#Info">Image Info</a>; may be nullptr</td>
+storage for writable pixels' <a href="undocumented#Image_Info">Image Info</a>; may be nullptr</td>
</tr> <tr> <td><a name="SkCanvas_accessTopLayerPixels_rowBytes"> <code><strong>rowBytes </strong></code> </a></td> <td>
storage for writable pixels' row bytes; may be nullptr</td>
</tr> <tr> <td><a name="SkCanvas_accessTopLayerPixels_origin"> <code><strong>origin </strong></code> </a></td> <td>
@@ -846,7 +848,7 @@ The <a href="#Layer">Layer</a> and blended result appear on the <a href="undocum
<a name="SkCanvas_accessTopRasterHandle"></a>
## accessTopRasterHandle
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkRasterHandleAllocator::Handle accessTopRasterHandle() const
</pre>
@@ -882,7 +884,7 @@ context = skia
<a name="SkCanvas_peekPixels"></a>
## peekPixels
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool peekPixels(SkPixmap* pixmap)
</pre>
@@ -894,7 +896,7 @@ is returned from <a href="undocumented#GPU_Surface">GPU Surface</a>, returned by
like <a href="undocumented#SkDumpCanvas">SkDumpCanvas</a>.
<a href="#SkCanvas_peekPixels_pixmap">pixmap</a> is valid only while <a href="#Canvas">Canvas</a> is in scope and unchanged. Any
-<a href="#Canvas">Canvas</a> or <a href="undocumented#Surface">Surface</a> call may invalidate the <a href="#SkCanvas_peekPixels_pixmap">pixmap</a> values.
+<a href="#Canvas">Canvas</a> or <a href="SkSurface_Reference#Surface">Surface</a> call may invalidate the <a href="#SkCanvas_peekPixels_pixmap">pixmap</a> values.
### Parameters
@@ -928,16 +930,15 @@ width=256 height=256
<a name="SkCanvas_readPixels"></a>
## readPixels
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes,
- int srcX, int srcY)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, int srcX, int srcY)
</pre>
Copies <a href="SkRect_Reference#Rect">Rect</a> of pixels from <a href="#Canvas">Canvas</a> into <a href="#SkCanvas_readPixels_dstPixels">dstPixels</a>. <a href="#Matrix">Matrix</a> and <a href="#Clip">Clip</a> are
-ignored. Source <a href="SkRect_Reference#Rect">Rect</a> corners are (<a href="#SkCanvas_readPixels_srcX">srcX</a>, <a href="#SkCanvas_readPixels_srcY">srcY</a>) and
-(<a href="#SkCanvas_imageInfo">imageInfo</a>.width(), <a href="#SkCanvas_imageInfo">imageInfo</a>.height()).
+ignored.
-Destination <a href="SkRect_Reference#Rect">Rect</a> corners are (0, 0) and (bitmap.width(), bitmap.height()).
+Source <a href="SkRect_Reference#Rect">Rect</a> corners are (<a href="#SkCanvas_readPixels_srcX">srcX</a>, <a href="#SkCanvas_readPixels_srcY">srcY</a>) and (<a href="#SkCanvas_imageInfo">imageInfo</a>.width(), <a href="#SkCanvas_imageInfo">imageInfo</a>.height()).
+Destination <a href="SkRect_Reference#Rect">Rect</a> corners are (0, 0) and (<a href="#SkCanvas_readPixels_dstInfo">dstInfo</a>.width(), <a href="#SkCanvas_readPixels_dstInfo">dstInfo</a>.height()).
Copies each readable pixel intersecting both rectangles, without scaling,
converting to <a href="#SkCanvas_readPixels_dstInfo">dstInfo</a>.colorType() and <a href="#SkCanvas_readPixels_dstInfo">dstInfo</a>.alphaType() if required.
@@ -948,7 +949,7 @@ class like <a href="undocumented#SkDumpCanvas">SkDumpCanvas</a>.
The destination pixel storage must be allocated by the caller.
-<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="#Color_Type">Image Color Type</a> and <a href="#Alpha_Type">Image Alpha Type</a>
+<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="undocumented#Image_Color_Type">Image Color Type</a> and <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>
do not match. Only pixels within both source and destination rectangles
are copied. <a href="#SkCanvas_readPixels_dstPixels">dstPixels</a> contents outside <a href="SkRect_Reference#Rect">Rect</a> intersection are unchanged.
@@ -966,7 +967,7 @@ Does not copy, and returns false if:
### Parameters
<table> <tr> <td><a name="SkCanvas_readPixels_dstInfo"> <code><strong>dstInfo </strong></code> </a></td> <td>
-width, height, <a href="#Color_Type">Image Color Type</a>, and <a href="#Alpha_Type">Image Alpha Type</a> of <a href="#SkCanvas_readPixels_dstPixels">dstPixels</a></td>
+width, height, <a href="undocumented#Image_Color_Type">Image Color Type</a>, and <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a> of <a href="#SkCanvas_readPixels_dstPixels">dstPixels</a></td>
</tr> <tr> <td><a name="SkCanvas_readPixels_dstPixels"> <code><strong>dstPixels </strong></code> </a></td> <td>
storage for pixels; <a href="#SkCanvas_readPixels_dstInfo">dstInfo</a>.height() times <a href="#SkCanvas_readPixels_dstRowBytes">dstRowBytes</a>, or larger</td>
</tr> <tr> <td><a name="SkCanvas_readPixels_dstRowBytes"> <code><strong>dstRowBytes </strong></code> </a></td> <td>
@@ -986,7 +987,7 @@ true if pixels were copied
<div><fiddle-embed name="2964297993747769b0760874c19e0168"><div>A black circle drawn on a blue background provides an image to copy.
<a href="#SkCanvas_readPixels">readPixels</a> copies one quarter of the canvas into each of the four corners.
-The <a href="#Layer">Layer</a> draws over the image.</div></fiddle-embed></div>
+The copied quarter circles overdraw the original circle.</div></fiddle-embed></div>
### Example
@@ -1011,15 +1012,15 @@ pixel = 8056a9ff
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool readPixels(const SkPixmap& pixmap, int srcX, int srcY)
</pre>
Copies <a href="SkRect_Reference#Rect">Rect</a> of pixels from <a href="#Canvas">Canvas</a> into <a href="#SkCanvas_readPixels_2_pixmap">pixmap</a>. <a href="#Matrix">Matrix</a> and <a href="#Clip">Clip</a> are
-ignored. Source <a href="SkRect_Reference#Rect">Rect</a> corners are (<a href="#SkCanvas_readPixels_2_srcX">srcX</a>, <a href="#SkCanvas_readPixels_2_srcY">srcY</a>) and
-(<a href="#SkCanvas_imageInfo">imageInfo</a>.width(), <a href="#SkCanvas_imageInfo">imageInfo</a>.height()).
+ignored.
-Destination <a href="SkRect_Reference#Rect">Rect</a> corners are (0, 0) and (bitmap.width(), bitmap.height()).
+Source <a href="SkRect_Reference#Rect">Rect</a> corners are (<a href="#SkCanvas_readPixels_2_srcX">srcX</a>, <a href="#SkCanvas_readPixels_2_srcY">srcY</a>) and (<a href="#SkCanvas_imageInfo">imageInfo</a>.width(), <a href="#SkCanvas_imageInfo">imageInfo</a>.height()).
+Destination <a href="SkRect_Reference#Rect">Rect</a> corners are (0, 0) and (<a href="#SkCanvas_readPixels_2_pixmap">pixmap</a>.width(), <a href="#SkCanvas_readPixels_2_pixmap">pixmap</a>.height()).
Copies each readable pixel intersecting both rectangles, without scaling,
converting to <a href="#SkCanvas_readPixels_2_pixmap">pixmap</a>.colorType() and <a href="#SkCanvas_readPixels_2_pixmap">pixmap</a>.alphaType() if required.
@@ -1030,7 +1031,7 @@ class like <a href="undocumented#SkDumpCanvas">SkDumpCanvas</a>.
Caller must allocate pixel storage in <a href="#SkCanvas_readPixels_2_pixmap">pixmap</a> if needed.
-<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="#Color_Type">Image Color Type</a> and <a href="#Alpha_Type">Image Alpha Type</a>
+<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="undocumented#Image_Color_Type">Image Color Type</a> and <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>
do not match. Only pixels within both source and destination <a href="#Rect">Rects</a>
are copied. <a href="#SkCanvas_readPixels_2_pixmap">pixmap</a> pixels contents outside <a href="SkRect_Reference#Rect">Rect</a> intersection are unchanged.
@@ -1081,14 +1082,14 @@ pixel = 802b5580
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool readPixels(const SkBitmap& bitmap, int srcX, int srcY)
</pre>
Copies <a href="SkRect_Reference#Rect">Rect</a> of pixels from <a href="#Canvas">Canvas</a> into <a href="#SkCanvas_readPixels_3_bitmap">bitmap</a>. <a href="#Matrix">Matrix</a> and <a href="#Clip">Clip</a> are
-ignored. Source <a href="SkRect_Reference#Rect">Rect</a> corners are (<a href="#SkCanvas_readPixels_3_srcX">srcX</a>, <a href="#SkCanvas_readPixels_3_srcY">srcY</a>) and
-(<a href="#SkCanvas_imageInfo">imageInfo</a>.width(), <a href="#SkCanvas_imageInfo">imageInfo</a>.height()).
+ignored.
+Source <a href="SkRect_Reference#Rect">Rect</a> corners are (<a href="#SkCanvas_readPixels_3_srcX">srcX</a>, <a href="#SkCanvas_readPixels_3_srcY">srcY</a>) and (<a href="#SkCanvas_imageInfo">imageInfo</a>.width(), <a href="#SkCanvas_imageInfo">imageInfo</a>.height()).
Destination <a href="SkRect_Reference#Rect">Rect</a> corners are (0, 0) and (<a href="#SkCanvas_readPixels_3_bitmap">bitmap</a>.width(), <a href="#SkCanvas_readPixels_3_bitmap">bitmap</a>.height()).
Copies each readable pixel intersecting both rectangles, without scaling,
converting to <a href="#SkCanvas_readPixels_3_bitmap">bitmap</a>.colorType() and <a href="#SkCanvas_readPixels_3_bitmap">bitmap</a>.alphaType() if required.
@@ -1100,7 +1101,7 @@ class like <a href="undocumented#SkDumpCanvas">SkDumpCanvas</a>.
Caller must allocate pixel storage in <a href="#SkCanvas_readPixels_3_bitmap">bitmap</a> if needed.
-<a href="SkBitmap_Reference#Bitmap">Bitmap</a> values are converted only if <a href="#Color_Type">Image Color Type</a> and <a href="#Alpha_Type">Image Alpha Type</a>
+<a href="SkBitmap_Reference#Bitmap">Bitmap</a> values are converted only if <a href="undocumented#Image_Color_Type">Image Color Type</a> and <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>
do not match. Only pixels within both source and destination rectangles
are copied. <a href="SkBitmap_Reference#Bitmap">Bitmap</a> pixels outside <a href="SkRect_Reference#Rect">Rect</a> intersection are unchanged.
@@ -1154,9 +1155,8 @@ pixel = 802b5580
<a name="SkCanvas_writePixels"></a>
## writePixels
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool writePixels(const SkImageInfo& info, const void* pixels, size_t rowBytes,
- int x, int y)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool writePixels(const SkImageInfo& info, const void* pixels, size_t rowBytes, int x, int y)
</pre>
Copies <a href="SkRect_Reference#Rect">Rect</a> from <a href="#SkCanvas_writePixels_pixels">pixels</a> to <a href="#Canvas">Canvas</a>. <a href="#Matrix">Matrix</a> and <a href="#Clip">Clip</a> are ignored.
@@ -1172,7 +1172,7 @@ Pixels are not writable when <a href="#SkCanvas">SkCanvas</a> is returned by <a
returned by <a href="#SkPictureRecorder_beginRecording">SkPictureRecorder::beginRecording</a>, or <a href="#Canvas">Canvas</a> is the base of a utility
class like <a href="undocumented#SkDumpCanvas">SkDumpCanvas</a>.
-<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="#Color_Type">Image Color Type</a> and <a href="#Alpha_Type">Image Alpha Type</a>
+<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="undocumented#Image_Color_Type">Image Color Type</a> and <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>
do not match. Only <a href="#SkCanvas_writePixels_pixels">pixels</a> within both source and destination rectangles
are copied. <a href="#Canvas">Canvas</a> <a href="#SkCanvas_writePixels_pixels">pixels</a> outside <a href="SkRect_Reference#Rect">Rect</a> intersection are unchanged.
@@ -1192,7 +1192,7 @@ this-><a href="#SkCanvas_imageInfo">imageInfo</a>.alphaType().</td> </tr> <tr>
### Parameters
<table> <tr> <td><a name="SkCanvas_writePixels_info"> <code><strong>info </strong></code> </a></td> <td>
-width, height, <a href="#Color_Type">Image Color Type</a>, and <a href="#Alpha_Type">Image Alpha Type</a> of <a href="#SkCanvas_writePixels_pixels">pixels</a></td>
+width, height, <a href="undocumented#Image_Color_Type">Image Color Type</a>, and <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a> of <a href="#SkCanvas_writePixels_pixels">pixels</a></td>
</tr> <tr> <td><a name="SkCanvas_writePixels_pixels"> <code><strong>pixels </strong></code> </a></td> <td>
<a href="#SkCanvas_writePixels_pixels">pixels</a> to copy, of size <a href="#SkCanvas_writePixels_info">info</a>.height() times <a href="#SkCanvas_writePixels_rowBytes">rowBytes</a>, or larger</td>
</tr> <tr> <td><a name="SkCanvas_writePixels_rowBytes"> <code><strong>rowBytes </strong></code> </a></td> <td>
@@ -1218,7 +1218,7 @@ true if <a href="#SkCanvas_writePixels_pixels">pixels</a> were written to <a hre
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool writePixels(const SkBitmap& bitmap, int x, int y)
</pre>
@@ -1236,7 +1236,7 @@ Pixels are not writable when <a href="#SkCanvas">SkCanvas</a> is returned by <a
returned by <a href="#SkPictureRecorder_beginRecording">SkPictureRecorder::beginRecording</a>, or <a href="#Canvas">Canvas</a> is the base of a utility
class like <a href="undocumented#SkDumpCanvas">SkDumpCanvas</a>.
-<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="#Color_Type">Image Color Type</a> and <a href="#Alpha_Type">Image Alpha Type</a>
+<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="undocumented#Image_Color_Type">Image Color Type</a> and <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>
do not match. Only pixels within both source and destination rectangles
are copied. <a href="#Canvas">Canvas</a> pixels outside <a href="SkRect_Reference#Rect">Rect</a> intersection are unchanged.
@@ -1283,7 +1283,7 @@ true if pixels were written to <a href="#Canvas">Canvas</a>
<a href="#Canvas">Canvas</a> maintains a stack of state that allows hierarchical drawing, commonly used
to implement windows and views. The initial state has an identity matrix and and
an infinite clip. Even with a wide-open clip, drawing is constrained by the
-bounds of the <a href="#Canvas">Canvas</a> <a href="undocumented#Surface">Surface</a> or <a href="undocumented#Device">Device</a>.
+bounds of the <a href="#Canvas">Canvas</a> <a href="SkSurface_Reference#Surface">Surface</a> or <a href="undocumented#Device">Device</a>.
<a href="#Canvas">Canvas</a> savable state consists of <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and <a href="undocumented#Draw_Filter">Draw Filter</a>.
<a href="#Clip">Clip</a> describes the area that may be drawn to.
@@ -1314,7 +1314,7 @@ Each <a href="#Clip">Clip</a> uses the current <a href="#Matrix">Matrix</a> for
<a name="SkCanvas_save"></a>
## save
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int save()
</pre>
@@ -1349,7 +1349,7 @@ the red square is not translated, and is drawn at the origin.</div></fiddle-embe
<a name="SkCanvas_restore"></a>
## restore
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void restore()
</pre>
@@ -1371,7 +1371,7 @@ Does nothing if the stack is empty.
<a name="SkCanvas_getSaveCount"></a>
## getSaveCount
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int getSaveCount() const
</pre>
@@ -1406,7 +1406,7 @@ depth = 1
<a name="SkCanvas_restoreToCount"></a>
## restoreToCount
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void restoreToCount(int saveCount)
</pre>
@@ -1457,7 +1457,7 @@ restored, its <a href="SkBitmap_Reference#Bitmap">Bitmap</a> can be modified by
<a name="SkCanvas_saveLayer"></a>
## saveLayer
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int saveLayer(const SkRect* bounds, const SkPaint* paint)
</pre>
@@ -1493,7 +1493,7 @@ depth of saved stack
### Example
-<div><fiddle-embed name="05f9b6fa6b5007aea89dfe66c306855d"><div>Rectangles are blurred by <a href="undocumented#Image_Filter">Image Filter</a> when <a href="#SkCanvas_restore">restore</a> draws <a href="#Layer">Layer</a> to main
+<div><fiddle-embed name="1a025d6018f64140af2dc36acad59008"><div>Rectangles are blurred by <a href="undocumented#Image_Filter">Image Filter</a> when <a href="#SkCanvas_restore">restore</a> draws <a href="#Layer">Layer</a> to main
<a href="#Canvas">Canvas</a>.</div></fiddle-embed></div>
### See Also
@@ -1502,7 +1502,7 @@ depth of saved stack
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int saveLayer(const SkRect& bounds, const SkPaint* paint)
</pre>
@@ -1538,7 +1538,7 @@ depth of saved stack
### Example
-<div><fiddle-embed name="812f3c8f8b93e8c7e55528c7a22887bf"><div>Rectangles are blurred by <a href="undocumented#Image_Filter">Image Filter</a> when <a href="#SkCanvas_restore">restore</a> draws <a href="#Layer">Layer</a> to main <a href="#Canvas">Canvas</a>.
+<div><fiddle-embed name="5b59231feae0c09cb1ab6a292229d7a4"><div>Rectangles are blurred by <a href="undocumented#Image_Filter">Image Filter</a> when <a href="#SkCanvas_restore">restore</a> draws <a href="#Layer">Layer</a> to main <a href="#Canvas">Canvas</a>.
The red rectangle is clipped; it does not fully fit on <a href="#Layer">Layer</a>.
<a href="undocumented#Image_Filter">Image Filter</a> blurs past edge of <a href="#Layer">Layer</a> so red rectangle is blurred on all sides.</div></fiddle-embed></div>
@@ -1551,7 +1551,7 @@ The red rectangle is clipped; it does not fully fit on <a href="#Layer">Layer</a
<a name="SkCanvas_saveLayerPreserveLCDTextRequests"></a>
## saveLayerPreserveLCDTextRequests
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int saveLayerPreserveLCDTextRequests(const SkRect* bounds, const SkPaint* paint)
</pre>
@@ -1603,7 +1603,7 @@ depth of saved stack
<a name="SkCanvas_saveLayerAlpha"></a>
## saveLayerAlpha
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int saveLayerAlpha(const SkRect* bounds, U8CPU alpha)
</pre>
@@ -1649,17 +1649,15 @@ depth of saved stack
## <a name="SkCanvas__anonymous"></a> Enum SkCanvas::_anonymous
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum {
<a href="#SkCanvas_kIsOpaque_SaveLayerFlag">kIsOpaque SaveLayerFlag</a> = 1 << 0,
<a href="#SkCanvas_kPreserveLCDText_SaveLayerFlag">kPreserveLCDText SaveLayerFlag</a> = 1 << 1,
<a href="#SkCanvas_kInitWithPrevious_SaveLayerFlag">kInitWithPrevious SaveLayerFlag</a> = 1 << 2,
<a href="#SkCanvas_kDontClipToLayer_Legacy_SaveLayerFlag">kDontClipToLayer Legacy SaveLayerFlag</a> = kDontClipToLayer_PrivateSaveLayerFlag,
-};
-
-typedef uint32_t <a href="undocumented#SaveLayerFlags">SaveLayerFlags</a>;</pre>
+};</pre>
-<a href="undocumented#SaveLayerFlags">SaveLayerFlags</a> provides options that may be used in any combination in <a href="#SkCanvas_SaveLayerRec">SaveLayerRec</a>,
+SaveLayerFlags provides options that may be used in any combination in <a href="#SkCanvas_SaveLayerRec">SaveLayerRec</a>,
defining how <a href="#Layer">Layer</a> allocated by <a href="#SkCanvas_saveLayer">saveLayer</a> operates.
### Constants
@@ -1695,14 +1693,14 @@ scalePaint blends <a href="#Layer">Layer</a> back with transparency.</div></fidd
# <a name="SkCanvas_SaveLayerRec"></a> Struct SkCanvas::SaveLayerRec
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
struct <a href="#SkCanvas_SaveLayerRec_SaveLayerRec">SaveLayerRec</a> {
<a href="#SkCanvas_SaveLayerRec_SaveLayerRec">SaveLayerRec</a>*(...
const <a href="SkRect_Reference#SkRect">SkRect</a>* <a href="#SkCanvas_SaveLayerRec_fBounds">fBounds</a>;
const <a href="SkPaint_Reference#SkPaint">SkPaint</a>* <a href="#SkCanvas_SaveLayerRec_fPaint">fPaint</a>;
const <a href="undocumented#SkImageFilter">SkImageFilter</a>* <a href="#SkCanvas_SaveLayerRec_fBackdrop">fBackdrop</a>;
-<a href="undocumented#SaveLayerFlags">SaveLayerFlags</a> <a href="#SkCanvas_SaveLayerRec_fSaveLayerFlags">fSaveLayerFlags</a>;
+<a href="#SkCanvas_SaveLayerRec_fSaveLayerFlags">fSaveLayerFlags</a>;
};</pre>
<a href="#SkCanvas_SaveLayerRec_SaveLayerRec">SaveLayerRec</a> contains the state used to create the <a href="#Layer">Layer</a>.
@@ -1744,14 +1742,14 @@ contents of the previous <a href="#Layer">Layer</a>.
### Example
-<div><fiddle-embed name="7b18146582fc2440656b839a173ed500"><div><a href="#Canvas">Canvas</a> <a href="#Layer">Layer</a> captures a red <a href="undocumented#Anti_alias">Anti-aliased</a> circle and a blue <a href="#Alias">Aliased</a> circle scaled
+<div><fiddle-embed name="7b18146582fc2440656b839a173ed500"><div><a href="#Canvas">Canvas</a> <a href="#Layer">Layer</a> captures a red Anti-aliased circle and a blue <a href="#Alias">Aliased</a> circle scaled
up by four. After drawing another red circle without scaling on top, the <a href="#Layer">Layer</a> is
transferred to the main canvas.</div></fiddle-embed></div>
<a name="SkCanvas_SaveLayerRec_SaveLayerRec"></a>
## SaveLayerRec
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SaveLayerRec()
</pre>
@@ -1779,9 +1777,8 @@ rec1 == rec2
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-SaveLayerRec(const SkRect* bounds, const SkPaint* paint,
- SaveLayerFlags saveLayerFlags = 0)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SaveLayerRec(const SkRect* bounds, const SkPaint* paint, SaveLayerFlags saveLayerFlags = 0)
</pre>
Sets <a href="#SkCanvas_SaveLayerRec_fBounds">fBounds</a>, <a href="#SkCanvas_SaveLayerRec_fPaint">fPaint</a>, and <a href="#SkCanvas_SaveLayerRec_fSaveLayerFlags">fSaveLayerFlags</a>; sets <a href="#SkCanvas_SaveLayerRec_fBackdrop">fBackdrop</a> to nullptr.
@@ -1819,9 +1816,9 @@ rec1 == rec2
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-SaveLayerRec(const SkRect* bounds, const SkPaint* paint,
- const SkImageFilter* backdrop, SaveLayerFlags saveLayerFlags)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SaveLayerRec(const SkRect* bounds, const SkPaint* paint, const SkImageFilter* backdrop,
+ SaveLayerFlags saveLayerFlags)
</pre>
Sets <a href="#SkCanvas_SaveLayerRec_fBounds">fBounds</a>, <a href="#SkCanvas_SaveLayerRec_fPaint">fPaint</a>, <a href="#SkCanvas_SaveLayerRec_fBackdrop">fBackdrop</a>, and <a href="#SkCanvas_SaveLayerRec_fSaveLayerFlags">fSaveLayerFlags</a>.
@@ -1862,17 +1859,16 @@ rec1 == rec2
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-SaveLayerRec(const SkRect* bounds, const SkPaint* paint,
- const SkImageFilter* backdrop, const SkImage* clipMask,
- const SkMatrix* clipMatrix, SaveLayerFlags saveLayerFlags)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SaveLayerRec(const SkRect* bounds, const SkPaint* paint, const SkImageFilter* backdrop,
+ const SkImage* clipMask, const SkMatrix* clipMatrix, SaveLayerFlags saveLayerFlags)
</pre>
Not ready for general use.Sets <a href="#SkCanvas_SaveLayerRec_fBounds">fBounds</a>, <a href="#SkCanvas_SaveLayerRec_fPaint">fPaint</a>, <a href="#SkCanvas_SaveLayerRec_fBackdrop">fBackdrop</a>, <a href="#SkCanvas_SaveLayerRec_fClipMask">fClipMask</a>, <a href="#SkCanvas_SaveLayerRec_fClipMatrix">fClipMatrix</a>, and <a href="#SkCanvas_SaveLayerRec_fSaveLayerFlags">fSaveLayerFlags</a>.
<a href="#SkCanvas_SaveLayerRec_SaveLayerRec_4_clipMatrix">clipMatrix</a> uses <a href="#Alpha">Color Alpha</a> channel of image, transformed by <a href="#SkCanvas_SaveLayerRec_SaveLayerRec_4_clipMatrix">clipMatrix</a>, to clip
<a href="#Layer">Layer</a> when drawn to <a href="#Canvas">Canvas</a>.
-Implementation is not complete; has no effect if <a href="undocumented#Device">Device</a> is <a href="undocumented#GPU_backed">GPU-backed</a>.
+Implementation is not complete; has no effect if <a href="undocumented#Device">Device</a> is <a href="undocumented#GPU">GPU</a>-backed.
### Parameters
@@ -1904,7 +1900,7 @@ identity matrix</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int saveLayer(const SaveLayerRec& layerRec)
</pre>
@@ -1951,7 +1947,7 @@ Outside of the circle the mandrill is brightened.</div></fiddle-embed></div>
<a name="SkCanvas_translate"></a>
## translate
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void translate(SkScalar dx, SkScalar dy)
</pre>
@@ -1991,7 +1987,7 @@ follows <a href="#SkCanvas_translate">translate</a> of (50, 50).</div></fiddle-e
<a name="SkCanvas_scale"></a>
## scale
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void scale(SkScalar sx, SkScalar sy)
</pre>
@@ -2025,7 +2021,7 @@ amount to <a href="#SkCanvas_scale">scale</a> in y</td>
<a name="SkCanvas_rotate"></a>
## rotate
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void rotate(SkScalar degrees)
</pre>
@@ -2055,7 +2051,7 @@ are rotated clockwise.</div></fiddle-embed></div>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void rotate(SkScalar degrees, SkScalar px, SkScalar py)
</pre>
@@ -2093,7 +2089,7 @@ y-coordinate of the point to <a href="#SkCanvas_rotate">rotate</a> about</td>
<a name="SkCanvas_skew"></a>
## skew
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void skew(SkScalar sx, SkScalar sy)
</pre>
@@ -2132,7 +2128,7 @@ increase.
<a name="SkCanvas_concat"></a>
## concat
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void concat(const SkMatrix& matrix)
</pre>
@@ -2161,7 +2157,7 @@ transforming the result with existing <a href="#Matrix">Matrix</a>.
<a name="SkCanvas_setMatrix"></a>
## setMatrix
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setMatrix(const SkMatrix& matrix)
</pre>
@@ -2188,7 +2184,7 @@ Unlike <a href="#SkCanvas_concat">concat</a>, any prior <a href="#SkCanvas_setMa
<a name="SkCanvas_resetMatrix"></a>
## resetMatrix
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void resetMatrix()
</pre>
@@ -2208,12 +2204,12 @@ Any prior matrix state is overwritten.
<a name="SkCanvas_getTotalMatrix"></a>
## getTotalMatrix
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
const SkMatrix& getTotalMatrix() const
</pre>
Returns <a href="#Matrix">Matrix</a>.
-This does not account for translation by <a href="undocumented#Device">Device</a> or <a href="undocumented#Surface">Surface</a>.
+This does not account for translation by <a href="undocumented#Device">Device</a> or <a href="SkSurface_Reference#Surface">Surface</a>.
### Return Value
@@ -2250,14 +2246,14 @@ prior <a href="#Clip">Clip</a> to form the replacement <a href="#Clip">Clip</a>.
to subtract <a href="SkPath_Reference#Path">Path</a> from <a href="#Clip">Clip</a>; use <a href="#SkClipOp_kIntersect">SkClipOp::kIntersect</a> to intersect <a href="SkPath_Reference#Path">Path</a>
with <a href="#Clip">Clip</a>.
-A clipping <a href="SkPath_Reference#Path">Path</a> may be <a href="undocumented#Anti_alias">Anti-aliased</a>; if <a href="SkPath_Reference#Path">Path</a>, after transformation, is
-composed of horizontal and vertical lines, clearing <a href="SkPaint_Reference#Anti_alias">Anti-alias</a> allows whole pixels
+A clipping <a href="SkPath_Reference#Path">Path</a> may be Anti-aliased; if <a href="SkPath_Reference#Path">Path</a>, after transformation, is
+composed of horizontal and vertical lines, clearing Anti-alias allows whole pixels
to either be inside or outside the clip. The fastest drawing has a <a href="#Alias">Aliased</a>,
rectangular clip.
-If clipping <a href="SkPath_Reference#Path">Path</a> has <a href="SkPaint_Reference#Anti_alias">Anti-alias</a> set, clip may partially clip a pixel, requiring
+If clipping <a href="SkPath_Reference#Path">Path</a> has Anti-alias set, clip may partially clip a pixel, requiring
that drawing blend partially with the destination along the edge. A rotated
-rectangular <a href="undocumented#Anti_alias">Anti-aliased</a> clip looks smoother but draws slower.
+rectangular Anti-aliased clip looks smoother but draws slower.
<a href="#Clip">Clip</a> can combine with <a href="SkRect_Reference#Rect">Rect</a> and <a href="undocumented#Round_Rect">Round Rect</a> primitives; like
<a href="SkPath_Reference#Path">Path</a>, these are transformed by <a href="#Matrix">Matrix</a> before they are combined with <a href="#Clip">Clip</a>.
@@ -2267,20 +2263,20 @@ and is unaffected by <a href="#Matrix">Matrix</a>.
### Example
-<div><fiddle-embed name="d2e60e5171f26ff9ddefae48387f889b"><div>Draw a red circle with an <a href="#Alias">Aliased</a> clip and an <a href="undocumented#Anti_alias">Anti-aliased</a> clip.
+<div><fiddle-embed name="d2e60e5171f26ff9ddefae48387f889b"><div>Draw a red circle with an <a href="#Alias">Aliased</a> clip and an Anti-aliased clip.
Use an image filter to zoom into the pixels drawn.
The edge of the <a href="#Alias">Aliased</a> clip fully draws pixels in the red circle.
-The edge of the <a href="undocumented#Anti_alias">Anti-aliased</a> clip partially draws pixels in the red circle.</div></fiddle-embed></div>
+The edge of the Anti-aliased clip partially draws pixels in the red circle.</div></fiddle-embed></div>
<a name="SkCanvas_clipRect"></a>
## clipRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void clipRect(const SkRect& rect, SkClipOp op, bool doAntiAlias)
</pre>
Replace <a href="#Clip">Clip</a> with the intersection or difference of <a href="#Clip">Clip</a> and <a href="#SkCanvas_clipRect_rect">rect</a>,
-with an <a href="#Alias">Aliased</a> or <a href="undocumented#Anti_alias">Anti-aliased</a> clip edge. <a href="#SkCanvas_clipRect_rect">rect</a> is transformed by <a href="#Matrix">Matrix</a>
+with an <a href="#Alias">Aliased</a> or Anti-aliased clip edge. <a href="#SkCanvas_clipRect_rect">rect</a> is transformed by <a href="#Matrix">Matrix</a>
before it is combined with <a href="#Clip">Clip</a>.
### Parameters
@@ -2290,7 +2286,7 @@ before it is combined with <a href="#Clip">Clip</a>.
</tr> <tr> <td><a name="SkCanvas_clipRect_op"> <code><strong>op </strong></code> </a></td> <td>
<a href="#Op">Clip Op</a> to apply to <a href="#Clip">Clip</a></td>
</tr> <tr> <td><a name="SkCanvas_clipRect_doAntiAlias"> <code><strong>doAntiAlias </strong></code> </a></td> <td>
-true if <a href="#Clip">Clip</a> is to be <a href="undocumented#Anti_alias">Anti-aliased</a></td>
+true if <a href="#Clip">Clip</a> is to be Anti-aliased</td>
</tr>
</table>
@@ -2304,7 +2300,7 @@ true if <a href="#Clip">Clip</a> is to be <a href="undocumented#Anti_alias">Anti
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void clipRect(const SkRect& rect, SkClipOp op)
</pre>
@@ -2331,7 +2327,7 @@ Resulting <a href="#Clip">Clip</a> is <a href="#Alias">Aliased</a>; pixels are f
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void clipRect(const SkRect& rect, bool doAntiAlias = false)
</pre>
@@ -2345,14 +2341,14 @@ before it is combined with <a href="#Clip">Clip</a>.
<table> <tr> <td><a name="SkCanvas_clipRect_3_rect"> <code><strong>rect </strong></code> </a></td> <td>
<a href="SkRect_Reference#Rect">Rect</a> to combine with <a href="#Clip">Clip</a></td>
</tr> <tr> <td><a name="SkCanvas_clipRect_3_doAntiAlias"> <code><strong>doAntiAlias </strong></code> </a></td> <td>
-true if <a href="#Clip">Clip</a> is to be <a href="undocumented#Anti_alias">Anti-aliased</a></td>
+true if <a href="#Clip">Clip</a> is to be Anti-aliased</td>
</tr>
</table>
### Example
<div><fiddle-embed name="1d4e0632c97e42692775d834fe10aa99"><div>A circle drawn in pieces looks uniform when drawn <a href="#Alias">Aliased</a>.
-The same circle pieces blend with pixels more than once when <a href="undocumented#Anti_alias">Anti-aliased</a>,
+The same circle pieces blend with pixels more than once when Anti-aliased,
visible as a thin pair of lines through the right circle.</div></fiddle-embed></div>
### See Also
@@ -2364,7 +2360,7 @@ visible as a thin pair of lines through the right circle.</div></fiddle-embed></
<a name="SkCanvas_androidFramework_setDeviceClipRestriction"></a>
## androidFramework_setDeviceClipRestriction
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void androidFramework_setDeviceClipRestriction(const SkIRect& rect)
</pre>
@@ -2389,12 +2385,12 @@ maximum allowed clip in device coordinates</td>
<a name="SkCanvas_clipRRect"></a>
## clipRRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void clipRRect(const SkRRect& rrect, SkClipOp op, bool doAntiAlias)
</pre>
Replace <a href="#Clip">Clip</a> with the intersection or difference of <a href="#Clip">Clip</a> and <a href="#SkCanvas_clipRRect_rrect">rrect</a>,
-with an <a href="#Alias">Aliased</a> or <a href="undocumented#Anti_alias">Anti-aliased</a> clip edge.
+with an <a href="#Alias">Aliased</a> or Anti-aliased clip edge.
<a href="#SkCanvas_clipRRect_rrect">rrect</a> is transformed by <a href="#Matrix">Matrix</a>
before it is combined with <a href="#Clip">Clip</a>.
@@ -2405,7 +2401,7 @@ before it is combined with <a href="#Clip">Clip</a>.
</tr> <tr> <td><a name="SkCanvas_clipRRect_op"> <code><strong>op </strong></code> </a></td> <td>
<a href="#Op">Clip Op</a> to apply to <a href="#Clip">Clip</a></td>
</tr> <tr> <td><a name="SkCanvas_clipRRect_doAntiAlias"> <code><strong>doAntiAlias </strong></code> </a></td> <td>
-true if <a href="#Clip">Clip</a> is to be <a href="undocumented#Anti_alias">Anti-aliased</a></td>
+true if <a href="#Clip">Clip</a> is to be Anti-aliased</td>
</tr>
</table>
@@ -2419,7 +2415,7 @@ true if <a href="#Clip">Clip</a> is to be <a href="undocumented#Anti_alias">Anti
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void clipRRect(const SkRRect& rrect, SkClipOp op)
</pre>
@@ -2446,12 +2442,12 @@ Resulting <a href="#Clip">Clip</a> is <a href="#Alias">Aliased</a>; pixels are f
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void clipRRect(const SkRRect& rrect, bool doAntiAlias = false)
</pre>
Replace <a href="#Clip">Clip</a> with the intersection of <a href="#Clip">Clip</a> and <a href="#SkCanvas_clipRRect_3_rrect">rrect</a>,
-with an <a href="#Alias">Aliased</a> or <a href="undocumented#Anti_alias">Anti-aliased</a> clip edge.
+with an <a href="#Alias">Aliased</a> or Anti-aliased clip edge.
<a href="#SkCanvas_clipRRect_3_rrect">rrect</a> is transformed by <a href="#Matrix">Matrix</a> before it is combined with <a href="#Clip">Clip</a>.
### Parameters
@@ -2459,7 +2455,7 @@ with an <a href="#Alias">Aliased</a> or <a href="undocumented#Anti_alias">Anti-a
<table> <tr> <td><a name="SkCanvas_clipRRect_3_rrect"> <code><strong>rrect </strong></code> </a></td> <td>
<a href="undocumented#Round_Rect">Round Rect</a> to combine with <a href="#Clip">Clip</a></td>
</tr> <tr> <td><a name="SkCanvas_clipRRect_3_doAntiAlias"> <code><strong>doAntiAlias </strong></code> </a></td> <td>
-true if <a href="#Clip">Clip</a> is to be <a href="undocumented#Anti_alias">Anti-aliased</a></td>
+true if <a href="#Clip">Clip</a> is to be Anti-aliased</td>
</tr>
</table>
@@ -2476,12 +2472,12 @@ true if <a href="#Clip">Clip</a> is to be <a href="undocumented#Anti_alias">Anti
<a name="SkCanvas_clipPath"></a>
## clipPath
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void clipPath(const SkPath& path, SkClipOp op, bool doAntiAlias)
</pre>
Replace <a href="#Clip">Clip</a> with the intersection or difference of <a href="#Clip">Clip</a> and <a href="#SkCanvas_clipPath_path">path</a>,
-with an <a href="#Alias">Aliased</a> or <a href="undocumented#Anti_alias">Anti-aliased</a> clip edge. <a href="#Fill_Type">Path Fill Type</a> determines if <a href="#SkCanvas_clipPath_path">path</a>
+with an <a href="#Alias">Aliased</a> or Anti-aliased clip edge. <a href="#Fill_Type">Path Fill Type</a> determines if <a href="#SkCanvas_clipPath_path">path</a>
describes the area inside or outside its contours; and if <a href="#Contour">Path Contour</a> overlaps
itself or another <a href="#Contour">Path Contour</a>, whether the overlaps form part of the area.
<a href="#SkCanvas_clipPath_path">path</a> is transformed by <a href="#Matrix">Matrix</a> before it is combined with <a href="#Clip">Clip</a>.
@@ -2493,7 +2489,7 @@ itself or another <a href="#Contour">Path Contour</a>, whether the overlaps form
</tr> <tr> <td><a name="SkCanvas_clipPath_op"> <code><strong>op </strong></code> </a></td> <td>
<a href="#Op">Clip Op</a> to apply to <a href="#Clip">Clip</a></td>
</tr> <tr> <td><a name="SkCanvas_clipPath_doAntiAlias"> <code><strong>doAntiAlias </strong></code> </a></td> <td>
-true if <a href="#Clip">Clip</a> is to be <a href="undocumented#Anti_alias">Anti-aliased</a></td>
+true if <a href="#Clip">Clip</a> is to be Anti-aliased</td>
</tr>
</table>
@@ -2511,7 +2507,7 @@ area inside clip is intersected with circle.</div></fiddle-embed></div>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void clipPath(const SkPath& path, SkClipOp op)
</pre>
@@ -2544,7 +2540,7 @@ before it is combined with <a href="#Clip">Clip</a>.
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void clipPath(const SkPath& path, bool doAntiAlias = false)
</pre>
@@ -2560,7 +2556,7 @@ itself or another <a href="#Contour">Path Contour</a>, whether the overlaps form
<table> <tr> <td><a name="SkCanvas_clipPath_3_path"> <code><strong>path </strong></code> </a></td> <td>
<a href="SkPath_Reference#Path">Path</a> to combine with <a href="#Clip">Clip</a></td>
</tr> <tr> <td><a name="SkCanvas_clipPath_3_doAntiAlias"> <code><strong>doAntiAlias </strong></code> </a></td> <td>
-true if <a href="#Clip">Clip</a> is to be <a href="undocumented#Anti_alias">Anti-aliased</a></td>
+true if <a href="#Clip">Clip</a> is to be Anti-aliased</td>
</tr>
</table>
@@ -2579,7 +2575,7 @@ is set to <a href="#SkPath_kWinding_FillType">SkPath::kWinding FillType</a>, the
<a name="SkCanvas_setAllowSimplifyClip"></a>
## setAllowSimplifyClip
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setAllowSimplifyClip(bool allow)
</pre>
@@ -2590,7 +2586,7 @@ Only used for testing.Set to simplify clip stack using <a href="undocumented#Pat
<a name="SkCanvas_clipRegion"></a>
## clipRegion
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void clipRegion(const SkRegion& deviceRgn, SkClipOp op = SkClipOp::kIntersect)
</pre>
@@ -2622,7 +2618,7 @@ aligns to pixel boundaries.</div></fiddle-embed></div>
<a name="SkCanvas_quickReject"></a>
## quickReject
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool quickReject(const SkRect& rect) const
</pre>
@@ -2661,7 +2657,7 @@ quickReject false
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool quickReject(const SkPath& path) const
</pre>
@@ -2703,7 +2699,7 @@ quickReject false
<a name="SkCanvas_getLocalClipBounds"></a>
## getLocalClipBounds
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkRect getLocalClipBounds() const
</pre>
@@ -2711,7 +2707,7 @@ Return bounds of <a href="#Clip">Clip</a>, transformed by inverse of <a href="#M
return <a href="#SkRect_MakeEmpty">SkRect::MakeEmpty</a>, where all <a href="SkRect_Reference#Rect">Rect</a> sides equal zero.
<a href="SkRect_Reference#Rect">Rect</a> returned is outset by one to account for partial pixel coverage if <a href="#Clip">Clip</a>
-is <a href="undocumented#Anti_alias">Anti-aliased</a>.
+is Anti-aliased.
### Return Value
@@ -2739,7 +2735,7 @@ left:14.5 top:64.5 right:60.5 bottom:115.5
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool getLocalClipBounds(SkRect* bounds) const
</pre>
@@ -2747,7 +2743,7 @@ Return <a href="#SkCanvas_getLocalClipBounds_2_bounds">bounds</a> of <a href="#C
return false, and set <a href="#SkCanvas_getLocalClipBounds_2_bounds">bounds</a> to <a href="#SkRect_MakeEmpty">SkRect::MakeEmpty</a>, where all <a href="SkRect_Reference#Rect">Rect</a> sides equal zero.
<a href="#SkCanvas_getLocalClipBounds_2_bounds">bounds</a> is outset by one to account for partial pixel coverage if <a href="#Clip">Clip</a>
-is <a href="undocumented#Anti_alias">Anti-aliased</a>.
+is Anti-aliased.
### Parameters
@@ -2782,7 +2778,7 @@ local bounds empty = true
<a name="SkCanvas_getDeviceClipBounds"></a>
## getDeviceClipBounds
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkIRect getDeviceClipBounds() const
</pre>
@@ -2817,7 +2813,7 @@ left:15 top:65 right:60 bottom:115
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool getDeviceClipBounds(SkIRect* bounds) const
</pre>
@@ -2859,7 +2855,7 @@ device bounds empty = true
<a name="SkCanvas_drawColor"></a>
## drawColor
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawColor(SkColor color, SkBlendMode mode = SkBlendMode::kSrcOver)
</pre>
@@ -2888,7 +2884,7 @@ Fill <a href="#Clip">Clip</a> with <a href="undocumented#Color">Color</a> <a hre
<a name="SkCanvas_clear"></a>
## clear
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void clear(SkColor color)
</pre>
@@ -2915,7 +2911,7 @@ This has the effect of replacing all pixels contained by <a href="#Clip">Clip</a
<a name="SkCanvas_discard"></a>
## discard
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void discard()
</pre>
@@ -2923,13 +2919,13 @@ Make <a href="#Canvas">Canvas</a> contents undefined. Subsequent calls that read
such as drawing with <a href="undocumented#SkBlendMode">SkBlendMode</a>, return undefined results. <a href="#SkCanvas_discard">discard</a> does
not change <a href="#Clip">Clip</a> or <a href="#Matrix">Matrix</a>.
-<a href="#SkCanvas_discard">discard</a> may do nothing, depending on the implementation of <a href="undocumented#Surface">Surface</a> or <a href="undocumented#Device">Device</a>
+<a href="#SkCanvas_discard">discard</a> may do nothing, depending on the implementation of <a href="SkSurface_Reference#Surface">Surface</a> or <a href="undocumented#Device">Device</a>
that created <a href="#Canvas">Canvas</a>.
<a href="#SkCanvas_discard">discard</a> allows optimized performance on subsequent draws by removing
-cached data associated with <a href="undocumented#Surface">Surface</a> or <a href="undocumented#Device">Device</a>.
+cached data associated with <a href="SkSurface_Reference#Surface">Surface</a> or <a href="undocumented#Device">Device</a>.
It is not necessary to call <a href="#SkCanvas_discard">discard</a> once done with <a href="#Canvas">Canvas</a>;
-any cached data is deleted when owning <a href="undocumented#Surface">Surface</a> or <a href="undocumented#Device">Device</a> is deleted.
+any cached data is deleted when owning <a href="SkSurface_Reference#Surface">Surface</a> or <a href="undocumented#Device">Device</a> is deleted.
### See Also
@@ -2940,7 +2936,7 @@ any cached data is deleted when owning <a href="undocumented#Surface">Surface</a
<a name="SkCanvas_drawPaint"></a>
## drawPaint
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawPaint(const SkPaint& paint)
</pre>
@@ -2967,7 +2963,7 @@ graphics state used to fill <a href="#Canvas">Canvas</a></td>
## <a name="SkCanvas_PointMode"></a> Enum SkCanvas::PointMode
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#SkCanvas_PointMode">PointMode</a> {
<a href="#SkCanvas_kPoints_PointMode">kPoints PointMode</a>,
<a href="#SkCanvas_kLines_PointMode">kLines PointMode</a>,
@@ -3007,9 +3003,8 @@ The lower left corner shows two lines with a miter when path contains polygon.</
<a name="SkCanvas_drawPoints"></a>
## drawPoints
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawPoints(PointMode mode, size_t count, const SkPoint pts[],
- const SkPaint& paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawPoints(PointMode mode, size_t count, const SkPoint pts[], const SkPaint& paint)
</pre>
Draw <a href="#SkCanvas_drawPoints_pts">pts</a> using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a> and <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawPoints_paint">paint</a>.
@@ -3075,7 +3070,7 @@ the path is drawn all at once.</div></fiddle-embed></div>
<a name="SkCanvas_drawPoint"></a>
## drawPoint
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawPoint(SkScalar x, SkScalar y, const SkPaint& paint)
</pre>
@@ -3108,7 +3103,7 @@ stroke, blend, color, and so on, used to draw</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawPoint(SkPoint p, const SkPaint& paint)
</pre>
@@ -3142,9 +3137,8 @@ stroke, blend, color, and so on, used to draw</td>
<a name="SkCanvas_drawLine"></a>
## drawLine
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawLine(SkScalar x0, SkScalar y0, SkScalar x1, SkScalar y1,
- const SkPaint& paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawLine(SkScalar x0, SkScalar y0, SkScalar x1, SkScalar y1, const SkPaint& paint)
</pre>
Draws line segment from (<a href="#SkCanvas_drawLine_x0">x0</a>, <a href="#SkCanvas_drawLine_y0">y0</a>) to (<a href="#SkCanvas_drawLine_x1">x1</a>, <a href="#SkCanvas_drawLine_y1">y1</a>) using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawLine_paint">paint</a>.
@@ -3177,7 +3171,7 @@ stroke, blend, color, and so on, used to draw</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawLine(SkPoint p0, SkPoint p1, const SkPaint& paint)
</pre>
@@ -3210,7 +3204,7 @@ stroke, blend, color, and so on, used to draw</td>
<a name="SkCanvas_drawRect"></a>
## drawRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawRect(const SkRect& rect, const SkPaint& paint)
</pre>
@@ -3241,7 +3235,7 @@ stroke or fill, blend, color, and so on, used to draw</td>
<a name="SkCanvas_drawIRect"></a>
## drawIRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawIRect(const SkIRect& rect, const SkPaint& paint)
</pre>
@@ -3272,7 +3266,7 @@ stroke or fill, blend, color, and so on, used to draw</td>
<a name="SkCanvas_drawRegion"></a>
## drawRegion
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawRegion(const SkRegion& region, const SkPaint& paint)
</pre>
@@ -3303,7 +3297,7 @@ if stroked, <a href="#Stroke_Width">Paint Stroke Width</a> describes the line th
<a name="SkCanvas_drawOval"></a>
## drawOval
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawOval(const SkRect& oval, const SkPaint& paint)
</pre>
@@ -3333,7 +3327,7 @@ if stroked, <a href="#Stroke_Width">Paint Stroke Width</a> describes the line th
<a name="SkCanvas_drawRRect"></a>
## drawRRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawRRect(const SkRRect& rrect, const SkPaint& paint)
</pre>
@@ -3366,7 +3360,7 @@ may have any combination of positive non-square radii for the four corners.
<a name="SkCanvas_drawDRRect"></a>
## drawDRRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawDRRect(const SkRRect& outer, const SkRRect& inner, const SkPaint& paint)
</pre>
@@ -3378,7 +3372,7 @@ if stroked, <a href="#Stroke_Width">Paint Stroke Width</a> describes the line th
If stroked and <a href="undocumented#Round_Rect">Round Rect</a> corner has zero length radii, <a href="#Stroke_Join">Paint Stroke Join</a> can
draw corners rounded or square.
-<a href="undocumented#GPU_backed">GPU-backed</a> platforms optimize drawing when both <a href="#SkCanvas_drawDRRect_outer">outer</a> and <a href="#SkCanvas_drawDRRect_inner">inner</a> are
+<a href="undocumented#GPU">GPU</a>-backed platforms optimize drawing when both <a href="#SkCanvas_drawDRRect_outer">outer</a> and <a href="#SkCanvas_drawDRRect_inner">inner</a> are
concave and <a href="#SkCanvas_drawDRRect_outer">outer</a> contains <a href="#SkCanvas_drawDRRect_inner">inner</a>. These platforms may not be able to draw
<a href="SkPath_Reference#Path">Path</a> built with identical data as fast.
@@ -3412,7 +3406,7 @@ Stroke join does not affect <a href="#SkCanvas_drawDRRect_inner">inner</a> <a hr
<a name="SkCanvas_drawCircle"></a>
## drawCircle
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawCircle(SkScalar cx, SkScalar cy, SkScalar radius, const SkPaint& paint)
</pre>
@@ -3444,7 +3438,7 @@ half the diameter of <a href="undocumented#Circle">Circle</a></td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawCircle(SkPoint center, SkScalar radius, const SkPaint& paint)
</pre>
@@ -3477,9 +3471,9 @@ half the diameter of <a href="undocumented#Circle">Circle</a></td>
<a name="SkCanvas_drawArc"></a>
## drawArc
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawArc(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle,
- bool useCenter, const SkPaint& paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawArc(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool useCenter,
+ const SkPaint& paint)
</pre>
Draw <a href="undocumented#Arc">Arc</a> using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawArc_paint">paint</a>.
@@ -3528,9 +3522,8 @@ if true, include the center of the <a href="#SkCanvas_drawArc_oval">oval</a></td
<a name="SkCanvas_drawRoundRect"></a>
## drawRoundRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawRoundRect(const SkRect& rect, SkScalar rx, SkScalar ry,
- const SkPaint& paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawRoundRect(const SkRect& rect, SkScalar rx, SkScalar ry, const SkPaint& paint)
</pre>
Draw <a href="undocumented#Round_Rect">Round Rect</a> bounded by <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawRoundRect_rect">rect</a>, with corner radii (<a href="#SkCanvas_drawRoundRect_rx">rx</a>, <a href="#SkCanvas_drawRoundRect_ry">ry</a>) using <a href="#Clip">Clip</a>,
@@ -3572,7 +3565,7 @@ DrawRRect <a href="#SkCanvas_drawRect">drawRect</a> <a href="#SkCanvas_drawDRRec
<a name="SkCanvas_drawPath"></a>
## drawPath
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawPath(const SkPath& path, const SkPaint& paint)
</pre>
@@ -3616,12 +3609,11 @@ a smart pointer as a convenience. The pairs of calls are otherwise identical.
<a name="SkCanvas_drawImage"></a>
## drawImage
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawImage(const SkImage* image, SkScalar left, SkScalar top,
- const SkPaint* paint = nullptr)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawImage(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint = nullptr)
</pre>
-Draw <a href="undocumented#Image">Image</a> <a href="#SkCanvas_drawImage_image">image</a>, with its top-left corner at (<a href="#SkCanvas_drawImage_left">left</a>, <a href="#SkCanvas_drawImage_top">top</a>),
+Draw <a href="SkImage_Reference#Image">Image</a> <a href="#SkCanvas_drawImage_image">image</a>, with its <a href="#SkCanvas_drawImage_top">top</a>-<a href="#SkCanvas_drawImage_left">left</a> corner at (<a href="#SkCanvas_drawImage_left">left</a>, <a href="#SkCanvas_drawImage_top">top</a>),
using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and optional <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawImage_paint">paint</a>.
If <a href="#SkCanvas_drawImage_paint">paint</a> is supplied, apply <a href="undocumented#Color_Filter">Color Filter</a>, <a href="#Alpha">Color Alpha</a>, <a href="undocumented#Image_Filter">Image Filter</a>, <a href="undocumented#Blend_Mode">Blend Mode</a>,
@@ -3655,12 +3647,12 @@ and so on; or nullptr</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawImage(const sk_sp&lt;SkImage&gt;& image, SkScalar left, SkScalar top,
const SkPaint* paint = nullptr)
</pre>
-Draw <a href="undocumented#Image">Image</a> <a href="#SkCanvas_drawImage_2_image">image</a>, with its top-left corner at (<a href="#SkCanvas_drawImage_2_left">left</a>, <a href="#SkCanvas_drawImage_2_top">top</a>),
+Draw <a href="SkImage_Reference#Image">Image</a> <a href="#SkCanvas_drawImage_2_image">image</a>, with its <a href="#SkCanvas_drawImage_2_top">top</a>-<a href="#SkCanvas_drawImage_2_left">left</a> corner at (<a href="#SkCanvas_drawImage_2_left">left</a>, <a href="#SkCanvas_drawImage_2_top">top</a>),
using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and optional <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawImage_2_paint">paint</a>.
If <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawImage_2_paint">paint</a> is supplied, apply <a href="undocumented#Color_Filter">Color Filter</a>, <a href="#Alpha">Color Alpha</a>, <a href="undocumented#Image_Filter">Image Filter</a>,
@@ -3696,7 +3688,7 @@ and so on; or nullptr</td>
## <a name="SkCanvas_SrcRectConstraint"></a> Enum SkCanvas::SrcRectConstraint
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#SkCanvas_SrcRectConstraint">SrcRectConstraint</a> {
<a href="#SkCanvas_kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a>,
<a href="#SkCanvas_kFast_SrcRectConstraint">kFast SrcRectConstraint</a>,
@@ -3740,13 +3732,12 @@ Drawing the checkerboard with <a href="#SkCanvas_kFast_SrcRectConstraint">kFast
<a name="SkCanvas_drawImageRect"></a>
## drawImageRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawImageRect(const SkImage* image, const SkRect& src, const SkRect& dst,
- const SkPaint* paint,
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawImageRect(const SkImage* image, const SkRect& src, const SkRect& dst, const SkPaint* paint,
SrcRectConstraint constraint = kStrict_SrcRectConstraint)
</pre>
-Draw <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageRect_src">src</a> of <a href="undocumented#Image">Image</a> <a href="#SkCanvas_drawImageRect_image">image</a>, scaled and translated to fill <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageRect_dst">dst</a>.
+Draw <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageRect_src">src</a> of <a href="SkImage_Reference#Image">Image</a> <a href="#SkCanvas_drawImageRect_image">image</a>, scaled and translated to fill <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageRect_dst">dst</a>.
Additionally transform draw using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and optional <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawImageRect_paint">paint</a>.
If <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawImageRect_paint">paint</a> is supplied, apply <a href="undocumented#Color_Filter">Color Filter</a>, <a href="#Alpha">Color Alpha</a>, <a href="undocumented#Image_Filter">Image Filter</a>,
@@ -3764,7 +3755,7 @@ improve performance.
### Parameters
<table> <tr> <td><a name="SkCanvas_drawImageRect_image"> <code><strong>image </strong></code> </a></td> <td>
-<a href="undocumented#Image">Image</a> containing pixels, dimensions, and format</td>
+<a href="SkImage_Reference#Image">Image</a> containing pixels, dimensions, and format</td>
</tr> <tr> <td><a name="SkCanvas_drawImageRect_src"> <code><strong>src </strong></code> </a></td> <td>
source <a href="SkRect_Reference#Rect">Rect</a> of <a href="#SkCanvas_drawImageRect_image">image</a> to draw from</td>
</tr> <tr> <td><a name="SkCanvas_drawImageRect_dst"> <code><strong>dst </strong></code> </a></td> <td>
@@ -3791,13 +3782,12 @@ with <a href="#SkCanvas_kFast_SrcRectConstraint">kFast SrcRectConstraint</a> red
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawImageRect(const SkImage* image, const SkIRect& isrc, const SkRect& dst,
- const SkPaint* paint,
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawImageRect(const SkImage* image, const SkIRect& isrc, const SkRect& dst, const SkPaint* paint,
SrcRectConstraint constraint = kStrict_SrcRectConstraint)
</pre>
-Draw <a href="SkIRect_Reference#IRect">IRect</a> <a href="#SkCanvas_drawImageRect_2_isrc">isrc</a> of <a href="undocumented#Image">Image</a> <a href="#SkCanvas_drawImageRect_2_image">image</a>, scaled and translated to fill <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageRect_2_dst">dst</a>.
+Draw <a href="SkIRect_Reference#IRect">IRect</a> <a href="#SkCanvas_drawImageRect_2_isrc">isrc</a> of <a href="SkImage_Reference#Image">Image</a> <a href="#SkCanvas_drawImageRect_2_image">image</a>, scaled and translated to fill <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageRect_2_dst">dst</a>.
Note that <a href="#SkCanvas_drawImageRect_2_isrc">isrc</a> is on integer pixel boundaries; <a href="#SkCanvas_drawImageRect_2_dst">dst</a> may include fractional
boundaries. Additionally transform draw using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and optional <a href="SkPaint_Reference#Paint">Paint</a>
<a href="#SkCanvas_drawImageRect_2_paint">paint</a>.
@@ -3817,7 +3807,7 @@ improve performance.
### Parameters
<table> <tr> <td><a name="SkCanvas_drawImageRect_2_image"> <code><strong>image </strong></code> </a></td> <td>
-<a href="undocumented#Image">Image</a> containing pixels, dimensions, and format</td>
+<a href="SkImage_Reference#Image">Image</a> containing pixels, dimensions, and format</td>
</tr> <tr> <td><a name="SkCanvas_drawImageRect_2_isrc"> <code><strong>isrc </strong></code> </a></td> <td>
source <a href="SkIRect_Reference#IRect">IRect</a> of <a href="#SkCanvas_drawImageRect_2_image">image</a> to draw from</td>
</tr> <tr> <td><a name="SkCanvas_drawImageRect_2_dst"> <code><strong>dst </strong></code> </a></td> <td>
@@ -3840,12 +3830,12 @@ filter strictly within <a href="#SkCanvas_drawImageRect_2_isrc">isrc</a> or draw
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawImageRect(const SkImage* image, const SkRect& dst, const SkPaint* paint,
SrcRectConstraint constraint = kStrict_SrcRectConstraint)
</pre>
-Draw <a href="undocumented#Image">Image</a> <a href="#SkCanvas_drawImageRect_3_image">image</a>, scaled and translated to fill <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageRect_3_dst">dst</a>, using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>,
+Draw <a href="SkImage_Reference#Image">Image</a> <a href="#SkCanvas_drawImageRect_3_image">image</a>, scaled and translated to fill <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageRect_3_dst">dst</a>, using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>,
and optional <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawImageRect_3_paint">paint</a>.
If <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawImageRect_3_paint">paint</a> is supplied, apply <a href="undocumented#Color_Filter">Color Filter</a>, <a href="#Alpha">Color Alpha</a>, <a href="undocumented#Image_Filter">Image Filter</a>,
@@ -3863,7 +3853,7 @@ improve performance.
### Parameters
<table> <tr> <td><a name="SkCanvas_drawImageRect_3_image"> <code><strong>image </strong></code> </a></td> <td>
-<a href="undocumented#Image">Image</a> containing pixels, dimensions, and format</td>
+<a href="SkImage_Reference#Image">Image</a> containing pixels, dimensions, and format</td>
</tr> <tr> <td><a name="SkCanvas_drawImageRect_3_dst"> <code><strong>dst </strong></code> </a></td> <td>
destination <a href="SkRect_Reference#Rect">Rect</a> of <a href="#SkCanvas_drawImageRect_3_image">image</a> to draw to</td>
</tr> <tr> <td><a name="SkCanvas_drawImageRect_3_paint"> <code><strong>paint </strong></code> </a></td> <td>
@@ -3884,13 +3874,12 @@ filter strictly within <a href="#SkCanvas_drawImageRect_3_image">image</a> or dr
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawImageRect(const sk_sp&lt;SkImage&gt;& image, const SkRect& src,
- const SkRect& dst, const SkPaint* paint,
- SrcRectConstraint constraint = kStrict_SrcRectConstraint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawImageRect(const sk_sp&lt;SkImage&gt;& image, const SkRect& src, const SkRect& dst,
+ const SkPaint* paint, SrcRectConstraint constraint = kStrict_SrcRectConstraint)
</pre>
-Draw <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageRect_4_src">src</a> of <a href="undocumented#Image">Image</a> <a href="#SkCanvas_drawImageRect_4_image">image</a>, scaled and translated to fill <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageRect_4_dst">dst</a>.
+Draw <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageRect_4_src">src</a> of <a href="SkImage_Reference#Image">Image</a> <a href="#SkCanvas_drawImageRect_4_image">image</a>, scaled and translated to fill <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageRect_4_dst">dst</a>.
Additionally transform draw using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and optional <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawImageRect_4_paint">paint</a>.
If <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawImageRect_4_paint">paint</a> is supplied, apply <a href="undocumented#Color_Filter">Color Filter</a>, <a href="#Alpha">Color Alpha</a>, <a href="undocumented#Image_Filter">Image Filter</a>,
@@ -3908,7 +3897,7 @@ improve performance.
### Parameters
<table> <tr> <td><a name="SkCanvas_drawImageRect_4_image"> <code><strong>image </strong></code> </a></td> <td>
-<a href="undocumented#Image">Image</a> containing pixels, dimensions, and format</td>
+<a href="SkImage_Reference#Image">Image</a> containing pixels, dimensions, and format</td>
</tr> <tr> <td><a name="SkCanvas_drawImageRect_4_src"> <code><strong>src </strong></code> </a></td> <td>
source <a href="SkRect_Reference#Rect">Rect</a> of <a href="#SkCanvas_drawImageRect_4_image">image</a> to draw from</td>
</tr> <tr> <td><a name="SkCanvas_drawImageRect_4_dst"> <code><strong>dst </strong></code> </a></td> <td>
@@ -3932,13 +3921,12 @@ The two matrices are concatenated to create the final transformation.</div></fid
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawImageRect(const sk_sp&lt;SkImage&gt;& image, const SkIRect& isrc,
- const SkRect& dst, const SkPaint* paint,
- SrcRectConstraint constraint = kStrict_SrcRectConstraint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawImageRect(const sk_sp&lt;SkImage&gt;& image, const SkIRect& isrc, const SkRect& dst,
+ const SkPaint* paint, SrcRectConstraint constraint = kStrict_SrcRectConstraint)
</pre>
-Draw <a href="SkIRect_Reference#IRect">IRect</a> <a href="#SkCanvas_drawImageRect_5_isrc">isrc</a> of <a href="undocumented#Image">Image</a> <a href="#SkCanvas_drawImageRect_5_image">image</a>, scaled and translated to fill <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageRect_5_dst">dst</a>.
+Draw <a href="SkIRect_Reference#IRect">IRect</a> <a href="#SkCanvas_drawImageRect_5_isrc">isrc</a> of <a href="SkImage_Reference#Image">Image</a> <a href="#SkCanvas_drawImageRect_5_image">image</a>, scaled and translated to fill <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageRect_5_dst">dst</a>.
<a href="#SkCanvas_drawImageRect_5_isrc">isrc</a> is on integer pixel boundaries; <a href="#SkCanvas_drawImageRect_5_dst">dst</a> may include fractional boundaries.
Additionally transform draw using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and optional <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawImageRect_5_paint">paint</a>.
@@ -3957,7 +3945,7 @@ improve performance.
### Parameters
<table> <tr> <td><a name="SkCanvas_drawImageRect_5_image"> <code><strong>image </strong></code> </a></td> <td>
-<a href="undocumented#Image">Image</a> containing pixels, dimensions, and format</td>
+<a href="SkImage_Reference#Image">Image</a> containing pixels, dimensions, and format</td>
</tr> <tr> <td><a name="SkCanvas_drawImageRect_5_isrc"> <code><strong>isrc </strong></code> </a></td> <td>
source <a href="SkIRect_Reference#IRect">IRect</a> of <a href="#SkCanvas_drawImageRect_5_image">image</a> to draw from</td>
</tr> <tr> <td><a name="SkCanvas_drawImageRect_5_dst"> <code><strong>dst </strong></code> </a></td> <td>
@@ -3980,13 +3968,12 @@ filter strictly within <a href="#SkCanvas_drawImageRect_5_image">image</a> or dr
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawImageRect(const sk_sp&lt;SkImage&gt;& image, const SkRect& dst,
- const SkPaint* paint,
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawImageRect(const sk_sp&lt;SkImage&gt;& image, const SkRect& dst, const SkPaint* paint,
SrcRectConstraint constraint = kStrict_SrcRectConstraint)
</pre>
-Draw <a href="undocumented#Image">Image</a> <a href="#SkCanvas_drawImageRect_6_image">image</a>, scaled and translated to fill <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageRect_6_dst">dst</a>,
+Draw <a href="SkImage_Reference#Image">Image</a> <a href="#SkCanvas_drawImageRect_6_image">image</a>, scaled and translated to fill <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageRect_6_dst">dst</a>,
using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and optional <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawImageRect_6_paint">paint</a>.
If <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawImageRect_6_paint">paint</a> is supplied, apply <a href="undocumented#Color_Filter">Color Filter</a>, <a href="#Alpha">Color Alpha</a>, <a href="undocumented#Image_Filter">Image Filter</a>,
@@ -4004,7 +3991,7 @@ improve performance.
### Parameters
<table> <tr> <td><a name="SkCanvas_drawImageRect_6_image"> <code><strong>image </strong></code> </a></td> <td>
-<a href="undocumented#Image">Image</a> containing pixels, dimensions, and format</td>
+<a href="SkImage_Reference#Image">Image</a> containing pixels, dimensions, and format</td>
</tr> <tr> <td><a name="SkCanvas_drawImageRect_6_dst"> <code><strong>dst </strong></code> </a></td> <td>
destination <a href="SkRect_Reference#Rect">Rect</a> of <a href="#SkCanvas_drawImageRect_6_image">image</a> to draw to</td>
</tr> <tr> <td><a name="SkCanvas_drawImageRect_6_paint"> <code><strong>paint </strong></code> </a></td> <td>
@@ -4028,12 +4015,12 @@ filter strictly within <a href="#SkCanvas_drawImageRect_6_image">image</a> or dr
<a name="SkCanvas_drawImageNine"></a>
## drawImageNine
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawImageNine(const SkImage* image, const SkIRect& center,
- const SkRect& dst, const SkPaint* paint = nullptr)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawImageNine(const SkImage* image, const SkIRect& center, const SkRect& dst,
+ const SkPaint* paint = nullptr)
</pre>
-Draw <a href="undocumented#Image">Image</a> <a href="#SkCanvas_drawImageNine_image">image</a> stretched proportionally to fit into <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageNine_dst">dst</a>.
+Draw <a href="SkImage_Reference#Image">Image</a> <a href="#SkCanvas_drawImageNine_image">image</a> stretched proportionally to fit into <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageNine_dst">dst</a>.
<a href="SkIRect_Reference#IRect">IRect</a> <a href="#SkCanvas_drawImageNine_center">center</a> divides the <a href="#SkCanvas_drawImageNine_image">image</a> into nine sections: four sides, four corners, and
the <a href="#SkCanvas_drawImageNine_center">center</a>. Corners are unmodified or scaled down proportionately if their sides
are larger than <a href="#SkCanvas_drawImageNine_dst">dst</a>; <a href="#SkCanvas_drawImageNine_center">center</a> and four sides are scaled to fit remaining space, if any.
@@ -4051,7 +4038,7 @@ replicates the <a href="#SkCanvas_drawImageNine_image">image</a> edge color when
### Parameters
<table> <tr> <td><a name="SkCanvas_drawImageNine_image"> <code><strong>image </strong></code> </a></td> <td>
-<a href="undocumented#Image">Image</a> containing pixels, dimensions, and format</td>
+<a href="SkImage_Reference#Image">Image</a> containing pixels, dimensions, and format</td>
</tr> <tr> <td><a name="SkCanvas_drawImageNine_center"> <code><strong>center </strong></code> </a></td> <td>
<a href="SkIRect_Reference#IRect">IRect</a> edge of <a href="#SkCanvas_drawImageNine_image">image</a> corners and sides</td>
</tr> <tr> <td><a name="SkCanvas_drawImageNine_dst"> <code><strong>dst </strong></code> </a></td> <td>
@@ -4075,12 +4062,12 @@ The sides and <a href="#SkCanvas_drawImageNine_center">center</a> are scaled if
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawImageNine(const sk_sp&lt;SkImage&gt;& image, const SkIRect& center,
- const SkRect& dst, const SkPaint* paint = nullptr)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawImageNine(const sk_sp&lt;SkImage&gt;& image, const SkIRect& center, const SkRect& dst,
+ const SkPaint* paint = nullptr)
</pre>
-Draw <a href="undocumented#Image">Image</a> <a href="#SkCanvas_drawImageNine_2_image">image</a> stretched proportionally to fit into <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageNine_2_dst">dst</a>.
+Draw <a href="SkImage_Reference#Image">Image</a> <a href="#SkCanvas_drawImageNine_2_image">image</a> stretched proportionally to fit into <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageNine_2_dst">dst</a>.
<a href="SkIRect_Reference#IRect">IRect</a> <a href="#SkCanvas_drawImageNine_2_center">center</a> divides the <a href="#SkCanvas_drawImageNine_2_image">image</a> into nine sections: four sides, four corners, and
the <a href="#SkCanvas_drawImageNine_2_center">center</a>. Corners are not scaled, or scaled down proportionately if their sides
are larger than <a href="#SkCanvas_drawImageNine_2_dst">dst</a>; <a href="#SkCanvas_drawImageNine_2_center">center</a> and four sides are scaled to fit remaining space, if any.
@@ -4098,7 +4085,7 @@ replicates the <a href="#SkCanvas_drawImageNine_2_image">image</a> edge color wh
### Parameters
<table> <tr> <td><a name="SkCanvas_drawImageNine_2_image"> <code><strong>image </strong></code> </a></td> <td>
-<a href="undocumented#Image">Image</a> containing pixels, dimensions, and format</td>
+<a href="SkImage_Reference#Image">Image</a> containing pixels, dimensions, and format</td>
</tr> <tr> <td><a name="SkCanvas_drawImageNine_2_center"> <code><strong>center </strong></code> </a></td> <td>
<a href="SkIRect_Reference#IRect">IRect</a> edge of <a href="#SkCanvas_drawImageNine_2_image">image</a> corners and sides</td>
</tr> <tr> <td><a name="SkCanvas_drawImageNine_2_dst"> <code><strong>dst </strong></code> </a></td> <td>
@@ -4127,15 +4114,14 @@ and below <a href="#SkCanvas_drawImageNine_2_center">center</a> to fill the rema
<a name="SkCanvas_drawBitmap"></a>
## drawBitmap
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top,
- const SkPaint* paint = nullptr)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, const SkPaint* paint = nullptr)
</pre>
-Draw <a href="SkBitmap_Reference#Bitmap">Bitmap</a> <a href="#SkCanvas_drawBitmap_bitmap">bitmap</a>, with its top-left corner at (<a href="#SkCanvas_drawBitmap_left">left</a>, <a href="#SkCanvas_drawBitmap_top">top</a>),
+Draw <a href="SkBitmap_Reference#Bitmap">Bitmap</a> <a href="#SkCanvas_drawBitmap_bitmap">bitmap</a>, with its <a href="#SkCanvas_drawBitmap_top">top</a>-<a href="#SkCanvas_drawBitmap_left">left</a> corner at (<a href="#SkCanvas_drawBitmap_left">left</a>, <a href="#SkCanvas_drawBitmap_top">top</a>),
using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and optional <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawBitmap_paint">paint</a>.
-If <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawBitmap_paint">paint</a> is supplied, apply <a href="undocumented#Color_Filter">Color Filter</a>, <a href="#Alpha">Color Alpha</a>, <a href="undocumented#Image_Filter">Image Filter</a>,
+If <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawBitmap_paint">paint</a> is not nullptr, apply <a href="undocumented#Color_Filter">Color Filter</a>, <a href="#Alpha">Color Alpha</a>, <a href="undocumented#Image_Filter">Image Filter</a>,
<a href="undocumented#Blend_Mode">Blend Mode</a>, and <a href="undocumented#Draw_Looper">Draw Looper</a>. If <a href="#SkCanvas_drawBitmap_bitmap">bitmap</a> is <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>, apply <a href="undocumented#Shader">Shader</a>.
If <a href="#SkCanvas_drawBitmap_paint">paint</a> contains <a href="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <a href="#SkCanvas_drawBitmap_bitmap">bitmap</a> bounds.
@@ -4171,10 +4157,9 @@ and so on; or nullptr</td>
<a name="SkCanvas_drawBitmapRect"></a>
## drawBitmapRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawBitmapRect(const SkBitmap& bitmap, const SkRect& src, const SkRect& dst,
- const SkPaint* paint,
- SrcRectConstraint constraint = kStrict_SrcRectConstraint)
+ const SkPaint* paint, SrcRectConstraint constraint = kStrict_SrcRectConstraint)
</pre>
Draw <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawBitmapRect_src">src</a> of <a href="SkBitmap_Reference#Bitmap">Bitmap</a> <a href="#SkCanvas_drawBitmapRect_bitmap">bitmap</a>, scaled and translated to fill <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawBitmapRect_dst">dst</a>.
@@ -4219,10 +4204,9 @@ filter strictly within <a href="#SkCanvas_drawBitmapRect_src">src</a> or draw fa
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawBitmapRect(const SkBitmap& bitmap, const SkIRect& isrc,
- const SkRect& dst, const SkPaint* paint,
- SrcRectConstraint constraint = kStrict_SrcRectConstraint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawBitmapRect(const SkBitmap& bitmap, const SkIRect& isrc, const SkRect& dst,
+ const SkPaint* paint, SrcRectConstraint constraint = kStrict_SrcRectConstraint)
</pre>
Draw <a href="SkIRect_Reference#IRect">IRect</a> <a href="#SkCanvas_drawBitmapRect_2_isrc">isrc</a> of <a href="SkBitmap_Reference#Bitmap">Bitmap</a> <a href="#SkCanvas_drawBitmapRect_2_bitmap">bitmap</a>, scaled and translated to fill <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawBitmapRect_2_dst">dst</a>.
@@ -4268,9 +4252,8 @@ sample strictly within <a href="#SkCanvas_drawBitmapRect_2_isrc">isrc</a>, or dr
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawBitmapRect(const SkBitmap& bitmap, const SkRect& dst,
- const SkPaint* paint,
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawBitmapRect(const SkBitmap& bitmap, const SkRect& dst, const SkPaint* paint,
SrcRectConstraint constraint = kStrict_SrcRectConstraint)
</pre>
@@ -4318,9 +4301,9 @@ filter strictly within <a href="#SkCanvas_drawBitmapRect_3_bitmap">bitmap</a> or
<a name="SkCanvas_drawBitmapNine"></a>
## drawBitmapNine
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
- const SkRect& dst, const SkPaint* paint = nullptr)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, const SkRect& dst,
+ const SkPaint* paint = nullptr)
</pre>
Draw <a href="SkBitmap_Reference#Bitmap">Bitmap</a> <a href="#SkCanvas_drawBitmapNine_bitmap">bitmap</a> stretched proportionally to fit into <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawBitmapNine_dst">dst</a>.
@@ -4371,7 +4354,7 @@ and below <a href="#SkCanvas_drawBitmapNine_center">center</a> to fill the remai
# <a name="SkCanvas_Lattice"></a> Struct SkCanvas::Lattice
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
struct <a href="#SkCanvas_Lattice">Lattice</a> {
enum <a href="#SkCanvas_Lattice_Flags">Flags</a> {...
@@ -4383,7 +4366,7 @@ int <a href="#SkCanvas_Lattice_fYCount">fYCount</a>;
const <a href="SkIRect_Reference#SkIRect">SkIRect</a>* <a href="#SkCanvas_Lattice_fBounds">fBounds</a>;
};</pre>
-<a href="#SkCanvas_Lattice">Lattice</a> divides <a href="SkBitmap_Reference#Bitmap">Bitmap</a> or <a href="undocumented#Image">Image</a> into a rectangular grid.
+<a href="#SkCanvas_Lattice">Lattice</a> divides <a href="SkBitmap_Reference#Bitmap">Bitmap</a> or <a href="SkImage_Reference#Image">Image</a> into a rectangular grid.
Grid entries on even columns and even rows are fixed; these entries are
always drawn at their original size if the destination is large enough.
If the destination side is too small to hold the fixed entries, all fixed
@@ -4393,7 +4376,7 @@ remaining space, if any.
## <a name="SkCanvas_Lattice_Flags"></a> Enum SkCanvas::Lattice::Flags
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#SkCanvas_Lattice_Flags">Flags</a> : uint8_t {
<a href="#SkCanvas_Lattice_kTransparent_Flags">kTransparent Flags</a> = 1 << 0,
};</pre>
@@ -4446,14 +4429,14 @@ divisions.
<a name="SkCanvas_Lattice_fBounds"> <code><strong>const SkIRect* fBounds</strong></code> </a>
Optional subset <a href="SkIRect_Reference#IRect">IRect</a> source to draw from.
-If nullptr, source bounds is dimensions of <a href="SkBitmap_Reference#Bitmap">Bitmap</a> or <a href="undocumented#Image">Image</a>.
+If nullptr, source bounds is dimensions of <a href="SkBitmap_Reference#Bitmap">Bitmap</a> or <a href="SkImage_Reference#Image">Image</a>.
<a name="SkCanvas_drawBitmapLattice"></a>
## drawBitmapLattice
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawBitmapLattice(const SkBitmap& bitmap, const Lattice& lattice,
- const SkRect& dst, const SkPaint* paint = nullptr)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawBitmapLattice(const SkBitmap& bitmap, const Lattice& lattice, const SkRect& dst,
+ const SkPaint* paint = nullptr)
</pre>
Draw <a href="SkBitmap_Reference#Bitmap">Bitmap</a> <a href="#SkCanvas_drawBitmapLattice_bitmap">bitmap</a> stretched proportionally to fit into <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawBitmapLattice_dst">dst</a>.
@@ -4507,12 +4490,12 @@ and below center to fill the remaining space.</div></fiddle-embed></div>
<a name="SkCanvas_drawImageLattice"></a>
## drawImageLattice
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawImageLattice(const SkImage* image, const Lattice& lattice,
- const SkRect& dst, const SkPaint* paint = nullptr)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawImageLattice(const SkImage* image, const Lattice& lattice, const SkRect& dst,
+ const SkPaint* paint = nullptr)
</pre>
-Draw <a href="undocumented#Image">Image</a> <a href="#SkCanvas_drawImageLattice_image">image</a> stretched proportionally to fit into <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageLattice_dst">dst</a>.
+Draw <a href="SkImage_Reference#Image">Image</a> <a href="#SkCanvas_drawImageLattice_image">image</a> stretched proportionally to fit into <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawImageLattice_dst">dst</a>.
<a href="#SkCanvas_Lattice">Lattice</a> <a href="#SkCanvas_drawImageLattice_lattice">lattice</a> divides <a href="#SkCanvas_drawImageLattice_image">image</a> into a rectangular grid.
Each intersection of an even-numbered row and column is fixed; like the corners
@@ -4534,7 +4517,7 @@ outside of its bounds.
### Parameters
<table> <tr> <td><a name="SkCanvas_drawImageLattice_image"> <code><strong>image </strong></code> </a></td> <td>
-<a href="undocumented#Image">Image</a> containing pixels, dimensions, and format</td>
+<a href="SkImage_Reference#Image">Image</a> containing pixels, dimensions, and format</td>
</tr> <tr> <td><a name="SkCanvas_drawImageLattice_lattice"> <code><strong>lattice </strong></code> </a></td> <td>
division of bitmap into fixed and variable rectangles</td>
</tr> <tr> <td><a name="SkCanvas_drawImageLattice_dst"> <code><strong>dst </strong></code> </a></td> <td>
@@ -4561,15 +4544,14 @@ are scaled if needed to take up the remaining space; the center is transparent.<
<a name="SkCanvas_drawText"></a>
## drawText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
- const SkPaint& paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, const SkPaint& paint)
</pre>
Draw <a href="#SkCanvas_drawText_text">text</a>, with origin at (<a href="#SkCanvas_drawText_x">x</a>, <a href="#SkCanvas_drawText_y">y</a>), using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawText_paint">paint</a>.
<a href="#SkCanvas_drawText_text">text</a> meaning depends on <a href="#Text_Encoding">Paint Text Encoding</a>; by default, <a href="#SkCanvas_drawText_text">text</a> is encoded as
-<a href="undocumented#UTF_8">UTF-8</a>.
+UTF-8.
<a href="#SkCanvas_drawText_x">x</a> and <a href="#SkCanvas_drawText_y">y</a> meaning depends on <a href="#Text_Align">Paint Text Align</a> and <a href="#Vertical_Text">Paint Vertical Text</a>; by default
<a href="#SkCanvas_drawText_text">text</a> draws left to right, positioning the first glyph left side bearing at <a href="#SkCanvas_drawText_x">x</a>
@@ -4586,9 +4568,9 @@ character code points or <a href="#Glyph">Glyphs</a> drawn</td>
</tr> <tr> <td><a name="SkCanvas_drawText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
byte length of <a href="#SkCanvas_drawText_text">text</a> array</td>
</tr> <tr> <td><a name="SkCanvas_drawText_x"> <code><strong>x </strong></code> </a></td> <td>
-start of <a href="#SkCanvas_drawText_text">text</a> on x-axis</td>
+start of <a href="#SkCanvas_drawText_text">text</a> on <a href="#SkCanvas_drawText_x">x</a>-axis</td>
</tr> <tr> <td><a name="SkCanvas_drawText_y"> <code><strong>y </strong></code> </a></td> <td>
-start of <a href="#SkCanvas_drawText_text">text</a> on y-axis</td>
+start of <a href="#SkCanvas_drawText_text">text</a> on <a href="#SkCanvas_drawText_y">y</a>-axis</td>
</tr> <tr> <td><a name="SkCanvas_drawText_paint"> <code><strong>paint </strong></code> </a></td> <td>
<a href="#SkCanvas_drawText_text">text</a> size, blend, color, and so on, used to draw</td>
</tr>
@@ -4608,7 +4590,7 @@ start of <a href="#SkCanvas_drawText_text">text</a> on y-axis</td>
<a name="SkCanvas_drawString"></a>
## drawString
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawString(const char* string, SkScalar x, SkScalar y, const SkPaint& paint)
</pre>
@@ -4616,7 +4598,7 @@ Draw null terminated <a href="#SkCanvas_drawString_string">string</a>, with orig
<a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawString_paint">paint</a>.
<a href="#SkCanvas_drawString_string">string</a> meaning depends on <a href="#Text_Encoding">Paint Text Encoding</a>; by default, strings are encoded
-as <a href="undocumented#UTF_8">UTF-8</a>. Other values of <a href="#Text_Encoding">Paint Text Encoding</a> are unlikely to produce the desired
+as UTF-8. Other values of <a href="#Text_Encoding">Paint Text Encoding</a> are unlikely to produce the desired
results, since zero bytes may be embedded in the <a href="#SkCanvas_drawString_string">string</a>.
<a href="#SkCanvas_drawString_x">x</a> and <a href="#SkCanvas_drawString_y">y</a> meaning depends on <a href="#Text_Align">Paint Text Align</a> and <a href="#Vertical_Text">Paint Vertical Text</a>; by default
@@ -4633,9 +4615,9 @@ filled 12 point black <a href="#Glyph">Glyphs</a>.
character code points or <a href="#Glyph">Glyphs</a> drawn,
ending with a char value of zero</td>
</tr> <tr> <td><a name="SkCanvas_drawString_x"> <code><strong>x </strong></code> </a></td> <td>
-start of <a href="#SkCanvas_drawString_string">string</a> on x-axis</td>
+start of <a href="#SkCanvas_drawString_string">string</a> on <a href="#SkCanvas_drawString_x">x</a>-axis</td>
</tr> <tr> <td><a name="SkCanvas_drawString_y"> <code><strong>y </strong></code> </a></td> <td>
-start of <a href="#SkCanvas_drawString_string">string</a> on y-axis</td>
+start of <a href="#SkCanvas_drawString_string">string</a> on <a href="#SkCanvas_drawString_y">y</a>-axis</td>
</tr> <tr> <td><a name="SkCanvas_drawString_paint"> <code><strong>paint </strong></code> </a></td> <td>
text size, blend, color, and so on, used to draw</td>
</tr>
@@ -4651,16 +4633,15 @@ text size, blend, color, and so on, used to draw</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawString(const SkString& string, SkScalar x, SkScalar y,
- const SkPaint& paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawString(const SkString& string, SkScalar x, SkScalar y, const SkPaint& paint)
</pre>
Draw null terminated <a href="#SkCanvas_drawString_2_string">string</a>, with origin at (<a href="#SkCanvas_drawString_2_x">x</a>, <a href="#SkCanvas_drawString_2_y">y</a>), using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and
<a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawString_2_paint">paint</a>.
<a href="#SkCanvas_drawString_2_string">string</a> meaning depends on <a href="#Text_Encoding">Paint Text Encoding</a>; by default, strings are encoded
-as <a href="undocumented#UTF_8">UTF-8</a>. Other values of <a href="#Text_Encoding">Paint Text Encoding</a> are unlikely to produce the desired
+as UTF-8. Other values of <a href="#Text_Encoding">Paint Text Encoding</a> are unlikely to produce the desired
results, since zero bytes may be embedded in the <a href="#SkCanvas_drawString_2_string">string</a>.
<a href="#SkCanvas_drawString_2_x">x</a> and <a href="#SkCanvas_drawString_2_y">y</a> meaning depends on <a href="#Text_Align">Paint Text Align</a> and <a href="#Vertical_Text">Paint Vertical Text</a>; by default
@@ -4677,9 +4658,9 @@ filled 12 point black <a href="#Glyph">Glyphs</a>.
character code points or <a href="#Glyph">Glyphs</a> drawn,
ending with a char value of zero</td>
</tr> <tr> <td><a name="SkCanvas_drawString_2_x"> <code><strong>x </strong></code> </a></td> <td>
-start of <a href="#SkCanvas_drawString_2_string">string</a> on x-axis</td>
+start of <a href="#SkCanvas_drawString_2_string">string</a> on <a href="#SkCanvas_drawString_2_x">x</a>-axis</td>
</tr> <tr> <td><a name="SkCanvas_drawString_2_y"> <code><strong>y </strong></code> </a></td> <td>
-start of <a href="#SkCanvas_drawString_2_string">string</a> on y-axis</td>
+start of <a href="#SkCanvas_drawString_2_string">string</a> on <a href="#SkCanvas_drawString_2_y">y</a>-axis</td>
</tr> <tr> <td><a name="SkCanvas_drawString_2_paint"> <code><strong>paint </strong></code> </a></td> <td>
text size, blend, color, and so on, used to draw</td>
</tr>
@@ -4698,9 +4679,8 @@ text size, blend, color, and so on, used to draw</td>
<a name="SkCanvas_drawPosText"></a>
## drawPosText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawPosText(const void* text, size_t byteLength, const SkPoint pos[],
- const SkPaint& paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawPosText(const void* text, size_t byteLength, const SkPoint pos[], const SkPaint& paint)
</pre>
Draw each glyph in <a href="#SkCanvas_drawPosText_text">text</a> with the origin in <a href="#SkCanvas_drawPosText_pos">pos</a> array, using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and
@@ -4708,7 +4688,7 @@ Draw each glyph in <a href="#SkCanvas_drawPosText_text">text</a> with the origin
described by <a href="#SkCanvas_drawPosText_byteLength">byteLength</a> of <a href="#SkCanvas_drawPosText_text">text</a>.
<a href="#SkCanvas_drawPosText_text">text</a> meaning depends on <a href="#Text_Encoding">Paint Text Encoding</a>; by default, <a href="#SkCanvas_drawPosText_text">text</a> is encoded as
-<a href="undocumented#UTF_8">UTF-8</a>. <a href="#SkCanvas_drawPosText_pos">pos</a> elements' meaning depends on <a href="#Text_Align">Paint Text Align</a> and <a href="#Vertical_Text">Paint Vertical Text</a>;
+UTF-8. <a href="#SkCanvas_drawPosText_pos">pos</a> elements' meaning depends on <a href="#Text_Align">Paint Text Align</a> and <a href="#Vertical_Text">Paint Vertical Text</a>;
by default each glyph left side bearing is positioned at x and its
baseline is positioned at y. <a href="undocumented#Text">Text</a> size is affected by <a href="#Matrix">Matrix</a> and
<a href="#Text_Size">Paint Text Size</a>.
@@ -4746,9 +4726,9 @@ array of glyph origins</td>
<a name="SkCanvas_drawPosTextH"></a>
## drawPosTextH
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[],
- SkScalar constY, const SkPaint& paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[], SkScalar constY,
+ const SkPaint& paint)
</pre>
Draw each glyph in <a href="#SkCanvas_drawPosTextH_text">text</a> with its (x, y) origin composed from <a href="#SkCanvas_drawPosTextH_xpos">xpos</a> array and
@@ -4756,7 +4736,7 @@ Draw each glyph in <a href="#SkCanvas_drawPosTextH_text">text</a> with its (x, y
must match the number of <a href="#Glyph">Glyphs</a> described by <a href="#SkCanvas_drawPosTextH_byteLength">byteLength</a> of <a href="#SkCanvas_drawPosTextH_text">text</a>.
<a href="#SkCanvas_drawPosTextH_text">text</a> meaning depends on <a href="#Text_Encoding">Paint Text Encoding</a>; by default, <a href="#SkCanvas_drawPosTextH_text">text</a> is encoded as
-<a href="undocumented#UTF_8">UTF-8</a>. <a href="#SkCanvas_drawPosTextH_xpos">xpos</a> elements' meaning depends on <a href="#Text_Align">Paint Text Align</a> and <a href="#Vertical_Text">Paint Vertical Text</a>;
+UTF-8. <a href="#SkCanvas_drawPosTextH_xpos">xpos</a> elements' meaning depends on <a href="#Text_Align">Paint Text Align</a> and <a href="#Vertical_Text">Paint Vertical Text</a>;
by default each glyph left side bearing is positioned at an <a href="#SkCanvas_drawPosTextH_xpos">xpos</a> element and
its baseline is positioned at <a href="#SkCanvas_drawPosTextH_constY">constY</a>. <a href="undocumented#Text">Text</a> size is affected by <a href="#Matrix">Matrix</a> and
<a href="#Text_Size">Paint Text Size</a>.
@@ -4797,9 +4777,9 @@ shared y coordinate for all of x positions</td>
<a name="SkCanvas_drawTextOnPathHV"></a>
## drawTextOnPathHV
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawTextOnPathHV(const void* text, size_t byteLength, const SkPath& path,
- SkScalar hOffset, SkScalar vOffset, const SkPaint& paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawTextOnPathHV(const void* text, size_t byteLength, const SkPath& path, SkScalar hOffset,
+ SkScalar vOffset, const SkPaint& paint)
</pre>
Draw <a href="#SkCanvas_drawTextOnPathHV_text">text</a> on <a href="SkPath_Reference#Path">Path</a> <a href="#SkCanvas_drawTextOnPathHV_path">path</a>, using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawTextOnPathHV_paint">paint</a>.
@@ -4811,7 +4791,7 @@ mapped to projected points parallel to the <a href="#SkCanvas_drawTextOnPathHV_p
than the <a href="#SkCanvas_drawTextOnPathHV_path">path</a> length, the excess <a href="#SkCanvas_drawTextOnPathHV_text">text</a> is clipped.
<a href="#SkCanvas_drawTextOnPathHV_text">text</a> meaning depends on <a href="#Text_Encoding">Paint Text Encoding</a>; by default, <a href="#SkCanvas_drawTextOnPathHV_text">text</a> is encoded as
-<a href="undocumented#UTF_8">UTF-8</a>. Origin meaning depends on <a href="#Text_Align">Paint Text Align</a> and <a href="#Vertical_Text">Paint Vertical Text</a>; by
+UTF-8. Origin meaning depends on <a href="#Text_Align">Paint Text Align</a> and <a href="#Vertical_Text">Paint Vertical Text</a>; by
default <a href="#SkCanvas_drawTextOnPathHV_text">text</a> positions the first glyph left side bearing at origin x and its
baseline at origin y. <a href="undocumented#Text">Text</a> size is affected by <a href="#Matrix">Matrix</a> and <a href="#Text_Size">Paint Text Size</a>.
@@ -4849,9 +4829,9 @@ offset of <a href="#SkCanvas_drawTextOnPathHV_text">text</a> above (if negative)
<a name="SkCanvas_drawTextOnPath"></a>
## drawTextOnPath
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawTextOnPath(const void* text, size_t byteLength, const SkPath& path,
- const SkMatrix* matrix, const SkPaint& paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawTextOnPath(const void* text, size_t byteLength, const SkPath& path, const SkMatrix* matrix,
+ const SkPaint& paint)
</pre>
Draw <a href="#SkCanvas_drawTextOnPath_text">text</a> on <a href="SkPath_Reference#Path">Path</a> <a href="#SkCanvas_drawTextOnPath_path">path</a>, using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawTextOnPath_paint">paint</a>.
@@ -4863,7 +4843,7 @@ mapped to projected points parallel to the <a href="#SkCanvas_drawTextOnPath_pat
than the <a href="#SkCanvas_drawTextOnPath_path">path</a> length, the excess <a href="#SkCanvas_drawTextOnPath_text">text</a> is clipped.
<a href="#SkCanvas_drawTextOnPath_text">text</a> meaning depends on <a href="#Text_Encoding">Paint Text Encoding</a>; by default, <a href="#SkCanvas_drawTextOnPath_text">text</a> is encoded as
-<a href="undocumented#UTF_8">UTF-8</a>. Origin meaning depends on <a href="#Text_Align">Paint Text Align</a> and <a href="#Vertical_Text">Paint Vertical Text</a>; by
+UTF-8. Origin meaning depends on <a href="#Text_Align">Paint Text Align</a> and <a href="#Vertical_Text">Paint Vertical Text</a>; by
default <a href="#SkCanvas_drawTextOnPath_text">text</a> positions the first glyph left side bearing at origin x and its
baseline at origin y. <a href="undocumented#Text">Text</a> size is affected by <a href="#Matrix">Matrix</a> and <a href="#Text_Size">Paint Text Size</a>.
@@ -4900,10 +4880,9 @@ to use identity <a href="#Matrix">Matrix</a></td>
<a name="SkCanvas_drawTextRSXform"></a>
## drawTextRSXform
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawTextRSXform(const void* text, size_t byteLength,
- const SkRSXform xform[], const SkRect* cullRect,
- const SkPaint& paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawTextRSXform(const void* text, size_t byteLength, const SkRSXform xform[],
+ const SkRect* cullRect, const SkPaint& paint)
</pre>
Draw <a href="#SkCanvas_drawTextRSXform_text">text</a>, transforming each glyph by the corresponding <a href="undocumented#SkRSXform">SkRSXform</a>,
@@ -4947,16 +4926,15 @@ byte length of <a href="#SkCanvas_drawTextRSXform_text">text</a> array</td>
<a name="SkCanvas_drawTextBlob"></a>
## drawTextBlob
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y,
- const SkPaint& paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, const SkPaint& paint)
</pre>
Draw <a href="undocumented#Text_Blob">Text Blob</a> <a href="#SkCanvas_drawTextBlob_blob">blob</a> at (<a href="#SkCanvas_drawTextBlob_x">x</a>, <a href="#SkCanvas_drawTextBlob_y">y</a>), using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawTextBlob_paint">paint</a>.
<a href="#SkCanvas_drawTextBlob_blob">blob</a> contains <a href="#Glyph">Glyphs</a>, their positions, and <a href="#SkCanvas_drawTextBlob_paint">paint</a> attributes specific to text:
<a href="undocumented#Typeface">Typeface</a>, <a href="#Text_Size">Paint Text Size</a>, <a href="#Text_Scale_X">Paint Text Scale X</a>, <a href="#Text_Skew_X">Paint Text Skew X</a>,
-<a href="#Text_Align">Paint Text Align</a>, <a href="#Hinting">Paint Hinting</a>, <a href="SkPaint_Reference#Anti_alias">Anti-alias</a>, <a href="#Fake_Bold">Paint Fake Bold</a>,
+<a href="#Text_Align">Paint Text Align</a>, <a href="#Hinting">Paint Hinting</a>, Anti-alias, <a href="#Fake_Bold">Paint Fake Bold</a>,
<a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a>, <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a>, <a href="SkPaint_Reference#LCD_Text">LCD Text</a>, <a href="SkPaint_Reference#Linear_Text">Linear Text</a>,
<a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a>, and <a href="#Vertical_Text">Paint Vertical Text</a>.
@@ -4986,16 +4964,15 @@ blend, color, stroking, and so on, used to draw</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawTextBlob(const sk_sp&lt;SkTextBlob&gt;& blob, SkScalar x, SkScalar y,
- const SkPaint& paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawTextBlob(const sk_sp&lt;SkTextBlob&gt;& blob, SkScalar x, SkScalar y, const SkPaint& paint)
</pre>
Draw <a href="undocumented#Text_Blob">Text Blob</a> <a href="#SkCanvas_drawTextBlob_2_blob">blob</a> at (<a href="#SkCanvas_drawTextBlob_2_x">x</a>, <a href="#SkCanvas_drawTextBlob_2_y">y</a>), using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawTextBlob_2_paint">paint</a>.
<a href="#SkCanvas_drawTextBlob_2_blob">blob</a> contains <a href="#Glyph">Glyphs</a>, their positions, and <a href="#SkCanvas_drawTextBlob_2_paint">paint</a> attributes specific to text:
<a href="undocumented#Typeface">Typeface</a>, <a href="#Text_Size">Paint Text Size</a>, <a href="#Text_Scale_X">Paint Text Scale X</a>, <a href="#Text_Skew_X">Paint Text Skew X</a>,
-<a href="#Text_Align">Paint Text Align</a>, <a href="#Hinting">Paint Hinting</a>, <a href="SkPaint_Reference#Anti_alias">Anti-alias</a>, <a href="#Fake_Bold">Paint Fake Bold</a>,
+<a href="#Text_Align">Paint Text Align</a>, <a href="#Hinting">Paint Hinting</a>, Anti-alias, <a href="#Fake_Bold">Paint Fake Bold</a>,
<a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a>, <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a>, <a href="SkPaint_Reference#LCD_Text">LCD Text</a>, <a href="SkPaint_Reference#Linear_Text">Linear Text</a>,
<a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a>, and <a href="#Vertical_Text">Paint Vertical Text</a>.
@@ -5029,7 +5006,7 @@ blend, color, stroking, and so on, used to draw</td>
<a name="SkCanvas_drawPicture"></a>
## drawPicture
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawPicture(const SkPicture* picture)
</pre>
@@ -5056,7 +5033,7 @@ recorded drawing commands to play</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawPicture(const sk_sp&lt;SkPicture&gt;& picture)
</pre>
@@ -5083,9 +5060,8 @@ recorded drawing commands to play</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawPicture(const SkPicture* picture, const SkMatrix* matrix,
- const SkPaint* paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawPicture(const SkPicture* picture, const SkMatrix* matrix, const SkPaint* paint)
</pre>
Draw <a href="undocumented#Picture">Picture</a> <a href="#SkCanvas_drawPicture_3_picture">picture</a>, using <a href="#Clip">Clip</a> and <a href="#Matrix">Matrix</a>; transforming <a href="#SkCanvas_drawPicture_3_picture">picture</a> with
@@ -5116,9 +5092,8 @@ recorded drawing commands to play</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawPicture(const sk_sp&lt;SkPicture&gt;& picture, const SkMatrix* matrix,
- const SkPaint* paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawPicture(const sk_sp&lt;SkPicture&gt;& picture, const SkMatrix* matrix, const SkPaint* paint)
</pre>
Draw <a href="undocumented#Picture">Picture</a> <a href="#SkCanvas_drawPicture_4_picture">picture</a>, using <a href="#Clip">Clip</a> and <a href="#Matrix">Matrix</a>; transforming <a href="#SkCanvas_drawPicture_4_picture">picture</a> with
@@ -5152,9 +5127,8 @@ recorded drawing commands to play</td>
<a name="SkCanvas_drawVertices"></a>
## drawVertices
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawVertices(const SkVertices* vertices, SkBlendMode mode,
- const SkPaint& paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawVertices(const SkVertices* vertices, SkBlendMode mode, const SkPaint& paint)
</pre>
Draw <a href="undocumented#Vertices">Vertices</a> <a href="#SkCanvas_drawVertices_vertices">vertices</a>, a triangle mesh, using <a href="#Clip">Clip</a> and <a href="#Matrix">Matrix</a>.
@@ -5182,9 +5156,8 @@ specifies the <a href="undocumented#Shader">Shader</a>, used as <a href="undocum
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawVertices(const sk_sp&lt;SkVertices&gt;& vertices, SkBlendMode mode,
- const SkPaint& paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawVertices(const sk_sp&lt;SkVertices&gt;& vertices, SkBlendMode mode, const SkPaint& paint)
</pre>
Draw <a href="undocumented#Vertices">Vertices</a> <a href="#SkCanvas_drawVertices_2_vertices">vertices</a>, a triangle mesh, using <a href="#Clip">Clip</a> and <a href="#Matrix">Matrix</a>.
@@ -5215,28 +5188,27 @@ specifies the <a href="undocumented#Shader">Shader</a>, used as <a href="undocum
<a name="SkCanvas_drawPatch"></a>
## drawPatch
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawPatch(const SkPoint cubics[12], const SkColor colors[4],
- const SkPoint texCoords[4], SkBlendMode mode,
- const SkPaint& paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawPatch(const SkPoint cubics[12], const SkColor colors[4], const SkPoint texCoords[4],
+ SkBlendMode mode, const SkPaint& paint)
</pre>
-Draws a <a href="undocumented#Coons">Coons</a> patch: the interpolation of four <a href="#SkCanvas_drawPatch_cubics">cubics</a> with shared corners,
+Draws a <a href="undocumented#Coons_Patch">Coons Patch</a>: the interpolation of four <a href="#SkCanvas_drawPatch_cubics">cubics</a> with shared corners,
associating a color, and optionally a texture coordinate, with each corner.
-The <a href="undocumented#Coons">Coons</a> patch uses <a href="#Clip">Clip</a> and <a href="#Matrix">Matrix</a>, <a href="#SkCanvas_drawPatch_paint">paint</a> <a href="undocumented#Shader">Shader</a>, <a href="undocumented#Color_Filter">Color Filter</a>,
+<a href="undocumented#Coons_Patch">Coons Patch</a> uses <a href="#Clip">Clip</a> and <a href="#Matrix">Matrix</a>, <a href="#SkCanvas_drawPatch_paint">paint</a> <a href="undocumented#Shader">Shader</a>, <a href="undocumented#Color_Filter">Color Filter</a>,
<a href="#Alpha">Color Alpha</a>, <a href="undocumented#Image_Filter">Image Filter</a>, and <a href="undocumented#Blend_Mode">Blend Mode</a>. If <a href="undocumented#Shader">Shader</a> is provided it is treated
-as the <a href="undocumented#Coons">Coons</a> patch texture; <a href="undocumented#Blend_Mode">Blend Mode</a> <a href="#SkCanvas_drawPatch_mode">mode</a> combines <a href="undocumented#Color">Color</a> <a href="#SkCanvas_drawPatch_colors">colors</a> and <a href="undocumented#Shader">Shader</a> if
+as <a href="undocumented#Coons_Patch">Coons Patch</a> texture; <a href="undocumented#Blend_Mode">Blend Mode</a> <a href="#SkCanvas_drawPatch_mode">mode</a> combines <a href="undocumented#Color">Color</a> <a href="#SkCanvas_drawPatch_colors">colors</a> and <a href="undocumented#Shader">Shader</a> if
both are provided.
-<a href="undocumented#Point">Point</a> array <a href="#SkCanvas_drawPatch_cubics">cubics</a> specifies four <a href="#Cubic">Cubics</a> starting at the top-left corner,
+<a href="SkPoint_Reference#Point">Point</a> array <a href="#SkCanvas_drawPatch_cubics">cubics</a> specifies four <a href="#Cubic">Cubics</a> starting at the top-left corner,
in clockwise order, sharing every fourth point. The last <a href="#Cubic">Cubic</a> ends at the
first point.
<a href="undocumented#Color">Color</a> array color associates <a href="#SkCanvas_drawPatch_colors">colors</a> with corners in top-left, top-right,
bottom-right, bottom-left order.
-If <a href="#SkCanvas_drawPatch_paint">paint</a> contains <a href="undocumented#Shader">Shader</a>, <a href="undocumented#Point">Point</a> array <a href="#SkCanvas_drawPatch_texCoords">texCoords</a> maps <a href="undocumented#Shader">Shader</a> as texture to
+If <a href="#SkCanvas_drawPatch_paint">paint</a> contains <a href="undocumented#Shader">Shader</a>, <a href="SkPoint_Reference#Point">Point</a> array <a href="#SkCanvas_drawPatch_texCoords">texCoords</a> maps <a href="undocumented#Shader">Shader</a> as texture to
corners in top-left, top-right, bottom-right, bottom-left order.
### Parameters
@@ -5246,7 +5218,7 @@ corners in top-left, top-right, bottom-right, bottom-left order.
</tr> <tr> <td><a name="SkCanvas_drawPatch_colors"> <code><strong>colors </strong></code> </a></td> <td>
<a href="undocumented#Color">Color</a> array, one for each corner</td>
</tr> <tr> <td><a name="SkCanvas_drawPatch_texCoords"> <code><strong>texCoords </strong></code> </a></td> <td>
-<a href="undocumented#Point">Point</a> array of texture coordinates, mapping <a href="undocumented#Shader">Shader</a> to corners;
+<a href="SkPoint_Reference#Point">Point</a> array of texture coordinates, mapping <a href="undocumented#Shader">Shader</a> to corners;
may be nullptr</td>
</tr>
# <tr> <td><a name="SkCanvas_drawPatch_mode"> <code><strong>mode </strong></code> </a></td> <td>
@@ -5266,27 +5238,27 @@ SeeAlso <a href="#SkCanvas_drawVertices">drawVertices</a> <a href="#SkCanvas_dra
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawPatch(const SkPoint cubics[12], const SkColor colors[4],
- const SkPoint texCoords[4], const SkPaint& paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawPatch(const SkPoint cubics[12], const SkColor colors[4], const SkPoint texCoords[4],
+ const SkPaint& paint)
</pre>
-Draws <a href="#Cubic">Cubic</a> <a href="undocumented#Coons">Coons</a> patch: the interpolation of four <a href="#SkCanvas_drawPatch_2_cubics">cubics</a> with shared corners,
+Draws <a href="#Cubic">Cubic</a> <a href="undocumented#Coons_Patch">Coons Patch</a>: the interpolation of four <a href="#SkCanvas_drawPatch_2_cubics">cubics</a> with shared corners,
associating a color, and optionally a texture coordinate, with each corner.
-The <a href="undocumented#Coons">Coons</a> patch uses <a href="#Clip">Clip</a> and <a href="#Matrix">Matrix</a>, <a href="#SkCanvas_drawPatch_2_paint">paint</a> <a href="undocumented#Shader">Shader</a>, <a href="undocumented#Color_Filter">Color Filter</a>,
+<a href="undocumented#Coons_Patch">Coons Patch</a> uses <a href="#Clip">Clip</a> and <a href="#Matrix">Matrix</a>, <a href="#SkCanvas_drawPatch_2_paint">paint</a> <a href="undocumented#Shader">Shader</a>, <a href="undocumented#Color_Filter">Color Filter</a>,
<a href="#Alpha">Color Alpha</a>, <a href="undocumented#Image_Filter">Image Filter</a>, and <a href="undocumented#Blend_Mode">Blend Mode</a>. If <a href="undocumented#Shader">Shader</a> is provided it is treated
-as the <a href="undocumented#Coons">Coons</a> patch texture; <a href="undocumented#Blend_Mode">Blend Mode</a> mode combines <a href="undocumented#Color">Color</a> <a href="#SkCanvas_drawPatch_2_colors">colors</a> and <a href="undocumented#Shader">Shader</a> if
+as <a href="undocumented#Coons_Patch">Coons Patch</a> texture; <a href="undocumented#Blend_Mode">Blend Mode</a> mode combines <a href="undocumented#Color">Color</a> <a href="#SkCanvas_drawPatch_2_colors">colors</a> and <a href="undocumented#Shader">Shader</a> if
both are provided.
-<a href="undocumented#Point">Point</a> array <a href="#SkCanvas_drawPatch_2_cubics">cubics</a> specifies four <a href="#Cubic">Cubics</a> starting at the top-left corner,
+<a href="SkPoint_Reference#Point">Point</a> array <a href="#SkCanvas_drawPatch_2_cubics">cubics</a> specifies four <a href="#Cubic">Cubics</a> starting at the top-left corner,
in clockwise order, sharing every fourth point. The last <a href="#Cubic">Cubic</a> ends at the
first point.
<a href="undocumented#Color">Color</a> array color associates <a href="#SkCanvas_drawPatch_2_colors">colors</a> with corners in top-left, top-right,
bottom-right, bottom-left order.
-If <a href="#SkCanvas_drawPatch_2_paint">paint</a> contains <a href="undocumented#Shader">Shader</a>, <a href="undocumented#Point">Point</a> array <a href="#SkCanvas_drawPatch_2_texCoords">texCoords</a> maps <a href="undocumented#Shader">Shader</a> as texture to
+If <a href="#SkCanvas_drawPatch_2_paint">paint</a> contains <a href="undocumented#Shader">Shader</a>, <a href="SkPoint_Reference#Point">Point</a> array <a href="#SkCanvas_drawPatch_2_texCoords">texCoords</a> maps <a href="undocumented#Shader">Shader</a> as texture to
corners in top-left, top-right, bottom-right, bottom-left order.
### Parameters
@@ -5296,7 +5268,7 @@ corners in top-left, top-right, bottom-right, bottom-left order.
</tr> <tr> <td><a name="SkCanvas_drawPatch_2_colors"> <code><strong>colors </strong></code> </a></td> <td>
<a href="undocumented#Color">Color</a> array, one for each corner</td>
</tr> <tr> <td><a name="SkCanvas_drawPatch_2_texCoords"> <code><strong>texCoords </strong></code> </a></td> <td>
-<a href="undocumented#Point">Point</a> array of texture coordinates, mapping <a href="undocumented#Shader">Shader</a> to corners;
+<a href="SkPoint_Reference#Point">Point</a> array of texture coordinates, mapping <a href="undocumented#Shader">Shader</a> to corners;
may be nullptr</td>
</tr>
# <tr> <td><a name="SkCanvas_drawPatch_2_paint"> <code><strong>paint </strong></code> </a></td> <td>
@@ -5321,14 +5293,14 @@ SeeAlso <a href="#SkCanvas_drawVertices">drawVertices</a> <a href="#SkCanvas_dra
<a name="SkCanvas_drawAtlas"></a>
## drawAtlas
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawAtlas(const SkImage* atlas, const SkRSXform xform[], const SkRect tex[],
- const SkColor colors[], int count, SkBlendMode mode,
- const SkRect* cullRect, const SkPaint* paint)
+ const SkColor colors[], int count, SkBlendMode mode, const SkRect* cullRect,
+ const SkPaint* paint)
</pre>
Draw a set of sprites from <a href="#SkCanvas_drawAtlas_atlas">atlas</a>, using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and optional <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawAtlas_paint">paint</a>.
-<a href="#SkCanvas_drawAtlas_paint">paint</a> uses <a href="SkPaint_Reference#Anti_alias">Anti-alias</a>, <a href="#Alpha">Color Alpha</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Image_Filter">Image Filter</a>, and <a href="undocumented#Blend_Mode">Blend Mode</a>
+<a href="#SkCanvas_drawAtlas_paint">paint</a> uses Anti-alias, <a href="#Alpha">Color Alpha</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Image_Filter">Image Filter</a>, and <a href="undocumented#Blend_Mode">Blend Mode</a>
to draw, if present. For each entry in the array, <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawAtlas_tex">tex</a> locates sprite in
<a href="#SkCanvas_drawAtlas_atlas">atlas</a>, and <a href="undocumented#RSXform">RSXform</a> <a href="#SkCanvas_drawAtlas_xform">xform</a> transforms it into destination space.
@@ -5340,7 +5312,7 @@ If <a href="#SkCanvas_drawAtlas_cullRect">cullRect</a> is outside of <a href="#C
### Parameters
<table> <tr> <td><a name="SkCanvas_drawAtlas_atlas"> <code><strong>atlas </strong></code> </a></td> <td>
-<a href="undocumented#Image">Image</a> containing sprites</td>
+<a href="SkImage_Reference#Image">Image</a> containing sprites</td>
</tr> <tr> <td><a name="SkCanvas_drawAtlas_xform"> <code><strong>xform </strong></code> </a></td> <td>
<a href="undocumented#RSXform">RSXform</a> mappings for sprites in <a href="#SkCanvas_drawAtlas_atlas">atlas</a></td>
</tr> <tr> <td><a name="SkCanvas_drawAtlas_tex"> <code><strong>tex </strong></code> </a></td> <td>
@@ -5368,14 +5340,14 @@ bounds of transformed sprites for efficient clipping; may be nullptr</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawAtlas(const sk_sp&lt;SkImage&gt;& atlas, const SkRSXform xform[],
- const SkRect tex[], const SkColor colors[], int count,
- SkBlendMode mode, const SkRect* cullRect, const SkPaint* paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawAtlas(const sk_sp&lt;SkImage&gt;& atlas, const SkRSXform xform[], const SkRect tex[],
+ const SkColor colors[], int count, SkBlendMode mode, const SkRect* cullRect,
+ const SkPaint* paint)
</pre>
Draw a set of sprites from <a href="#SkCanvas_drawAtlas_2_atlas">atlas</a>, using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and optional <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawAtlas_2_paint">paint</a>.
-<a href="#SkCanvas_drawAtlas_2_paint">paint</a> uses <a href="SkPaint_Reference#Anti_alias">Anti-alias</a>, <a href="#Alpha">Color Alpha</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Image_Filter">Image Filter</a>, and <a href="undocumented#Blend_Mode">Blend Mode</a>
+<a href="#SkCanvas_drawAtlas_2_paint">paint</a> uses Anti-alias, <a href="#Alpha">Color Alpha</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Image_Filter">Image Filter</a>, and <a href="undocumented#Blend_Mode">Blend Mode</a>
to draw, if present. For each entry in the array, <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawAtlas_2_tex">tex</a> locates sprite in
<a href="#SkCanvas_drawAtlas_2_atlas">atlas</a>, and <a href="undocumented#RSXform">RSXform</a> <a href="#SkCanvas_drawAtlas_2_xform">xform</a> transforms it into destination space.
@@ -5387,7 +5359,7 @@ If <a href="#SkCanvas_drawAtlas_2_cullRect">cullRect</a> is outside of <a href="
### Parameters
<table> <tr> <td><a name="SkCanvas_drawAtlas_2_atlas"> <code><strong>atlas </strong></code> </a></td> <td>
-<a href="undocumented#Image">Image</a> containing sprites</td>
+<a href="SkImage_Reference#Image">Image</a> containing sprites</td>
</tr> <tr> <td><a name="SkCanvas_drawAtlas_2_xform"> <code><strong>xform </strong></code> </a></td> <td>
<a href="undocumented#RSXform">RSXform</a> mappings for sprites in <a href="#SkCanvas_drawAtlas_2_atlas">atlas</a></td>
</tr> <tr> <td><a name="SkCanvas_drawAtlas_2_tex"> <code><strong>tex </strong></code> </a></td> <td>
@@ -5415,13 +5387,13 @@ bounds of transformed sprites for efficient clipping; may be nullptr</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawAtlas(const SkImage* atlas, const SkRSXform xform[], const SkRect tex[],
- int count, const SkRect* cullRect, const SkPaint* paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawAtlas(const SkImage* atlas, const SkRSXform xform[], const SkRect tex[], int count,
+ const SkRect* cullRect, const SkPaint* paint)
</pre>
Draw a set of sprites from <a href="#SkCanvas_drawAtlas_3_atlas">atlas</a>, using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and optional <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawAtlas_3_paint">paint</a>.
-<a href="#SkCanvas_drawAtlas_3_paint">paint</a> uses <a href="SkPaint_Reference#Anti_alias">Anti-alias</a>, <a href="#Alpha">Color Alpha</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Image_Filter">Image Filter</a>, and <a href="undocumented#Blend_Mode">Blend Mode</a>
+<a href="#SkCanvas_drawAtlas_3_paint">paint</a> uses Anti-alias, <a href="#Alpha">Color Alpha</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Image_Filter">Image Filter</a>, and <a href="undocumented#Blend_Mode">Blend Mode</a>
to draw, if present. For each entry in the array, <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawAtlas_3_tex">tex</a> locates sprite in
<a href="#SkCanvas_drawAtlas_3_atlas">atlas</a>, and <a href="undocumented#RSXform">RSXform</a> <a href="#SkCanvas_drawAtlas_3_xform">xform</a> transforms it into destination space.
@@ -5432,7 +5404,7 @@ If <a href="#SkCanvas_drawAtlas_3_cullRect">cullRect</a> is outside of <a href="
### Parameters
<table> <tr> <td><a name="SkCanvas_drawAtlas_3_atlas"> <code><strong>atlas </strong></code> </a></td> <td>
-<a href="undocumented#Image">Image</a> containing sprites</td>
+<a href="SkImage_Reference#Image">Image</a> containing sprites</td>
</tr> <tr> <td><a name="SkCanvas_drawAtlas_3_xform"> <code><strong>xform </strong></code> </a></td> <td>
<a href="undocumented#RSXform">RSXform</a> mappings for sprites in <a href="#SkCanvas_drawAtlas_3_atlas">atlas</a></td>
</tr> <tr> <td><a name="SkCanvas_drawAtlas_3_tex"> <code><strong>tex </strong></code> </a></td> <td>
@@ -5456,14 +5428,13 @@ bounds of transformed sprites for efficient clipping; may be nullptr</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawAtlas(const sk_sp&lt;SkImage&gt;& atlas, const SkRSXform xform[],
- const SkRect tex[], int count, const SkRect* cullRect,
- const SkPaint* paint)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawAtlas(const sk_sp&lt;SkImage&gt;& atlas, const SkRSXform xform[], const SkRect tex[], int count,
+ const SkRect* cullRect, const SkPaint* paint)
</pre>
Draw a set of sprites from <a href="#SkCanvas_drawAtlas_4_atlas">atlas</a>, using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and optional <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkCanvas_drawAtlas_4_paint">paint</a>.
-<a href="#SkCanvas_drawAtlas_4_paint">paint</a> uses <a href="SkPaint_Reference#Anti_alias">Anti-alias</a>, <a href="#Alpha">Color Alpha</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Image_Filter">Image Filter</a>, and <a href="undocumented#Blend_Mode">Blend Mode</a>
+<a href="#SkCanvas_drawAtlas_4_paint">paint</a> uses Anti-alias, <a href="#Alpha">Color Alpha</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Image_Filter">Image Filter</a>, and <a href="undocumented#Blend_Mode">Blend Mode</a>
to draw, if present. For each entry in the array, <a href="SkRect_Reference#Rect">Rect</a> <a href="#SkCanvas_drawAtlas_4_tex">tex</a> locates sprite in
<a href="#SkCanvas_drawAtlas_4_atlas">atlas</a>, and <a href="undocumented#RSXform">RSXform</a> <a href="#SkCanvas_drawAtlas_4_xform">xform</a> transforms it into destination space.
@@ -5474,7 +5445,7 @@ If <a href="#SkCanvas_drawAtlas_4_cullRect">cullRect</a> is outside of <a href="
### Parameters
<table> <tr> <td><a name="SkCanvas_drawAtlas_4_atlas"> <code><strong>atlas </strong></code> </a></td> <td>
-<a href="undocumented#Image">Image</a> containing sprites</td>
+<a href="SkImage_Reference#Image">Image</a> containing sprites</td>
</tr> <tr> <td><a name="SkCanvas_drawAtlas_4_xform"> <code><strong>xform </strong></code> </a></td> <td>
<a href="undocumented#RSXform">RSXform</a> mappings for sprites in <a href="#SkCanvas_drawAtlas_4_atlas">atlas</a></td>
</tr> <tr> <td><a name="SkCanvas_drawAtlas_4_tex"> <code><strong>tex </strong></code> </a></td> <td>
@@ -5501,7 +5472,7 @@ bounds of transformed sprites for efficient clipping; may be nullptr</td>
<a name="SkCanvas_drawDrawable"></a>
## drawDrawable
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawDrawable(SkDrawable* drawable, const SkMatrix* matrix = nullptr)
</pre>
@@ -5532,7 +5503,7 @@ transformation applied to drawing; may be nullptr</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawDrawable(SkDrawable* drawable, SkScalar x, SkScalar y)
</pre>
@@ -5567,11 +5538,11 @@ offset into <a href="#Canvas">Canvas</a> writable pixels in <a href="#SkCanvas_d
<a name="SkCanvas_drawAnnotation"></a>
## drawAnnotation
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void drawAnnotation(const SkRect& rect, const char key[], SkData* value)
</pre>
-Associate <a href="SkRect_Reference#Rect">Rect</a> on <a href="#Canvas">Canvas</a> when an annotation; a key-value pair, where the <a href="#SkCanvas_drawAnnotation_key">key</a> is
+Associate <a href="SkRect_Reference#Rect">Rect</a> on <a href="#Canvas">Canvas</a> when an annotation; a <a href="#SkCanvas_drawAnnotation_key">key</a>-<a href="#SkCanvas_drawAnnotation_value">value</a> pair, where the <a href="#SkCanvas_drawAnnotation_key">key</a> is
a null-terminated utf8 string, and optional <a href="#SkCanvas_drawAnnotation_value">value</a> is stored as <a href="undocumented#Data">Data</a>.
Only some canvas implementations, such as recording to <a href="undocumented#Picture">Picture</a>, or drawing to
@@ -5598,12 +5569,11 @@ data holding <a href="#SkCanvas_drawAnnotation_value">value</a> stored in annota
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void drawAnnotation(const SkRect& rect, const char key[],
- const sk_sp&lt;SkData&gt;& value)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void drawAnnotation(const SkRect& rect, const char key[], const sk_sp&lt;SkData&gt;& value)
</pre>
-Associate <a href="SkRect_Reference#Rect">Rect</a> on <a href="#Canvas">Canvas</a> when an annotation; a key-value pair, where the <a href="#SkCanvas_drawAnnotation_2_key">key</a> is
+Associate <a href="SkRect_Reference#Rect">Rect</a> on <a href="#Canvas">Canvas</a> when an annotation; a <a href="#SkCanvas_drawAnnotation_2_key">key</a>-<a href="#SkCanvas_drawAnnotation_2_value">value</a> pair, where the <a href="#SkCanvas_drawAnnotation_2_key">key</a> is
a null-terminated utf8 string, and optional <a href="#SkCanvas_drawAnnotation_2_value">value</a> is stored as <a href="undocumented#Data">Data</a>.
Only some canvas implementations, such as recording to <a href="undocumented#Picture">Picture</a>, or drawing to
@@ -5633,7 +5603,7 @@ data holding <a href="#SkCanvas_drawAnnotation_2_value">value</a> stored in anno
<a name="SkCanvas_getDrawFilter"></a>
## getDrawFilter
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkDrawFilter* getDrawFilter() const
</pre>
@@ -5644,7 +5614,7 @@ Legacy call to be deprecated.
<a name="SkCanvas_setDrawFilter"></a>
## setDrawFilter
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
virtual SkDrawFilter* setDrawFilter(SkDrawFilter* filter)
</pre>
@@ -5655,7 +5625,7 @@ Legacy call to be deprecated.
<a name="SkCanvas_isClipEmpty"></a>
## isClipEmpty
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
virtual bool isClipEmpty() const
</pre>
@@ -5691,7 +5661,7 @@ clip is empty
<a name="SkCanvas_isClipRect"></a>
## isClipRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
virtual bool isClipRect() const
</pre>
@@ -5727,7 +5697,7 @@ Stack helper class calls
<a name="SkAutoCanvasRestore_SkCanvas_star"></a>
## SkAutoCanvasRestore
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkAutoCanvasRestore(SkCanvas* canvas, bool doSave)
</pre>
@@ -5759,7 +5729,7 @@ utility to <a href="#SkAutoCanvasRestore_restore">restore</a> <a href="#Canvas">
<a name="SkAutoCanvasRestore_destructor"></a>
## ~SkAutoCanvasRestore
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
~SkAutoCanvasRestore()
</pre>
@@ -5775,7 +5745,7 @@ scope.
<a name="SkAutoCanvasRestore_restore"></a>
## restore
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void restore()
</pre>
diff --git a/site/user/api/SkIPoint16_Reference.md b/site/user/api/SkIPoint16_Reference.md
new file mode 100644
index 0000000000..1c9f9d7a04
--- /dev/null
+++ b/site/user/api/SkIPoint16_Reference.md
@@ -0,0 +1,173 @@
+SkIPoint16 Reference
+===
+
+# <a name="IPoint16"></a> IPoint16
+
+# <a name="SkIPoint16"></a> Struct SkIPoint16
+<a href="SkIPoint_Reference#SkIPoint">SkIPoint</a> holds two 16 bit integer coordinates
+
+# <a name="Overview"></a> Overview
+
+## <a name="Subtopics"></a> Subtopics
+
+| topics | description |
+| --- | --- |
+
+## <a name="Member_Functions"></a> Member Functions
+
+| description | function |
+| --- | --- |
+| <a href="#SkIPoint16_Make">Make</a> | Constructs from integer inputs. |
+| <a href="#SkIPoint16_set">set</a> | Sets to integer input. |
+| <a href="#SkIPoint16_x">x</a> | Returns <a href="#SkIPoint16_fX">fX</a>. |
+| <a href="#SkIPoint16_y">y</a> | Returns <a href="#SkIPoint16_fY">fY</a>. |
+
+<a name="SkIPoint16_fX"> <code><strong>int16_t fX</strong></code> </a>
+
+<a href="#SkIPoint16_x">x</a>-axis value used by <a href="#IPoint16">IPoint16</a>.
+
+<a name="SkIPoint16_fY"> <code><strong>int16_t fY</strong></code> </a>
+
+<a href="#SkIPoint16_y">y</a>-axis value used by <a href="#IPoint16">IPoint16</a>.
+
+<a name="SkIPoint16_Make"></a>
+## Make
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static constexpr SkIPoint16 Make(int x, int y)
+</pre>
+
+Sets <a href="#SkIPoint16_fX">fX</a> to <a href="#SkIPoint16_x">x</a>, <a href="#SkIPoint16_fY">fY</a> to <a href="#SkIPoint16_y">y</a>. If <a href="undocumented#SK_DEBUG">SK DEBUG</a> is defined, asserts
+if <a href="#SkIPoint16_x">x</a> or <a href="#SkIPoint16_y">y</a> does not fit in 16 bits.
+
+### Parameters
+
+<table> <tr> <td><a name="SkIPoint16_Make_x"> <code><strong>x </strong></code> </a></td> <td>
+integer <a href="#SkIPoint16_x">x</a>-axis value of constructed <a href="SkIPoint_Reference#IPoint">IPoint</a></td>
+ </tr> <tr> <td><a name="SkIPoint16_Make_y"> <code><strong>y </strong></code> </a></td> <td>
+integer <a href="#SkIPoint16_y">y</a>-axis value of constructed <a href="SkIPoint_Reference#IPoint">IPoint</a></td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="#IPoint16">IPoint16</a> (<a href="#SkIPoint16_x">x</a>, <a href="#SkIPoint16_y">y</a>)
+
+### Example
+
+<div><fiddle-embed name="d815ca04fbf22b5acec6f85b6351f362">
+
+#### Example Output
+
+~~~~
+pt1.fX == pt2.fX
+pt1.fY == pt2.fY
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkIPoint16_set">set</a> <a href="#SkPoint_iset">SkPoint::iset()</a> <a href="#SkIPoint_Make">SkIPoint::Make</a>
+
+---
+
+<a name="SkIPoint16_x"></a>
+## x
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+int16_t x() const
+</pre>
+
+Returns <a href="#SkIPoint16_x">x</a>-axis value of <a href="#IPoint16">IPoint16</a>.
+
+### Return Value
+
+<a href="#SkIPoint16_fX">fX</a>
+
+### Example
+
+<div><fiddle-embed name="f7fd3b3674f042869de3582ab793dbf7">
+
+#### Example Output
+
+~~~~
+pt1.fX == pt1.x()
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkIPoint16_y">y</a> <a href="#SkIPoint_x">SkIPoint::x()</a>
+
+---
+
+<a name="SkIPoint16_y"></a>
+## y
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+int16_t y() const
+</pre>
+
+Returns <a href="#SkIPoint16_y">y</a>-axis value of <a href="SkIPoint_Reference#IPoint">IPoint</a>.
+
+### Return Value
+
+<a href="#SkIPoint16_fY">fY</a>
+
+### Example
+
+<div><fiddle-embed name="3662cedaf1e9924a401f794902da3b1f">
+
+#### Example Output
+
+~~~~
+pt1.fY == pt1.y()
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkIPoint16_x">x</a> <a href="#SkPoint_y">SkPoint::y()</a> <a href="#SkIPoint_y">SkIPoint::y()</a>
+
+---
+
+<a name="SkIPoint16_set"></a>
+## set
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void set(int x, int y)
+</pre>
+
+Sets <a href="#SkIPoint16_fX">fX</a> to <a href="#SkIPoint16_x">x</a> and <a href="#SkIPoint16_fY">fY</a> to <a href="#SkIPoint16_y">y</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkIPoint16_set_x"> <code><strong>x </strong></code> </a></td> <td>
+new value for <a href="#SkIPoint16_fX">fX</a></td>
+ </tr> <tr> <td><a name="SkIPoint16_set_y"> <code><strong>y </strong></code> </a></td> <td>
+new value for <a href="#SkIPoint16_fY">fY</a></td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="abff78d3f2d97b1284ccb13d0c56b6c8">
+
+#### Example Output
+
+~~~~
+pt1.fX == pt2.fX
+pt1.fY == pt2.fY
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkIPoint16_Make">Make</a> <a href="#SkPoint_set">SkPoint::set</a>
+
+---
+
diff --git a/site/user/api/SkIPoint_Reference.md b/site/user/api/SkIPoint_Reference.md
new file mode 100644
index 0000000000..210104c7bb
--- /dev/null
+++ b/site/user/api/SkIPoint_Reference.md
@@ -0,0 +1,503 @@
+SkIPoint Reference
+===
+
+# <a name="IVector"></a> IVector
+
+# <a name="IPoint"></a> IPoint
+
+# <a name="SkIPoint"></a> Struct SkIPoint
+<a href="#SkIPoint">SkIPoint</a> holds two 32 bit integer coordinates
+
+# <a name="Overview"></a> Overview
+
+## <a name="Subtopics"></a> Subtopics
+
+| topics | description |
+| --- | --- |
+
+## <a name="Operators"></a> Operators
+
+| description | function |
+| --- | --- |
+| <a href="#SkIPoint">SkIPoint</a> <a href="#SkIPoint_minus_operator">operator-() const</a> | Reverses sign of <a href="#IPoint">IPoint</a>. |
+| <a href="#SkIPoint">SkIPoint</a> <a href="#SkIPoint_add_operator">operator+(const SkIPoint& a, const SkIVector& b)</a> | Returns <a href="#IPoint">IPoint</a> offset by <a href="SkIPoint_Reference#IVector">IVector</a>. |
+| <a href="SkIPoint_Reference#SkIVector">SkIVector</a> <a href="#SkIPoint_subtract_operator">operator-(const SkIPoint& a, const SkIPoint& b)</a> | Returns <a href="SkIPoint_Reference#IVector">IVector</a> between <a href="#IPoint">IPoints</a>. |
+| bool <a href="#SkIPoint_notequal_operator">operator!=(const SkIPoint& a, const SkIPoint& b)</a> | Returns true if <a href="#IPoint">IPoints</a> are unequal. |
+| bool <a href="#SkIPoint_equal_operator">operator==(const SkIPoint& a, const SkIPoint& b)</a> | Returns true if <a href="#IPoint">IPoints</a> are equal. |
+| void <a href="#SkIPoint_addto_operator">operator+=(const SkIVector& v)</a> | Adds <a href="SkIPoint_Reference#IVector">IVector</a> to <a href="#IPoint">IPoint</a>. |
+| void <a href="#SkIPoint_subtractfrom_operator">operator-=(const SkIVector& v)</a> | Subtracts <a href="SkIPoint_Reference#IVector">IVector</a> from <a href="#IPoint">IPoint</a>. |
+
+## <a name="Member_Functions"></a> Member Functions
+
+| description | function |
+| --- | --- |
+| <a href="#SkIPoint_Make">Make</a> | Constructs from integer inputs. |
+| <a href="#SkIPoint_equals">equals</a> | Returns true if members are equal. |
+| <a href="#SkIPoint_isZero">isZero</a> | Returns true if both members equal zero. |
+| <a href="#SkIPoint_set">set</a> | Sets to integer input. |
+| <a href="#SkIPoint_x">x</a> | Returns <a href="#SkIPoint_fX">fX</a>. |
+| <a href="#SkIPoint_y">y</a> | Returns <a href="#SkIPoint_fY">fY</a>. |
+
+<a name="SkIPoint_fX"> <code><strong>int32_t fX</strong></code> </a>
+
+<a href="#SkIPoint_x">x</a>-axis value used by <a href="#IPoint">IPoint</a>.
+
+<a name="SkIPoint_fY"> <code><strong>int32_t fY</strong></code> </a>
+
+<a href="#SkIPoint_y">y</a>-axis value used by <a href="#IPoint">IPoint</a>.
+
+<a name="SkIPoint_Make"></a>
+## Make
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static constexpr SkIPoint Make(int32_t x, int32_t y)
+</pre>
+
+Sets <a href="#SkIPoint_fX">fX</a> to <a href="#SkIPoint_x">x</a>, <a href="#SkIPoint_fY">fY</a> to <a href="#SkIPoint_y">y</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkIPoint_Make_x"> <code><strong>x </strong></code> </a></td> <td>
+integer <a href="#SkIPoint_x">x</a>-axis value of constructed <a href="#IPoint">IPoint</a></td>
+ </tr> <tr> <td><a name="SkIPoint_Make_y"> <code><strong>y </strong></code> </a></td> <td>
+integer <a href="#SkIPoint_y">y</a>-axis value of constructed <a href="#IPoint">IPoint</a></td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="#IPoint">IPoint</a> (<a href="#SkIPoint_x">x</a>, <a href="#SkIPoint_y">y</a>)
+
+### Example
+
+<div><fiddle-embed name="e5cf5159525bd3140f288a95fe641fae">
+
+#### Example Output
+
+~~~~
+pt1 == pt2
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkIPoint_set">set</a> <a href="#SkPoint_iset">SkPoint::iset()</a> <a href="#SkPoint_Make">SkPoint::Make</a> <a href="#SkIPoint16_Make">SkIPoint16::Make</a>
+
+---
+
+<a name="SkIPoint_x"></a>
+## x
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+int32_t x() const
+</pre>
+
+Returns <a href="#SkIPoint_x">x</a>-axis value of <a href="#IPoint">IPoint</a>.
+
+### Return Value
+
+<a href="#SkIPoint_fX">fX</a>
+
+### Example
+
+<div><fiddle-embed name="eed4185294f8a8216fc354e6ee6b2e3a">
+
+#### Example Output
+
+~~~~
+pt1.fX == pt1.x()
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkIPoint_y">y</a> <a href="#SkPoint_x">SkPoint::x()</a> <a href="#SkIPoint16_x">SkIPoint16::x()</a>
+
+---
+
+<a name="SkIPoint_y"></a>
+## y
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+int32_t y() const
+</pre>
+
+Returns <a href="#SkIPoint_y">y</a>-axis value of <a href="#IPoint">IPoint</a>.
+
+### Return Value
+
+<a href="#SkIPoint_fY">fY</a>
+
+### Example
+
+<div><fiddle-embed name="35c41b8ba7cebf8c9a7a8494e610e14d">
+
+#### Example Output
+
+~~~~
+pt1.fY == pt1.y()
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkIPoint_x">x</a> <a href="#SkPoint_y">SkPoint::y()</a> <a href="#SkIPoint16_y">SkIPoint16::y()</a>
+
+---
+
+<a name="SkIPoint_isZero"></a>
+## isZero
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool isZero() const
+</pre>
+
+Returns true if <a href="#SkIPoint_fX">fX</a> and <a href="#SkIPoint_fY">fY</a> are both zero.
+
+### Return Value
+
+true if <a href="#SkIPoint_fX">fX</a> is zero and <a href="#SkIPoint_fY">fY</a> is zero
+
+### Example
+
+<div><fiddle-embed name="658c1df611b4577cc7e0bb384e95737e">
+
+#### Example Output
+
+~~~~
+pt.isZero() == true
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_isZero">SkPoint::isZero</a>
+
+---
+
+<a name="SkIPoint_set"></a>
+## set
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void set(int32_t x, int32_t y)
+</pre>
+
+Sets <a href="#SkIPoint_fX">fX</a> to <a href="#SkIPoint_x">x</a> and <a href="#SkIPoint_fY">fY</a> to <a href="#SkIPoint_y">y</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkIPoint_set_x"> <code><strong>x </strong></code> </a></td> <td>
+new value for <a href="#SkIPoint_fX">fX</a></td>
+ </tr> <tr> <td><a name="SkIPoint_set_y"> <code><strong>y </strong></code> </a></td> <td>
+new value for <a href="#SkIPoint_fY">fY</a></td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="165418b5718d79d8f1682a8a0ee32ba0">
+
+#### Example Output
+
+~~~~
+pt1 == pt2
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkIPoint_Make">Make</a> <a href="#SkIPoint16_set">SkIPoint16::set</a>
+
+---
+
+<a name="SkIPoint_minus_operator"></a>
+## operator-
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkIPoint operator-() _const
+</pre>
+
+Returns <a href="#IPoint">IPoint</a> changing the signs of <a href="#SkIPoint_fX">fX</a> and <a href="#SkIPoint_fY">fY</a>.
+
+### Return Value
+
+<a href="#IPoint">IPoint</a> as (-<a href="#SkIPoint_fX">fX</a>, -<a href="#SkIPoint_fY">fY</a>)
+
+### Example
+
+<div><fiddle-embed name="d283e8876366349aedd85b65cadb3706">
+
+#### Example Output
+
+~~~~
+pt: 0, 0 negate: 0, 0
+pt: -1, -2 negate: 1, 2
+pt: 2147483647, -2147483647 negate: -2147483647, 2147483647
+pt: -2147483648, -2147483648 negate: -2147483648, -2147483648
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkIPoint_subtract_operator">operator-(const SkIPoint& a, const SkIPoint& b)</a> <a href="#SkIPoint_subtractfrom_operator">operator-=(const SkIVector& v)</a> <a href="#SkPoint_minus_operator">SkPoint::operator-() const</a>
+
+---
+
+<a name="SkIPoint_addto_operator"></a>
+## operator+=
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void operator+=(const SkIVector& v)
+</pre>
+
+Offsets <a href="#IPoint">IPoint</a> by <a href="SkIPoint_Reference#IVector">IVector</a> <a href="#SkIPoint_addto_operator_v">v</a>. Sets <a href="#IPoint">IPoint</a> to(<a href="#SkIPoint_fX">fX</a> + <a href="#SkIPoint_addto_operator_v">v</a>.<a href="#SkIPoint_fX">fX</a>, <a href="#SkIPoint_fY">fY</a> + <a href="#SkIPoint_addto_operator_v">v</a>.<a href="#SkIPoint_fY">fY</a>).
+
+### Parameters
+
+<table> <tr> <td><a name="SkIPoint_addto_operator_v"> <code><strong>v </strong></code> </a></td> <td>
+<a href="SkIPoint_Reference#IVector">IVector</a> to add</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="4eb2d95c9e9a66f05296e345bb68bd51"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkIPoint_add_operator">operator+(const SkIPoint& a, const SkIVector& b)</a> <a href="#SkPoint_addto_operator">SkPoint::operator+=(const SkVector& v)</a>
+
+---
+
+<a name="SkIPoint_subtractfrom_operator"></a>
+## operator-=
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void operator-=(const SkIVector& v)
+</pre>
+
+Subtracts <a href="SkIPoint_Reference#IVector">IVector</a> <a href="#SkIPoint_subtractfrom_operator_v">v</a> from <a href="#IPoint">IPoint</a>. Sets <a href="#IPoint">IPoint</a> to:
+(<a href="#SkIPoint_fX">fX</a> - <a href="#SkIPoint_subtractfrom_operator_v">v</a>.<a href="#SkIPoint_fX">fX</a>, <a href="#SkIPoint_fY">fY</a> - <a href="#SkIPoint_subtractfrom_operator_v">v</a>.<a href="#SkIPoint_fY">fY</a>).
+
+### Parameters
+
+<table> <tr> <td><a name="SkIPoint_subtractfrom_operator_v"> <code><strong>v </strong></code> </a></td> <td>
+<a href="SkIPoint_Reference#IVector">IVector</a> to subtract</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="a01e533dc7ab34ed728dc4e7a5f1f0ee"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkIPoint_subtract_operator">operator-(const SkIPoint& a, const SkIPoint& b)</a> <a href="#SkPoint_subtractfrom_operator">SkPoint::operator-=(const SkVector& v)</a>
+
+---
+
+<a name="SkIPoint_equals"></a>
+## equals
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool equals(int32_t x, int32_t y) const
+</pre>
+
+Returns true if <a href="#IPoint">IPoint</a> is equivalent to <a href="#IPoint">IPoint</a> constructed from (<a href="#SkIPoint_x">x</a>, <a href="#SkIPoint_y">y</a>).
+
+### Parameters
+
+<table> <tr> <td><a name="SkIPoint_equals_x"> <code><strong>x </strong></code> </a></td> <td>
+value compared with <a href="#SkIPoint_fX">fX</a></td>
+ </tr> <tr> <td><a name="SkIPoint_equals_y"> <code><strong>y </strong></code> </a></td> <td>
+value compared with <a href="#SkIPoint_fY">fY</a></td>
+ </tr>
+</table>
+
+### Return Value
+
+true if <a href="#IPoint">IPoint</a> <a href="#SkIPoint_equals">equals</a> (<a href="#SkIPoint_x">x</a>, <a href="#SkIPoint_y">y</a>)
+
+### Example
+
+<div><fiddle-embed name="64f575d36439d5b69aaed14ffeff1cc4">
+
+#### Example Output
+
+~~~~
+pt: 0, 0 == pt
+pt: -1, -2 == pt
+pt: 2147483647, -1 == pt
+pt: -2147483648, -1 == pt
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkIPoint_equal_operator">operator==(const SkIPoint& a, const SkIPoint& b)</a>
+
+---
+
+<a name="SkIPoint_equal_operator"></a>
+## operator==
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool operator==(const SkIPoint& a, const SkIPoint& b)
+</pre>
+
+Returns true if <a href="#SkIPoint_equal_operator_a">a</a> is equivalent to <a href="#SkIPoint_equal_operator_b">b</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkIPoint_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
+<a href="#IPoint">IPoint</a> to compare</td>
+ </tr> <tr> <td><a name="SkIPoint_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
+<a href="#IPoint">IPoint</a> to compare</td>
+ </tr>
+</table>
+
+### Return Value
+
+true if <a href="#SkIPoint_equal_operator_a">a</a>.<a href="#SkIPoint_fX">fX</a> == <a href="#SkIPoint_equal_operator_b">b</a>.<a href="#SkIPoint_fX">fX</a> and <a href="#SkIPoint_equal_operator_a">a</a>.<a href="#SkIPoint_fY">fY</a> == <a href="#SkIPoint_equal_operator_b">b</a>.<a href="#SkIPoint_fY">fY</a>
+
+### Example
+
+<div><fiddle-embed name="37ffe2817d720f99e6c252332ce70460">
+
+#### Example Output
+
+~~~~
+pt: 0, 0 == pt
+pt: -1, -2 == pt
+pt: 2147483647, -1 == pt
+pt: -2147483648, -1 == pt
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkIPoint_equals">equals</a> <a href="#SkIPoint_notequal_operator">operator!=(const SkIPoint& a, const SkIPoint& b)</a>
+
+---
+
+<a name="SkIPoint_notequal_operator"></a>
+## operator!=
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool operator!=(const SkIPoint& a, const SkIPoint& b)
+</pre>
+
+Returns true if <a href="#SkIPoint_notequal_operator_a">a</a> is not equivalent to <a href="#SkIPoint_notequal_operator_b">b</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkIPoint_notequal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
+<a href="#IPoint">IPoint</a> to compare</td>
+ </tr> <tr> <td><a name="SkIPoint_notequal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
+<a href="#IPoint">IPoint</a> to compare</td>
+ </tr>
+</table>
+
+### Return Value
+
+true if <a href="#SkIPoint_notequal_operator_a">a</a>.<a href="#SkIPoint_fX">fX</a> != <a href="#SkIPoint_notequal_operator_b">b</a>.<a href="#SkIPoint_fX">fX</a> or <a href="#SkIPoint_notequal_operator_a">a</a>.<a href="#SkIPoint_fY">fY</a> != <a href="#SkIPoint_notequal_operator_b">b</a>.<a href="#SkIPoint_fY">fY</a>
+
+### Example
+
+<div><fiddle-embed name="dd89dc48dff69b53d99530b120f204bc">
+
+#### Example Output
+
+~~~~
+pt: 0, 0 == pt
+pt: -1, -2 == pt
+pt: 2147483647, -1 == pt
+pt: -2147483648, -1 == pt
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkIPoint_equal_operator">operator==(const SkIPoint& a, const SkIPoint& b)</a> <a href="#SkIPoint_equals">equals</a>
+
+---
+
+<a name="SkIPoint_subtract_operator"></a>
+## operator-
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkIVector operator-(const SkIPoint& a, const SkIPoint& b)
+</pre>
+
+Returns <a href="SkIPoint_Reference#IVector">IVector</a> from <a href="#SkIPoint_subtract_operator_b">b</a> to <a href="#SkIPoint_subtract_operator_a">a</a>; computed as(<a href="#SkIPoint_subtract_operator_a">a</a>.<a href="#SkIPoint_fX">fX</a> - <a href="#SkIPoint_subtract_operator_b">b</a>.<a href="#SkIPoint_fX">fX</a>, <a href="#SkIPoint_subtract_operator_a">a</a>.<a href="#SkIPoint_fY">fY</a> - <a href="#SkIPoint_subtract_operator_b">b</a>.<a href="#SkIPoint_fY">fY</a>).
+
+Can also be used to subtract <a href="SkIPoint_Reference#IVector">IVector</a> from <a href="SkIPoint_Reference#IVector">IVector</a>, returning <a href="SkIPoint_Reference#IVector">IVector</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkIPoint_subtract_operator_a"> <code><strong>a </strong></code> </a></td> <td>
+<a href="#IPoint">IPoint</a> or <a href="SkIPoint_Reference#IVector">IVector</a> to subtract from</td>
+ </tr> <tr> <td><a name="SkIPoint_subtract_operator_b"> <code><strong>b </strong></code> </a></td> <td>
+<a href="SkIPoint_Reference#IVector">IVector</a> to subtract</td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="SkIPoint_Reference#IVector">IVector</a> from <a href="#SkIPoint_subtract_operator_b">b</a> to <a href="#SkIPoint_subtract_operator_a">a</a>
+
+### Example
+
+<div><fiddle-embed name="e626e26bf557857b824aa7d03f723e0f"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkIPoint_subtractfrom_operator">operator-=(const SkIVector& v)</a>
+
+---
+
+<a name="SkIPoint_add_operator"></a>
+## operator+
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkIPoint operator+(const SkIPoint& a, const SkIVector& b)
+</pre>
+
+Returns <a href="#IPoint">IPoint</a> resulting from <a href="#IPoint">IPoint</a> <a href="#SkIPoint_add_operator_a">a</a> offset by <a href="SkIPoint_Reference#IVector">IVector</a> <a href="#SkIPoint_add_operator_b">b</a>, computed as:
+(<a href="#SkIPoint_add_operator_a">a</a>.<a href="#SkIPoint_fX">fX</a> + <a href="#SkIPoint_add_operator_b">b</a>.<a href="#SkIPoint_fX">fX</a>, <a href="#SkIPoint_add_operator_a">a</a>.<a href="#SkIPoint_fY">fY</a> + <a href="#SkIPoint_add_operator_b">b</a>.<a href="#SkIPoint_fY">fY</a>).
+
+Can also be used to offset <a href="#IPoint">IPoint</a> <a href="#SkIPoint_add_operator_b">b</a> by <a href="SkIPoint_Reference#IVector">IVector</a> <a href="#SkIPoint_add_operator_a">a</a>, returning <a href="#IPoint">IPoint</a>.
+Can also be used to add <a href="SkIPoint_Reference#IVector">IVector</a> to <a href="SkIPoint_Reference#IVector">IVector</a>, returning <a href="SkIPoint_Reference#IVector">IVector</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkIPoint_add_operator_a"> <code><strong>a </strong></code> </a></td> <td>
+<a href="#IPoint">IPoint</a> or <a href="SkIPoint_Reference#IVector">IVector</a> to add to</td>
+ </tr> <tr> <td><a name="SkIPoint_add_operator_b"> <code><strong>b </strong></code> </a></td> <td>
+<a href="#IPoint">IPoint</a> or <a href="SkIPoint_Reference#IVector">IVector</a> to add</td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="#IPoint">IPoint</a> equal to <a href="#SkIPoint_add_operator_a">a</a> offset by <a href="#SkIPoint_add_operator_b">b</a>
+
+### Example
+
+<div><fiddle-embed name="63f4cba971c6d8434595906f865b5a29"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkIPoint_addto_operator">operator+=(const SkIVector& v)</a>
+
+---
+
diff --git a/site/user/api/SkIRect_Reference.md b/site/user/api/SkIRect_Reference.md
index 7022cc6aec..f7b675c8df 100644
--- a/site/user/api/SkIRect_Reference.md
+++ b/site/user/api/SkIRect_Reference.md
@@ -21,7 +21,7 @@ its <a href="#SkIRect_top">top</a>, it is considered empty.
| description | function |
| --- | --- |
-| bool <a href="#SkIRect_not_equal_operator">operator!=(const SkIRect& a, const SkIRect& b)</a> | Returns true if members are unequal. |
+| bool <a href="#SkIRect_notequal_operator">operator!=(const SkIRect& a, const SkIRect& b)</a> | Returns true if members are unequal. |
| bool <a href="#SkIRect_equal_operator">operator==(const SkIRect& a, const SkIRect& b)</a> | Returns true if members are equal. |
## <a name="Member_Functions"></a> Member Functions
@@ -96,7 +96,7 @@ When equal to or less than <a href="#SkIRect_fTop">fTop</a>, <a href="#IRect">IR
<a name="SkIRect_MakeEmpty"></a>
## MakeEmpty
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeEmpty()
</pre>
@@ -133,7 +133,7 @@ outset rect isEmpty: false
<a name="SkIRect_MakeLargest"></a>
## MakeLargest
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static SkIRect SK_WARN_UNUSED_RESULT MakeLargest()
</pre>
@@ -168,7 +168,7 @@ outset isEmpty: true
<a name="SkIRect_MakeWH"></a>
## MakeWH
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeWH(int32_t w, int32_t h)
</pre>
@@ -209,7 +209,7 @@ all equal
<a name="SkIRect_MakeSize"></a>
## MakeSize
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeSize(const SkISize& size)
</pre>
@@ -249,9 +249,8 @@ floor width: 25 height: 35
<a name="SkIRect_MakeLTRB"></a>
## MakeLTRB
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeLTRB(int32_t l, int32_t t,
- int32_t r, int32_t b)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeLTRB(int32_t l, int32_t t, int32_t r, int32_t b)
</pre>
Returns constructed <a href="#IRect">IRect</a> <a href="#SkIRect_set">set</a> to (<a href="#SkIRect_MakeLTRB_l">l</a>, <a href="#SkIRect_MakeLTRB_t">t</a>, <a href="#SkIRect_MakeLTRB_r">r</a>, <a href="#SkIRect_MakeLTRB_b">b</a>). Does not <a href="#SkIRect_sort">sort</a> input; <a href="SkRect_Reference#Rect">Rect</a> may
@@ -296,9 +295,8 @@ rect: 5, 25, 15, 35 isEmpty: false
<a name="SkIRect_MakeXYWH"></a>
## MakeXYWH
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeXYWH(int32_t x, int32_t y,
- int32_t w, int32_t h)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeXYWH(int32_t x, int32_t y, int32_t w, int32_t h)
</pre>
Returns constructed <a href="#IRect">IRect</a> <a href="#SkIRect_set">set</a> to:
@@ -345,7 +343,7 @@ rect: -10, 35, 5, 60 isEmpty: false
<a name="SkIRect_left"></a>
## left
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int left() const
</pre>
@@ -378,7 +376,7 @@ sorted.fLeft: 10 sorted.left(): 10
<a name="SkIRect_top"></a>
## top
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int top() const
</pre>
@@ -411,7 +409,7 @@ sorted.fTop: 5 sorted.top(): 5
<a name="SkIRect_right"></a>
## right
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int right() const
</pre>
@@ -444,7 +442,7 @@ sorted.fRight: 15 sorted.right(): 15
<a name="SkIRect_bottom"></a>
## bottom
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int bottom() const
</pre>
@@ -477,7 +475,7 @@ sorted.fBottom: 25 sorted.bottom(): 25
<a name="SkIRect_x"></a>
## x
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int x() const
</pre>
@@ -510,7 +508,7 @@ sorted.fLeft: 10 sorted.x(): 10
<a name="SkIRect_y"></a>
## y
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int y() const
</pre>
@@ -543,11 +541,11 @@ sorted.fTop: 5 sorted.y(): 5
<a name="SkIRect_width"></a>
## width
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int width() const
</pre>
-Returns span on the x-axis. This does not check if <a href="#IRect">IRect</a> is sorted, or if
+Returns span on the <a href="#SkIRect_x">x</a>-axis. This does not check if <a href="#IRect">IRect</a> is sorted, or if
result fits in 32-bit signed integer; result may be negative.
### Return Value
@@ -576,11 +574,11 @@ large width: -5
<a name="SkIRect_height"></a>
## height
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int height() const
</pre>
-Returns span on the y-axis. This does not check if <a href="#IRect">IRect</a> is sorted, or if
+Returns span on the <a href="#SkIRect_y">y</a>-axis. This does not check if <a href="#IRect">IRect</a> is sorted, or if
result fits in 32-bit signed integer; result may be negative.
### Return Value
@@ -609,11 +607,11 @@ large height: -5
<a name="SkIRect_size"></a>
## size
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkISize size() const
</pre>
-Returns spans on the x-axis and y-axis. This does not check if <a href="#IRect">IRect</a> is sorted,
+Returns spans on the <a href="#SkIRect_x">x</a>-axis and <a href="#SkIRect_y">y</a>-axis. This does not check if <a href="#IRect">IRect</a> is sorted,
or if result fits in 32-bit signed integer; result may be negative.
### Return Value
@@ -643,7 +641,7 @@ outset rect: 20, 30, 80, 90 size: 60, 60
<a name="SkIRect_centerX"></a>
## centerX
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int centerX() const
</pre>
@@ -679,7 +677,7 @@ left: -10 right: 11 centerX: 0 div2: 0
<a name="SkIRect_centerY"></a>
## centerY
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int centerY() const
</pre>
@@ -713,7 +711,7 @@ left: 1073741824 right: 1073741826 centerX: -1073741823 safe mid x: 1073741825
<a name="SkIRect_isEmpty"></a>
## isEmpty
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isEmpty() const
</pre>
@@ -749,7 +747,7 @@ sorted: {20, 40, 20, 50} is empty
<a name="SkIRect_isLargest"></a>
## isLargest
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isLargest() const
</pre>
@@ -783,7 +781,7 @@ large is empty: false
<a name="SkIRect_equal_operator"></a>
## operator==
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool operator==(const SkIRect& a, const SkIRect& b)
</pre>
@@ -817,25 +815,25 @@ test == sorted
### See Also
-<a href="#SkIRect_not_equal_operator">operator!=(const SkIRect& a, const SkIRect& b)</a>
+<a href="#SkIRect_notequal_operator">operator!=(const SkIRect& a, const SkIRect& b)</a>
---
-<a name="SkIRect_not_equal_operator"></a>
+<a name="SkIRect_notequal_operator"></a>
## operator!=
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool operator!=(const SkIRect& a, const SkIRect& b)
</pre>
-Returns true if any member in <a href="#SkIRect_not_equal_operator_a">a</a>: <a href="#SkIRect_fLeft">fLeft</a>, <a href="#SkIRect_fTop">fTop</a>, <a href="#SkIRect_fRight">fRight</a>, and <a href="#SkIRect_fBottom">fBottom</a>; is not
-identical to the corresponding member in <a href="#SkIRect_not_equal_operator_b">b</a>.
+Returns true if any member in <a href="#SkIRect_notequal_operator_a">a</a>: <a href="#SkIRect_fLeft">fLeft</a>, <a href="#SkIRect_fTop">fTop</a>, <a href="#SkIRect_fRight">fRight</a>, and <a href="#SkIRect_fBottom">fBottom</a>; is not
+identical to the corresponding member in <a href="#SkIRect_notequal_operator_b">b</a>.
### Parameters
-<table> <tr> <td><a name="SkIRect_not_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
+<table> <tr> <td><a name="SkIRect_notequal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
<a href="#IRect">IRect</a> to compare</td>
- </tr> <tr> <td><a name="SkIRect_not_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
+ </tr> <tr> <td><a name="SkIRect_notequal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
<a href="#IRect">IRect</a> to compare</td>
</tr>
</table>
@@ -865,7 +863,7 @@ test != sorted
<a name="SkIRect_is16Bit"></a>
## is16Bit
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool is16Bit() const
</pre>
@@ -898,7 +896,7 @@ true if members fit in 16-bit word
<a name="SkIRect_setEmpty"></a>
## setEmpty
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setEmpty()
</pre>
@@ -930,7 +928,7 @@ rect: {0, 0, 0, 0} is empty
<a name="SkIRect_set"></a>
## set
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void set(int32_t left, int32_t top, int32_t right, int32_t bottom)
</pre>
@@ -973,7 +971,7 @@ rect2: {3, 4, 1, 2}
<a name="SkIRect_setLTRB"></a>
## setLTRB
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setLTRB(int32_t left, int32_t top, int32_t right, int32_t bottom)
</pre>
@@ -1016,7 +1014,7 @@ rect2: {3, 4, 1, 2}
<a name="SkIRect_setXYWH"></a>
## setXYWH
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setXYWH(int32_t x, int32_t y, int32_t width, int32_t height)
</pre>
@@ -1060,7 +1058,7 @@ rect: -10, 35, 5, 60 isEmpty: false
<a name="SkIRect_setLargest"></a>
## setLargest
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setLargest()
</pre>
@@ -1091,7 +1089,7 @@ outset isEmpty: true
<a name="SkIRect_setLargestInverted"></a>
## setLargestInverted
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setLargestInverted()
</pre>
@@ -1108,7 +1106,7 @@ flag that a condition is met, but otherwise has no special purpose.
<a name="SkIRect_makeOffset"></a>
## makeOffset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkIRect makeOffset(int32_t dx, int32_t dy) const
</pre>
@@ -1154,7 +1152,7 @@ rect: 25, 82, 35, 92 isEmpty: false
<a name="SkIRect_makeInset"></a>
## makeInset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkIRect makeInset(int32_t dx, int32_t dy) const
</pre>
@@ -1200,7 +1198,7 @@ rect: 25, 82, 5, 28 isEmpty: true
<a name="SkIRect_makeOutset"></a>
## makeOutset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkIRect makeOutset(int32_t dx, int32_t dy) const
</pre>
@@ -1246,7 +1244,7 @@ rect: -5, 18, 35, 92 isEmpty: false
<a name="SkIRect_offset"></a>
## offset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void offset(int32_t dx, int32_t dy)
</pre>
@@ -1284,7 +1282,7 @@ rect: 15, 27, 55, 86
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void offset(const SkIPoint& delta)
</pre>
@@ -1324,7 +1322,7 @@ rect: 15, 27, 55, 86
<a name="SkIRect_offsetTo"></a>
## offsetTo
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void offsetTo(int32_t newX, int32_t newY)
</pre>
@@ -1361,7 +1359,7 @@ rect: 15, 27, 55, 86
<a name="SkIRect_inset"></a>
## inset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void inset(int32_t dx, int32_t dy)
</pre>
@@ -1402,7 +1400,7 @@ rect: 15, 27, 45, 60
<a name="SkIRect_outset"></a>
## outset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void outset(int32_t dx, int32_t dy)
</pre>
@@ -1443,7 +1441,7 @@ rect: 5, 1, 55, 86
<a name="SkIRect_quickReject"></a>
## quickReject
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool quickReject(int l, int t, int r, int b) const
</pre>
@@ -1493,7 +1491,7 @@ rect (7, 11, 13, 17) test(12, 16, 14, 18) quickReject false; intersects true
<a name="SkIRect_contains"></a>
## contains
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool contains(int32_t x, int32_t y) const
</pre>
@@ -1509,9 +1507,9 @@ returns true if constructed area is completely enclosed by <a href="#IRect">IRec
### Parameters
<table> <tr> <td><a name="SkIRect_contains_x"> <code><strong>x </strong></code> </a></td> <td>
-test <a href="undocumented#Point">Point</a> x-coordinate</td>
+test <a href="SkPoint_Reference#Point">Point</a> <a href="#SkIRect_x">x</a>-coordinate</td>
</tr> <tr> <td><a name="SkIRect_contains_y"> <code><strong>y </strong></code> </a></td> <td>
-test <a href="undocumented#Point">Point</a> y-coordinate</td>
+test <a href="SkPoint_Reference#Point">Point</a> <a href="#SkIRect_y">y</a>-coordinate</td>
</tr>
</table>
@@ -1539,7 +1537,7 @@ rect: (30, 50, 40, 60) does not contain (30, 60)
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool contains(int32_t left, int32_t top, int32_t right, int32_t bottom) const
</pre>
@@ -1586,7 +1584,7 @@ rect: (30, 50, 40, 60) does not contain (29, 59, 30, 60)
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool contains(const SkIRect& r) const
</pre>
@@ -1626,7 +1624,7 @@ rect: (30, 50, 40, 60) does not contain (29, 59, 30, 60)
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool contains(const SkRect& r) const
</pre>
@@ -1669,9 +1667,8 @@ rect: (30, 50, 40, 60) does not contain (29, 59, 30, 60)
<a name="SkIRect_containsNoEmptyCheck"></a>
## containsNoEmptyCheck
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool containsNoEmptyCheck(int32_t left, int32_t top, int32_t right,
- int32_t bottom) const
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool containsNoEmptyCheck(int32_t left, int32_t top, int32_t right, int32_t bottom) const
</pre>
Constructs <a href="#IRect">IRect</a> from (<a href="#SkIRect_left">left</a>, <a href="#SkIRect_top">top</a>, <a href="#SkIRect_right">right</a>, <a href="#SkIRect_bottom">bottom</a>). Does not <a href="#SkIRect_sort">sort</a>
@@ -1719,7 +1716,7 @@ rect: (30, 50, 40, 60) does not contain (29, 59, 30, 60)
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool containsNoEmptyCheck(const SkIRect& r) const
</pre>
@@ -1770,7 +1767,7 @@ describes an area: <a href="#SkIRect_fLeft">fLeft</a> is less than <a href="#SkI
<a name="SkIRect_intersect"></a>
## intersect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool intersect(const SkIRect& r)
</pre>
@@ -1810,7 +1807,7 @@ intersection: 30, 60, 50, 80
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool SK_WARN_UNUSED_RESULT intersect(const SkIRect& a, const SkIRect& b)
</pre>
@@ -1853,9 +1850,8 @@ intersection: 30, 60, 50, 80
<a name="SkIRect_intersectNoEmptyCheck"></a>
## intersectNoEmptyCheck
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool SK_WARN_UNUSED_RESULT intersectNoEmptyCheck(const SkIRect& a,
- const SkIRect& b)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool SK_WARN_UNUSED_RESULT intersectNoEmptyCheck(const SkIRect& a, const SkIRect& b)
</pre>
Returns true if <a href="#SkIRect_intersectNoEmptyCheck_a">a</a> intersects <a href="#SkIRect_intersectNoEmptyCheck_b">b</a>, and sets <a href="#IRect">IRect</a> to intersection.
@@ -1894,7 +1890,7 @@ intersection: 30, 60, 50, 80
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool intersect(int32_t left, int32_t top, int32_t right, int32_t bottom)
</pre>
@@ -1946,7 +1942,7 @@ intersection: 30, 60, 50, 80
<a name="SkIRect_Intersects"></a>
## Intersects
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static bool Intersects(const SkIRect& a, const SkIRect& b)
</pre>
@@ -1987,7 +1983,7 @@ intersection
<a name="SkIRect_IntersectsNoEmptyCheck"></a>
## IntersectsNoEmptyCheck
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static bool IntersectsNoEmptyCheck(const SkIRect& a, const SkIRect& b)
</pre>
@@ -2028,7 +2024,7 @@ intersection
<a name="SkIRect_join"></a>
## join
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void join(int32_t left, int32_t top, int32_t right, int32_t bottom)
</pre>
@@ -2071,7 +2067,7 @@ join: 10, 20, 55, 65
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void join(const SkIRect& r)
</pre>
@@ -2107,7 +2103,7 @@ join: 10, 20, 55, 65
<a name="SkIRect_sort"></a>
## sort
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void sort()
</pre>
@@ -2137,7 +2133,7 @@ sorted: 20, 10, 30, 50
<a name="SkIRect_makeSorted"></a>
## makeSorted
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkIRect makeSorted() const
</pre>
@@ -2171,7 +2167,7 @@ sorted: 20, 10, 30, 50
<a name="SkIRect_EmptyIRect"></a>
## EmptyIRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static const SkIRect& SK_WARN_UNUSED_RESULT EmptyIRect()
</pre>
diff --git a/site/user/api/SkImage_Reference.md b/site/user/api/SkImage_Reference.md
new file mode 100644
index 0000000000..317215073b
--- /dev/null
+++ b/site/user/api/SkImage_Reference.md
@@ -0,0 +1,1876 @@
+SkImage Reference
+===
+
+# <a name="Image"></a> Image
+
+# <a name="SkImage"></a> Class SkImage
+<a href="#SkImage">SkImage</a> is an abstraction for drawing a rectangle of pixels, though the
+particular type of image could be actually storing its data on the <a href="undocumented#GPU">GPU</a>, or
+as drawing commands (picture or <a href="undocumented#PDF">PDF</a> or otherwise), ready to be played back
+into another canvas.
+The content of <a href="#SkImage">SkImage</a> is always immutable, though the actual storage may
+change, if for example that image can be re-created via encoded data or
+other means.
+<a href="#SkImage">SkImage</a> always has a non-zero <a href="#SkImage_dimensions">dimensions</a>. If there is a request to create a new
+image, either directly or via <a href="SkSurface_Reference#SkSurface">SkSurface</a>, and either of the requested <a href="#SkImage_dimensions">dimensions</a>
+are zero, then nullptr will be returned.
+
+# <a name="Overview"></a> Overview
+
+## <a name="Subtopics"></a> Subtopics
+
+| topics | description |
+| --- | --- |
+
+## <a name="Structs"></a> Structs
+
+| description | struct |
+| --- | --- |
+| <a href="#SkImage_DeferredTextureImageUsageParams">DeferredTextureImageUsageParams</a> | |
+
+## <a name="Member_Functions"></a> Member Functions
+
+| description | function |
+| --- | --- |
+| <a href="#SkImage_MakeFromAHardwareBuffer">MakeFromAHardwareBuffer</a> | |
+| <a href="#SkImage_MakeBackendTextureFromSkImage">MakeBackendTextureFromSkImage</a> | |
+| <a href="#SkImage_MakeCrossContextFromEncoded">MakeCrossContextFromEncoded</a> | |
+| <a href="#SkImage_MakeFromAHardwareBuffer">MakeFromAHardwareBuffer</a> | |
+| <a href="#SkImage_MakeFromAdoptedTexture">MakeFromAdoptedTexture</a> | |
+| <a href="#SkImage_MakeFromBitmap">MakeFromBitmap</a> | |
+| <a href="#SkImage_MakeFromDeferredTextureImageData">MakeFromDeferredTextureImageData</a> | |
+| <a href="#SkImage_MakeFromEncoded">MakeFromEncoded</a> | |
+| <a href="#SkImage_MakeFromGenerator">MakeFromGenerator</a> | |
+| <a href="#SkImage_MakeFromNV12TexturesCopy">MakeFromNV12TexturesCopy</a> | |
+| <a href="#SkImage_MakeFromPicture">MakeFromPicture</a> | |
+| <a href="#SkImage_MakeFromRaster">MakeFromRaster</a> | |
+| <a href="#SkImage_MakeFromTexture">MakeFromTexture</a> | |
+| <a href="#SkImage_MakeFromYUVTexturesCopy">MakeFromYUVTexturesCopy</a> | |
+| <a href="#SkImage_MakeRasterCopy">MakeRasterCopy</a> | |
+| <a href="#SkImage_MakeRasterData">MakeRasterData</a> | |
+| <a href="#SkImage_alphaType">alphaType</a> | |
+| <a href="#SkImage_asLegacyBitmap">asLegacyBitmap</a> | |
+| <a href="#SkImage_bounds">bounds</a> | |
+| <a href="#SkImage_colorSpace">colorSpace</a> | |
+| <a href="#SkImage_dimensions">dimensions</a> | |
+| <a href="#SkImage_encodeToData">encodeToData</a> | |
+| <a href="#SkImage_getDeferredTextureImageData">getDeferredTextureImageData</a> | |
+| <a href="#SkImage_getTexture">getTexture</a> | |
+| <a href="#SkImage_getTextureHandle">getTextureHandle</a> | |
+| <a href="#SkImage_height">height</a> | |
+| <a href="#SkImage_isAlphaOnly">isAlphaOnly</a> | |
+| <a href="#SkImage_isLazyGenerated">isLazyGenerated</a> | |
+| <a href="#SkImage_isOpaque">isOpaque</a> | |
+| <a href="#SkImage_isTextureBacked">isTextureBacked</a> | |
+| <a href="#SkImage_isValid">isValid</a> | |
+| <a href="#SkImage_makeColorSpace">makeColorSpace</a> | |
+| <a href="#SkImage_makeNonTextureImage">makeNonTextureImage</a> | |
+| <a href="#SkImage_makeShader">makeShader</a> | |
+| <a href="#SkImage_makeSubset">makeSubset</a> | |
+| <a href="#SkImage_makeTextureImage">makeTextureImage</a> | |
+| <a href="#SkImage_makeWithFilter">makeWithFilter</a> | |
+| <a href="#SkImage_peekPixels">peekPixels</a> | |
+| <a href="#SkImage_readPixels">readPixels</a> | |
+| <a href="#SkImage_refColorSpace">refColorSpace</a> | |
+| <a href="#SkImage_refEncodedData">refEncodedData</a> | |
+| <a href="#SkImage_scalePixels">scalePixels</a> | |
+| <a href="#SkImage_toString">toString</a> | |
+| <a href="#SkImage_uniqueID">uniqueID</a> | |
+| <a href="#SkImage_width">width</a> | |
+
+# <a name="SkImage_DeferredTextureImageUsageParams"></a> Struct SkImage::DeferredTextureImageUsageParams
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+</pre>
+
+Drawing parameters for which a deferred texture image data should be optimized. */
+
+<a name="SkImage_DeferredTextureImageUsageParams_DeferredTextureImageUsageParams"></a>
+## DeferredTextureImageUsageParams
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+DeferredTextureImageUsageParams(const SkMatrix matrix, const SkFilterQuality quality,
+ int preScaleMipLevel)
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_DeferredTextureImageUsageParams_DeferredTextureImageUsageParams_matrix"> <code><strong>matrix </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_DeferredTextureImageUsageParams_DeferredTextureImageUsageParams_quality"> <code><strong>quality </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_DeferredTextureImageUsageParams_DeferredTextureImageUsageParams_preScaleMipLevel"> <code><strong>preScaleMipLevel </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_DeferredTextureImageUsageParams_fMatrix"> <code><strong>SkMatrix fMatrix</strong></code> </a>
+
+<a name="SkImage_DeferredTextureImageUsageParams_fQuality"> <code><strong>SkFilterQuality fQuality</strong></code> </a>
+
+<a name="SkImage_DeferredTextureImageUsageParams_fPreScaleMipLevel"> <code><strong>int fPreScaleMipLevel</strong></code> </a>
+
+<a name="SkImage_MakeRasterCopy"></a>
+## MakeRasterCopy
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkImage&gt; MakeRasterCopy(const SkPixmap& pixmap)
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_MakeRasterCopy_pixmap"> <code><strong>pixmap </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_MakeRasterData"></a>
+## MakeRasterData
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkImage&gt; MakeRasterData(const Info& info, sk_sp&lt;SkData&gt; pixels, size_t rowBytes)
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_MakeRasterData_info"> <code><strong>info </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeRasterData_pixels"> <code><strong>pixels </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeRasterData_rowBytes"> <code><strong>rowBytes </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_MakeFromRaster"></a>
+## MakeFromRaster
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkImage&gt; MakeFromRaster(const SkPixmap& pixmap, RasterReleaseProc rasterReleaseProc,
+ ReleaseContext releaseContext)
+</pre>
+
+Return a new <a href="#Image">Image</a> referencing the specified pixels. These must remain valid and unchanged
+until the specified release-proc is called, indicating that <a href="undocumented#Skia">Skia</a> no longer has a reference
+to the pixels.
+Returns nullptr if the requested <a href="#SkImage_MakeFromRaster_pixmap">pixmap</a> info is unsupported.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_MakeFromRaster_pixmap"> <code><strong>pixmap </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromRaster_rasterReleaseProc"> <code><strong>rasterReleaseProc </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromRaster_releaseContext"> <code><strong>releaseContext </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_MakeFromBitmap"></a>
+## MakeFromBitmap
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkImage&gt; MakeFromBitmap(const SkBitmap& bitmap)
+</pre>
+
+Construct a new image from the specified <a href="#SkImage_MakeFromBitmap_bitmap">bitmap</a>. If the <a href="#SkImage_MakeFromBitmap_bitmap">bitmap</a> is marked immutable, and
+its pixel memory is shareable, it may be shared instead of copied.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_MakeFromBitmap_bitmap"> <code><strong>bitmap </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_MakeFromGenerator"></a>
+## MakeFromGenerator
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkImage&gt; MakeFromGenerator(std::unique_ptr&lt;SkImageGenerator&gt; imageGenerator,
+ const SkIRect* subset = nullptr)
+</pre>
+
+Construct a new <a href="#SkImage">SkImage</a> based on the given ImageGenerator. Returns nullptr on error.
+This function will always take ownership of the passed generator.
+If a <a href="#SkImage_MakeFromGenerator_subset">subset</a> is specified, it must be contained within the generator's <a href="#SkImage_bounds">bounds</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_MakeFromGenerator_imageGenerator"> <code><strong>imageGenerator </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromGenerator_subset"> <code><strong>subset </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_MakeFromEncoded"></a>
+## MakeFromEncoded
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkImage&gt; MakeFromEncoded(sk_sp&lt;SkData&gt; encoded, const SkIRect* subset = nullptr)
+</pre>
+
+Construct a new <a href="#SkImage">SkImage</a> based on the specified <a href="#SkImage_MakeFromEncoded_encoded">encoded</a> data. Returns nullptr on failure,
+which can mean that the format of the <a href="#SkImage_MakeFromEncoded_encoded">encoded</a> data was not recognized/supported.
+If a <a href="#SkImage_MakeFromEncoded_subset">subset</a> is specified, it must be contained within the <a href="#SkImage_MakeFromEncoded_encoded">encoded</a> data's <a href="#SkImage_bounds">bounds</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_MakeFromEncoded_encoded"> <code><strong>encoded </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromEncoded_subset"> <code><strong>subset </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_MakeFromTexture"></a>
+## MakeFromTexture
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkImage&gt; MakeFromTexture(GrContext* context, const GrBackendTexture& backendTexture,
+ GrSurfaceOrigin origin, SkAlphaType alphaType,
+ sk_sp&lt;SkColorSpace&gt; colorSpace)
+</pre>
+
+Create a new image from the specified descriptor. Note - the caller is responsible for
+managing the lifetime of the underlying platform texture.
+Will return nullptr if the specified back-end texture is unsupported.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_MakeFromTexture_context"> <code><strong>context </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromTexture_backendTexture"> <code><strong>backendTexture </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromTexture_origin"> <code><strong>origin </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromTexture_alphaType"> <code><strong>alphaType </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromTexture_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkImage&gt; MakeFromTexture(GrContext* context, const GrBackendTexture& backendTexture,
+ GrSurfaceOrigin origin, SkAlphaType alphaType,
+ sk_sp&lt;SkColorSpace&gt; colorSpace,
+ TextureReleaseProc textureReleaseProc,
+ ReleaseContext releaseContext)
+</pre>
+
+Create a new image from the <a href="undocumented#GrBackendTexture">GrBackendTexture</a>. The underlying platform texture must stay
+valid and unaltered until the specified release-proc is invoked, indicating that <a href="undocumented#Skia">Skia</a>
+no longer is holding a reference to it.
+Will return nullptr if the specified back-end texture is unsupported.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_MakeFromTexture_2_context"> <code><strong>context </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromTexture_2_backendTexture"> <code><strong>backendTexture </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromTexture_2_origin"> <code><strong>origin </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromTexture_2_alphaType"> <code><strong>alphaType </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromTexture_2_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromTexture_2_textureReleaseProc"> <code><strong>textureReleaseProc </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromTexture_2_releaseContext"> <code><strong>releaseContext </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_MakeCrossContextFromEncoded"></a>
+## MakeCrossContextFromEncoded
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkImage&gt; MakeCrossContextFromEncoded(GrContext* context, sk_sp&lt;SkData&gt; data,
+ bool buildMips, SkColorSpace* dstColorSpace)
+</pre>
+
+Decodes and uploads the encoded <a href="#SkImage_MakeCrossContextFromEncoded_data">data</a> to a <a href="undocumented#GPU">GPU</a> backed image using the supplied <a href="undocumented#GrContext">GrContext</a>.
+That image can be safely used by other GrContexts, across thread boundaries. The <a href="undocumented#GrContext">GrContext</a>
+used here, and the ones used to draw this image later must be in the same <a href="undocumented#OpenGL">OpenGL</a> share group,
+or otherwise be able to share resources.
+When the image's ref count reaches zero, the original <a href="undocumented#GrContext">GrContext</a> will destroy the texture,
+asynchronously.
+The texture will be decoded and uploaded to be suitable for use with surfaces that have the
+supplied destination color space. The color space of the image itself will be determined
+from the encoded <a href="#SkImage_MakeCrossContextFromEncoded_data">data</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_MakeCrossContextFromEncoded_context"> <code><strong>context </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeCrossContextFromEncoded_data"> <code><strong>data </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeCrossContextFromEncoded_buildMips"> <code><strong>buildMips </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeCrossContextFromEncoded_dstColorSpace"> <code><strong>dstColorSpace </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_MakeFromAdoptedTexture"></a>
+## MakeFromAdoptedTexture
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkImage&gt; MakeFromAdoptedTexture(GrContext* context,
+ const GrBackendTexture& backendTexture,
+ GrSurfaceOrigin surfaceOrigin,
+ SkAlphaType alphaType = kPremul_SkAlphaType,
+ sk_sp&lt;SkColorSpace&gt; colorSpace = nullptr)
+</pre>
+
+Create a new image from the specified descriptor. Note - <a href="undocumented#Skia">Skia</a> will delete or recycle the
+texture when the image is released.
+Will return nullptr if the specified back-end texture is unsupported.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_MakeFromAdoptedTexture_context"> <code><strong>context </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromAdoptedTexture_backendTexture"> <code><strong>backendTexture </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromAdoptedTexture_surfaceOrigin"> <code><strong>surfaceOrigin </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromAdoptedTexture_alphaType"> <code><strong>alphaType </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromAdoptedTexture_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_MakeFromYUVTexturesCopy"></a>
+## MakeFromYUVTexturesCopy
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkImage&gt; MakeFromYUVTexturesCopy(GrContext* context, SkYUVColorSpace yuvColorSpace,
+ const GrBackendObject yuvTextureHandles[3],
+ const SkISize yuvSizes[3],
+ GrSurfaceOrigin surfaceOrigin,
+ sk_sp&lt;SkColorSpace&gt; colorSpace = nullptr)
+</pre>
+
+Create a new image by copying the pixels from the specified y, u, v textures. The data
+from the textures is immediately ingested into the image and the textures can be modified or
+deleted after the function returns. The image will have the <a href="#SkImage_dimensions">dimensions</a> of the y texture.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_MakeFromYUVTexturesCopy_context"> <code><strong>context </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromYUVTexturesCopy_yuvColorSpace"> <code><strong>yuvColorSpace </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromYUVTexturesCopy_yuvTextureHandles"> <code><strong>yuvTextureHandles </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromYUVTexturesCopy_yuvSizes"> <code><strong>yuvSizes </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromYUVTexturesCopy_surfaceOrigin"> <code><strong>surfaceOrigin </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromYUVTexturesCopy_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_MakeFromNV12TexturesCopy"></a>
+## MakeFromNV12TexturesCopy
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkImage&gt; MakeFromNV12TexturesCopy(GrContext* context, SkYUVColorSpace yuvColorSpace,
+ const GrBackendObject nv12TextureHandles[2],
+ const SkISize nv12Sizes[2],
+ GrSurfaceOrigin surfaceOrigin,
+ sk_sp&lt;SkColorSpace&gt; colorSpace = nullptr)
+</pre>
+
+Create a new image by copying the pixels from the specified y and <a href="undocumented#UV_Mapping">UV Mapping</a>. The data
+from the textures is immediately ingested into the image and the textures can be modified or
+deleted after the function returns. The image will have the <a href="#SkImage_dimensions">dimensions</a> of the y texture.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_MakeFromNV12TexturesCopy_context"> <code><strong>context </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromNV12TexturesCopy_yuvColorSpace"> <code><strong>yuvColorSpace </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromNV12TexturesCopy_nv12TextureHandles"> <code><strong>nv12TextureHandles </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromNV12TexturesCopy_nv12Sizes"> <code><strong>nv12Sizes </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromNV12TexturesCopy_surfaceOrigin"> <code><strong>surfaceOrigin </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromNV12TexturesCopy_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+## <a name="SkImage_BitDepth"></a> Enum SkImage::BitDepth
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+enum <a href="#SkImage_BitDepth">BitDepth</a> {
+<a href="#SkImage_kU8">kU8</a>,
+<a href="#SkImage_kF16">kF16</a>,
+};</pre>
+
+### Constants
+
+<table>
+ <tr>
+ <td><a name="SkImage_kU8"> <code><strong>SkImage::kU8 </strong></code> </a></td><td>0</td><td></td>
+ </tr>
+ <tr>
+ <td><a name="SkImage_kF16"> <code><strong>SkImage::kF16 </strong></code> </a></td><td>1</td><td></td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+
+
+<a name="SkImage_MakeFromPicture"></a>
+## MakeFromPicture
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkImage&gt; MakeFromPicture(sk_sp&lt;SkPicture&gt; picture, const SkISize& dimensions,
+ const SkMatrix* matrix, const SkPaint* paint,
+ BitDepth bitDepth, sk_sp&lt;SkColorSpace&gt; colorSpace)
+</pre>
+
+Create a new image from the specified <a href="#SkImage_MakeFromPicture_picture">picture</a>.
+On creation of the <a href="#SkImage">SkImage</a>, snap the <a href="undocumented#SkPicture">SkPicture</a> to a particular <a href="#SkImage_BitDepth">BitDepth</a> and <a href="undocumented#SkColorSpace">SkColorSpace</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_MakeFromPicture_picture"> <code><strong>picture </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromPicture_dimensions"> <code><strong>dimensions </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromPicture_matrix"> <code><strong>matrix </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromPicture_paint"> <code><strong>paint </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromPicture_bitDepth"> <code><strong>bitDepth </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromPicture_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_MakeFromAHardwareBuffer"></a>
+## MakeFromAHardwareBuffer
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkImage&gt; MakeFromAHardwareBuffer(AHardwareBuffer* hardwareBuffer,
+ SkAlphaType alphaType = kPremul_SkAlphaType,
+ sk_sp&lt;SkColorSpace&gt; colorSpace = nullptr)
+</pre>
+
+Create a new image from the an <a href="undocumented#Android">Android</a> hardware buffer.
+The new image takes a reference on the buffer.
+
+Only available on <a href="undocumented#Android">Android</a>, when __<a href="undocumented#ANDROID_API__">ANDROID API </a> is defined to be 26 or greater.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_MakeFromAHardwareBuffer_hardwareBuffer"> <code><strong>hardwareBuffer </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromAHardwareBuffer_alphaType"> <code><strong>alphaType </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromAHardwareBuffer_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkImage&gt; MakeFromAHardwareBuffer(AHardwareBuffer* hardwareBuffer,
+ SkAlphaType alphaType = kPremul_SkAlphaType,
+ sk_sp&lt;SkColorSpace&gt; colorSpace = nullptr)
+</pre>
+
+Create a new image from the an <a href="undocumented#Android">Android</a> hardware buffer.
+The new image takes a reference on the buffer.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_MakeFromAHardwareBuffer_2_hardwareBuffer"> <code><strong>hardwareBuffer </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromAHardwareBuffer_2_alphaType"> <code><strong>alphaType </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromAHardwareBuffer_2_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_width"></a>
+## width
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+int width() const
+</pre>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_height"></a>
+## height
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+int height() const
+</pre>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_dimensions"></a>
+## dimensions
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkISize dimensions() const
+</pre>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_bounds"></a>
+## bounds
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkIRect bounds() const
+</pre>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_uniqueID"></a>
+## uniqueID
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+uint32_t uniqueID() const
+</pre>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_alphaType"></a>
+## alphaType
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkAlphaType alphaType() const
+</pre>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_colorSpace"></a>
+## colorSpace
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkColorSpace* colorSpace() const
+</pre>
+
+Returns <a href="undocumented#Color_Space">Color Space</a> of <a href="#Image">Image</a>. <a href="undocumented#Color_Space">Color Space</a> may have been a parameter when
+<a href="#Image">Image</a> was created, or may have been parsed from encoded data. <a href="undocumented#Skia">Skia</a> may not be
+able to draw image respecting returned <a href="undocumented#Color_Space">Color Space</a> or draw into <a href="SkSurface_Reference#Surface">Surface</a> with
+returned <a href="undocumented#Color_Space">Color Space</a>.
+
+### Return Value
+
+<a href="undocumented#Color_Space">Color Space</a> <a href="#Image">Image</a> was created with, or nullptr
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_refColorSpace"></a>
+## refColorSpace
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+sk_sp&lt;SkColorSpace&gt; refColorSpace() const
+</pre>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_isAlphaOnly"></a>
+## isAlphaOnly
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool isAlphaOnly() const
+</pre>
+
+Returns true fi the image will be drawn as a mask, with no intrinsic color of its own.
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_isOpaque"></a>
+## isOpaque
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool isOpaque() const
+</pre>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_makeShader"></a>
+## makeShader
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+sk_sp&lt;SkShader&gt; makeShader(SkShader::TileMode tileMode1, SkShader::TileMode tileMode2,
+ const SkMatrix* localMatrix = nullptr) const
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_makeShader_tileMode1"> <code><strong>tileMode1 </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_makeShader_tileMode2"> <code><strong>tileMode2 </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_makeShader_localMatrix"> <code><strong>localMatrix </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+sk_sp&lt;SkShader&gt; makeShader(const SkMatrix* localMatrix = nullptr) const
+</pre>
+
+Helper version of
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_makeShader_2_localMatrix"> <code><strong>localMatrix </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_peekPixels"></a>
+## peekPixels
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool peekPixels(SkPixmap* pixmap) const
+</pre>
+
+If the image has direct access to its pixels (i.e. they are in local RAM)
+return true, and if not null, return in the <a href="#SkImage_peekPixels_pixmap">pixmap</a> parameter the info about the
+images pixels.
+On failure, return false and ignore the <a href="#SkImage_peekPixels_pixmap">pixmap</a> parameter.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_peekPixels_pixmap"> <code><strong>pixmap </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_getTexture"></a>
+## getTexture
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+GrTexture* getTexture() const
+</pre>
+
+DEPRECATED -
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_isTextureBacked"></a>
+## isTextureBacked
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool isTextureBacked() const
+</pre>
+
+Returns true if the image is texture backed.
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_isValid"></a>
+## isValid
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool isValid(GrContext* context) const
+</pre>
+
+Returns true if <a href="#Image">Image</a> can be drawn. If <a href="#SkImage_isValid_context">context</a>
+is nullptr, tests if <a href="#Image">Image</a> draws on <a href="undocumented#Raster_Surface">Raster Surface</a>; Otherwise, tests if <a href="#Image">Image</a>
+draws on <a href="undocumented#GPU_Surface">GPU Surface</a> associated with <a href="#SkImage_isValid_context">context</a>.
+
+<a href="undocumented#Texture">Texture</a>-backed images may become invalid if their underlying <a href="undocumented#GrContext">GrContext</a> is abandoned. Some
+generator-backed images may be invalid for <a href="undocumented#CPU">CPU</a> and/or <a href="undocumented#GPU">GPU</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_isValid_context"> <code><strong>context </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_getTextureHandle"></a>
+## getTextureHandle
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+GrBackendObject getTextureHandle(bool flushPendingGrContextIO, GrSurfaceOrigin* origin = nullptr) const
+</pre>
+
+Retrieves the back-end <a href="undocumented#API">API</a> handle of the texture. If <a href="#SkImage_getTextureHandle_flushPendingGrContextIO">flushPendingGrContextIO</a> then the
+<a href="undocumented#GrContext">GrContext</a> will issue to the back-end <a href="undocumented#API">API</a> any deferred <a href="undocumented#I">I</a>/<a href="undocumented#O">O</a> operations on the texture before
+returning.
+If '<a href="#SkImage_getTextureHandle_origin">origin</a>' is supplied it will be filled in with the <a href="#SkImage_getTextureHandle_origin">origin</a> of the content drawn
+into the image.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_getTextureHandle_flushPendingGrContextIO"> <code><strong>flushPendingGrContextIO </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_getTextureHandle_origin"> <code><strong>origin </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+## <a name="SkImage_CachingHint"></a> Enum SkImage::CachingHint
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+enum <a href="#SkImage_CachingHint">CachingHint</a> {
+<a href="#SkImage_kAllow_CachingHint">kAllow CachingHint</a>,
+<a href="#SkImage_kDisallow_CachingHint">kDisallow CachingHint</a>,
+};</pre>
+
+Hints to image calls where the system might cache computed intermediates (e.g. the results
+of decoding or a read-back from the <a href="undocumented#GPU">GPU</a>. Passing <a href="#SkImage_kAllow_CachingHint">kAllow CachingHint</a> signals that the system's default
+behavior is fine. Passing <a href="#SkImage_kDisallow_CachingHint">kDisallow CachingHint</a> signals that caching should be avoided.
+
+### Constants
+
+<table>
+ <tr>
+ <td><a name="SkImage_kAllow_CachingHint"> <code><strong>SkImage::kAllow_CachingHint </strong></code> </a></td><td>0</td><td></td>
+ </tr>
+ <tr>
+ <td><a name="SkImage_kDisallow_CachingHint"> <code><strong>SkImage::kDisallow_CachingHint </strong></code> </a></td><td>1</td><td></td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+
+
+<a name="SkImage_readPixels"></a>
+## readPixels
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, int srcX, int srcY,
+ CachingHint cachingHint = kAllow_CachingHint) const
+</pre>
+
+Copy the pixels from the image into the specified buffer (<a href="#SkImage_readPixels_dstPixels">dstPixels</a> + <a href="#SkImage_readPixels_dstRowBytes">dstRowBytes</a>),
+converting them into the requested format (<a href="#SkImage_readPixels_dstInfo">dstInfo</a>). The image pixels are read
+starting at the specified (<a href="#SkImage_readPixels_srcX">srcX</a>, <a href="#SkImage_readPixels_srcY">srcY</a>) location.
+<a href="#SkImage_readPixels_dstInfo">dstInfo</a> and (<a href="#SkImage_readPixels_srcX">srcX</a>, <a href="#SkImage_readPixels_srcY">srcY</a>) offset specifies a source rectangle:
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+<a href="SkRect_Reference#SkRect">SkRect</a> srcR;
+srcR.setXYWH(srcX, srcY, dstInfo.width(), <a href="#SkImage_readPixels_dstInfo">dstInfo</a>.<a href="#SkImage_height">height</a>);</pre>
+
+The source rectangle is intersected with the <a href="#SkImage_bounds">bounds</a> of the image. If this intersection is not empty,
+then we have two sets of pixels (of equal size). Replace <a href="#SkImage_readPixels_dstPixels">dstPixels</a> with the
+corresponding <a href="#Image">Image</a> pixels, performing any <a href="#Color_Type">Color Type</a>/<a href="#Alpha_Type">Alpha Type</a> transformations needed
+(in the case where <a href="#Image">Image</a> and <a href="#SkImage_readPixels_dstInfo">dstInfo</a> have different <a href="#Color_Type">Color Types</a> or <a href="#Alpha_Type">Alpha Types</a>).
+This call can fail, returning false, for several reasons:
+if source rectangle does not intersect the image <a href="#SkImage_bounds">bounds</a>;
+if the requested <a href="#Color_Type">Color Type</a>/<a href="#Alpha_Type">Alpha Type</a> cannot be converted from the image's types.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_readPixels_dstInfo"> <code><strong>dstInfo </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_readPixels_dstPixels"> <code><strong>dstPixels </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_readPixels_dstRowBytes"> <code><strong>dstRowBytes </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_readPixels_srcX"> <code><strong>srcX </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_readPixels_srcY"> <code><strong>srcY </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_readPixels_cachingHint"> <code><strong>cachingHint </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool readPixels(const SkPixmap& dst, int srcX, int srcY, CachingHint cachingHint = kAllow_CachingHint) const
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_readPixels_2_dst"> <code><strong>dst </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_readPixels_2_srcX"> <code><strong>srcX </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_readPixels_2_srcY"> <code><strong>srcY </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_readPixels_2_cachingHint"> <code><strong>cachingHint </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_scalePixels"></a>
+## scalePixels
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool scalePixels(const SkPixmap& dst, SkFilterQuality filterQuality,
+ CachingHint cachingHint = kAllow_CachingHint) const
+</pre>
+
+Copies <a href="#Image">Image</a> pixels into <a href="#SkImage_scalePixels_dst">dst</a>, converting to <a href="#SkImage_scalePixels_dst">dst</a> <a href="#Color_Type">Color Type</a> and <a href="#Alpha_Type">Alpha Type</a>.
+If the conversion cannot be performed, false is returned.
+If <a href="#SkImage_scalePixels_dst">dst</a> <a href="#SkImage_dimensions">dimensions</a> differ from <a href="#Image">Image</a> <a href="#SkImage_dimensions">dimensions</a>, <a href="#Image">Image</a> is scaled, applying
+<a href="#SkImage_scalePixels_filterQuality">filterQuality</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_scalePixels_dst"> <code><strong>dst </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_scalePixels_filterQuality"> <code><strong>filterQuality </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_scalePixels_cachingHint"> <code><strong>cachingHint </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_encodeToData"></a>
+## encodeToData
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+sk_sp&lt;SkData&gt; encodeToData(SkEncodedImageFormat encodedImageFormat, int quality) const
+</pre>
+
+Encode the image's pixels and return the result as <a href="undocumented#SkData">SkData</a>.
+If the image type cannot be encoded, or the requested encoder format is
+not supported, this will return nullptr.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_encodeToData_encodedImageFormat"> <code><strong>encodedImageFormat </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_encodeToData_quality"> <code><strong>quality </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+sk_sp&lt;SkData&gt; encodeToData(SkPixelSerializer* pixelSerializer = nullptr) const
+</pre>
+
+Encodes <a href="#Image">Image</a> and returns result as <a href="undocumented#SkData">SkData</a>. Will reuse existing encoded data
+if present, as returned by <a href="#SkImage_refEncodedData">refEncodedData</a>. <a href="#SkImage_encodeToData_2_pixelSerializer">pixelSerializer</a> validates existing
+encoded data, and encodes <a href="#Image">Image</a> when existing encoded data is missing or
+invalid.
+
+Passing nullptr for <a href="#SkImage_encodeToData_2_pixelSerializer">pixelSerializer</a> selects default serialization which
+accepts all data and encodes to PNG.
+
+Returns nullptr if existing encoded data is missing or invalid and
+encoding fails.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_encodeToData_2_pixelSerializer"> <code><strong>pixelSerializer </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_refEncodedData"></a>
+## refEncodedData
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+sk_sp&lt;SkData&gt; refEncodedData() const
+</pre>
+
+If the image already has its contents in encoded form (e.g. PNG or JPEG), return that
+as <a href="undocumented#SkData">SkData</a>. If the image does not already has its contents in encoded form, return nullptr.
+
+To force the image to return its contents as encoded data, call <a href="#SkImage_encodeToData">encodeToData</a>.
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_toString"></a>
+## toString
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+const char* toString(SkString* string) const
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_toString_string"> <code><strong>string </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_makeSubset"></a>
+## makeSubset
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+sk_sp&lt;SkImage&gt; makeSubset(const SkIRect& subset) const
+</pre>
+
+Return a new image that is a <a href="#SkImage_makeSubset_subset">subset</a> of this image. The underlying implementation may
+share the pixels, or it may make a copy.
+If <a href="#SkImage_makeSubset_subset">subset</a> does not intersect the <a href="#SkImage_bounds">bounds</a> of this image, or the copy/share cannot be made,
+nullptr will be returned.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_makeSubset_subset"> <code><strong>subset </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_makeTextureImage"></a>
+## makeTextureImage
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+sk_sp&lt;SkImage&gt; makeTextureImage(GrContext* context, SkColorSpace* dstColorSpace) const
+</pre>
+
+Ensures that an image is backed by a texture (when <a href="undocumented#GrContext">GrContext</a> is non-null), suitable for use
+with surfaces that have the supplied destination color space. If no transformation is
+required, the returned image may be the same as this image. If this image is from a
+different <a href="undocumented#GrContext">GrContext</a>, this will fail.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_makeTextureImage_context"> <code><strong>context </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_makeTextureImage_dstColorSpace"> <code><strong>dstColorSpace </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_makeNonTextureImage"></a>
+## makeNonTextureImage
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+sk_sp&lt;SkImage&gt; makeNonTextureImage() const
+</pre>
+
+If the image is texture-backed this will make a raster copy of it (or nullptr if reading back
+the pixels fails). Otherwise, it returns the original image.
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_makeWithFilter"></a>
+## makeWithFilter
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+sk_sp&lt;SkImage&gt; makeWithFilter(const SkImageFilter* filter, const SkIRect& subset,
+ const SkIRect& clipBounds, SkIRect* outSubset, SkIPoint* offset) const
+</pre>
+
+Apply a given image <a href="#SkImage_makeWithFilter_filter">filter</a> to this image, and return the filtered result.
+The <a href="#SkImage_makeWithFilter_subset">subset</a> represents the active portion of this image. The return value is similarly an
+<a href="#SkImage">SkImage</a>, with an active <a href="#SkImage_makeWithFilter_subset">subset</a> (<a href="#SkImage_makeWithFilter_outSubset">outSubset</a>). This is usually used with texture-backed
+images, where the texture may be approx-match and thus larger than the required size.
+<a href="#SkImage_makeWithFilter_clipBounds">clipBounds</a> constrains the device-space extent of the image, stored in <a href="#SkImage_makeWithFilter_outSubset">outSubset</a>.
+<a href="#SkImage_makeWithFilter_offset">offset</a> is storage, set to the amount to translate the result when drawn.
+If the result image cannot be created, or the result would be transparent black, null
+is returned, in which case the <a href="#SkImage_makeWithFilter_offset">offset</a> and <a href="#SkImage_makeWithFilter_outSubset">outSubset</a> parameters should be ignored by the
+caller.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_makeWithFilter_filter"> <code><strong>filter </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_makeWithFilter_subset"> <code><strong>subset </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_makeWithFilter_clipBounds"> <code><strong>clipBounds </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_makeWithFilter_outSubset"> <code><strong>outSubset </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_makeWithFilter_offset"> <code><strong>offset </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_getDeferredTextureImageData"></a>
+## getDeferredTextureImageData
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+size_t getDeferredTextureImageData(const GrContextThreadSafeProxy& contextThreadSafeProxy,
+ const DeferredTextureImageUsageParams deferredTextureImageUsageParams[],
+ int paramCnt, void* buffer, SkColorSpace* dstColorSpace = nullptr,
+ SkColorType dstColorType = kN32_SkColorType) const
+</pre>
+
+This method allows clients to capture the data necessary to turn a <a href="#SkImage">SkImage</a> into a texture-
+backed image. If the original image is codec-backed this will decode into a format optimized
+for the context represented by the proxy. This method is thread safe with respect to the
+<a href="undocumented#GrContext">GrContext</a> whence the proxy came. Clients allocate and manage the storage of the deferred
+texture data and control its lifetime. No cleanup is required, thus it is safe to simply free
+the memory out from under the data.
+
+The same method is used both for getting the size necessary for uploading
+and retrieving texture data. The <a href="#SkImage_getDeferredTextureImageData_deferredTextureImageUsageParams">deferredTextureImageUsageParams</a> array represents the set of
+draws over which to optimize the texture data prior to uploading.
+
+When called with a null <a href="#SkImage_getDeferredTextureImageData_buffer">buffer</a> this returns the size that the client must allocate in order
+to create deferred texture data for this image (or zero if this is an inappropriate
+candidate). The <a href="#SkImage_getDeferredTextureImageData_buffer">buffer</a> allocated by the client should be 8 byte aligned.
+When <a href="#SkImage_getDeferredTextureImageData_buffer">buffer</a> is not null this fills in the deferred texture data for this image in the
+provided <a href="#SkImage_getDeferredTextureImageData_buffer">buffer</a> (assuming this is an appropriate candidate image and the <a href="#SkImage_getDeferredTextureImageData_buffer">buffer</a> is
+appropriately aligned). Upon success the size written is returned, otherwise 0.
+<a href="#SkImage_getDeferredTextureImageData_dstColorSpace">dstColorSpace</a> is the color space of the surface where this texture will ultimately be used.
+If the method determines that <a href="undocumented#Mip_Map">Mip Maps</a> are needed, this helps determine the correct strategy
+for building them (gamma-correct or not).
+
+<a href="#SkImage_getDeferredTextureImageData_dstColorType">dstColorType</a> is the color type of the surface where this texture will ultimately be used.
+This determines the format with which the image will be uploaded to the <a href="undocumented#GPU">GPU</a>. If <a href="#SkImage_getDeferredTextureImageData_dstColorType">dstColorType</a>
+does not support color spaces (low bit depth types such as <a href="undocumented#SkColorType">kARGB 4444 SkColorType</a>), then <a href="#SkImage_getDeferredTextureImageData_dstColorSpace">dstColorSpace</a>
+must be null.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_getDeferredTextureImageData_contextThreadSafeProxy"> <code><strong>contextThreadSafeProxy </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_getDeferredTextureImageData_deferredTextureImageUsageParams"> <code><strong>deferredTextureImageUsageParams </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_getDeferredTextureImageData_paramCnt"> <code><strong>paramCnt </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_getDeferredTextureImageData_buffer"> <code><strong>buffer </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_getDeferredTextureImageData_dstColorSpace"> <code><strong>dstColorSpace </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_getDeferredTextureImageData_dstColorType"> <code><strong>dstColorType </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_MakeFromDeferredTextureImageData"></a>
+## MakeFromDeferredTextureImageData
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkImage&gt; MakeFromDeferredTextureImageData(GrContext* context, const void* data,
+ SkBudgeted budgeted)
+</pre>
+
+Returns a texture-backed image from <a href="#SkImage_MakeFromDeferredTextureImageData_data">data</a> produced in <a href="#SkImage_getDeferredTextureImageData">SkImage::getDeferredTextureImageData</a>.
+The <a href="#SkImage_MakeFromDeferredTextureImageData_context">context</a> must be the <a href="#SkImage_MakeFromDeferredTextureImageData_context">context</a> that provided the proxy passed to
+<a href="#SkImage_getDeferredTextureImageData">getDeferredTextureImageData</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_MakeFromDeferredTextureImageData_context"> <code><strong>context </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromDeferredTextureImageData_data"> <code><strong>data </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeFromDeferredTextureImageData_budgeted"> <code><strong>budgeted </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a href="SkImage_Reference#BackendTextureReleaseProc">BackendTextureReleaseProc</a>
+
+<a name="SkImage_MakeBackendTextureFromSkImage"></a>
+## MakeBackendTextureFromSkImage
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static bool MakeBackendTextureFromSkImage(GrContext* context, sk_sp&lt;SkImage&gt; image,
+ GrBackendTexture* backendTexture,
+ BackendTextureReleaseProc* backendTextureReleaseProc)
+</pre>
+
+Creates a <a href="undocumented#GrBackendTexture">GrBackendTexture</a> from the provided <a href="#SkImage">SkImage</a>. Returns true on success. The
+<a href="undocumented#GrBackendTexture">GrBackendTexture</a> and <a href="SkImage_Reference#BackendTextureReleaseProc">BackendTextureReleaseProc</a> are populated on success. It is the callers
+responsibility to call the <a href="SkImage_Reference#BackendTextureReleaseProc">BackendTextureReleaseProc</a> once they have deleted the texture.
+Note that the <a href="SkImage_Reference#BackendTextureReleaseProc">BackendTextureReleaseProc</a> allows <a href="undocumented#Skia">Skia</a> to clean up auxiliary data related
+to the <a href="undocumented#GrBackendTexture">GrBackendTexture</a>, and is not a substitute for the client deleting the <a href="undocumented#GrBackendTexture">GrBackendTexture</a>
+themselves.
+
+If <a href="#SkImage_MakeBackendTextureFromSkImage_image">image</a> is both texture backed and singly referenced; that is, its only
+reference was transferred using std::move(): <a href="#SkImage_MakeBackendTextureFromSkImage_image">image</a> is returned in <a href="#SkImage_MakeBackendTextureFromSkImage_backendTexture">backendTexture</a>
+without conversion or making a copy.
+
+If the <a href="#SkImage">SkImage</a> is not texture backed, this function will generate a texture with the <a href="#SkImage_MakeBackendTextureFromSkImage_image">image</a>'s
+contents and return that.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_MakeBackendTextureFromSkImage_context"> <code><strong>context </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeBackendTextureFromSkImage_image"> <code><strong>image </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeBackendTextureFromSkImage_backendTexture"> <code><strong>backendTexture </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_MakeBackendTextureFromSkImage_backendTextureReleaseProc"> <code><strong>backendTextureReleaseProc </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+## <a name="SkImage_LegacyBitmapMode"></a> Enum SkImage::LegacyBitmapMode
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+enum <a href="#SkImage_LegacyBitmapMode">LegacyBitmapMode</a> {
+<a href="#SkImage_kRO_LegacyBitmapMode">kRO LegacyBitmapMode</a>,
+<a href="#SkImage_kRW_LegacyBitmapMode">kRW LegacyBitmapMode</a>,
+};</pre>
+
+Helper functions to convert to <a href="SkBitmap_Reference#SkBitmap">SkBitmap</a>
+
+### Constants
+
+<table>
+ <tr>
+ <td><a name="SkImage_kRO_LegacyBitmapMode"> <code><strong>SkImage::kRO_LegacyBitmapMode </strong></code> </a></td><td>0</td><td></td>
+ </tr>
+ <tr>
+ <td><a name="SkImage_kRW_LegacyBitmapMode"> <code><strong>SkImage::kRW_LegacyBitmapMode </strong></code> </a></td><td>1</td><td></td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+
+
+<a name="SkImage_asLegacyBitmap"></a>
+## asLegacyBitmap
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool asLegacyBitmap(SkBitmap* bitmap, LegacyBitmapMode legacyBitmapMode) const
+</pre>
+
+Attempt to create a <a href="#SkImage_asLegacyBitmap_bitmap">bitmap</a> with the same pixels as the image. The result will always be
+a raster-backed <a href="#SkImage_asLegacyBitmap_bitmap">bitmap</a> (texture-backed bitmaps are DEPRECATED, and not supported here).
+If the mode is <a href="#SkImage_kRO_LegacyBitmapMode">kRO LegacyBitmapMode</a> (read-only), the resulting <a href="#SkImage_asLegacyBitmap_bitmap">bitmap</a> will be marked as immutable.
+On success, returns true. On failure, returns false and the <a href="#SkImage_asLegacyBitmap_bitmap">bitmap</a> parameter will be reset
+to empty.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_asLegacyBitmap_bitmap"> <code><strong>bitmap </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_asLegacyBitmap_legacyBitmapMode"> <code><strong>legacyBitmapMode </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_isLazyGenerated"></a>
+## isLazyGenerated
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool isLazyGenerated() const
+</pre>
+
+Returns true if <a href="#Image">Image</a> is backed by an image-generator or other service that creates
+and caches its pixels or texture on-demand.
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name="SkImage_makeColorSpace"></a>
+## makeColorSpace
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+sk_sp&lt;SkImage&gt; makeColorSpace(sk_sp&lt;SkColorSpace&gt; target, SkTransferFunctionBehavior premulBehavior) const
+</pre>
+
+If <a href="#SkImage_makeColorSpace_target">target</a> is supported, returns an <a href="#SkImage">SkImage</a> in <a href="#SkImage_makeColorSpace_target">target</a> color space.
+Otherwise, returns nullptr.
+This will leave the image as is if it already in <a href="#SkImage_makeColorSpace_target">target</a> color space.
+Otherwise, it will convert the pixels from <a href="#Image">Image</a> color space to <a href="#SkImage_makeColorSpace_target">target</a>
+color space. If this-><a href="#SkImage_colorSpace">colorSpace</a> is nullptr, <a href="#Image">Image</a> color space will be
+treated as <a href="undocumented#sRGB">sRGB</a>.
+
+If <a href="#SkImage_makeColorSpace_premulBehavior">premulBehavior</a> is <a href="#SkTransferFunctionBehavior_kRespect">SkTransferFunctionBehavior::kRespect</a>: converts <a href="#Image">Image</a>
+pixels to a linear space before converting to match destination <a href="#Color_Type">Color Type</a>
+and <a href="undocumented#Color_Space">Color Space</a>.
+If <a href="#SkImage_makeColorSpace_premulBehavior">premulBehavior</a> is <a href="#SkTransferFunctionBehavior_kIgnore">SkTransferFunctionBehavior::kIgnore</a>: <a href="#Image">Image</a>
+pixels are treated as if they are linear, regardless of how they are encoded.
+
+### Parameters
+
+<table> <tr> <td><a name="SkImage_makeColorSpace_target"> <code><strong>target </strong></code> </a></td> <td>
+incomplete</td>
+ </tr> <tr> <td><a name="SkImage_makeColorSpace_premulBehavior"> <code><strong>premulBehavior </strong></code> </a></td> <td>
+incomplete</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
diff --git a/site/user/api/SkMatrix_Reference.md b/site/user/api/SkMatrix_Reference.md
index 4fb273ca0f..ede24fc933 100644
--- a/site/user/api/SkMatrix_Reference.md
+++ b/site/user/api/SkMatrix_Reference.md
@@ -27,17 +27,17 @@ improve performance. <a href="#Matrix">Matrix</a> is not thread safe unless <a h
| function | description |
| --- | --- |
-| <a href="#SkMatrix_not_equal_operator">operator!=(const SkMatrix& a, const SkMatrix& b)</a> | Returns true if members are unequal. |
+| <a href="#SkMatrix_notequal_operator">operator!=(const SkMatrix& a, const SkMatrix& b)</a> | Returns true if members are unequal. |
| <a href="#SkMatrix_equal_operator">operator==(const SkMatrix& a, const SkMatrix& b)</a> | Returns true if members are equal. |
-| <a href="#SkMatrix_subscript_operator_const">operator[](int index)</a> const | Returns <a href="#Matrix">Matrix</a> value. |
-| <a href="#SkMatrix_subscript_operator_const">operator[](int index)</a> | Returns writable reference to <a href="#Matrix">Matrix</a> value. |
+| <a href="#SkMatrix_array_operator">operator[](int index) const</a> | Returns <a href="#Matrix">Matrix</a> value. |
+| <a href="#SkMatrix_array1_operator">operator[](int index)</a> | Returns writable reference to <a href="#Matrix">Matrix</a> value. |
## <a name="Member_Functions"></a> Member Functions
| function | description |
| --- | --- |
| <a href="#SkMatrix_Concat">Concat</a> | Returns the concatenation of <a href="#Matrix">Matrix</a> pair. |
-| <a href="#SkMatrix_I">I</a> | Returns a reference to a const identity <a href="#Matrix">Matrix</a>. |
+| <a href="undocumented#I">I</a> | Returns a reference to a const identity <a href="#Matrix">Matrix</a>. |
| <a href="#SkMatrix_InvalidMatrix">InvalidMatrix</a> | Returns a reference to a const invalid <a href="#Matrix">Matrix</a>. |
| <a href="#SkMatrix_MakeAll">MakeAll</a> | Constructs all nine values. |
| <a href="#SkMatrix_MakeRectToRect">MakeRectToRect</a> | Constructs from source <a href="SkRect_Reference#Rect">Rect</a> to destination <a href="SkRect_Reference#Rect">Rect</a>. |
@@ -73,15 +73,15 @@ improve performance. <a href="#Matrix">Matrix</a> is not thread safe unless <a h
| <a href="#SkMatrix_isSimilarity">isSimilarity</a> | Returns if transform is limited to square scale and rotation. |
| <a href="#SkMatrix_isTranslate">isTranslate</a> | Returns if transform is limited to translate. |
| <a href="#SkMatrix_mapHomogeneousPoints">mapHomogeneousPoints</a> | Maps <a href="undocumented#Point3">Point3</a> array. |
-| <a href="#SkMatrix_mapPoints">mapPoints</a> | Maps <a href="undocumented#Point">Point</a> array. |
-| <a href="#SkMatrix_mapPointsWithStride">mapPointsWithStride</a> | Maps <a href="undocumented#Point">Point</a> array with padding. |
+| <a href="#SkMatrix_mapPoints">mapPoints</a> | Maps <a href="SkPoint_Reference#Point">Point</a> array. |
+| <a href="#SkMatrix_mapPointsWithStride">mapPointsWithStride</a> | Maps <a href="SkPoint_Reference#Point">Point</a> array with padding. |
| <a href="#SkMatrix_mapRadius">mapRadius</a> | Returns mean radius of mapped <a href="undocumented#Circle">Circle</a>. |
| <a href="#SkMatrix_mapRect">mapRect</a> | Returns bounds of mapped <a href="SkRect_Reference#Rect">Rect</a>. |
| <a href="#SkMatrix_mapRectScaleTranslate">mapRectScaleTranslate</a> | Returns bounds of mapped <a href="SkRect_Reference#Rect">Rect</a>. |
-| <a href="#SkMatrix_mapRectToQuad">mapRectToQuad</a> | Maps <a href="SkRect_Reference#Rect">Rect</a> to <a href="undocumented#Point">Point</a> array. |
-| <a href="#SkMatrix_mapVector">mapVector</a> | Maps <a href="undocumented#Vector">Vector</a>. |
-| <a href="#SkMatrix_mapVectors">mapVectors</a> | Maps <a href="undocumented#Vector">Vector</a> array. |
-| <a href="#SkMatrix_mapXY">mapXY</a> | Maps <a href="undocumented#Point">Point</a>. |
+| <a href="#SkMatrix_mapRectToQuad">mapRectToQuad</a> | Maps <a href="SkRect_Reference#Rect">Rect</a> to <a href="SkPoint_Reference#Point">Point</a> array. |
+| <a href="#SkMatrix_mapVector">mapVector</a> | Maps <a href="SkPoint_Reference#Vector">Vector</a>. |
+| <a href="#SkMatrix_mapVectors">mapVectors</a> | Maps <a href="SkPoint_Reference#Vector">Vector</a> array. |
+| <a href="#SkMatrix_mapXY">mapXY</a> | Maps <a href="SkPoint_Reference#Point">Point</a>. |
| <a href="#SkMatrix_postConcat">postConcat</a> | Post-multiplies <a href="#Matrix">Matrix</a> by <a href="#Matrix">Matrix</a> parameter. |
| <a href="#SkMatrix_postIDiv">postIDiv</a> | Post-multiplies <a href="#Matrix">Matrix</a> by inverse scale. |
| <a href="#SkMatrix_postRotate">postRotate</a> | Post-multiplies <a href="#Matrix">Matrix</a> by rotation. |
@@ -125,13 +125,13 @@ improve performance. <a href="#Matrix">Matrix</a> is not thread safe unless <a h
<a name="SkMatrix_MakeScale"></a>
## MakeScale
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static SkMatrix SK_WARN_UNUSED_RESULT MakeScale(SkScalar sx, SkScalar sy)
</pre>
Sets <a href="#Matrix">Matrix</a> to scale by (<a href="#SkMatrix_MakeScale_sx">sx</a>, <a href="#SkMatrix_MakeScale_sy">sy</a>). Returned matrix is:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| sx 0 0 |
| 0 sy 0 |
| 0 0 1 |</pre>
@@ -159,13 +159,13 @@ vertical scale factor</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static SkMatrix SK_WARN_UNUSED_RESULT MakeScale(SkScalar scale)
</pre>
Sets <a href="#Matrix">Matrix</a> to <a href="#SkMatrix_MakeScale_2_scale">scale</a> by (<a href="#SkMatrix_MakeScale_2_scale">scale</a>, <a href="#SkMatrix_MakeScale_2_scale">scale</a>). Returned matrix is:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| scale 0 0 |
| 0 scale 0 |
| 0 0 1 |</pre>
@@ -194,13 +194,13 @@ horizontal and vertical <a href="#SkMatrix_MakeScale_2_scale">scale</a> factor</
<a name="SkMatrix_MakeTrans"></a>
## MakeTrans
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static SkMatrix SK_WARN_UNUSED_RESULT MakeTrans(SkScalar dx, SkScalar dy)
</pre>
Sets <a href="#Matrix">Matrix</a> to translate by (<a href="#SkMatrix_MakeTrans_dx">dx</a>, <a href="#SkMatrix_MakeTrans_dy">dy</a>). Returned matrix is:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| 1 0 dx |
| 0 1 dy |
| 0 0 1 |</pre>
@@ -231,17 +231,15 @@ vertical translation</td>
<a name="SkMatrix_MakeAll"></a>
## MakeAll
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-static SkMatrix SK_WARN_UNUSED_RESULT MakeAll(SkScalar scaleX, SkScalar skewX,
- SkScalar transX, SkScalar skewY,
- SkScalar scaleY, SkScalar transY,
- SkScalar pers0, SkScalar pers1,
- SkScalar pers2)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static SkMatrix SK_WARN_UNUSED_RESULT MakeAll(SkScalar scaleX, SkScalar skewX, SkScalar transX,
+ SkScalar skewY, SkScalar scaleY, SkScalar transY,
+ SkScalar pers0, SkScalar pers1, SkScalar pers2)
</pre>
Sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| scaleX skewX transX |
| skewY scaleY transY |
| pers0 pers1 pers2 |</pre>
@@ -285,7 +283,7 @@ perspective scale factor</td>
## <a name="SkMatrix_TypeMask"></a> Enum SkMatrix::TypeMask
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#SkMatrix_TypeMask">TypeMask</a> {
<a href="#SkMatrix_kIdentity_Mask">kIdentity Mask</a> = 0,
<a href="#SkMatrix_kTranslate_Mask">kTranslate Mask</a> = 0x01,
@@ -342,7 +340,7 @@ after setPolyToPoly: kTranslate_Mask kScale_Mask kAffine_Mask kPerspective_Mask
<a name="SkMatrix_getType"></a>
## getType
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
TypeMask getType() const
</pre>
@@ -378,13 +376,13 @@ set all flags hex: f decimal: 15
<a name="SkMatrix_isIdentity"></a>
## isIdentity
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isIdentity() const
</pre>
Returns true if <a href="#Matrix">Matrix</a> is identity. Identity matrix is:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| 1 0 0 |
| 0 1 0 |
| 0 0 1 |</pre>
@@ -415,14 +413,14 @@ is identity: false
<a name="SkMatrix_isScaleTranslate"></a>
## isScaleTranslate
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isScaleTranslate() const
</pre>
Returns true if <a href="#Matrix">Matrix</a> at most scales and translates. <a href="#Matrix">Matrix</a> may be identity,
contain only scale elements, only translate elements, or both. <a href="#Matrix">Matrix</a> form is:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| scale-x 0 translate-x |
| 0 scale-y translate-y |
| 0 0 1 |</pre>
@@ -455,13 +453,13 @@ is scale-translate: true
<a name="SkMatrix_isTranslate"></a>
## isTranslate
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isTranslate() const
</pre>
Returns true if <a href="#Matrix">Matrix</a> is identity, or translates. <a href="#Matrix">Matrix</a> form is:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| 1 0 translate-x |
| 0 1 translate-y |
| 0 0 1 |</pre>
@@ -494,7 +492,7 @@ is translate: false
<a name="SkMatrix_rectStaysRect"></a>
## rectStaysRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool rectStaysRect() const
</pre>
@@ -502,14 +500,14 @@ Returns true <a href="#Matrix">Matrix</a> maps <a href="SkRect_Reference#Rect">R
or scales, or rotates a multiple of 90 degrees, or mirrors in x or y. In all
cases, <a href="#Matrix">Matrix</a> may also have translation. <a href="#Matrix">Matrix</a> form is either:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| scale-x 0 translate-x |
| 0 scale-y translate-y |
| 0 0 1 |</pre>
or
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| 0 rotate-x translate-x |
| rotate-y 0 translate-y |
| 0 0 1 |</pre>
@@ -547,7 +545,7 @@ rectStaysRect: true
<a name="SkMatrix_preservesAxisAlignment"></a>
## preservesAxisAlignment
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool preservesAxisAlignment() const
</pre>
@@ -555,14 +553,14 @@ Returns true <a href="#Matrix">Matrix</a> maps <a href="SkRect_Reference#Rect">R
or scales, or rotates a multiple of 90 degrees, or mirrors in x or y. In all
cases, <a href="#Matrix">Matrix</a> may also have translation. <a href="#Matrix">Matrix</a> form is either:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| scale-x 0 translate-x |
| 0 scale-y translate-y |
| 0 0 1 |</pre>
or
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| 0 rotate-x translate-x |
| rotate-y 0 translate-y |
| 0 0 1 |</pre>
@@ -600,13 +598,13 @@ preservesAxisAlignment: true
<a name="SkMatrix_hasPerspective"></a>
## hasPerspective
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool hasPerspective() const
</pre>
Returns true if the matrix contains perspective elements. <a href="#Matrix">Matrix</a> form is:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| -- -- -- |
| -- -- -- |
| perspective-x perspective-y perspective-scale |</pre>
@@ -631,7 +629,7 @@ true if <a href="#Matrix">Matrix</a> is in most general form
<a name="SkMatrix_isSimilarity"></a>
## isSimilarity
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isSimilarity(SkScalar tol = SK_ScalarNearlyZero) const
</pre>
@@ -642,7 +640,7 @@ degenerate forms that collapse to a line or point.
Describes that the <a href="#Matrix">Matrix</a> makes rendering with and without the matrix are
visually alike; a transformed circle remains a circle. Mathematically, this is
-referred to as similarity of a <a href="undocumented#Euclidean">Euclidean</a> space, or a similarity transformation.
+referred to as similarity of a <a href="undocumented#Euclidean_Space">Euclidean Space</a>, or a similarity transformation.
Preserves right angles, keeping the arms of the angle equal lengths.
@@ -671,7 +669,7 @@ with <a href="#SkMatrix_isSimilarity">isSimilarity</a> false reveals the pair no
<a name="SkMatrix_preservesRightAngles"></a>
## preservesRightAngles
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool preservesRightAngles(SkScalar tol = SK_ScalarNearlyZero) const
</pre>
@@ -708,7 +706,7 @@ Skews are not similar and do not preserve right angles.</div></fiddle-embed></di
## <a name="SkMatrix__anonymous"></a> Enum SkMatrix::_anonymous
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum {
<a href="#SkMatrix_kMScaleX">kMScaleX</a>,
<a href="#SkMatrix_kMSkewX">kMSkewX</a>,
@@ -768,7 +766,7 @@ each value in <a href="#Matrix">Matrix</a>.
## <a name="SkMatrix__anonymous_2"></a> Enum SkMatrix::_anonymous_2
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum {
<a href="#SkMatrix_kAScaleX">kAScaleX</a>,
<a href="#SkMatrix_kASkewY">kASkewY</a>,
@@ -810,19 +808,19 @@ Affine arrays are in column major order to match the matrix used by
-<a name="SkMatrix_subscript_operator_const"></a>
+<a name="SkMatrix_array_operator"></a>
## operator[]
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-SkScalar operator[](int index) const
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkScalar operator[](int index) _const
</pre>
-Returns one matrix value. Asserts if <a href="#SkMatrix_subscript_operator_const_index">index</a> is out of range and <a href="undocumented#SK_DEBUG">SK DEBUG</a> is
+Returns one matrix value. Asserts if <a href="#SkMatrix_array_operator_index">index</a> is out of range and <a href="undocumented#SK_DEBUG">SK DEBUG</a> is
defined.
### Parameters
-<table> <tr> <td><a name="SkMatrix_subscript_operator_const_index"> <code><strong>index </strong></code> </a></td> <td>
+<table> <tr> <td><a name="SkMatrix_array_operator_index"> <code><strong>index </strong></code> </a></td> <td>
one of: <a href="#SkMatrix_kMScaleX">kMScaleX</a>, <a href="#SkMatrix_kMSkewX">kMSkewX</a>, <a href="#SkMatrix_kMTransX">kMTransX</a>, <a href="#SkMatrix_kMSkewY">kMSkewY</a>, <a href="#SkMatrix_kMScaleY">kMScaleY</a>, <a href="#SkMatrix_kMTransY">kMTransY</a>,
<a href="#SkMatrix_kMPersp0">kMPersp0</a>, <a href="#SkMatrix_kMPersp1">kMPersp1</a>, <a href="#SkMatrix_kMPersp2">kMPersp2</a></td>
</tr>
@@ -830,7 +828,7 @@ one of: <a href="#SkMatrix_kMScaleX">kMScaleX</a>, <a href="#SkMatrix_kMSkewX">k
### Return Value
-value corresponding to <a href="#SkMatrix_subscript_operator_const_index">index</a>
+value corresponding to <a href="#SkMatrix_array_operator_index">index</a>
### Example
@@ -854,7 +852,7 @@ matrix[SkMatrix::kMScaleY] == 24
<a name="SkMatrix_get"></a>
## get
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar get(int index) const
</pre>
@@ -888,14 +886,14 @@ matrix.get(SkMatrix::kMSkewY) == 24
### See Also
-<a href="#SkMatrix_subscript_operator_const">operator[](int index)</a> <a href="#SkMatrix_set">set</a>
+<a href="#SkMatrix_array1_operator">operator[](int index)</a> <a href="#SkMatrix_set">set</a>
---
<a name="SkMatrix_getScaleX"></a>
## getScaleX
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar getScaleX() const
</pre>
@@ -927,7 +925,7 @@ matrix.getScaleX() == 42
<a name="SkMatrix_getScaleY"></a>
## getScaleY
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar getScaleY() const
</pre>
@@ -959,7 +957,7 @@ matrix.getScaleY() == 24
<a name="SkMatrix_getSkewY"></a>
## getSkewY
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar getSkewY() const
</pre>
@@ -992,7 +990,7 @@ matrix.getSkewY() == 24
<a name="SkMatrix_getSkewX"></a>
## getSkewX
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar getSkewX() const
</pre>
@@ -1025,7 +1023,7 @@ matrix.getSkewX() == 42
<a name="SkMatrix_getTranslateX"></a>
## getTranslateX
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar getTranslateX() const
</pre>
@@ -1057,7 +1055,7 @@ matrix.getTranslateX() == 42
<a name="SkMatrix_getTranslateY"></a>
## getTranslateY
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar getTranslateY() const
</pre>
@@ -1089,7 +1087,7 @@ matrix.getTranslateY() == 24
<a name="SkMatrix_getPerspX"></a>
## getPerspX
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar getPerspX() const
</pre>
@@ -1112,7 +1110,7 @@ input x perspective factor
<a name="SkMatrix_getPerspY"></a>
## getPerspY
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar getPerspY() const
</pre>
@@ -1132,11 +1130,14 @@ input y perspective factor
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<a name="SkMatrix_array1_operator"></a>
+## operator[]
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar& operator[](int index)
</pre>
-Returns writable <a href="#Matrix">Matrix</a> value. Asserts if <a href="#SkMatrix_subscript_operator_index">index</a> is out of range and <a href="undocumented#SK_DEBUG">SK DEBUG</a> is
+Returns writable <a href="#Matrix">Matrix</a> value. Asserts if <a href="#SkMatrix_array1_operator_index">index</a> is out of range and <a href="undocumented#SK_DEBUG">SK DEBUG</a> is
defined. Clears internal cache anticipating that caller will change <a href="#Matrix">Matrix</a> value.
Next call to read <a href="#Matrix">Matrix</a> state may recompute cache; subsequent writes to <a href="#Matrix">Matrix</a>
@@ -1144,7 +1145,7 @@ value must be followed by <a href="#SkMatrix_dirtyMatrixTypeCache">dirtyMatrixTy
### Parameters
-<table> <tr> <td><a name="SkMatrix_subscript_operator_index"> <code><strong>index </strong></code> </a></td> <td>
+<table> <tr> <td><a name="SkMatrix_array1_operator_index"> <code><strong>index </strong></code> </a></td> <td>
one of: <a href="#SkMatrix_kMScaleX">kMScaleX</a>, <a href="#SkMatrix_kMSkewX">kMSkewX</a>, <a href="#SkMatrix_kMTransX">kMTransX</a>, <a href="#SkMatrix_kMSkewY">kMSkewY</a>, <a href="#SkMatrix_kMScaleY">kMScaleY</a>, <a href="#SkMatrix_kMTransY">kMTransY</a>,
<a href="#SkMatrix_kMPersp0">kMPersp0</a>, <a href="#SkMatrix_kMPersp1">kMPersp1</a>, <a href="#SkMatrix_kMPersp2">kMPersp2</a></td>
</tr>
@@ -1152,7 +1153,7 @@ one of: <a href="#SkMatrix_kMScaleX">kMScaleX</a>, <a href="#SkMatrix_kMSkewX">k
### Return Value
-writable value corresponding to <a href="#SkMatrix_subscript_operator_index">index</a>
+writable value corresponding to <a href="#SkMatrix_array1_operator_index">index</a>
### Example
@@ -1178,7 +1179,7 @@ after dirty cache: x = 66
<a name="SkMatrix_set"></a>
## set
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void set(int index, SkScalar value)
</pre>
@@ -1218,7 +1219,7 @@ operator[] <a href="#SkMatrix_get">get</a>
<a name="SkMatrix_setScaleX"></a>
## setScaleX
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setScaleX(SkScalar v)
</pre>
@@ -1244,7 +1245,7 @@ horizontal scale factor to store</td>
<a name="SkMatrix_setScaleY"></a>
## setScaleY
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setScaleY(SkScalar v)
</pre>
@@ -1270,7 +1271,7 @@ vertical scale factor to store</td>
<a name="SkMatrix_setSkewY"></a>
## setSkewY
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setSkewY(SkScalar v)
</pre>
@@ -1296,7 +1297,7 @@ vertical skew factor to store</td>
<a name="SkMatrix_setSkewX"></a>
## setSkewX
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setSkewX(SkScalar v)
</pre>
@@ -1322,7 +1323,7 @@ horizontal skew factor to store</td>
<a name="SkMatrix_setTranslateX"></a>
## setTranslateX
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setTranslateX(SkScalar v)
</pre>
@@ -1348,7 +1349,7 @@ horizontal translation to store</td>
<a name="SkMatrix_setTranslateY"></a>
## setTranslateY
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setTranslateY(SkScalar v)
</pre>
@@ -1374,7 +1375,7 @@ vertical translation to store</td>
<a name="SkMatrix_setPerspX"></a>
## setPerspX
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setPerspX(SkScalar v)
</pre>
@@ -1401,7 +1402,7 @@ perspective factor</td>
<a name="SkMatrix_setPerspY"></a>
## setPerspY
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setPerspY(SkScalar v)
</pre>
@@ -1428,15 +1429,14 @@ perspective factor</td>
<a name="SkMatrix_setAll"></a>
## setAll
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void setAll(SkScalar scaleX, SkScalar skewX, SkScalar transX, SkScalar skewY,
- SkScalar scaleY, SkScalar transY, SkScalar persp0, SkScalar persp1,
- SkScalar persp2)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void setAll(SkScalar scaleX, SkScalar skewX, SkScalar transX, SkScalar skewY, SkScalar scaleY,
+ SkScalar transY, SkScalar persp0, SkScalar persp1, SkScalar persp2)
</pre>
Sets all values from parameters. Sets matrix to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| scaleX skewX transX |
| skewY scaleY transY |
| persp0 persp1 persp2 |</pre>
@@ -1477,7 +1477,7 @@ perspective scale factor to store</td>
<a name="SkMatrix_get9"></a>
## get9
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void get9(SkScalar buffer[9]) const
</pre>
@@ -1515,7 +1515,7 @@ storage for nine <a href="#Scalar">Scalar</a> values</td>
<a name="SkMatrix_set9"></a>
## set9
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void set9(const SkScalar buffer[9])
</pre>
@@ -1525,7 +1525,7 @@ Sets <a href="#Matrix">Matrix</a> to nine <a href="#Scalar">Scalar</a> values in
Sets matrix to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| buffer[0] buffer[1] buffer[2] |
| buffer[3] buffer[4] buffer[5] |
| buffer[6] buffer[7] buffer[8] |</pre>
@@ -1554,13 +1554,13 @@ nine <a href="#Scalar">Scalar</a> values</td>
<a name="SkMatrix_reset"></a>
## reset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void reset()
</pre>
Sets <a href="#Matrix">Matrix</a> to identity; which has no effect on mapped <a href="#Point">Points</a>. Sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| 1 0 0 |
| 0 1 0 |
| 0 0 1 |</pre>
@@ -1589,13 +1589,13 @@ m.isIdentity(): true
<a name="SkMatrix_setIdentity"></a>
## setIdentity
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setIdentity()
</pre>
Sets <a href="#Matrix">Matrix</a> to identity; which has no effect on mapped <a href="#Point">Points</a>. Sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| 1 0 0 |
| 0 1 0 |
| 0 0 1 |</pre>
@@ -1624,7 +1624,7 @@ m.isIdentity(): true
<a name="SkMatrix_setTranslate"></a>
## setTranslate
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setTranslate(SkScalar dx, SkScalar dy)
</pre>
@@ -1649,7 +1649,7 @@ vertical translation</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setTranslate(const SkVector& v)
</pre>
@@ -1658,7 +1658,7 @@ Sets <a href="#Matrix">Matrix</a> to translate by (<a href="#SkMatrix_setTransla
### Parameters
<table> <tr> <td><a name="SkMatrix_setTranslate_2_v"> <code><strong>v </strong></code> </a></td> <td>
-<a href="undocumented#Vector">Vector</a> containing horizontal and vertical translation</td>
+<a href="SkPoint_Reference#Vector">Vector</a> containing horizontal and vertical translation</td>
</tr>
</table>
@@ -1675,7 +1675,7 @@ Sets <a href="#Matrix">Matrix</a> to translate by (<a href="#SkMatrix_setTransla
<a name="SkMatrix_setScale"></a>
## setScale
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setScale(SkScalar sx, SkScalar sy, SkScalar px, SkScalar py)
</pre>
@@ -1705,7 +1705,7 @@ pivot y</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setScale(SkScalar sx, SkScalar sy)
</pre>
@@ -1733,7 +1733,7 @@ vertical scale factor</td>
<a name="SkMatrix_setRotate"></a>
## setRotate
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setRotate(SkScalar degrees, SkScalar px, SkScalar py)
</pre>
@@ -1763,7 +1763,7 @@ pivot y</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setRotate(SkScalar degrees)
</pre>
@@ -1790,15 +1790,15 @@ angle of axes relative to upright axes</td>
<a name="SkMatrix_setSinCos"></a>
## setSinCos
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setSinCos(SkScalar sinValue, SkScalar cosValue, SkScalar px, SkScalar py)
</pre>
Sets <a href="#Matrix">Matrix</a> to rotate by <a href="#SkMatrix_setSinCos_sinValue">sinValue</a> and <a href="#SkMatrix_setSinCos_cosValue">cosValue</a>, about a pivot point at (<a href="#SkMatrix_setSinCos_px">px</a>, <a href="#SkMatrix_setSinCos_py">py</a>).
The pivot point is unchanged when mapped with <a href="#Matrix">Matrix</a>.
-<a href="undocumented#Vector">Vector</a> (<a href="#SkMatrix_setSinCos_sinValue">sinValue</a>, <a href="#SkMatrix_setSinCos_cosValue">cosValue</a>) describes the angle of rotation relative to (0, 1).
-<a href="undocumented#Vector">Vector</a> length specifies scale.
+<a href="SkPoint_Reference#Vector">Vector</a> (<a href="#SkMatrix_setSinCos_sinValue">sinValue</a>, <a href="#SkMatrix_setSinCos_cosValue">cosValue</a>) describes the angle of rotation relative to (0, 1).
+<a href="SkPoint_Reference#Vector">Vector</a> length specifies scale.
### Parameters
@@ -1823,14 +1823,14 @@ pivot y</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setSinCos(SkScalar sinValue, SkScalar cosValue)
</pre>
Sets <a href="#Matrix">Matrix</a> to rotate by <a href="#SkMatrix_setSinCos_2_sinValue">sinValue</a> and <a href="#SkMatrix_setSinCos_2_cosValue">cosValue</a>, about a pivot point at (0, 0).
-<a href="undocumented#Vector">Vector</a> (<a href="#SkMatrix_setSinCos_2_sinValue">sinValue</a>, <a href="#SkMatrix_setSinCos_2_cosValue">cosValue</a>) describes the angle of rotation relative to (0, 1).
-<a href="undocumented#Vector">Vector</a> length specifies scale.
+<a href="SkPoint_Reference#Vector">Vector</a> (<a href="#SkMatrix_setSinCos_2_sinValue">sinValue</a>, <a href="#SkMatrix_setSinCos_2_cosValue">cosValue</a>) describes the angle of rotation relative to (0, 1).
+<a href="SkPoint_Reference#Vector">Vector</a> length specifies scale.
### Parameters
@@ -1854,15 +1854,15 @@ rotation vector y component</td>
<a name="SkMatrix_setRSXform"></a>
## setRSXform
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkMatrix& setRSXform(const SkRSXform& rsxForm)
</pre>
Sets <a href="#Matrix">Matrix</a> to rotate, scale, and translate using a compressed matrix form.
-<a href="undocumented#Vector">Vector</a> (<a href="#SkMatrix_setRSXform_rsxForm">rsxForm</a>.fSSin, <a href="#SkMatrix_setRSXform_rsxForm">rsxForm</a>.fSCos) describes the angle of rotation relative
-to (0, 1). <a href="undocumented#Vector">Vector</a> length specifies scale. Mapped point is rotated and scaled
-by <a href="undocumented#Vector">Vector</a>, then translated by (<a href="#SkMatrix_setRSXform_rsxForm">rsxForm</a>.fTx, <a href="#SkMatrix_setRSXform_rsxForm">rsxForm</a>.fTy).
+<a href="SkPoint_Reference#Vector">Vector</a> (<a href="#SkMatrix_setRSXform_rsxForm">rsxForm</a>.fSSin, <a href="#SkMatrix_setRSXform_rsxForm">rsxForm</a>.fSCos) describes the angle of rotation relative
+to (0, 1). <a href="SkPoint_Reference#Vector">Vector</a> length specifies scale. Mapped point is rotated and scaled
+by <a href="SkPoint_Reference#Vector">Vector</a>, then translated by (<a href="#SkMatrix_setRSXform_rsxForm">rsxForm</a>.fTx, <a href="#SkMatrix_setRSXform_rsxForm">rsxForm</a>.fTy).
### Parameters
@@ -1888,7 +1888,7 @@ reference to <a href="#Matrix">Matrix</a>
<a name="SkMatrix_setSkew"></a>
## setSkew
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setSkew(SkScalar kx, SkScalar ky, SkScalar px, SkScalar py)
</pre>
@@ -1918,7 +1918,7 @@ pivot y</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setSkew(SkScalar kx, SkScalar ky)
</pre>
@@ -1946,7 +1946,7 @@ vertical skew factor</td>
<a name="SkMatrix_setConcat"></a>
## setConcat
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setConcat(const SkMatrix& a, const SkMatrix& b)
</pre>
@@ -1954,14 +1954,14 @@ Sets <a href="#Matrix">Matrix</a> to <a href="#Matrix">Matrix</a> <a href="#SkMa
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | J K L |
a = | D E F |, b = | M N O |
| G H I | | P Q R |</pre>
sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | J K L | | AJ+BM+CP AK+BN+CQ AL+BO+CR |
a * b = | D E F | * | M N O | = | DJ+EM+FP DK+EN+FQ DL+EO+FR |
| G H I | | P Q R | | GJ+HM+IP GK+HN+IQ GL+HO+IR |</pre>
@@ -1989,7 +1989,7 @@ Multiplying the matrix by its inverse turns into an identity matrix.</div></fidd
<a name="SkMatrix_preTranslate"></a>
## preTranslate
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void preTranslate(SkScalar dx, SkScalar dy)
</pre>
@@ -1998,14 +1998,14 @@ This can be thought of as moving the point to be mapped before applying <a href=
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | 1 0 dx |
Matrix = | D E F |, T(dx, dy) = | 0 1 dy |
| G H I | | 0 0 1 |</pre>
sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | 1 0 dx | | A B A*dx+B*dy+C |
Matrix * T(dx, dy) = | D E F | | 0 1 dy | = | D E D*dx+E*dy+F |
| G H I | | 0 0 1 | | G H G*dx+H*dy+I |</pre>
@@ -2032,7 +2032,7 @@ y translation before applying <a href="#Matrix">Matrix</a></td>
<a name="SkMatrix_preScale"></a>
## preScale
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void preScale(SkScalar sx, SkScalar sy, SkScalar px, SkScalar py)
</pre>
@@ -2042,20 +2042,20 @@ This can be thought of as scaling about a pivot point before applying <a href="#
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | sx 0 dx |
Matrix = | D E F |, S(sx, sy, px, py) = | 0 sy dy |
| G H I | | 0 0 1 |</pre>
where
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
dx = px - sx * px
dy = py - sy * py</pre>
sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | sx 0 dx | | A*sx B*sy A*dx+B*dy+C |
Matrix * S(sx, sy, px, py) = | D E F | | 0 sy dy | = | D*sx E*sy D*dx+E*dy+F |
| G H I | | 0 0 1 | | G*sx H*sy G*dx+H*dy+I |</pre>
@@ -2083,7 +2083,7 @@ pivot y</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void preScale(SkScalar sx, SkScalar sy)
</pre>
@@ -2093,14 +2093,14 @@ This can be thought of as scaling about the origin before applying <a href="#Mat
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | sx 0 0 |
Matrix = | D E F |, S(sx, sy) = | 0 sy 0 |
| G H I | | 0 0 1 |</pre>
sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | sx 0 0 | | A*sx B*sy C |
Matrix * S(sx, sy) = | D E F | | 0 sy 0 | = | D*sx E*sy F |
| G H I | | 0 0 1 | | G*sx H*sy I |</pre>
@@ -2127,7 +2127,7 @@ vertical scale factor</td>
<a name="SkMatrix_preRotate"></a>
## preRotate
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void preRotate(SkScalar degrees, SkScalar px, SkScalar py)
</pre>
@@ -2139,14 +2139,14 @@ Positive <a href="#SkMatrix_preRotate_degrees">degrees</a> rotates clockwise.
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | c -s dx |
Matrix = | D E F |, R(degrees, px, py) = | s c dy |
| G H I | | 0 0 1 |</pre>
where
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
c = cos(degrees)
s = sin(degrees)
dx = s * py + (1 - c) * px
@@ -2154,7 +2154,7 @@ dy = -s * px + (1 - c) * py</pre>
sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | c -s dx | | Ac+Bs -As+Bc A*dx+B*dy+C |
Matrix * R(degrees, px, py) = | D E F | | s c dy | = | Dc+Es -Ds+Ec D*dx+E*dy+F |
| G H I | | 0 0 1 | | Gc+Hs -Gs+Hc G*dx+H*dy+I |</pre>
@@ -2180,7 +2180,7 @@ pivot y</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void preRotate(SkScalar degrees)
</pre>
@@ -2192,20 +2192,20 @@ Positive <a href="#SkMatrix_preRotate_2_degrees">degrees</a> rotates clockwise.
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | c -s 0 |
Matrix = | D E F |, R(degrees, px, py) = | s c 0 |
| G H I | | 0 0 1 |</pre>
where
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
c = cos(degrees)
s = sin(degrees)</pre>
sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | c -s 0 | | Ac+Bs -As+Bc C |
Matrix * R(degrees, px, py) = | D E F | | s c 0 | = | Dc+Es -Ds+Ec F |
| G H I | | 0 0 1 | | Gc+Hs -Gs+Hc I |</pre>
@@ -2230,7 +2230,7 @@ angle of axes relative to upright axes</td>
<a name="SkMatrix_preSkew"></a>
## preSkew
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void preSkew(SkScalar kx, SkScalar ky, SkScalar px, SkScalar py)
</pre>
@@ -2240,20 +2240,20 @@ This can be thought of as skewing about a pivot point before applying <a href="#
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | 1 kx dx |
Matrix = | D E F |, K(kx, ky, px, py) = | ky 1 dy |
| G H I | | 0 0 1 |</pre>
where
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
dx = -kx * py
dy = -ky * px</pre>
sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | 1 kx dx | | A+B*ky A*kx+B A*dx+B*dy+C |
Matrix * K(kx, ky, px, py) = | D E F | | ky 1 dy | = | D+E*ky D*kx+E D*dx+E*dy+F |
| G H I | | 0 0 1 | | G+H*ky G*kx+H G*dx+H*dy+I |</pre>
@@ -2281,7 +2281,7 @@ pivot y</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void preSkew(SkScalar kx, SkScalar ky)
</pre>
@@ -2291,14 +2291,14 @@ This can be thought of as skewing about the origin before applying <a href="#Mat
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | 1 kx 0 |
Matrix = | D E F |, K(kx, ky) = | ky 1 0 |
| G H I | | 0 0 1 |</pre>
sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | 1 kx 0 | | A+B*ky A*kx+B C |
Matrix * K(kx, ky) = | D E F | | ky 1 0 | = | D+E*ky D*kx+E F |
| G H I | | 0 0 1 | | G+H*ky G*kx+H I |</pre>
@@ -2325,7 +2325,7 @@ vertical skew factor</td>
<a name="SkMatrix_preConcat"></a>
## preConcat
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void preConcat(const SkMatrix& other)
</pre>
@@ -2334,14 +2334,14 @@ This can be thought of mapping by <a href="#SkMatrix_preConcat_other">other</a>
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | J K L |
Matrix = | D E F |, other = | M N O |
| G H I | | P Q R |</pre>
sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | J K L | | AJ+BM+CP AK+BN+CQ AL+BO+CR |
Matrix * other = | D E F | * | M N O | = | DJ+EM+FP DK+EN+FQ DL+EO+FR |
| G H I | | P Q R | | GJ+HM+IP GK+HN+IQ GL+HO+IR |</pre>
@@ -2367,7 +2367,7 @@ Multiplying the matrix by its inverse turns into an identity matrix.</div></fidd
<a name="SkMatrix_postTranslate"></a>
## postTranslate
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void postTranslate(SkScalar dx, SkScalar dy)
</pre>
@@ -2376,14 +2376,14 @@ This can be thought of as moving the point to be mapped after applying <a href="
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| J K L | | 1 0 dx |
Matrix = | M N O |, T(dx, dy) = | 0 1 dy |
| P Q R | | 0 0 1 |</pre>
sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| 1 0 dx | | J K L | | J+dx*P K+dx*Q L+dx*R |
T(dx, dy) * Matrix = | 0 1 dy | | M N O | = | M+dy*P N+dy*Q O+dy*R |
| 0 0 1 | | P Q R | | P Q R |</pre>
@@ -2410,7 +2410,7 @@ y translation after applying <a href="#Matrix">Matrix</a></td>
<a name="SkMatrix_postScale"></a>
## postScale
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void postScale(SkScalar sx, SkScalar sy, SkScalar px, SkScalar py)
</pre>
@@ -2420,20 +2420,20 @@ This can be thought of as scaling about a pivot point after applying <a href="#M
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| J K L | | sx 0 dx |
Matrix = | M N O |, S(sx, sy, px, py) = | 0 sy dy |
| P Q R | | 0 0 1 |</pre>
where
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
dx = px - sx * px
dy = py - sy * py</pre>
sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| sx 0 dx | | J K L | | sx*J+dx*P sx*K+dx*Q sx*L+dx+R |
S(sx, sy, px, py) * Matrix = | 0 sy dy | | M N O | = | sy*M+dy*P sy*N+dy*Q sy*O+dy*R |
| 0 0 1 | | P Q R | | P Q R |</pre>
@@ -2461,7 +2461,7 @@ pivot y</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void postScale(SkScalar sx, SkScalar sy)
</pre>
@@ -2471,14 +2471,14 @@ This can be thought of as scaling about the origin after applying <a href="#Matr
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| J K L | | sx 0 0 |
Matrix = | M N O |, S(sx, sy) = | 0 sy 0 |
| P Q R | | 0 0 1 |</pre>
sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| sx 0 0 | | J K L | | sx*J sx*K sx*L |
S(sx, sy) * Matrix = | 0 sy 0 | | M N O | = | sy*M sy*N sy*O |
| 0 0 1 | | P Q R | | P Q R |</pre>
@@ -2505,7 +2505,7 @@ vertical scale factor</td>
<a name="SkMatrix_postIDiv"></a>
## postIDiv
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool postIDiv(int divx, int divy)
</pre>
@@ -2515,20 +2515,20 @@ Returns false if either <a href="#SkMatrix_postIDiv_divx">divx</a> or <a href="#
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| J K L | | sx 0 0 |
Matrix = | M N O |, I(divx, divy) = | 0 sy 0 |
| P Q R | | 0 0 1 |</pre>
where
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
sx = 1 / divx
sy = 1 / divy</pre>
sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| 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 |</pre>
@@ -2559,7 +2559,7 @@ true on successful scale
<a name="SkMatrix_postRotate"></a>
## postRotate
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void postRotate(SkScalar degrees, SkScalar px, SkScalar py)
</pre>
@@ -2571,14 +2571,14 @@ Positive <a href="#SkMatrix_postRotate_degrees">degrees</a> rotates clockwise.
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| J K L | | c -s dx |
Matrix = | M N O |, R(degrees, px, py) = | s c dy |
| P Q R | | 0 0 1 |</pre>
where
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
c = cos(degrees)
s = sin(degrees)
dx = s * py + (1 - c) * px
@@ -2586,7 +2586,7 @@ dy = -s * px + (1 - c) * py</pre>
sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
|c -s dx| |J K L| |cJ-sM+dx*P cK-sN+dx*Q cL-sO+dx+R|
R(degrees, px, py) * Matrix = |s c dy| |M N O| = |sJ+cM+dy*P sK+cN+dy*Q sL+cO+dy*R|
|0 0 1| |P Q R| | P Q R|</pre>
@@ -2612,7 +2612,7 @@ pivot y</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void postRotate(SkScalar degrees)
</pre>
@@ -2624,20 +2624,20 @@ Positive <a href="#SkMatrix_postRotate_2_degrees">degrees</a> rotates clockwise.
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| J K L | | c -s 0 |
Matrix = | M N O |, R(degrees, px, py) = | s c 0 |
| P Q R | | 0 0 1 |</pre>
where
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
c = cos(degrees)
s = sin(degrees)</pre>
sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| c -s dx | | J K L | | cJ-sM cK-sN cL-sO |
R(degrees, px, py) * Matrix = | s c dy | | M N O | = | sJ+cM sK+cN sL+cO |
| 0 0 1 | | P Q R | | P Q R |</pre>
@@ -2662,7 +2662,7 @@ angle of axes relative to upright axes</td>
<a name="SkMatrix_postSkew"></a>
## postSkew
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void postSkew(SkScalar kx, SkScalar ky, SkScalar px, SkScalar py)
</pre>
@@ -2672,20 +2672,20 @@ This can be thought of as skewing about a pivot point after applying <a href="#M
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| J K L | | 1 kx dx |
Matrix = | M N O |, K(kx, ky, px, py) = | ky 1 dy |
| P Q R | | 0 0 1 |</pre>
where
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
dx = -kx * py
dy = -ky * px</pre>
sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| 1 kx dx| |J K L| |J+kx*M+dx*P K+kx*N+dx*Q L+kx*O+dx+R|
K(kx, ky, px, py) * Matrix = |ky 1 dy| |M N O| = |ky*J+M+dy*P ky*K+N+dy*Q ky*L+O+dy*R|
| 0 0 1| |P Q R| | P Q R|</pre>
@@ -2713,7 +2713,7 @@ pivot y</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void postSkew(SkScalar kx, SkScalar ky)
</pre>
@@ -2723,14 +2723,14 @@ This can be thought of as skewing about the origin after applying <a href="#Matr
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| J K L | | 1 kx 0 |
Matrix = | M N O |, K(kx, ky) = | ky 1 0 |
| P Q R | | 0 0 1 |</pre>
sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| 1 kx 0 | | J K L | | J+kx*M K+kx*N L+kx*O |
K(kx, ky) * Matrix = | ky 1 0 | | M N O | = | ky*J+M ky*K+N ky*L+O |
| 0 0 1 | | P Q R | | P Q R |</pre>
@@ -2757,7 +2757,7 @@ vertical skew factor</td>
<a name="SkMatrix_postConcat"></a>
## postConcat
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void postConcat(const SkMatrix& other)
</pre>
@@ -2766,14 +2766,14 @@ This can be thought of mapping by <a href="#SkMatrix_postConcat_other">other</a>
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| J K L | | A B C |
Matrix = | M N O |, other = | D E F |
| P Q R | | G H I |</pre>
sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | J K L | | AJ+BM+CP AK+BN+CQ AL+BO+CR |
other * Matrix = | D E F | * | M N O | = | DJ+EM+FP DK+EN+FQ DL+EO+FR |
| G H I | | P Q R | | GJ+HM+IP GK+HN+IQ GL+HO+IR |</pre>
@@ -2797,7 +2797,7 @@ other * Matrix = | D E F | * | M N O | = | DJ+EM+FP DK+EN+FQ DL+EO+FR |
## <a name="SkMatrix_ScaleToFit"></a> Enum SkMatrix::ScaleToFit
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#SkMatrix_ScaleToFit">ScaleToFit</a> {
<a href="#SkMatrix_kFill_ScaleToFit">kFill ScaleToFit</a>,
<a href="#SkMatrix_kStart_ScaleToFit">kStart ScaleToFit</a>,
@@ -2848,7 +2848,7 @@ edges of destination <a href="SkRect_Reference#Rect">Rect</a>.</td>
<a name="SkMatrix_setRectToRect"></a>
## setRectToRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool setRectToRect(const SkRect& src, const SkRect& dst, ScaleToFit stf)
</pre>
@@ -2857,7 +2857,7 @@ mapping completely fills <a href="#SkMatrix_setRectToRect_dst">dst</a> or preser
<a href="#SkMatrix_setRectToRect_src">src</a> within <a href="#SkMatrix_setRectToRect_dst">dst</a>. Returns false if <a href="#SkMatrix_setRectToRect_src">src</a> is empty, and sets <a href="#Matrix">Matrix</a> to identity.
Returns true if <a href="#SkMatrix_setRectToRect_dst">dst</a> is empty, and sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| 0 0 0 |
| 0 0 0 |
| 0 0 1 |</pre>
@@ -2906,9 +2906,8 @@ src: 1, 2, 3, 4 dst: 5, 6, 8, 9 success: true
<a name="SkMatrix_MakeRectToRect"></a>
## MakeRectToRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-static SkMatrix MakeRectToRect(const SkRect& src, const SkRect& dst,
- ScaleToFit stf)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static SkMatrix MakeRectToRect(const SkRect& src, const SkRect& dst, ScaleToFit stf)
</pre>
Returns <a href="#Matrix">Matrix</a> <a href="#SkMatrix_set">set</a> to scale and translate <a href="#SkMatrix_MakeRectToRect_src">src</a> <a href="SkRect_Reference#Rect">Rect</a> to <a href="#SkMatrix_MakeRectToRect_dst">dst</a> <a href="SkRect_Reference#Rect">Rect</a>. <a href="#SkMatrix_MakeRectToRect_stf">stf</a> selects
@@ -2916,7 +2915,7 @@ whether mapping completely fills <a href="#SkMatrix_MakeRectToRect_dst">dst</a>
align <a href="#SkMatrix_MakeRectToRect_src">src</a> within <a href="#SkMatrix_MakeRectToRect_dst">dst</a>. Returns the identity <a href="#Matrix">Matrix</a> if <a href="#SkMatrix_MakeRectToRect_src">src</a> is empty. If <a href="#SkMatrix_MakeRectToRect_dst">dst</a> is
empty, returns <a href="#Matrix">Matrix</a> <a href="#SkMatrix_set">set</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| 0 0 0 |
| 0 0 0 |
| 0 0 1 |</pre>
@@ -2965,7 +2964,7 @@ src: 1, 2, 3, 4 dst: 5, 6, 8, 9
<a name="SkMatrix_setPolyToPoly"></a>
## setPolyToPoly
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool setPolyToPoly(const SkPoint src[], const SkPoint dst[], int count)
</pre>
@@ -3005,7 +3004,7 @@ true if <a href="#Matrix">Matrix</a> was constructed successfully
<a name="SkMatrix_invert"></a>
## invert
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool SK_WARN_UNUSED_RESULT invert(SkMatrix* inverse) const
</pre>
@@ -3038,14 +3037,14 @@ true if <a href="#Matrix">Matrix</a> can be inverted
<a name="SkMatrix_SetAffineIdentity"></a>
## SetAffineIdentity
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static void SetAffineIdentity(SkScalar affine[6])
</pre>
Fills <a href="#SkMatrix_SetAffineIdentity_affine">affine</a> with identity values in column major order.
Sets <a href="#SkMatrix_SetAffineIdentity_affine">affine</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| 1 0 0 |
| 0 1 0 |</pre>
@@ -3079,13 +3078,13 @@ ScaleX: 1 SkewY: 0 SkewX: 0 ScaleY: 1 TransX: 0 TransY: 0
<a name="SkMatrix_asAffine"></a>
## asAffine
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool SK_WARN_UNUSED_RESULT asAffine(SkScalar affine[6]) const
</pre>
Fills <a href="#SkMatrix_asAffine_affine">affine</a> in column major order. Sets <a href="#SkMatrix_asAffine_affine">affine</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| scale-x skew-x translate-x |
| skew-y scale-y translate-y |</pre>
@@ -3123,20 +3122,20 @@ ScaleX: 2 SkewY: 5 SkewX: 3 ScaleY: 6 TransX: 4 TransY: 7
<a name="SkMatrix_setAffine"></a>
## setAffine
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setAffine(const SkScalar affine[6])
</pre>
Sets <a href="#Matrix">Matrix</a> to <a href="#SkMatrix_setAffine_affine">affine</a> values, passed in column major order. Given <a href="#SkMatrix_setAffine_affine">affine</a>,
column, then row, as:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| scale-x skew-x translate-x |
| skew-y scale-y translate-y |</pre>
<a href="#Matrix">Matrix</a> is <a href="#SkMatrix_set">set</a>, row, then column, to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| scale-x skew-x translate-x |
| skew-y scale-y translate-y |
| 0 0 1 |</pre>
@@ -3170,29 +3169,29 @@ ScaleX: 2 SkewY: 5 SkewX: 3 ScaleY: 6 TransX: 4 TransY: 7
<a name="SkMatrix_mapPoints"></a>
## mapPoints
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void mapPoints(SkPoint dst[], const SkPoint src[], int count) const
</pre>
-Maps <a href="#SkMatrix_mapPoints_src">src</a> <a href="undocumented#Point">Point</a> array of length <a href="#SkMatrix_mapPoints_count">count</a> to <a href="#SkMatrix_mapPoints_dst">dst</a> <a href="undocumented#Point">Point</a> array of equal or greater
-length. <a href="#Point">Points</a> are mapped by multiplying each <a href="undocumented#Point">Point</a> by <a href="#Matrix">Matrix</a>. Given:
+Maps <a href="#SkMatrix_mapPoints_src">src</a> <a href="SkPoint_Reference#Point">Point</a> array of length <a href="#SkMatrix_mapPoints_count">count</a> to <a href="#SkMatrix_mapPoints_dst">dst</a> <a href="SkPoint_Reference#Point">Point</a> array of equal or greater
+length. <a href="#Point">Points</a> are mapped by multiplying each <a href="SkPoint_Reference#Point">Point</a> by <a href="#Matrix">Matrix</a>. Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | x |
Matrix = | D E F |, pt = | y |
| G H I | | 1 |</pre>
where
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
for (i = 0; i < count; ++i) {
x = src[i].fX
y = src[i].fY
}</pre>
-each <a href="#SkMatrix_mapPoints_dst">dst</a> <a href="undocumented#Point">Point</a> is computed as:
+each <a href="#SkMatrix_mapPoints_dst">dst</a> <a href="SkPoint_Reference#Point">Point</a> is computed as:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
|A B C| |x| Ax+By+C Dx+Ey+F
Matrix * pt = |D E F| |y| = |Ax+By+C Dx+Ey+F Gx+Hy+I| = ------- , -------
|G H I| |1| Gx+Hy+I Gx+Hy+I</pre>
@@ -3220,29 +3219,29 @@ number of <a href="#Point">Points</a> to transform</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void mapPoints(SkPoint pts[], int count) const
</pre>
-Maps <a href="#SkMatrix_mapPoints_2_pts">pts</a> <a href="undocumented#Point">Point</a> array of length <a href="#SkMatrix_mapPoints_2_count">count</a> in place. <a href="#Point">Points</a> are mapped by multiplying
-each <a href="undocumented#Point">Point</a> by <a href="#Matrix">Matrix</a>. Given:
+Maps <a href="#SkMatrix_mapPoints_2_pts">pts</a> <a href="SkPoint_Reference#Point">Point</a> array of length <a href="#SkMatrix_mapPoints_2_count">count</a> in place. <a href="#Point">Points</a> are mapped by multiplying
+each <a href="SkPoint_Reference#Point">Point</a> by <a href="#Matrix">Matrix</a>. Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | x |
Matrix = | D E F |, pt = | y |
| G H I | | 1 |</pre>
where
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
for (i = 0; i < count; ++i) {
x = pts[i].fX
y = pts[i].fY
}</pre>
-each resulting <a href="#SkMatrix_mapPoints_2_pts">pts</a> <a href="undocumented#Point">Point</a> is computed as:
+each resulting <a href="#SkMatrix_mapPoints_2_pts">pts</a> <a href="SkPoint_Reference#Point">Point</a> is computed as:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
|A B C| |x| Ax+By+C Dx+Ey+F
Matrix * pt = |D E F| |y| = |Ax+By+C Dx+Ey+F Gx+Hy+I| = ------- , -------
|G H I| |1| Gx+Hy+I Gx+Hy+I</pre>
@@ -3269,21 +3268,21 @@ number of <a href="#Point">Points</a> to transform</td>
<a name="SkMatrix_mapPointsWithStride"></a>
## mapPointsWithStride
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void mapPointsWithStride(SkPoint pts[], size_t stride, int count) const
</pre>
-Maps <a href="#SkMatrix_mapPointsWithStride_count">count</a> <a href="#SkMatrix_mapPointsWithStride_pts">pts</a>, skipping <a href="#SkMatrix_mapPointsWithStride_stride">stride</a> bytes to advance from one <a href="undocumented#Point">Point</a> to the next.
-<a href="#Point">Points</a> are mapped by multiplying each <a href="undocumented#Point">Point</a> by <a href="#Matrix">Matrix</a>. Given:
+Maps <a href="#SkMatrix_mapPointsWithStride_count">count</a> <a href="#SkMatrix_mapPointsWithStride_pts">pts</a>, skipping <a href="#SkMatrix_mapPointsWithStride_stride">stride</a> bytes to advance from one <a href="SkPoint_Reference#Point">Point</a> to the next.
+<a href="#Point">Points</a> are mapped by multiplying each <a href="SkPoint_Reference#Point">Point</a> by <a href="#Matrix">Matrix</a>. Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | x |
Matrix = | D E F |, pt = | y |
| G H I | | 1 |</pre>
-each resulting <a href="#SkMatrix_mapPointsWithStride_pts">pts</a> <a href="undocumented#Point">Point</a> is computed as:
+each resulting <a href="#SkMatrix_mapPointsWithStride_pts">pts</a> <a href="SkPoint_Reference#Point">Point</a> is computed as:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
|A B C| |x| Ax+By+C Dx+Ey+F
Matrix * pt = |D E F| |y| = |Ax+By+C Dx+Ey+F Gx+Hy+I| = ------- , -------
|G H I| |1| Gx+Hy+I Gx+Hy+I</pre>
@@ -3293,7 +3292,7 @@ Matrix * pt = |D E F| |y| = |Ax+By+C Dx+Ey+F Gx+Hy+I| = ------- , -------
<table> <tr> <td><a name="SkMatrix_mapPointsWithStride_pts"> <code><strong>pts </strong></code> </a></td> <td>
storage for mapped <a href="#Point">Points</a></td>
</tr> <tr> <td><a name="SkMatrix_mapPointsWithStride_stride"> <code><strong>stride </strong></code> </a></td> <td>
-size of record starting with <a href="undocumented#Point">Point</a>, in bytes</td>
+size of record starting with <a href="SkPoint_Reference#Point">Point</a>, in bytes</td>
</tr> <tr> <td><a name="SkMatrix_mapPointsWithStride_count"> <code><strong>count </strong></code> </a></td> <td>
number of <a href="#Point">Points</a> to transform</td>
</tr>
@@ -3309,23 +3308,22 @@ number of <a href="#Point">Points</a> to transform</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void mapPointsWithStride(SkPoint dst[], const SkPoint src[], size_t stride,
- int count) const
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void mapPointsWithStride(SkPoint dst[], const SkPoint src[], size_t stride, int count) const
</pre>
-Maps <a href="#SkMatrix_mapPointsWithStride_2_src">src</a> <a href="undocumented#Point">Point</a> array of length <a href="#SkMatrix_mapPointsWithStride_2_count">count</a> to <a href="#SkMatrix_mapPointsWithStride_2_dst">dst</a> <a href="undocumented#Point">Point</a> array, skipping <a href="#SkMatrix_mapPointsWithStride_2_stride">stride</a> bytes
-to advance from one <a href="undocumented#Point">Point</a> to the next.
-<a href="#Point">Points</a> are mapped by multiplying each <a href="undocumented#Point">Point</a> by <a href="#Matrix">Matrix</a>. Given:
+Maps <a href="#SkMatrix_mapPointsWithStride_2_src">src</a> <a href="SkPoint_Reference#Point">Point</a> array of length <a href="#SkMatrix_mapPointsWithStride_2_count">count</a> to <a href="#SkMatrix_mapPointsWithStride_2_dst">dst</a> <a href="SkPoint_Reference#Point">Point</a> array, skipping <a href="#SkMatrix_mapPointsWithStride_2_stride">stride</a> bytes
+to advance from one <a href="SkPoint_Reference#Point">Point</a> to the next.
+<a href="#Point">Points</a> are mapped by multiplying each <a href="SkPoint_Reference#Point">Point</a> by <a href="#Matrix">Matrix</a>. Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | x |
Matrix = | D E F |, src = | y |
| G H I | | 1 |</pre>
-each resulting <a href="#SkMatrix_mapPointsWithStride_2_dst">dst</a> <a href="undocumented#Point">Point</a> is computed as:
+each resulting <a href="#SkMatrix_mapPointsWithStride_2_dst">dst</a> <a href="SkPoint_Reference#Point">Point</a> is computed as:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
|A B C| |x| Ax+By+C Dx+Ey+F
Matrix * pt = |D E F| |y| = |Ax+By+C Dx+Ey+F Gx+Hy+I| = ------- , -------
|G H I| |1| Gx+Hy+I Gx+Hy+I</pre>
@@ -3337,7 +3335,7 @@ storage for mapped <a href="#Point">Points</a></td>
</tr> <tr> <td><a name="SkMatrix_mapPointsWithStride_2_src"> <code><strong>src </strong></code> </a></td> <td>
<a href="#Point">Points</a> to transform</td>
</tr> <tr> <td><a name="SkMatrix_mapPointsWithStride_2_stride"> <code><strong>stride </strong></code> </a></td> <td>
-size of record starting with <a href="undocumented#Point">Point</a>, in bytes</td>
+size of record starting with <a href="SkPoint_Reference#Point">Point</a>, in bytes</td>
</tr> <tr> <td><a name="SkMatrix_mapPointsWithStride_2_count"> <code><strong>count </strong></code> </a></td> <td>
number of <a href="#Point">Points</a> to transform</td>
</tr>
@@ -3356,21 +3354,21 @@ number of <a href="#Point">Points</a> to transform</td>
<a name="SkMatrix_mapHomogeneousPoints"></a>
## mapHomogeneousPoints
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void mapHomogeneousPoints(SkPoint3 dst[], const SkPoint3 src[], int count) const
</pre>
Maps <a href="#SkMatrix_mapHomogeneousPoints_src">src</a> <a href="undocumented#Point3">Point3</a> array of length <a href="#SkMatrix_mapHomogeneousPoints_count">count</a> to <a href="#SkMatrix_mapHomogeneousPoints_dst">dst</a> <a href="undocumented#Point3">Point3</a> array, which must of length <a href="#SkMatrix_mapHomogeneousPoints_count">count</a> or
greater. <a href="undocumented#Point3">Point3</a> array is mapped by multiplying each <a href="undocumented#Point3">Point3</a> by <a href="#Matrix">Matrix</a>. Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | x |
Matrix = | D E F |, src = | y |
| G H I | | z |</pre>
-each resulting <a href="#SkMatrix_mapHomogeneousPoints_dst">dst</a> <a href="undocumented#Point">Point</a> is computed as:
+each resulting <a href="#SkMatrix_mapHomogeneousPoints_dst">dst</a> <a href="SkPoint_Reference#Point">Point</a> is computed as:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
|A B C| |x|
Matrix * src = |D E F| |y| = |Ax+By+Cz Dx+Ey+Fz Gx+Hy+Iz|
|G H I| |z|</pre>
@@ -3388,7 +3386,7 @@ items in <a href="undocumented#Point3">Point3</a> array to transform</td>
### Example
-<div><fiddle-embed name="0d8c7aa7249048f2b83d32cf13f88560"></fiddle-embed></div>
+<div><fiddle-embed name="d56f93e4bc763c7ba4914321ed07a8b5"></fiddle-embed></div>
### See Also
@@ -3399,20 +3397,20 @@ items in <a href="undocumented#Point3">Point3</a> array to transform</td>
<a name="SkMatrix_mapXY"></a>
## mapXY
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void mapXY(SkScalar x, SkScalar y, SkPoint* result) const
</pre>
-Maps <a href="undocumented#Point">Point</a> (<a href="#SkMatrix_mapXY_x">x</a>, <a href="#SkMatrix_mapXY_y">y</a>) to <a href="#SkMatrix_mapXY_result">result</a>. <a href="undocumented#Point">Point</a> is mapped by multiplying by <a href="#Matrix">Matrix</a>. Given:
+Maps <a href="SkPoint_Reference#Point">Point</a> (<a href="#SkMatrix_mapXY_x">x</a>, <a href="#SkMatrix_mapXY_y">y</a>) to <a href="#SkMatrix_mapXY_result">result</a>. <a href="SkPoint_Reference#Point">Point</a> is mapped by multiplying by <a href="#Matrix">Matrix</a>. Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | x |
Matrix = | D E F |, pt = | y |
| G H I | | 1 |</pre>
<a href="#SkMatrix_mapXY_result">result</a> is computed as:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
|A B C| |x| Ax+By+C Dx+Ey+F
Matrix * pt = |D E F| |y| = |Ax+By+C Dx+Ey+F Gx+Hy+I| = ------- , -------
|G H I| |1| Gx+Hy+I Gx+Hy+I</pre>
@@ -3420,11 +3418,11 @@ Matrix * pt = |D E F| |y| = |Ax+By+C Dx+Ey+F Gx+Hy+I| = ------- , -------
### Parameters
<table> <tr> <td><a name="SkMatrix_mapXY_x"> <code><strong>x </strong></code> </a></td> <td>
-x-coordinate of <a href="undocumented#Point">Point</a> to map</td>
+<a href="#SkMatrix_mapXY_x">x</a>-coordinate of <a href="SkPoint_Reference#Point">Point</a> to map</td>
</tr> <tr> <td><a name="SkMatrix_mapXY_y"> <code><strong>y </strong></code> </a></td> <td>
-y-coordinate of <a href="undocumented#Point">Point</a> to map</td>
+<a href="#SkMatrix_mapXY_y">y</a>-coordinate of <a href="SkPoint_Reference#Point">Point</a> to map</td>
</tr> <tr> <td><a name="SkMatrix_mapXY_result"> <code><strong>result </strong></code> </a></td> <td>
-storage for mapped <a href="undocumented#Point">Point</a></td>
+storage for mapped <a href="SkPoint_Reference#Point">Point</a></td>
</tr>
</table>
@@ -3438,20 +3436,20 @@ storage for mapped <a href="undocumented#Point">Point</a></td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkPoint mapXY(SkScalar x, SkScalar y) const
</pre>
-Returns <a href="undocumented#Point">Point</a> (<a href="#SkMatrix_mapXY_2_x">x</a>, <a href="#SkMatrix_mapXY_2_y">y</a>) multiplied by <a href="#Matrix">Matrix</a>. Given:
+Returns <a href="SkPoint_Reference#Point">Point</a> (<a href="#SkMatrix_mapXY_2_x">x</a>, <a href="#SkMatrix_mapXY_2_y">y</a>) multiplied by <a href="#Matrix">Matrix</a>. Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | x |
Matrix = | D E F |, pt = | y |
| G H I | | 1 |</pre>
result is computed as:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
|A B C| |x| Ax+By+C Dx+Ey+F
Matrix * pt = |D E F| |y| = |Ax+By+C Dx+Ey+F Gx+Hy+I| = ------- , -------
|G H I| |1| Gx+Hy+I Gx+Hy+I</pre>
@@ -3459,15 +3457,15 @@ Matrix * pt = |D E F| |y| = |Ax+By+C Dx+Ey+F Gx+Hy+I| = ------- , -------
### Parameters
<table> <tr> <td><a name="SkMatrix_mapXY_2_x"> <code><strong>x </strong></code> </a></td> <td>
-x-coordinate of <a href="undocumented#Point">Point</a> to map</td>
+<a href="#SkMatrix_mapXY_2_x">x</a>-coordinate of <a href="SkPoint_Reference#Point">Point</a> to map</td>
</tr> <tr> <td><a name="SkMatrix_mapXY_2_y"> <code><strong>y </strong></code> </a></td> <td>
-y-coordinate of <a href="undocumented#Point">Point</a> to map</td>
+<a href="#SkMatrix_mapXY_2_y">y</a>-coordinate of <a href="SkPoint_Reference#Point">Point</a> to map</td>
</tr>
</table>
### Return Value
-mapped <a href="undocumented#Point">Point</a>
+mapped <a href="SkPoint_Reference#Point">Point</a>
### Example
@@ -3482,30 +3480,30 @@ mapped <a href="undocumented#Point">Point</a>
<a name="SkMatrix_mapVectors"></a>
## mapVectors
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void mapVectors(SkVector dst[], const SkVector src[], int count) const
</pre>
-Maps <a href="#SkMatrix_mapVectors_src">src</a> <a href="undocumented#Vector">Vector</a> array of length <a href="#SkMatrix_mapVectors_count">count</a> to <a href="undocumented#Vector">Vector</a> <a href="undocumented#Point">Point</a> array of equal or greater
-length. <a href="#Vector">Vectors</a> are mapped by multiplying each <a href="undocumented#Vector">Vector</a> by <a href="#Matrix">Matrix</a>, treating
+Maps <a href="#SkMatrix_mapVectors_src">src</a> <a href="SkPoint_Reference#Vector">Vector</a> array of length <a href="#SkMatrix_mapVectors_count">count</a> to <a href="SkPoint_Reference#Vector">Vector</a> <a href="SkPoint_Reference#Point">Point</a> array of equal or greater
+length. <a href="#Vector">Vectors</a> are mapped by multiplying each <a href="SkPoint_Reference#Vector">Vector</a> by <a href="#Matrix">Matrix</a>, treating
<a href="#Matrix">Matrix</a> translation as zero. Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B 0 | | x |
Matrix = | D E 0 |, src = | y |
| G H I | | 1 |</pre>
where
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
for (i = 0; i < count; ++i) {
x = src[i].fX
y = src[i].fY
}</pre>
-each <a href="#SkMatrix_mapVectors_dst">dst</a> <a href="undocumented#Vector">Vector</a> is computed as:
+each <a href="#SkMatrix_mapVectors_dst">dst</a> <a href="SkPoint_Reference#Vector">Vector</a> is computed as:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
|A B 0| |x| Ax+By Dx+Ey
Matrix * src = |D E 0| |y| = |Ax+By Dx+Ey Gx+Hy+I| = ------- , -------
|G H I| |1| Gx+Hy+I Gx+Hy+I</pre>
@@ -3533,29 +3531,29 @@ number of <a href="#Vector">Vectors</a> to transform</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void mapVectors(SkVector vecs[], int count) const
</pre>
-Maps <a href="#SkMatrix_mapVectors_2_vecs">vecs</a> <a href="undocumented#Vector">Vector</a> array of length <a href="#SkMatrix_mapVectors_2_count">count</a> in place, multiplying each <a href="undocumented#Vector">Vector</a> by
+Maps <a href="#SkMatrix_mapVectors_2_vecs">vecs</a> <a href="SkPoint_Reference#Vector">Vector</a> array of length <a href="#SkMatrix_mapVectors_2_count">count</a> in place, multiplying each <a href="SkPoint_Reference#Vector">Vector</a> by
<a href="#Matrix">Matrix</a>, treating <a href="#Matrix">Matrix</a> translation as zero. Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B 0 | | x |
Matrix = | D E 0 |, vec = | y |
| G H I | | 1 |</pre>
where
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
for (i = 0; i < count; ++i) {
x = vecs[i].fX
y = vecs[i].fY
}</pre>
-each result <a href="undocumented#Vector">Vector</a> is computed as:
+each result <a href="SkPoint_Reference#Vector">Vector</a> is computed as:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
|A B 0| |x| Ax+By Dx+Ey
Matrix * vec = |D E 0| |y| = |Ax+By Dx+Ey Gx+Hy+I| = ------- , -------
|G H I| |1| Gx+Hy+I Gx+Hy+I</pre>
@@ -3582,21 +3580,21 @@ number of <a href="#Vector">Vectors</a> to transform</td>
<a name="SkMatrix_mapVector"></a>
## mapVector
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void mapVector(SkScalar dx, SkScalar dy, SkVector* result) const
</pre>
-Maps <a href="undocumented#Vector">Vector</a> (x, y) to <a href="#SkMatrix_mapVector_result">result</a>. <a href="undocumented#Vector">Vector</a> is mapped by multiplying by <a href="#Matrix">Matrix</a>,
+Maps <a href="SkPoint_Reference#Vector">Vector</a> (x, y) to <a href="#SkMatrix_mapVector_result">result</a>. <a href="SkPoint_Reference#Vector">Vector</a> is mapped by multiplying by <a href="#Matrix">Matrix</a>,
treating <a href="#Matrix">Matrix</a> translation as zero. Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B 0 | | dx |
Matrix = | D E 0 |, vec = | dy |
| G H I | | 1 |</pre>
-each <a href="#SkMatrix_mapVector_result">result</a> <a href="undocumented#Vector">Vector</a> is computed as:
+each <a href="#SkMatrix_mapVector_result">result</a> <a href="SkPoint_Reference#Vector">Vector</a> is computed as:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
|A B 0| |dx| A*dx+B*dy D*dx+E*dy
Matrix * vec = |D E 0| |dy| = |A*dx+B*dy D*dx+E*dy G*dx+H*dy+I| = ----------- , -----------
|G H I| | 1| G*dx+H*dy+I G*dx+*dHy+I</pre>
@@ -3604,11 +3602,11 @@ Matrix * vec = |D E 0| |dy| = |A*dx+B*dy D*dx+E*dy G*dx+H*dy+I| = ----------- ,
### Parameters
<table> <tr> <td><a name="SkMatrix_mapVector_dx"> <code><strong>dx </strong></code> </a></td> <td>
-x-coordinate of <a href="undocumented#Vector">Vector</a> to map</td>
+x-coordinate of <a href="SkPoint_Reference#Vector">Vector</a> to map</td>
</tr> <tr> <td><a name="SkMatrix_mapVector_dy"> <code><strong>dy </strong></code> </a></td> <td>
-y-coordinate of <a href="undocumented#Vector">Vector</a> to map</td>
+y-coordinate of <a href="SkPoint_Reference#Vector">Vector</a> to map</td>
</tr> <tr> <td><a name="SkMatrix_mapVector_result"> <code><strong>result </strong></code> </a></td> <td>
-storage for mapped <a href="undocumented#Vector">Vector</a></td>
+storage for mapped <a href="SkPoint_Reference#Vector">Vector</a></td>
</tr>
</table>
@@ -3622,21 +3620,21 @@ storage for mapped <a href="undocumented#Vector">Vector</a></td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkVector mapVector(SkScalar dx, SkScalar dy) const
</pre>
-Returns <a href="undocumented#Vector">Vector</a> (x, y) multiplied by <a href="#Matrix">Matrix</a>, treating <a href="#Matrix">Matrix</a> translation as zero.
+Returns <a href="SkPoint_Reference#Vector">Vector</a> (x, y) multiplied by <a href="#Matrix">Matrix</a>, treating <a href="#Matrix">Matrix</a> translation as zero.
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B 0 | | dx |
Matrix = | D E 0 |, vec = | dy |
| G H I | | 1 |</pre>
-each result <a href="undocumented#Vector">Vector</a> is computed as:
+each result <a href="SkPoint_Reference#Vector">Vector</a> is computed as:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
|A B 0| |dx| A*dx+B*dy D*dx+E*dy
Matrix * vec = |D E 0| |dy| = |A*dx+B*dy D*dx+E*dy G*dx+H*dy+I| = ----------- , -----------
|G H I| | 1| G*dx+H*dy+I G*dx+*dHy+I</pre>
@@ -3644,15 +3642,15 @@ Matrix * vec = |D E 0| |dy| = |A*dx+B*dy D*dx+E*dy G*dx+H*dy+I| = ----------- ,
### Parameters
<table> <tr> <td><a name="SkMatrix_mapVector_2_dx"> <code><strong>dx </strong></code> </a></td> <td>
-x-coordinate of <a href="undocumented#Vector">Vector</a> to map</td>
+x-coordinate of <a href="SkPoint_Reference#Vector">Vector</a> to map</td>
</tr> <tr> <td><a name="SkMatrix_mapVector_2_dy"> <code><strong>dy </strong></code> </a></td> <td>
-y-coordinate of <a href="undocumented#Vector">Vector</a> to map</td>
+y-coordinate of <a href="SkPoint_Reference#Vector">Vector</a> to map</td>
</tr>
</table>
### Return Value
-mapped <a href="undocumented#Vector">Vector</a>
+mapped <a href="SkPoint_Reference#Vector">Vector</a>
### Example
@@ -3667,7 +3665,7 @@ mapped <a href="undocumented#Vector">Vector</a>
<a name="SkMatrix_mapRect"></a>
## mapRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool mapRect(SkRect* dst, const SkRect& src) const
</pre>
@@ -3699,7 +3697,7 @@ true if <a href="#SkMatrix_mapRect_dst">dst</a> is equivalent to mapped <a href=
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool mapRect(SkRect* rect) const
</pre>
@@ -3732,7 +3730,7 @@ true if result is equivalent to mapped src
<a name="SkMatrix_mapRectToQuad"></a>
## mapRectToQuad
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void mapRectToQuad(SkPoint dst[4], const SkRect& rect) const
</pre>
@@ -3746,16 +3744,16 @@ Maps four corners of <a href="#SkMatrix_mapRectToQuad_rect">rect</a> to <a href=
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | x |
Matrix = | D E F |, pt = | y |
| G H I | | 1 |</pre>
where pt is initialized from each of (<a href="#SkMatrix_mapRectToQuad_rect">rect</a>.fLeft, <a href="#SkMatrix_mapRectToQuad_rect">rect</a>.fTop),
(<a href="#SkMatrix_mapRectToQuad_rect">rect</a>.fRight, <a href="#SkMatrix_mapRectToQuad_rect">rect</a>.fTop), (<a href="#SkMatrix_mapRectToQuad_rect">rect</a>.fRight, <a href="#SkMatrix_mapRectToQuad_rect">rect</a>.fBottom), (<a href="#SkMatrix_mapRectToQuad_rect">rect</a>.fLeft, <a href="#SkMatrix_mapRectToQuad_rect">rect</a>.fBottom),
-each <a href="#SkMatrix_mapRectToQuad_dst">dst</a> <a href="undocumented#Point">Point</a> is computed as:
+each <a href="#SkMatrix_mapRectToQuad_dst">dst</a> <a href="SkPoint_Reference#Point">Point</a> is computed as:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
|A B C| |x| Ax+By+C Dx+Ey+F
Matrix * pt = |D E F| |y| = |Ax+By+C Dx+Ey+F Gx+Hy+I| = ------- , -------
|G H I| |1| Gx+Hy+I Gx+Hy+I</pre>
@@ -3782,7 +3780,7 @@ storage for mapped corner <a href="#Point">Points</a></td>
<a name="SkMatrix_mapRectScaleTranslate"></a>
## mapRectScaleTranslate
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void mapRectScaleTranslate(SkRect* dst, const SkRect& src) const
</pre>
@@ -3812,7 +3810,7 @@ storage for bounds of mapped <a href="#Point">Points</a></td>
<a name="SkMatrix_mapRadius"></a>
## mapRadius
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar mapRadius(SkScalar radius) const
</pre>
@@ -3846,12 +3844,12 @@ the area enclosed by the ellipse major and minor axes.</div></fiddle-embed></div
<a name="SkMatrix_isFixedStepInX"></a>
## isFixedStepInX
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isFixedStepInX() const
</pre>
Returns true if a unit step in x at some y mapped through <a href="#Matrix">Matrix</a> can be
-represented by a constant <a href="undocumented#Vector">Vector</a>. Returns true if <a href="#SkMatrix_getType">getType</a> returns <a href="#SkMatrix_kIdentity_Mask">kIdentity Mask</a>,
+represented by a constant <a href="SkPoint_Reference#Vector">Vector</a>. Returns true if <a href="#SkMatrix_getType">getType</a> returns <a href="#SkMatrix_kIdentity_Mask">kIdentity Mask</a>,
or combinations of: <a href="#SkMatrix_kTranslate_Mask">kTranslate Mask</a>, <a href="#SkMatrix_kScale_Mask">kScale Mask</a>, and <a href="#SkMatrix_kAffine_Mask">kAffine Mask</a>.
May return true if <a href="#SkMatrix_getType">getType</a> returns <a href="#SkMatrix_kPerspective_Mask">kPerspective Mask</a>, but only when <a href="#Matrix">Matrix</a>
@@ -3897,11 +3895,11 @@ isFixedStepInX: false
<a name="SkMatrix_fixedStepInX"></a>
## fixedStepInX
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkVector fixedStepInX(SkScalar y) const
</pre>
-Returns <a href="undocumented#Vector">Vector</a> representing a unit step in x at <a href="#SkMatrix_fixedStepInX_y">y</a> mapped through <a href="#Matrix">Matrix</a>.
+Returns <a href="SkPoint_Reference#Vector">Vector</a> representing a unit step in x at <a href="#SkMatrix_fixedStepInX_y">y</a> mapped through <a href="#Matrix">Matrix</a>.
If <a href="#SkMatrix_isFixedStepInX">isFixedStepInX</a> is false, returned value is undefined.
### Parameters
@@ -3913,7 +3911,7 @@ position of line parallel to x-axis</td>
### Return Value
-<a href="undocumented#Vector">Vector</a> advance of mapped unit step in x
+<a href="SkPoint_Reference#Vector">Vector</a> advance of mapped unit step in x
### Example
@@ -3928,7 +3926,7 @@ position of line parallel to x-axis</td>
<a name="SkMatrix_cheapEqualTo"></a>
## cheapEqualTo
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool cheapEqualTo(const SkMatrix& m) const
</pre>
@@ -3977,7 +3975,7 @@ both NaN: a != b a.cheapEqualTo(b): true
<a name="SkMatrix_equal_operator"></a>
## operator==
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool operator==(const SkMatrix& a, const SkMatrix& b)
</pre>
@@ -4012,26 +4010,26 @@ identity: a == b a.cheapEqualTo(b): true
### See Also
-<a href="#SkMatrix_cheapEqualTo">cheapEqualTo</a> <a href="#SkMatrix_not_equal_operator">operator!=(const SkMatrix& a, const SkMatrix& b)</a>
+<a href="#SkMatrix_cheapEqualTo">cheapEqualTo</a> <a href="#SkMatrix_notequal_operator">operator!=(const SkMatrix& a, const SkMatrix& b)</a>
---
-<a name="SkMatrix_not_equal_operator"></a>
+<a name="SkMatrix_notequal_operator"></a>
## operator!=
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool operator!=(const SkMatrix& a, const SkMatrix& b)
</pre>
-Compares <a href="#SkMatrix_not_equal_operator_a">a</a> and <a href="#SkMatrix_not_equal_operator_b">b</a>; returns true if <a href="#SkMatrix_not_equal_operator_a">a</a> and <a href="#SkMatrix_not_equal_operator_b">b</a> are not numerically equal. Returns false
+Compares <a href="#SkMatrix_notequal_operator_a">a</a> and <a href="#SkMatrix_notequal_operator_b">b</a>; returns true if <a href="#SkMatrix_notequal_operator_a">a</a> and <a href="#SkMatrix_notequal_operator_b">b</a> are not numerically equal. Returns false
even if sign of zero values are different. Returns true if either <a href="#Matrix">Matrix</a>
contains <a href="undocumented#NaN">NaN</a>, even if the other <a href="#Matrix">Matrix</a> also contains <a href="undocumented#NaN">NaN</a>.
### Parameters
-<table> <tr> <td><a name="SkMatrix_not_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
+<table> <tr> <td><a name="SkMatrix_notequal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
<a href="#Matrix">Matrix</a> to compare</td>
- </tr> <tr> <td><a name="SkMatrix_not_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
+ </tr> <tr> <td><a name="SkMatrix_notequal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
<a href="#Matrix">Matrix</a> to compare</td>
</tr>
</table>
@@ -4053,7 +4051,7 @@ true if m and <a href="#Matrix">Matrix</a> are numerically not equal
<a name="SkMatrix_dump"></a>
## dump
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void dump() const
</pre>
@@ -4084,7 +4082,7 @@ matrix != nearlyEqual
<a name="SkMatrix_toString"></a>
## toString
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void toString(SkString* str) const
</pre>
@@ -4122,7 +4120,7 @@ matrix != nearlyEqual
<a name="SkMatrix_getMinScale"></a>
## getMinScale
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar getMinScale() const
</pre>
@@ -4155,7 +4153,7 @@ matrix.getMinScale() 24
<a name="SkMatrix_getMaxScale"></a>
## getMaxScale
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar getMaxScale() const
</pre>
@@ -4188,7 +4186,7 @@ matrix.getMaxScale() 42
<a name="SkMatrix_getMinMaxScales"></a>
## getMinMaxScales
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool SK_WARN_UNUSED_RESULT getMinMaxScales(SkScalar scaleFactors[2]) const
</pre>
@@ -4231,7 +4229,7 @@ matrix.getMinMaxScales() false 2 2
<a name="SkMatrix_decomposeScale"></a>
## decomposeScale
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool decomposeScale(SkSize* scale, SkMatrix* remaining = nullptr) const
</pre>
@@ -4285,13 +4283,13 @@ success: true scale: 0.5, 0.25
<a name="SkMatrix_I"></a>
## I
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static const SkMatrix& I()
</pre>
Returns reference to const identity <a href="#Matrix">Matrix</a>. Returned <a href="#Matrix">Matrix</a> is <a href="#SkMatrix_set">set</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| 1 0 0 |
| 0 1 0 |
| 0 0 1 |</pre>
@@ -4322,14 +4320,14 @@ m2 == m3
<a name="SkMatrix_InvalidMatrix"></a>
## InvalidMatrix
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static const SkMatrix& InvalidMatrix()
</pre>
Returns reference to a const <a href="#Matrix">Matrix</a> with invalid values. Returned <a href="#Matrix">Matrix</a> is <a href="#SkMatrix_set">set</a>
to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| SK_ScalarMax SK_ScalarMax SK_ScalarMax |
| SK_ScalarMax SK_ScalarMax SK_ScalarMax |
| SK_ScalarMax SK_ScalarMax SK_ScalarMax |</pre>
@@ -4359,7 +4357,7 @@ SeeAlso <a href="#SkMatrix_getType">getType</a>
<a name="SkMatrix_Concat"></a>
## Concat
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static SkMatrix Concat(const SkMatrix& a, const SkMatrix& b)
</pre>
@@ -4367,14 +4365,14 @@ Returns <a href="#Matrix">Matrix</a> <a href="#SkMatrix_Concat_a">a</a> multipli
Given:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | J K L |
a = | D E F |, b = | M N O |
| G H I | | P Q R |</pre>
sets <a href="#Matrix">Matrix</a> to:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| A B C | | J K L | | AJ+BM+CP AK+BN+CQ AL+BO+CR |
a * b = | D E F | * | M N O | = | DJ+EM+FP DK+EN+FQ DL+EO+FR |
| G H I | | P Q R | | GJ+HM+IP GK+HN+IQ GL+HO+IR |</pre>
@@ -4406,12 +4404,12 @@ Multiplying the matrix by its inverse turns into an identity matrix.</div></fidd
<a name="SkMatrix_dirtyMatrixTypeCache"></a>
## dirtyMatrixTypeCache
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void dirtyMatrixTypeCache()
</pre>
Sets internal cache to unknown state. Use to force update after repeated
-modifications to <a href="#Matrix">Matrix</a> element reference returned by <a href="#SkMatrix_subscript_operator_const">operator[](int index)</a>.
+modifications to <a href="#Matrix">Matrix</a> element reference returned by <a href="#SkMatrix_array1_operator">operator[](int index)</a>.
### Example
@@ -4430,20 +4428,20 @@ after dirty cache: x = 66
### See Also
-<a href="#SkMatrix_subscript_operator_const">operator[](int index)</a> <a href="#SkMatrix_getType">getType</a>
+<a href="#SkMatrix_array1_operator">operator[](int index)</a> <a href="#SkMatrix_getType">getType</a>
---
<a name="SkMatrix_setScaleTranslate"></a>
## setScaleTranslate
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setScaleTranslate(SkScalar sx, SkScalar sy, SkScalar tx, SkScalar ty)
</pre>
Initializes <a href="#Matrix">Matrix</a> with scale and translate elements.
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
| sx 0 tx |
| 0 sy ty |
| 0 0 1 |</pre>
@@ -4482,7 +4480,7 @@ vertical translation to store</td>
<a name="SkMatrix_isFinite"></a>
## isFinite
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isFinite() const
</pre>
diff --git a/site/user/api/SkPaint_Reference.md b/site/user/api/SkPaint_Reference.md
index c3c4063298..0442705bc1 100644
--- a/site/user/api/SkPaint_Reference.md
+++ b/site/user/api/SkPaint_Reference.md
@@ -23,7 +23,7 @@ algorithms that alter the drawing geometry, color, and transparency. For instanc
The objects contained by <a href="#Paint">Paint</a> are opaque, and cannot be edited outside of the <a href="#Paint">Paint</a>
to affect it. The implementation is free to defer computations associated with the
<a href="#Paint">Paint</a>, or ignore them altogether. For instance, some <a href="undocumented#GPU">GPU</a> implementations draw all
-<a href="SkPath_Reference#Path">Path</a> geometries with <a href="undocumented#Anti_alias">Anti-aliasing</a>, regardless of how <a href="#SkPaint_kAntiAlias_Flag">SkPaint::kAntiAlias Flag</a>
+<a href="SkPath_Reference#Path">Path</a> geometries with Anti-aliasing, regardless of how <a href="#SkPaint_kAntiAlias_Flag">SkPaint::kAntiAlias Flag</a>
is set in <a href="#Paint">Paint</a>.
<a href="#Paint">Paint</a> describes a single color, a single font, a single image quality, and so on.
@@ -41,7 +41,7 @@ Multiple colors are drawn either by using multiple paints or with objects like
| <a href="#Management">Management</a> | <a href="#Paint">Paint</a> copying, moving, comparing. |
| <a href="#SkPaint_Hinting">Hinting</a> | <a href="undocumented#Glyph">Glyph</a> outline adjustment. |
| <a href="#SkPaint_Flags">Flags</a> | Attributes represented by single bits. |
-| <a href="SkPaint_Reference#Anti_alias">Anti-alias</a> | Approximating coverage with transparency. |
+| Anti-alias | Approximating coverage with transparency. |
| <a href="#Dither">Dither</a> | Distributing color error. |
| <a href="#Device_Text">Device Text</a> | Increase precision of glyph position. |
| <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> | Custom sized bitmap <a href="#Glyph">Glyphs</a>. |
@@ -109,10 +109,10 @@ Multiple colors are drawn either by using multiple paints or with objects like
| operator | description |
| --- | --- |
-| <a href="#SkPaint_copy_assignment_operator">operator=(const SkPaint& paint)</a> | Makes a shallow copy. |
-| <a href="#SkPaint_move_assignment_operator">operator=(SkPaint&& paint)</a> | Moves paint without copying it. |
+| <a href="#SkPaint_copy_operator">operator=(const SkPaint& paint)</a> | Makes a shallow copy. |
+| <a href="#SkPaint_move_operator">operator=(SkPaint&& paint)</a> | Moves paint without copying it. |
| <a href="#SkPaint_equal_operator">operator==(const SkPaint& a, const SkPaint& b)</a> | Compares paints for equality. |
-| <a href="#SkPaint_not_equal_operator">operator!=(const SkPaint& a, const SkPaint& b)</a> | Compares paints for inequality. |
+| <a href="#SkPaint_notequal_operator">operator!=(const SkPaint& a, const SkPaint& b)</a> | Compares paints for inequality. |
## <a name="Member_Functions"></a> Member Functions
@@ -163,7 +163,7 @@ Multiple colors are drawn either by using multiple paints or with objects like
| <a href="#SkPaint_getTextWidths">getTextWidths</a> | Returns advance and bounds for each glyph in text. |
| <a href="#SkPaint_getTypeface">getTypeface</a> | Returns <a href="undocumented#Typeface">Typeface</a>, font description. |
| <a href="#SkPaint_glyphsToUnichars">glyphsToUnichars</a> | Converts <a href="#Glyph">Glyphs</a> into text. |
-| <a href="#SkPaint_isAntiAlias">isAntiAlias</a> | Returns true if <a href="SkPaint_Reference#Anti_alias">Anti-alias</a> is set. |
+| <a href="#SkPaint_isAntiAlias">isAntiAlias</a> | Returns true if Anti-alias is set. |
| <a href="#SkPaint_isAutohinted">isAutohinted</a> | Returns true if <a href="#Glyph">Glyphs</a> are always hinted. |
| <a href="#SkPaint_isDevKernText">isDevKernText</a> | Returns true if <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> is set. |
| <a href="#SkPaint_isDither">isDither</a> | Returns true if <a href="#Dither">Dither</a> is set. |
@@ -185,7 +185,7 @@ Multiple colors are drawn either by using multiple paints or with objects like
| <a href="#SkPaint_refTypeface">refTypeface</a> | References <a href="undocumented#Typeface">Typeface</a>, font description. |
| <a href="#SkPaint_reset">reset</a> | Sets to default values. |
| <a href="#SkPaint_setAlpha">setAlpha</a> | Sets <a href="#Alpha">Color Alpha</a>, color opacity. |
-| <a href="#SkPaint_setAntiAlias">setAntiAlias</a> | Sets or clears <a href="SkPaint_Reference#Anti_alias">Anti-alias</a>. |
+| <a href="#SkPaint_setAntiAlias">setAntiAlias</a> | Sets or clears Anti-alias. |
| <a href="#SkPaint_setARGB">setARGB</a> | Sets color by component. |
| <a href="#SkPaint_setAutohinted">setAutohinted</a> | Sets <a href="#Glyph">Glyphs</a> to always be hinted. |
| <a href="#SkPaint_setBlendMode">setBlendMode</a> | Sets <a href="undocumented#Blend_Mode">Blend Mode</a>, how colors combine with destination. |
@@ -227,7 +227,7 @@ Multiple colors are drawn either by using multiple paints or with objects like
<a name="SkPaint_empty_constructor"></a>
## SkPaint
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkPaint()
</pre>
@@ -235,7 +235,7 @@ Constructs <a href="#Paint">Paint</a> with default values.
| attribute | default value |
| --- | --- |
-| <a href="SkPaint_Reference#Anti_alias">Anti-alias</a> | false |
+| Anti-alias | false |
| <a href="undocumented#Blend_Mode">Blend Mode</a> | <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a> |
| <a href="undocumented#Color">Color</a> | <a href="undocumented#SK_ColorBLACK">SK ColorBLACK</a> |
| <a href="#Alpha">Color Alpha</a> | 255 |
@@ -286,7 +286,7 @@ default initialized <a href="#Paint">Paint</a>
<a name="SkPaint_copy_const_SkPaint"></a>
## SkPaint
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkPaint(const SkPaint& paint)
</pre>
@@ -328,7 +328,7 @@ SK_ColorBLUE == paint2.getColor()
<a name="SkPaint_move_SkPaint"></a>
## SkPaint
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkPaint(SkPaint&& paint)
</pre>
@@ -365,7 +365,7 @@ path effect unique: true
<a name="SkPaint_reset"></a>
## reset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void reset()
</pre>
@@ -391,7 +391,7 @@ paint1 == paint2
<a name="SkPaint_destructor"></a>
## ~SkPaint
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
~SkPaint()
</pre>
@@ -403,30 +403,30 @@ objects containing <a href="undocumented#Reference_Count">Reference Count</a> go
# <a name="Management"></a> Management
-<a name="SkPaint_copy_assignment_operator"></a>
+<a name="SkPaint_copy_operator"></a>
## operator=
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkPaint& operator=(const SkPaint& paint)
</pre>
Makes a shallow copy of <a href="#Paint">Paint</a>. <a href="undocumented#Typeface">Typeface</a>, <a href="undocumented#Path_Effect">Path Effect</a>, <a href="undocumented#Shader">Shader</a>,
<a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Rasterizer">Rasterizer</a>, <a href="undocumented#Draw_Looper">Draw Looper</a>, and <a href="undocumented#Image_Filter">Image Filter</a> are shared
-between the original <a href="#SkPaint_copy_assignment_operator_paint">paint</a> and the copy. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the
+between the original <a href="#SkPaint_copy_operator_paint">paint</a> and the copy. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the
prior destination are decreased by one, and the referenced objects are deleted if the
-resulting count is zero. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the parameter <a href="#SkPaint_copy_assignment_operator_paint">paint</a>
-are increased by one. <a href="#SkPaint_copy_assignment_operator_paint">paint</a> is unmodified.
+resulting count is zero. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the parameter <a href="#SkPaint_copy_operator_paint">paint</a>
+are increased by one. <a href="#SkPaint_copy_operator_paint">paint</a> is unmodified.
### Parameters
-<table> <tr> <td><a name="SkPaint_copy_assignment_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
+<table> <tr> <td><a name="SkPaint_copy_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
original to copy</td>
</tr>
</table>
### Return Value
-content of <a href="#SkPaint_copy_assignment_operator_paint">paint</a>
+content of <a href="#SkPaint_copy_operator_paint">paint</a>
### Example
@@ -443,30 +443,30 @@ SK_ColorRED == paint2.getColor()
---
-<a name="SkPaint_move_assignment_operator"></a>
+<a name="SkPaint_move_operator"></a>
## operator=
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkPaint& operator=(SkPaint&& paint)
</pre>
-Moves the <a href="#SkPaint_move_assignment_operator_paint">paint</a> to avoid increasing the reference counts
-of objects referenced by the <a href="#SkPaint_move_assignment_operator_paint">paint</a> parameter. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the
+Moves the <a href="#SkPaint_move_operator_paint">paint</a> to avoid increasing the reference counts
+of objects referenced by the <a href="#SkPaint_move_operator_paint">paint</a> parameter. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the
prior destination are decreased by one; those objects are deleted if the resulting count
is zero.
-After the call, <a href="#SkPaint_move_assignment_operator_paint">paint</a> is undefined, and can be safely destructed.
+After the call, <a href="#SkPaint_move_operator_paint">paint</a> is undefined, and can be safely destructed.
### Parameters
-<table> <tr> <td><a name="SkPaint_move_assignment_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
+<table> <tr> <td><a name="SkPaint_move_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
original to move</td>
</tr>
</table>
### Return Value
-content of <a href="#SkPaint_move_assignment_operator_paint">paint</a>
+content of <a href="#SkPaint_move_operator_paint">paint</a>
### Example
@@ -485,7 +485,7 @@ SK_ColorRED == paint2.getColor()
<a name="SkPaint_equal_operator"></a>
## operator==
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool operator==(const SkPaint& a, const SkPaint& b)
</pre>
@@ -521,22 +521,22 @@ paint1 != paint2
---
-<a name="SkPaint_not_equal_operator"></a>
+<a name="SkPaint_notequal_operator"></a>
## operator!=
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool operator!=(const SkPaint& a, const SkPaint& b)
</pre>
-Compares <a href="#SkPaint_not_equal_operator_a">a</a> and <a href="#SkPaint_not_equal_operator_b">b</a>, and returns true if <a href="#SkPaint_not_equal_operator_a">a</a> and <a href="#SkPaint_not_equal_operator_b">b</a> are not equivalent. May return true
+Compares <a href="#SkPaint_notequal_operator_a">a</a> and <a href="#SkPaint_notequal_operator_b">b</a>, and returns true if <a href="#SkPaint_notequal_operator_a">a</a> and <a href="#SkPaint_notequal_operator_b">b</a> are not equivalent. May return true
if <a href="undocumented#Typeface">Typeface</a>, <a href="undocumented#Path_Effect">Path Effect</a>, <a href="undocumented#Shader">Shader</a>, <a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Rasterizer">Rasterizer</a>,
<a href="undocumented#Draw_Looper">Draw Looper</a>, or <a href="undocumented#Image_Filter">Image Filter</a> have identical contents but different pointers.
### Parameters
-<table> <tr> <td><a name="SkPaint_not_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
+<table> <tr> <td><a name="SkPaint_notequal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
<a href="#Paint">Paint</a> to compare</td>
- </tr> <tr> <td><a name="SkPaint_not_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
+ </tr> <tr> <td><a name="SkPaint_notequal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
<a href="#Paint">Paint</a> to compare</td>
</tr>
</table>
@@ -563,7 +563,7 @@ paint1 == paint2
<a name="SkPaint_getHash"></a>
## getHash
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
uint32_t getHash() const
</pre>
@@ -599,7 +599,7 @@ paint1.getHash() == paint2.getHash()
<a name="SkPaint_flatten"></a>
## flatten
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void flatten(SkWriteBuffer& buffer) const
</pre>
@@ -630,7 +630,7 @@ color = 0xffff0000
<a name="SkPaint_unflatten"></a>
## unflatten
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void unflatten(SkReadBuffer& buffer)
</pre>
@@ -657,7 +657,7 @@ serialized data describing <a href="#Paint">Paint</a> content</td>
## <a name="SkPaint_Hinting"></a> Enum SkPaint::Hinting
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#Hinting">Hinting</a> {
<a href="#SkPaint_kNo_Hinting">kNo Hinting</a> = 0,
<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> = 1,
@@ -714,7 +714,7 @@ Set <a href="undocumented#SkPaintDefaults_Hinting">SkPaintDefaults Hinting</a> a
<a name="SkPaint_getHinting"></a>
## getHinting
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Hinting getHinting() const
</pre>
@@ -741,7 +741,7 @@ SkPaint::kNormal_Hinting == paint.getHinting()
<a name="SkPaint_setHinting"></a>
## setHinting
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setHinting(Hinting hintingLevel)
</pre>
@@ -780,7 +780,7 @@ paint1 == paint2
## <a name="SkPaint_Flags"></a> Enum SkPaint::Flags
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#Flags">Flags</a> {
<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> = 0x01,
<a href="#SkPaint_kDither_Flag">kDither Flag</a> = 0x04,
@@ -808,7 +808,7 @@ multiple settings at once.
<table>
<tr>
- <td><a name="SkPaint_kAntiAlias_Flag"> <code><strong>SkPaint::kAntiAlias_Flag </strong></code> </a></td><td>0x0001 </td><td>mask for setting <a href="SkPaint_Reference#Anti_alias">Anti-alias</a></td>
+ <td><a name="SkPaint_kAntiAlias_Flag"> <code><strong>SkPaint::kAntiAlias_Flag </strong></code> </a></td><td>0x0001 </td><td>mask for setting Anti-alias</td>
</tr>
<tr>
<td><a name="SkPaint_kDither_Flag"> <code><strong>SkPaint::kDither_Flag </strong></code> </a></td><td>0x0004</td><td>mask for setting <a href="#Dither">Dither</a></td>
@@ -849,7 +849,7 @@ multiple settings at once.
## <a name="SkPaint_ReserveFlags"></a> Enum SkPaint::ReserveFlags
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#SkPaint_ReserveFlags">ReserveFlags</a> {
<a href="#SkPaint_kUnderlineText_ReserveFlag">kUnderlineText ReserveFlag</a> = 0x08,
<a href="#SkPaint_kStrikeThruText_ReserveFlag">kStrikeThruText ReserveFlag</a> = 0x10,
@@ -875,7 +875,7 @@ enum <a href="#SkPaint_ReserveFlags">ReserveFlags</a> {
<a name="SkPaint_getFlags"></a>
## getFlags
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
uint32_t getFlags() const
</pre>
@@ -903,7 +903,7 @@ zero, one, or more bits described by <a href="#Flags">Flags</a>
<a name="SkPaint_setFlags"></a>
## setFlags
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setFlags(uint32_t flags)
</pre>
@@ -933,7 +933,7 @@ paint.isDither()
---
# <a name="Anti-alias"></a> Anti-alias
-<a href="SkPaint_Reference#Anti_alias">Anti-alias</a> drawing approximates partial pixel coverage with transparency.
+Anti-alias drawing approximates partial pixel coverage with transparency.
If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is set, pixels are drawn with <a href="#Alpha">Color Alpha</a> equal to their coverage.
@@ -943,14 +943,14 @@ passing through the pixel center may, but is not required to, draw the pixel.
<a href="undocumented#Raster_Engine">Raster Engine</a> draws <a href="#Alias">Aliased</a> pixels whose centers are on or to the right of the start of an
active <a href="SkPath_Reference#Path">Path</a> edge, and whose center is to the left of the end of the active <a href="SkPath_Reference#Path">Path</a> edge.
-A platform may only support <a href="undocumented#Anti_alias">Anti-aliased</a> drawing. Some <a href="undocumented#GPU_backed">GPU-backed</a> platforms use
-<a href="undocumented#Supersampling">Supersampling</a> to <a href="SkPaint_Reference#Anti_alias">Anti-alias</a> all drawing, and have no mechanism to selectively
+A platform may only support Anti-aliased drawing. Some <a href="undocumented#GPU">GPU</a>-backed platforms use
+<a href="undocumented#Supersampling">Supersampling</a> to Anti-alias all drawing, and have no mechanism to selectively
<a href="undocumented#Alias">Alias</a>.
-The amount of coverage computed for <a href="undocumented#Anti_alias">Anti-aliased</a> pixels also varies across platforms.
+The amount of coverage computed for Anti-aliased pixels also varies across platforms.
-<a href="SkPaint_Reference#Anti_alias">Anti-alias</a> is disabled by default.
-<a href="SkPaint_Reference#Anti_alias">Anti-alias</a> can be enabled by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>
+Anti-alias is disabled by default.
+Anti-alias can be enabled by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>
at compile time.
### Example
@@ -963,7 +963,7 @@ The lines are drawn into <a href="SkBitmap_Reference#Bitmap">Bitmap</a>, then dr
<a name="SkPaint_isAntiAlias"></a>
## isAntiAlias
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isAntiAlias() const
</pre>
@@ -993,7 +993,7 @@ paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
<a name="SkPaint_setAntiAlias"></a>
## setAntiAlias
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setAntiAlias(bool aa)
</pre>
@@ -1029,12 +1029,12 @@ paint1 == paint2
This can help to smooth color transitions and reducing banding in gradients.
Dithering lessens visible banding from <a href="undocumented#SkColorType">kRGB 565 SkColorType</a>
and <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> gradients,
-and improves rendering into a <a href="undocumented#SkColorType">kRGB 565 SkColorType</a> <a href="undocumented#Surface">Surface</a>.
+and improves rendering into a <a href="undocumented#SkColorType">kRGB 565 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
Dithering is always enabled for linear gradients drawing into
-<a href="undocumented#SkColorType">kRGB 565 SkColorType</a> <a href="undocumented#Surface">Surface</a> and <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> <a href="undocumented#Surface">Surface</a>.
-<a href="#Dither">Dither</a> cannot be enabled for <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a> <a href="undocumented#Surface">Surface</a> and
-<a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> <a href="undocumented#Surface">Surface</a>.
+<a href="undocumented#SkColorType">kRGB 565 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a> and <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
+<a href="#Dither">Dither</a> cannot be enabled for <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a> and
+<a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
<a href="#Dither">Dither</a> is disabled by default.
<a href="#Dither">Dither</a> can be enabled by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to <a href="#SkPaint_kDither_Flag">kDither Flag</a>
@@ -1056,7 +1056,7 @@ dither, making it easier to see.</div></fiddle-embed></div>
<a name="SkPaint_isDither"></a>
## isDither
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isDither() const
</pre>
@@ -1085,7 +1085,7 @@ paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
<a name="SkPaint_setDither"></a>
## setDither
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setDither(bool dither)
</pre>
@@ -1121,7 +1121,7 @@ paint1 == paint2
### See Also
-Gradient <a href="undocumented#RGB_565">Color RGB-565</a>
+Gradient <a href="#RGB">Color RGB</a>-565
# <a name="Device_Text"></a> Device Text
<a href="SkPaint_Reference#LCD_Text">LCD Text</a> and <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> increase the precision of glyph position.
@@ -1156,7 +1156,7 @@ If <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear, it is the
<a name="SkPaint_isLinearText"></a>
## isLinearText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isLinearText() const
</pre>
@@ -1181,7 +1181,7 @@ Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkP
<a name="SkPaint_setLinearText"></a>
## setLinearText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setLinearText(bool linearText)
</pre>
@@ -1217,7 +1217,7 @@ of the color increases, the edge of the glyph appears to move towards the outsid
<a name="SkPaint_isSubpixelText"></a>
## isSubpixelText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isSubpixelText() const
</pre>
@@ -1247,7 +1247,7 @@ paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
<a name="SkPaint_setSubpixelText"></a>
## setSubpixelText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setSubpixelText(bool subpixelText)
</pre>
@@ -1288,7 +1288,7 @@ the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG
<a name="SkPaint_isLCDRenderText"></a>
## isLCDRenderText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isLCDRenderText() const
</pre>
@@ -1318,7 +1318,7 @@ paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
<a name="SkPaint_setLCDRenderText"></a>
## setLCDRenderText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setLCDRenderText(bool lcdText)
</pre>
@@ -1364,22 +1364,33 @@ the outline glyph if <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmap
### Example
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-<div>The "" <a href="undocumented#TrueType">TrueType</a> font in the <a href="undocumented#Skia">Skia</a> resources/fonts directory
-includes an embedded bitmap <a href="undocumented#Glyph">Glyph</a> at odd font sizes. This example works
-on platforms that use <a href="undocumented#FreeType">FreeType</a> as their <a href="#Engine">Font Engine</a>.
-<a href="undocumented#Windows">Windows</a> may, but is not required to, return a bitmap glyph if
-<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is set.</div><a href="SkBitmap_Reference#SkBitmap">SkBitmap</a> bitmap;
-bitmap.allocN32Pixels(30, 15);
-bitmap.eraseColor(0);
-<a href="SkCanvas_Reference#SkCanvas">SkCanvas</a> offscreen(bitmap);
-<a href="#SkPaint">SkPaint</a> paint;
-paint.</pre>
+<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
+void draw(SkCanvas* canvas) {<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
+ includes an embedded bitmap Glyph at odd font sizes. This example works
+ on platforms that use FreeType as their Font_Engine.
+ Windows may, but is not required to, return a bitmap glyph if
+ kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
+ bitmap.allocN32Pixels(30, 15);
+ bitmap.eraseColor(0);
+ SkCanvas offscreen(bitmap);
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ paint.setTextSize(13);
+ paint.setTypeface(MakeResourceAsTypeface("/fonts/hintgasp.ttf"));
+ for (bool embedded : { false, true}) {
+ paint.setEmbeddedBitmapText(embedded);
+ offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
+ }
+ canvas->drawBitmap(bitmap, 0, 0);
+ canvas->scale(10, 10);
+ canvas->drawBitmap(bitmap, -2, 1);
+}
+</pre>
<a name="SkPaint_isEmbeddedBitmapText"></a>
## isEmbeddedBitmapText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isEmbeddedBitmapText() const
</pre>
@@ -1409,7 +1420,7 @@ paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapTe
<a name="SkPaint_setEmbeddedBitmapText"></a>
## setEmbeddedBitmapText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setEmbeddedBitmapText(bool useEmbeddedBitmapText)
</pre>
@@ -1450,7 +1461,7 @@ instructs the <a href="undocumented#Font_Manager">Font Manager</a> to always hin
<a name="SkPaint_isAutohinted"></a>
## isAutohinted
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isAutohinted() const
</pre>
@@ -1486,7 +1497,7 @@ paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
<a name="SkPaint_setAutohinted"></a>
## setAutohinted
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setAutohinted(bool useAutohinter)
</pre>
@@ -1545,7 +1556,7 @@ into glyph series.
<a name="SkPaint_isVerticalText"></a>
## isVerticalText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isVerticalText() const
</pre>
@@ -1575,7 +1586,7 @@ paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
<a name="SkPaint_setVerticalText"></a>
## setVerticalText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setVerticalText(bool verticalText)
</pre>
@@ -1627,7 +1638,7 @@ by increasing the stroke width and setting the <a href="#SkPaint_Style">Style</a
<a name="SkPaint_isFakeBoldText"></a>
## isFakeBoldText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isFakeBoldText() const
</pre>
@@ -1658,7 +1669,7 @@ paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
<a name="SkPaint_setFakeBoldText"></a>
## setFakeBoldText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setFakeBoldText(bool fakeBoldText)
</pre>
@@ -1700,7 +1711,7 @@ a specific pair of characters is adjusted using data in the font <a href="undocu
<a name="SkPaint_isDevKernText"></a>
## isDevKernText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isDevKernText() const
</pre>
@@ -1721,7 +1732,7 @@ Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkP
<a name="SkPaint_setDevKernText"></a>
## setDevKernText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setDevKernText(bool devKernText)
</pre>
@@ -1767,7 +1778,7 @@ in a noticeable difference.
<td><a href="#SkCanvas_drawImageRect">SkCanvas::drawImageRect</a></td> </tr>
</table>
-and when <a href="#Paint">Paint</a> has a <a href="undocumented#Shader">Shader</a> specialization that uses <a href="undocumented#Image">Image</a> or <a href="SkBitmap_Reference#Bitmap">Bitmap</a>.
+and when <a href="#Paint">Paint</a> has a <a href="undocumented#Shader">Shader</a> specialization that uses <a href="SkImage_Reference#Image">Image</a> or <a href="SkBitmap_Reference#Bitmap">Bitmap</a>.
<a href="undocumented#Filter_Quality">Filter Quality</a> is <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a> by default.
@@ -1778,7 +1789,7 @@ and when <a href="#Paint">Paint</a> has a <a href="undocumented#Shader">Shader</
<a name="SkPaint_getFilterQuality"></a>
## getFilterQuality
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkFilterQuality getFilterQuality() const
</pre>
@@ -1807,7 +1818,7 @@ kNone_SkFilterQuality == paint.getFilterQuality()
<a name="SkPaint_setFilterQuality"></a>
## setFilterQuality
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setFilterQuality(SkFilterQuality quality)
</pre>
@@ -1864,7 +1875,7 @@ on the output device, which may have more or fewer bits, and may have a differen
<a name="SkPaint_getColor"></a>
## getColor
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkColor getColor() const
</pre>
@@ -1897,7 +1908,7 @@ Yellow is 100% red, 100% green, and 0% blue.
<a name="SkPaint_setColor"></a>
## setColor
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setColor(SkColor color)
</pre>
@@ -1936,7 +1947,7 @@ green1 == green2
<a name="SkPaint_getAlpha"></a>
## getAlpha
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
uint8_t getAlpha() const
</pre>
@@ -1963,7 +1974,7 @@ Retrieves <a href="#Alpha">Alpha</a> from the <a href="undocumented#Color">Color
<a name="SkPaint_setAlpha"></a>
## setAlpha
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setAlpha(U8CPU a)
</pre>
@@ -1997,7 +2008,7 @@ fully opaque.
<a name="SkPaint_setARGB"></a>
## setARGB
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
</pre>
@@ -2069,12 +2080,12 @@ flow horizontally, vertically,or diagonally.
<a href="SkPath_Reference#Path">Path</a> drawing with <a href="#Hairline">Hairline</a> may hit the same pixel more than once. For instance, <a href="SkPath_Reference#Path">Path</a> containing
two lines in one <a href="#Contour">Path Contour</a> will draw the corner point once, but may both lines may draw the adjacent
pixel. If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is set, transparency is applied twice, resulting in a darker pixel. Some
-<a href="undocumented#GPU_backed">GPU-backed</a> implementations apply transparency at a later drawing stage, avoiding double hit pixels
+<a href="undocumented#GPU">GPU</a>-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
while stroking.
## <a name="SkPaint_Style"></a> Enum SkPaint::Style
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#SkPaint_Style">Style</a> {
<a href="#SkPaint_kFill_Style">kFill Style</a>,
<a href="#SkPaint_kStroke_Style">kStroke Style</a>,
@@ -2094,7 +2105,7 @@ a fill draw.
<tr>
<td><a name="SkPaint_kFill_Style"> <code><strong>SkPaint::kFill_Style </strong></code> </a></td><td>0</td><td>Set to fill geometry.
Applies to <a href="SkRect_Reference#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="#Circle">Circles</a>, <a href="#Oval">Ovals</a>, <a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
-<a href="SkBitmap_Reference#Bitmap">Bitmap</a>, <a href="undocumented#Image">Image</a>, <a href="#Patch">Patches</a>, <a href="undocumented#Region">Region</a>, <a href="#Sprite">Sprites</a>, and <a href="undocumented#Vertices">Vertices</a> are painted as if
+<a href="SkBitmap_Reference#Bitmap">Bitmap</a>, <a href="SkImage_Reference#Image">Image</a>, <a href="#Patch">Patches</a>, <a href="undocumented#Region">Region</a>, <a href="#Sprite">Sprites</a>, and <a href="undocumented#Vertices">Vertices</a> are painted as if
<a href="#SkPaint_kFill_Style">kFill Style</a> is set, and ignore the set <a href="#SkPaint_Style">Style</a>.
The <a href="#Fill_Type">Path Fill Type</a> specifies additional rules to fill the area outside the path edge,
and to create an unfilled hole inside the shape.
@@ -2118,7 +2129,7 @@ and the set <a href="#Fill_Type">Path Fill Type</a> is ignored.</td>
## <a name="SkPaint__anonymous"></a> Enum SkPaint::_anonymous
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum {
<a href="#SkPaint_kStyleCount">kStyleCount</a> = <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a> + 1,
};</pre>
@@ -2136,7 +2147,7 @@ May be used to verify that <a href="#SkPaint_Style">Style</a> is a legal value.<
<a name="SkPaint_getStyle"></a>
## getStyle
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Style getStyle() const
</pre>
@@ -2167,7 +2178,7 @@ SkPaint::kFill_Style == paint.getStyle()
<a name="SkPaint_setStyle"></a>
## setStyle
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setStyle(Style style)
</pre>
@@ -2211,13 +2222,13 @@ The default width for the paint is zero.
### Example
-<div><fiddle-embed name="01e3e08a3022a351628ff54e84887756"><div>The pixels hit to represent thin lines vary with the angle of the
+<div><fiddle-embed name="01e3e08a3022a351628ff54e84887756"gpu="true"><div>The pixels hit to represent thin lines vary with the angle of the
line and the platform implementation.</div></fiddle-embed></div>
<a name="SkPaint_getStrokeWidth"></a>
## getStrokeWidth
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar getStrokeWidth() const
</pre>
@@ -2245,7 +2256,7 @@ zero for <a href="#Hairline">Hairline</a>, greater than zero for pen thickness
<a name="SkPaint_setStrokeWidth"></a>
## setStrokeWidth
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setStrokeWidth(SkScalar width)
</pre>
@@ -2315,7 +2326,7 @@ by a bevel join.</div></fiddle-embed></div>
<a name="SkPaint_getStrokeMiter"></a>
## getStrokeMiter
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar getStrokeMiter() const
</pre>
@@ -2346,7 +2357,7 @@ default miter limit == 4
<a name="SkPaint_setStrokeMiter"></a>
## setStrokeMiter
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setStrokeMiter(SkScalar miter)
</pre>
@@ -2383,7 +2394,7 @@ default miter limit == 8
## <a name="SkPaint_Cap"></a> Enum SkPaint::Cap
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#SkPaint_Cap">Cap</a> {
<a href="#SkPaint_kButt_Cap">kButt Cap</a>,
<a href="#SkPaint_kRound_Cap">kRound Cap</a>,
@@ -2449,7 +2460,7 @@ at the contour point.
<a name="SkPaint_getStrokeCap"></a>
## getStrokeCap
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cap getStrokeCap() const
</pre>
@@ -2480,7 +2491,7 @@ kButt_Cap == default stroke cap
<a name="SkPaint_setStrokeCap"></a>
## setStrokeCap
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setStrokeCap(Cap cap)
</pre>
@@ -2528,7 +2539,7 @@ the following curve, the pair of curves meet at <a href="#Stroke_Join">Stroke Jo
## <a name="SkPaint_Join"></a> Enum SkPaint::Join
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#SkPaint_Join">Join</a> {
<a href="#SkPaint_kMiter_Join">kMiter Join</a>,
<a href="#SkPaint_kRound_Join">kRound Join</a>,
@@ -2591,7 +2602,7 @@ May be used to verify that <a href="#Stroke_Join">Stroke Join</a> is a legal val
<a name="SkPaint_getStrokeJoin"></a>
## getStrokeJoin
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Join getStrokeJoin() const
</pre>
@@ -2622,7 +2633,7 @@ kMiter_Join == default stroke join
<a name="SkPaint_setStrokeJoin"></a>
## setStrokeJoin
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setStrokeJoin(Join join)
</pre>
@@ -2680,9 +2691,8 @@ returns false since <a href="#Hairline">Hairline</a> has no filled equivalent.
<a name="SkPaint_getFillPath"></a>
## getFillPath
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect,
- SkScalar resScale = 1) const
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect, SkScalar resScale = 1) const
</pre>
The filled equivalent of the stroked path.
@@ -2713,7 +2723,7 @@ At the highest precision, the filled path has high fidelity compared to the orig
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool getFillPath(const SkPath& src, SkPath* dst) const
</pre>
@@ -2769,7 +2779,7 @@ If <a href="undocumented#Shader">Shader</a> generates only <a href="#Alpha">Colo
<a name="SkPaint_getShader"></a>
## getShader
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkShader* getShader() const
</pre>
@@ -2799,7 +2809,7 @@ nullptr != shader
<a name="SkPaint_refShader"></a>
## refShader
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
sk_sp&lt;SkShader&gt; refShader() const
</pre>
@@ -2829,7 +2839,7 @@ shader unique: false
<a name="SkPaint_setShader"></a>
## setShader
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setShader(sk_sp&lt;SkShader&gt; shader)
</pre>
@@ -2865,7 +2875,7 @@ The drawn transparency can be modified without altering <a href="undocumented#Co
<a name="SkPaint_getColorFilter"></a>
## getColorFilter
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkColorFilter* getColorFilter() const
</pre>
@@ -2894,7 +2904,7 @@ nullptr != color filter
<a name="SkPaint_refColorFilter"></a>
## refColorFilter
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
sk_sp&lt;SkColorFilter&gt; refColorFilter() const
</pre>
@@ -2923,7 +2933,7 @@ color filter unique: false
<a name="SkPaint_setColorFilter"></a>
## setColorFilter
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setColorFilter(sk_sp&lt;SkColorFilter&gt; colorFilter)
</pre>
@@ -2961,7 +2971,7 @@ over the destination color.
<a name="SkPaint_getBlendMode"></a>
## getBlendMode
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkBlendMode getBlendMode() const
</pre>
@@ -2990,7 +3000,7 @@ kSrcOver != getBlendMode
<a name="SkPaint_isSrcOver"></a>
## isSrcOver
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isSrcOver() const
</pre>
@@ -3018,7 +3028,7 @@ isSrcOver != true
<a name="SkPaint_setBlendMode"></a>
## setBlendMode
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setBlendMode(SkBlendMode mode)
</pre>
@@ -3063,7 +3073,7 @@ If <a href="#Paint">Paint</a> has no <a href="undocumented#Path_Effect">Path Eff
<a name="SkPaint_getPathEffect"></a>
## getPathEffect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkPathEffect* getPathEffect() const
</pre>
@@ -3092,7 +3102,7 @@ nullptr != path effect
<a name="SkPaint_refPathEffect"></a>
## refPathEffect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
sk_sp&lt;SkPathEffect&gt; refPathEffect() const
</pre>
@@ -3105,7 +3115,7 @@ Increases <a href="undocumented#Path_Effect">Path Effect</a> <a href="undocument
### Example
-<div><fiddle-embed name="c55c74f8f581870bd2c18f2f99765579">
+<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
#### Example Output
@@ -3121,7 +3131,7 @@ path effect unique: false
<a name="SkPaint_setPathEffect"></a>
## setPathEffect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setPathEffect(sk_sp&lt;SkPathEffect&gt; pathEffect)
</pre>
@@ -3159,7 +3169,7 @@ modifying the draw.
<a name="SkPaint_getMaskFilter"></a>
## getMaskFilter
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkMaskFilter* getMaskFilter() const
</pre>
@@ -3188,7 +3198,7 @@ nullptr != mask filter
<a name="SkPaint_refMaskFilter"></a>
## refMaskFilter
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
sk_sp&lt;SkMaskFilter&gt; refMaskFilter() const
</pre>
@@ -3218,7 +3228,7 @@ mask filter unique: false
<a name="SkPaint_setMaskFilter"></a>
## setMaskFilter
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setMaskFilter(sk_sp&lt;SkMaskFilter&gt; maskFilter)
</pre>
@@ -3255,7 +3265,7 @@ implementation.
<a name="SkPaint_getTypeface"></a>
## getTypeface
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkTypeface* getTypeface() const
</pre>
@@ -3284,7 +3294,7 @@ nullptr != typeface
<a name="SkPaint_refTypeface"></a>
## refTypeface
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
sk_sp&lt;SkTypeface&gt; refTypeface() const
</pre>
@@ -3312,7 +3322,7 @@ typeface1 == typeface2
<a name="SkPaint_setTypeface"></a>
## setTypeface
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setTypeface(sk_sp&lt;SkTypeface&gt; typeface)
</pre>
@@ -3352,7 +3362,7 @@ creates effects like embossing and outlining.
<a name="SkPaint_getRasterizer"></a>
## getRasterizer
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkRasterizer* getRasterizer() const
</pre>
@@ -3381,7 +3391,7 @@ nullptr != rasterizer
<a name="SkPaint_refRasterizer"></a>
## refRasterizer
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
sk_sp&lt;SkRasterizer&gt; refRasterizer() const
</pre>
@@ -3410,7 +3420,7 @@ rasterizer unique: false
<a name="SkPaint_setRasterizer"></a>
## setRasterizer
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setRasterizer(sk_sp&lt;SkRasterizer&gt; rasterizer)
</pre>
@@ -3446,12 +3456,12 @@ can operate on all channels of <a href="undocumented#Color">Color</a>, while <a
### Example
-<div><fiddle-embed name="88804938b49eb4f7c7f01ad52f4db0d8"></fiddle-embed></div>
+<div><fiddle-embed name="0b2eec148d6397d6231e1fa0b3d1496d"></fiddle-embed></div>
<a name="SkPaint_getImageFilter"></a>
## getImageFilter
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkImageFilter* getImageFilter() const
</pre>
@@ -3464,7 +3474,7 @@ Does not alter <a href="undocumented#Image_Filter">Image Filter</a> <a href="und
### Example
-<div><fiddle-embed name="38788d42772641606e08c60d9dd418a2">
+<div><fiddle-embed name="7b8118ff57fcb84e6bc82380d155b62e">
#### Example Output
@@ -3480,7 +3490,7 @@ nullptr != image filter
<a name="SkPaint_refImageFilter"></a>
## refImageFilter
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
sk_sp&lt;SkImageFilter&gt; refImageFilter() const
</pre>
@@ -3509,7 +3519,7 @@ image filter unique: false
<a name="SkPaint_setImageFilter"></a>
## setImageFilter
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setImageFilter(sk_sp&lt;SkImageFilter&gt; imageFilter)
</pre>
@@ -3523,7 +3533,7 @@ Increments <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a> <a href
### Parameters
<table> <tr> <td><a name="SkPaint_setImageFilter_imageFilter"> <code><strong>imageFilter </strong></code> </a></td> <td>
-how <a href="undocumented#Image">Image</a> is sampled when transformed</td>
+how <a href="SkImage_Reference#Image">Image</a> is sampled when transformed</td>
</tr>
</table>
@@ -3548,7 +3558,7 @@ Set <a href="undocumented#Draw_Looper">Draw Looper</a> to nullptr to prevent <a
<a name="SkPaint_getDrawLooper"></a>
## getDrawLooper
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkDrawLooper* getDrawLooper() const
</pre>
@@ -3577,7 +3587,7 @@ nullptr != draw looper
<a name="SkPaint_refDrawLooper"></a>
## refDrawLooper
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
sk_sp&lt;SkDrawLooper&gt; refDrawLooper() const
</pre>
@@ -3606,7 +3616,7 @@ draw looper unique: false
<a name="SkPaint_getLooper"></a>
## getLooper
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkDrawLooper* getLooper() const
</pre>
@@ -3623,7 +3633,7 @@ Deprecated.
<a name="SkPaint_setDrawLooper"></a>
## setDrawLooper
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setDrawLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
</pre>
@@ -3649,7 +3659,7 @@ iterates through drawing one or more time, altering <a href="#Paint">Paint</a></
<a name="SkPaint_setLooper"></a>
## setLooper
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
</pre>
@@ -3671,7 +3681,7 @@ sets <a href="undocumented#Draw_Looper">Draw Looper</a> to <a href="#SkPaint_set
## <a name="SkPaint_Align"></a> Enum SkPaint::Align
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#SkPaint_Align">Align</a> {
<a href="#SkPaint_kLeft_Align">kLeft Align</a>,
<a href="#SkPaint_kCenter_Align">kCenter Align</a>,
@@ -3714,7 +3724,7 @@ and by its height if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kV
## <a name="SkPaint__anonymous_2"></a> Enum SkPaint::_anonymous_2
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum {
<a href="#SkPaint_kAlignCount">kAlignCount</a> = 3,
};</pre>
@@ -3739,7 +3749,7 @@ enum {
<a name="SkPaint_getTextAlign"></a>
## getTextAlign
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Align getTextAlign() const
</pre>
@@ -3767,7 +3777,7 @@ kLeft_Align == default
<a name="SkPaint_setTextAlign"></a>
## setTextAlign
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setTextAlign(Align align)
</pre>
@@ -3801,7 +3811,7 @@ Set <a href="undocumented#SkPaintDefaults_TextSize">SkPaintDefaults TextSize</a>
<a name="SkPaint_getTextSize"></a>
## getTextSize
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar getTextSize() const
</pre>
@@ -3820,7 +3830,7 @@ typographic height of text
<a name="SkPaint_setTextSize"></a>
## setTextSize
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setTextSize(SkScalar textSize)
</pre>
@@ -3854,7 +3864,7 @@ is not available.
<a name="SkPaint_getTextScaleX"></a>
## getTextScaleX
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar getTextScaleX() const
</pre>
@@ -3874,7 +3884,7 @@ text horizontal scale
<a name="SkPaint_setTextScaleX"></a>
## setTextScaleX
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setTextScaleX(SkScalar scaleX)
</pre>
@@ -3908,7 +3918,7 @@ is not available.
<a name="SkPaint_getTextSkewX"></a>
## getTextSkewX
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar getTextSkewX() const
</pre>
@@ -3928,7 +3938,7 @@ additional shear in x-axis relative to y-axis
<a name="SkPaint_setTextSkewX"></a>
## setTextSkewX
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setTextSkewX(SkScalar skewX)
</pre>
@@ -3952,7 +3962,7 @@ additional shear in x-axis relative to y-axis</td>
## <a name="SkPaint_TextEncoding"></a> Enum SkPaint::TextEncoding
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#SkPaint_TextEncoding">TextEncoding</a> {
<a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a>,
<a href="#SkPaint_kUTF16_TextEncoding">kUTF16 TextEncoding</a>,
@@ -3963,15 +3973,15 @@ enum <a href="#SkPaint_TextEncoding">TextEncoding</a> {
<a href="#SkPaint_TextEncoding">TextEncoding</a> determines whether text specifies character codes and their encoded
size, or glyph indices. Characters are encoded as specified by the<a href="undocumented#Unicode">Unicode</a> standard.
-Character codes encoded size are specified by <a href="undocumented#UTF_8">UTF-8</a>, <a href="undocumented#UTF_16">UTF-16</a>, or <a href="undocumented#UTF_32">UTF-32</a>.
+Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
All character code formats are able to represent all of <a href="undocumented#Unicode">Unicode</a>, differing only
in the total storage required.
-<a href="undocumented#UTF_8">UTF-8</a> (<a href="undocumented#RFC">RFC</a> 3629)encodes each character as one or more 8-bit bytes.
+UTF-8 (<a href="undocumented#RFC">RFC</a> 3629)encodes each character as one or more 8-bit bytes.
-<a href="undocumented#UTF_16">UTF-16</a> (<a href="undocumented#RFC">RFC</a> 2781)encodes each character as one or two 16-bit words.
+UTF-16 (<a href="undocumented#RFC">RFC</a> 2781)encodes each character as one or two 16-bit words.
-<a href="undocumented#UTF_32">UTF-32</a>encodes each character as one 32-bit word.
+UTF-32encodes each character as one 32-bit word.
<a href="undocumented#Font_Manager">Font Manager</a> uses font data to convert character code points into glyph indices.
A glyph index is a 16-bit word.
@@ -3982,7 +3992,7 @@ A glyph index is a 16-bit word.
<table>
<tr>
- <td><a name="SkPaint_kUTF8_TextEncoding"> <code><strong>SkPaint::kUTF8_TextEncoding </strong></code> </a></td><td>0</td><td>Uses bytes to represent <a href="undocumented#UTF_8">UTF-8</a> or <a href="undocumented#ASCII">ASCII</a>.</td>
+ <td><a name="SkPaint_kUTF8_TextEncoding"> <code><strong>SkPaint::kUTF8_TextEncoding </strong></code> </a></td><td>0</td><td>Uses bytes to represent UTF-8 or <a href="undocumented#ASCII">ASCII</a>.</td>
</tr>
<tr>
<td><a name="SkPaint_kUTF16_TextEncoding"> <code><strong>SkPaint::kUTF16_TextEncoding </strong></code> </a></td><td>1</td><td>Uses two byte words to represent most of <a href="undocumented#Unicode">Unicode</a>.</td>
@@ -3998,15 +4008,15 @@ A glyph index is a 16-bit word.
### Example
-<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in <a href="undocumented#UTF_8">UTF-8</a>.
-Second line is encoded in <a href="undocumented#UTF_16">UTF-16</a>.
-Third line is encoded in <a href="undocumented#UTF_32">UTF-32</a>.
+<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
+Second line is encoded in UTF-16.
+Third line is encoded in UTF-32.
Fourth line has 16 bit glyph indices.</div></fiddle-embed></div>
<a name="SkPaint_getTextEncoding"></a>
## getTextEncoding
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
TextEncoding getTextEncoding() const
</pre>
@@ -4036,7 +4046,7 @@ kGlyphID_TextEncoding == text encoding
<a name="SkPaint_setTextEncoding"></a>
## setTextEncoding
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setTextEncoding(TextEncoding encoding)
</pre>
@@ -4084,7 +4094,7 @@ Y-axis values above the baseline are negative, and below the baseline are positi
# <a name="SkPaint_FontMetrics"></a> Struct SkPaint::FontMetrics
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
struct <a href="#SkPaint_FontMetrics">FontMetrics</a> {
enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
@@ -4132,7 +4142,7 @@ are valid, since their value may be zero.
## <a name="SkPaint_FontMetrics_FontMetricsFlags"></a> Enum SkPaint::FontMetrics::FontMetricsFlags
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
@@ -4253,7 +4263,7 @@ If <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPosit
<a name="SkPaint_FontMetrics_hasUnderlineThickness"></a>
## hasUnderlineThickness
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool hasUnderlineThickness(SkScalar* thickness) const
</pre>
@@ -4277,7 +4287,7 @@ true if font specifies underline width
<a name="SkPaint_FontMetrics_hasUnderlinePosition"></a>
## hasUnderlinePosition
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool hasUnderlinePosition(SkScalar* position) const
</pre>
@@ -4301,7 +4311,7 @@ true if font specifies underline <a href="#SkPaint_FontMetrics_hasUnderlinePosit
<a name="SkPaint_FontMetrics_hasStrikeoutThickness"></a>
## hasStrikeoutThickness
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool hasStrikeoutThickness(SkScalar* thickness) const
</pre>
@@ -4325,7 +4335,7 @@ true if font specifies strikeout width
<a name="SkPaint_FontMetrics_hasStrikeoutPosition"></a>
## hasStrikeoutPosition
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool hasStrikeoutPosition(SkScalar* position) const
</pre>
@@ -4349,7 +4359,7 @@ true if font specifies strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosit
<a name="SkPaint_getFontMetrics"></a>
## getFontMetrics
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar getFontMetrics(FontMetrics* metrics, SkScalar scale = 0) const
</pre>
@@ -4389,7 +4399,7 @@ recommended spacing between lines
<a name="SkPaint_getFontSpacing"></a>
## getFontSpacing
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar getFontSpacing() const
</pre>
@@ -4423,7 +4433,7 @@ textSize: 32 fontSpacing: 37.25
<a name="SkPaint_getFontBounds"></a>
## getFontBounds
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkRect getFontBounds() const
</pre>
@@ -4458,7 +4468,7 @@ font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
<a name="SkPaint_textToGlyphs"></a>
## textToGlyphs
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int textToGlyphs(const void* text, size_t byteLength, SkGlyphID glyphs[]) const
</pre>
@@ -4473,7 +4483,7 @@ If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> equals zero, return
If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> includes a partial character, the partial character is ignored.
If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> and
-<a href="#SkPaint_textToGlyphs_text">text</a> contains an invalid <a href="undocumented#UTF_8">UTF-8</a> sequence, zero is returned.
+<a href="#SkPaint_textToGlyphs_text">text</a> contains an invalid UTF-8 sequence, zero is returned.
### Parameters
@@ -4499,7 +4509,7 @@ number of <a href="#SkPaint_textToGlyphs_glyphs">glyphs</a> represented by <a hr
<a name="SkPaint_countText"></a>
## countText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int countText(const void* text, size_t byteLength) const
</pre>
@@ -4537,7 +4547,7 @@ count = 5
<a name="SkPaint_containsText"></a>
## containsText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool containsText(const void* text, size_t byteLength) const
</pre>
@@ -4602,7 +4612,7 @@ that it corresponds to an entry in <a href="undocumented#Typeface">Typeface</a>.
<a name="SkPaint_glyphsToUnichars"></a>
## glyphsToUnichars
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void glyphsToUnichars(const SkGlyphID glyphs[], int count, SkUnichar text[]) const
</pre>
@@ -4626,7 +4636,7 @@ storage for character codes, one per glyph</td>
### Example
-<div><fiddle-embed name="c12686b0b3e0a87d0a248bbfc57e9492"><div>Convert <a href="undocumented#UTF_8">UTF-8</a> <a href="#SkPaint_glyphsToUnichars_text">text</a> to <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a>; then convert <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> to <a href="undocumented#Unichar">Unichar</a> code points.</div></fiddle-embed></div>
+<div><fiddle-embed name="c12686b0b3e0a87d0a248bbfc57e9492"><div>Convert UTF-8 <a href="#SkPaint_glyphsToUnichars_text">text</a> to <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a>; then convert <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> to <a href="undocumented#Unichar">Unichar</a> code points.</div></fiddle-embed></div>
---
@@ -4635,7 +4645,7 @@ storage for character codes, one per glyph</td>
<a name="SkPaint_measureText"></a>
## measureText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar measureText(const void* text, size_t length, SkRect* bounds) const
</pre>
@@ -4669,7 +4679,7 @@ advance width or height
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar measureText(const void* text, size_t length) const
</pre>
@@ -4711,7 +4721,7 @@ double width = 10
<a name="SkPaint_breakText"></a>
## breakText
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
size_t breakText(const void* text, size_t length, SkScalar maxWidth,
SkScalar* measuredWidth = nullptr) const
</pre>
@@ -4754,9 +4764,8 @@ bytes of <a href="#SkPaint_breakText_text">text</a> that fit, always less than o
<a name="SkPaint_getTextWidths"></a>
## getTextWidths
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-int getTextWidths(const void* text, size_t byteLength, SkScalar widths[],
- SkRect bounds[] = nullptr) const
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+int getTextWidths(const void* text, size_t byteLength, SkScalar widths[], SkRect bounds[] = nullptr) const
</pre>
Retrieves the advance and <a href="#SkPaint_getTextWidths_bounds">bounds</a> for each glyph in <a href="#SkPaint_getTextWidths_text">text</a>, and returns
@@ -4801,9 +4810,8 @@ The underlines show the <a href="#SkPaint_getTextWidths_text">text</a> advance,
<a name="SkPaint_getTextPath"></a>
## getTextPath
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y,
- SkPath* path) const
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y, SkPath* path) const
</pre>
Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getTextPath_text">text</a>.
@@ -4819,9 +4827,9 @@ character codes or glyph indices</td>
</tr> <tr> <td><a name="SkPaint_getTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
number of bytes of <a href="#SkPaint_getTextPath_text">text</a></td>
</tr> <tr> <td><a name="SkPaint_getTextPath_x"> <code><strong>x </strong></code> </a></td> <td>
-x-coordinate of the origin of the <a href="#SkPaint_getTextPath_text">text</a></td>
+<a href="#SkPaint_getTextPath_x">x</a>-coordinate of the origin of the <a href="#SkPaint_getTextPath_text">text</a></td>
</tr> <tr> <td><a name="SkPaint_getTextPath_y"> <code><strong>y </strong></code> </a></td> <td>
-y-coordinate of the origin of the <a href="#SkPaint_getTextPath_text">text</a></td>
+<a href="#SkPaint_getTextPath_y">y</a>-coordinate of the origin of the <a href="#SkPaint_getTextPath_text">text</a></td>
</tr> <tr> <td><a name="SkPaint_getTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
geometry of the <a href="#Glyph">Glyphs</a></td>
</tr>
@@ -4837,9 +4845,8 @@ the offset location. The result is rendered with one draw call.</div></fiddle-em
<a name="SkPaint_getPosTextPath"></a>
## getPosTextPath
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void getPosTextPath(const void* text, size_t length, const SkPoint pos[],
- SkPath* path) const
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void getPosTextPath(const void* text, size_t length, const SkPoint pos[], SkPath* path) const
</pre>
Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getPosTextPath_text">text</a>.
@@ -4876,7 +4883,7 @@ underline that skips <a href="undocumented#Descenders">Descenders</a>.
<a name="SkPaint_getTextIntercepts"></a>
## getTextIntercepts
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int getTextIntercepts(const void* text, size_t length, SkScalar x, SkScalar y,
const SkScalar bounds[2], SkScalar* intervals) const
</pre>
@@ -4898,9 +4905,9 @@ character codes or glyph indices</td>
</tr> <tr> <td><a name="SkPaint_getTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
number of bytes of <a href="#SkPaint_getTextIntercepts_text">text</a></td>
</tr> <tr> <td><a name="SkPaint_getTextIntercepts_x"> <code><strong>x </strong></code> </a></td> <td>
-x-coordinate of the origin of the <a href="#SkPaint_getTextIntercepts_text">text</a></td>
+<a href="#SkPaint_getTextIntercepts_x">x</a>-coordinate of the origin of the <a href="#SkPaint_getTextIntercepts_text">text</a></td>
</tr> <tr> <td><a name="SkPaint_getTextIntercepts_y"> <code><strong>y </strong></code> </a></td> <td>
-y-coordinate of the origin of the <a href="#SkPaint_getTextIntercepts_text">text</a></td>
+<a href="#SkPaint_getTextIntercepts_y">y</a>-coordinate of the origin of the <a href="#SkPaint_getTextIntercepts_text">text</a></td>
</tr> <tr> <td><a name="SkPaint_getTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
lower and upper line parallel to the advance</td>
</tr> <tr> <td><a name="SkPaint_getTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
@@ -4921,7 +4928,7 @@ number of intersections; may be zero
<a name="SkPaint_getPosTextIntercepts"></a>
## getPosTextIntercepts
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int getPosTextIntercepts(const void* text, size_t length, const SkPoint pos[],
const SkScalar bounds[2], SkScalar* intervals) const
</pre>
@@ -4964,10 +4971,9 @@ number of intersections; may be zero
<a name="SkPaint_getPosTextHIntercepts"></a>
## getPosTextHIntercepts
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-int getPosTextHIntercepts(const void* text, size_t length, const SkScalar xpos[],
- SkScalar constY, const SkScalar bounds[2],
- SkScalar* intervals) const
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+int getPosTextHIntercepts(const void* text, size_t length, const SkScalar xpos[], SkScalar constY,
+ const SkScalar bounds[2], SkScalar* intervals) const
</pre>
Returns the number of <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a>.
@@ -5010,9 +5016,8 @@ number of intersections; may be zero
<a name="SkPaint_getTextBlobIntercepts"></a>
## getTextBlobIntercepts
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-int getTextBlobIntercepts(const SkTextBlob* blob, const SkScalar bounds[2],
- SkScalar* intervals) const
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+int getTextBlobIntercepts(const SkTextBlob* blob, const SkScalar bounds[2], SkScalar* intervals) const
</pre>
Returns the number of <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a>.
@@ -5049,7 +5054,7 @@ number of intersections; may be zero
<a name="SkPaint_nothingToDraw"></a>
## nothingToDraw
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool nothingToDraw() const
</pre>
@@ -5087,7 +5092,7 @@ alpha 0 nothing to draw: true
<a name="SkPaint_canComputeFastBounds"></a>
## canComputeFastBounds
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool canComputeFastBounds() const
</pre>
@@ -5104,7 +5109,7 @@ true if <a href="#Paint">Paint</a> allows for fast computation of bounds
<a name="SkPaint_computeFastBounds"></a>
## computeFastBounds
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
const SkRect& computeFastBounds(const SkRect& orig, SkRect* storage) const
</pre>
@@ -5137,7 +5142,7 @@ fast computed bounds
<a name="SkPaint_computeFastStrokeBounds"></a>
## computeFastStrokeBounds
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
const SkRect& computeFastStrokeBounds(const SkRect& orig, SkRect* storage) const
</pre>
@@ -5159,9 +5164,8 @@ fast computed bounds
<a name="SkPaint_doComputeFastBounds"></a>
## doComputeFastBounds
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-const SkRect& doComputeFastBounds(const SkRect& orig, SkRect* storage,
- Style style) const
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+const SkRect& doComputeFastBounds(const SkRect& orig, SkRect* storage, Style style) const
</pre>
Computes the bounds, overriding the <a href="#Paint">Paint</a> <a href="#SkPaint_Style">Style</a>. This can be used to
@@ -5188,7 +5192,7 @@ fast computed bounds
<a name="SkPaint_toString"></a>
## toString
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void toString(SkString* str) const;
</pre>
diff --git a/site/user/api/SkPath_Reference.md b/site/user/api/SkPath_Reference.md
index d0bb7e0d50..0ac5ae02c9 100644
--- a/site/user/api/SkPath_Reference.md
+++ b/site/user/api/SkPath_Reference.md
@@ -7,9 +7,9 @@ composed of a series of connected <a href="#Line">Lines</a> and <a href="#Curve"
one, or more <a href="#Contour">Contours</a>.
Each <a href="undocumented#Line">Line</a> and <a href="undocumented#Curve">Curve</a> are described by <a href="#Verb">Verb</a>, <a href="#Point">Points</a>, and optional <a href="#Conic_Weight">Conic Weight</a>.
-Each pair of connected <a href="#Line">Lines</a> and <a href="#Curve">Curves</a> share common <a href="undocumented#Point">Point</a>; for instance, <a href="#Path">Path</a>
+Each pair of connected <a href="#Line">Lines</a> and <a href="#Curve">Curves</a> share common <a href="SkPoint_Reference#Point">Point</a>; for instance, <a href="#Path">Path</a>
containing two connected <a href="#Line">Lines</a> are described the <a href="#Verb">Verb</a> sequence:
-<a href="#SkPath_kMove_Verb">SkPath::kMove Verb</a>, <a href="#SkPath_kLine_Verb">SkPath::kLine Verb</a>, <a href="#SkPath_kLine_Verb">SkPath::kLine Verb</a>; and a <a href="undocumented#Point">Point</a> sequence
+<a href="#SkPath_kMove_Verb">SkPath::kMove Verb</a>, <a href="#SkPath_kLine_Verb">SkPath::kLine Verb</a>, <a href="#SkPath_kLine_Verb">SkPath::kLine Verb</a>; and a <a href="SkPoint_Reference#Point">Point</a> sequence
with three entries, sharing
the middle entry as the end of the first <a href="undocumented#Line">Line</a> and the start of the second <a href="undocumented#Line">Line</a>.
@@ -52,15 +52,15 @@ are required to satisfy <a href="#Verb_Array">Verb Array</a>. First <a href="#Ve
<div><fiddle-embed name="0374f2dcd7effeb1dd435205a6c2de6f"><div>Each <a href="#SkPath_moveTo">SkPath::moveTo</a> starts a new <a href="#Contour">Contour</a>, and content after <a href="#SkPath_close">SkPath::close()</a>
also starts a new <a href="#Contour">Contour</a>. Since <a href="#SkPath_conicTo">SkPath::conicTo</a> is not preceded by
-<a href="#SkPath_moveTo">SkPath::moveTo</a>, the first <a href="undocumented#Point">Point</a> of the third <a href="#Contour">Contour</a> starts at the last <a href="undocumented#Point">Point</a>
+<a href="#SkPath_moveTo">SkPath::moveTo</a>, the first <a href="SkPoint_Reference#Point">Point</a> of the third <a href="#Contour">Contour</a> starts at the last <a href="SkPoint_Reference#Point">Point</a>
of the second <a href="#Contour">Contour</a>.</div></fiddle-embed></div>
If final <a href="#Verb">Verb</a> in <a href="#Contour">Contour</a> is <a href="#SkPath_kClose_Verb">SkPath::kClose Verb</a>, <a href="undocumented#Line">Line</a> connects <a href="#Last_Point">Last Point</a> in
-<a href="#Contour">Contour</a> with first <a href="undocumented#Point">Point</a>. A closed <a href="#Contour">Contour</a>, stroked, draws
-<a href="#Stroke_Join">Paint Stroke Join</a> at <a href="#Last_Point">Last Point</a> and first <a href="undocumented#Point">Point</a>. Without <a href="#SkPath_kClose_Verb">SkPath::kClose Verb</a>
-as final <a href="#Verb">Verb</a>, <a href="#Last_Point">Last Point</a> and first <a href="undocumented#Point">Point</a> are not connected; <a href="#Contour">Contour</a>
+<a href="#Contour">Contour</a> with first <a href="SkPoint_Reference#Point">Point</a>. A closed <a href="#Contour">Contour</a>, stroked, draws
+<a href="#Stroke_Join">Paint Stroke Join</a> at <a href="#Last_Point">Last Point</a> and first <a href="SkPoint_Reference#Point">Point</a>. Without <a href="#SkPath_kClose_Verb">SkPath::kClose Verb</a>
+as final <a href="#Verb">Verb</a>, <a href="#Last_Point">Last Point</a> and first <a href="SkPoint_Reference#Point">Point</a> are not connected; <a href="#Contour">Contour</a>
remains open. An open <a href="#Contour">Contour</a>, stroked, draws <a href="#Stroke_Cap">Paint Stroke Cap</a> at
-<a href="#Last_Point">Last Point</a> and first <a href="undocumented#Point">Point</a>.
+<a href="#Last_Point">Last Point</a> and first <a href="SkPoint_Reference#Point">Point</a>.
### Example
@@ -68,8 +68,8 @@ remains open. An open <a href="#Contour">Contour</a>, stroked, draws <a href="#S
## <a name="Zero_Length"></a> Zero Length
-<a href="#Contour">Contour</a> length is distance traveled from first <a href="undocumented#Point">Point</a> to <a href="#Last_Point">Last Point</a>,
-plus, if <a href="#Contour">Contour</a> is closed, distance from <a href="#Last_Point">Last Point</a> to first <a href="undocumented#Point">Point</a>.
+<a href="#Contour">Contour</a> length is distance traveled from first <a href="SkPoint_Reference#Point">Point</a> to <a href="#Last_Point">Last Point</a>,
+plus, if <a href="#Contour">Contour</a> is closed, distance from <a href="#Last_Point">Last Point</a> to first <a href="SkPoint_Reference#Point">Point</a>.
Even if <a href="#Contour">Contour</a> length is zero, stroked <a href="#Line">Lines</a> are drawn if <a href="#Stroke_Cap">Paint Stroke Cap</a>
makes them visible.
@@ -79,8 +79,8 @@ makes them visible.
# <a name="SkPath"></a> Class SkPath
<a href="#Path">Paths</a> contain geometry. <a href="#Path">Paths</a> may be empty, or contain one or more <a href="#Verb">Verbs</a> that
-outline a figure. <a href="#Path">Path</a> always starts with a move verb to a <a href="undocumented#Cartesian">Cartesian</a>
-coordinate, and may be followed by additional verbs that add lines or curves.
+outline a figure. <a href="#Path">Path</a> always starts with a move verb to a <a href="undocumented#Cartesian_Coordinate">Cartesian Coordinate</a>,
+and may be followed by additional verbs that add lines or curves.
Adding a <a href="#SkPath_close">close</a> verb makes the geometry into a continuous loop, a closed contour.
<a href="#Path">Paths</a> may contain any number of contours, each beginning with a move verb.
@@ -128,9 +128,9 @@ Internally, <a href="#Path">Path</a> lazily computes metrics likes bounds and co
| operator | description |
| --- | --- |
-| <a href="#SkPath_copy_assignment_operator">operator=(const SkPath& path)</a> | Makes a shallow copy. |
+| <a href="#SkPath_copy_operator">operator=(const SkPath& path)</a> | Makes a shallow copy. |
| <a href="#SkPath_equal_operator">operator==(const SkPath& a, const SkPath& b)</a> | Compares paths for equality. |
-| <a href="#SkPath_not_equal_operator">operator!=(const SkPath& a, const SkPath& b)</a> | Compares paths for inequality. |
+| <a href="#SkPath_notequal_operator">operator!=(const SkPath& a, const SkPath& b)</a> | Compares paths for inequality. |
## <a name="Member_Functions"></a> Member Functions
@@ -155,7 +155,7 @@ Internally, <a href="#Path">Path</a> lazily computes metrics likes bounds and co
| <a href="#SkPath_computeTightBounds">computeTightBounds</a> | Returns extent of geometry. |
| <a href="#SkPath_conicTo">conicTo</a> | Appends <a href="#Conic">Conic</a>. |
| <a href="#SkPath_conservativelyContainsRect">conservativelyContainsRect</a> | Returns true if <a href="SkRect_Reference#Rect">Rect</a> may be inside. |
-| <a href="#SkPath_contains">contains</a> | Returns if <a href="undocumented#Point">Point</a> is in fill area. |
+| <a href="#SkPath_contains">contains</a> | Returns if <a href="SkPoint_Reference#Point">Point</a> is in fill area. |
| <a href="#SkPath_countPoints">countPoints</a> | Returns <a href="#Point_Array">Point Array</a> length. |
| <a href="#SkPath_countVerbs">countVerbs</a> | Returns <a href="#Verb_Array">Verb Array</a> length. |
| <a href="#SkPath_cubicTo">cubicTo</a> | Appends <a href="#Cubic">Cubic</a>. |
@@ -175,7 +175,7 @@ Internally, <a href="#Path">Path</a> lazily computes metrics likes bounds and co
| <a href="#SkPath_interpolate">interpolate</a> | Interpolates between <a href="#Path">Path</a> pair. |
| <a href="#SkPath_isConvex">isConvex</a> | Returns if geometry is convex. |
| <a href="#SkPath_isEmpty">isEmpty</a> | Returns if verb count is zero. |
-| <a href="#SkPath_isFinite">isFinite</a> | Returns if all <a href="undocumented#Point">Point</a> values are finite. |
+| <a href="#SkPath_isFinite">isFinite</a> | Returns if all <a href="SkPoint_Reference#Point">Point</a> values are finite. |
| <a href="#SkPath_isInterpolatable">isInterpolatable</a> | Returns if pair <a href="#SkPath_contains">contains</a> equal counts of <a href="#Verb_Array">Verb Array</a> and <a href="#Weight">Weights</a>. |
| <a href="#SkPath_isInverseFillType">isInverseFillType</a> | Returns if <a href="#Fill_Type">Fill Type</a> fills outside geometry. |
| <a href="#SkPath_isLastContourClosed">isLastContourClosed</a> | Returns if final <a href="#Contour">Contour</a> forms a loop. |
@@ -217,7 +217,7 @@ Internally, <a href="#Path">Path</a> lazily computes metrics likes bounds and co
## <a name="SkPath_Verb"></a> Enum SkPath::Verb
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#Verb">Verb</a> {
<a href="#SkPath_kMove_Verb">kMove Verb</a>,
<a href="#SkPath_kLine_Verb">kLine Verb</a>,
@@ -228,38 +228,38 @@ enum <a href="#Verb">Verb</a> {
<a href="#SkPath_kDone_Verb">kDone Verb</a>,
};</pre>
-<a href="#Verb">Verb</a> instructs <a href="#Path">Path</a> how to interpret one or more <a href="undocumented#Point">Point</a> and optional <a href="#Conic_Weight">Conic Weight</a>;
+<a href="#Verb">Verb</a> instructs <a href="#Path">Path</a> how to interpret one or more <a href="SkPoint_Reference#Point">Point</a> and optional <a href="#Conic_Weight">Conic Weight</a>;
manage <a href="#Contour">Contour</a>, and terminate <a href="#Path">Path</a>.
### Constants
<table>
<tr>
- <td><a name="SkPath_kMove_Verb"> <code><strong>SkPath::kMove_Verb </strong></code> </a></td><td>0</td><td>Starts new <a href="#Contour">Contour</a> at next <a href="undocumented#Point">Point</a>.</td>
+ <td><a name="SkPath_kMove_Verb"> <code><strong>SkPath::kMove_Verb </strong></code> </a></td><td>0</td><td>Starts new <a href="#Contour">Contour</a> at next <a href="SkPoint_Reference#Point">Point</a>.</td>
</tr>
<tr>
- <td><a name="SkPath_kLine_Verb"> <code><strong>SkPath::kLine_Verb </strong></code> </a></td><td>1</td><td>Adds <a href="undocumented#Line">Line</a> from <a href="#Last_Point">Last Point</a> to next <a href="undocumented#Point">Point</a>.
-<a href="undocumented#Line">Line</a> is a straight segment from <a href="undocumented#Point">Point</a> to <a href="undocumented#Point">Point</a>.</td>
+ <td><a name="SkPath_kLine_Verb"> <code><strong>SkPath::kLine_Verb </strong></code> </a></td><td>1</td><td>Adds <a href="undocumented#Line">Line</a> from <a href="#Last_Point">Last Point</a> to next <a href="SkPoint_Reference#Point">Point</a>.
+<a href="undocumented#Line">Line</a> is a straight segment from <a href="SkPoint_Reference#Point">Point</a> to <a href="SkPoint_Reference#Point">Point</a>.</td>
</tr>
<tr>
- <td><a name="SkPath_kQuad_Verb"> <code><strong>SkPath::kQuad_Verb </strong></code> </a></td><td>2</td><td>Adds <a href="#Quad">Quad</a> from <a href="#Last_Point">Last Point</a>, using control <a href="undocumented#Point">Point</a>, and end <a href="undocumented#Point">Point</a>.
-<a href="#Quad">Quad</a> is a parabolic section within tangents from <a href="#Last_Point">Last Point</a> to control <a href="undocumented#Point">Point</a>,
-and control <a href="undocumented#Point">Point</a> to end <a href="undocumented#Point">Point</a>.</td>
+ <td><a name="SkPath_kQuad_Verb"> <code><strong>SkPath::kQuad_Verb </strong></code> </a></td><td>2</td><td>Adds <a href="#Quad">Quad</a> from <a href="#Last_Point">Last Point</a>, using control <a href="SkPoint_Reference#Point">Point</a>, and end <a href="SkPoint_Reference#Point">Point</a>.
+<a href="#Quad">Quad</a> is a parabolic section within tangents from <a href="#Last_Point">Last Point</a> to control <a href="SkPoint_Reference#Point">Point</a>,
+and control <a href="SkPoint_Reference#Point">Point</a> to end <a href="SkPoint_Reference#Point">Point</a>.</td>
</tr>
<tr>
- <td><a name="SkPath_kConic_Verb"> <code><strong>SkPath::kConic_Verb </strong></code> </a></td><td>3</td><td>Adds <a href="#Conic">Conic</a> from <a href="#Last_Point">Last Point</a>, using control <a href="undocumented#Point">Point</a>, end <a href="undocumented#Point">Point</a>, and <a href="#Conic_Weight">Conic Weight</a>.
+ <td><a name="SkPath_kConic_Verb"> <code><strong>SkPath::kConic_Verb </strong></code> </a></td><td>3</td><td>Adds <a href="#Conic">Conic</a> from <a href="#Last_Point">Last Point</a>, using control <a href="SkPoint_Reference#Point">Point</a>, end <a href="SkPoint_Reference#Point">Point</a>, and <a href="#Conic_Weight">Conic Weight</a>.
<a href="#Conic">Conic</a> is a elliptical, parabolic, or hyperbolic section within tangents
-from <a href="#Last_Point">Last Point</a> to control <a href="undocumented#Point">Point</a>, and control <a href="undocumented#Point">Point</a> to end <a href="undocumented#Point">Point</a>, constrained
+from <a href="#Last_Point">Last Point</a> to control <a href="SkPoint_Reference#Point">Point</a>, and control <a href="SkPoint_Reference#Point">Point</a> to end <a href="SkPoint_Reference#Point">Point</a>, constrained
by <a href="#Conic_Weight">Conic Weight</a>. <a href="#Conic_Weight">Conic Weight</a> less than one is elliptical; equal to one is
parabolic (and identical to <a href="#Quad">Quad</a>); greater than one hyperbolic.</td>
</tr>
<tr>
- <td><a name="SkPath_kCubic_Verb"> <code><strong>SkPath::kCubic_Verb </strong></code> </a></td><td>4</td><td>Adds <a href="#Cubic">Cubic</a> from <a href="#Last_Point">Last Point</a>, using two control <a href="#Point">Points</a>, and end <a href="undocumented#Point">Point</a>.
-<a href="#Cubic">Cubic</a> is a third-order <a href="undocumented#Bezier">Bezier</a> section within tangents from <a href="#Last_Point">Last Point</a> to
-first control <a href="undocumented#Point">Point</a>, and from second control <a href="undocumented#Point">Point</a> to end <a href="undocumented#Point">Point</a>.</td>
+ <td><a name="SkPath_kCubic_Verb"> <code><strong>SkPath::kCubic_Verb </strong></code> </a></td><td>4</td><td>Adds <a href="#Cubic">Cubic</a> from <a href="#Last_Point">Last Point</a>, using two control <a href="#Point">Points</a>, and end <a href="SkPoint_Reference#Point">Point</a>.
+<a href="#Cubic">Cubic</a> is a third-order <a href="undocumented#Bezier_Curve">Bezier Curve</a> section within tangents from <a href="#Last_Point">Last Point</a>
+to first control <a href="SkPoint_Reference#Point">Point</a>, and from second control <a href="SkPoint_Reference#Point">Point</a> to end <a href="SkPoint_Reference#Point">Point</a>.</td>
</tr>
<tr>
- <td><a name="SkPath_kClose_Verb"> <code><strong>SkPath::kClose_Verb </strong></code> </a></td><td>5</td><td>Closes <a href="#Contour">Contour</a>, connecting <a href="#Last_Point">Last Point</a> to <a href="#SkPath_kMove_Verb">kMove Verb</a> <a href="undocumented#Point">Point</a>.</td>
+ <td><a name="SkPath_kClose_Verb"> <code><strong>SkPath::kClose_Verb </strong></code> </a></td><td>5</td><td>Closes <a href="#Contour">Contour</a>, connecting <a href="#Last_Point">Last Point</a> to <a href="#SkPath_kMove_Verb">kMove Verb</a> <a href="SkPoint_Reference#Point">Point</a>.</td>
</tr>
<tr>
<td><a name="SkPath_kDone_Verb"> <code><strong>SkPath::kDone_Verb </strong></code> </a></td><td>6</td><td>Terminates <a href="#Path">Path</a>. Not in <a href="#Verb_Array">Verb Array</a>, but returned by <a href="#Path">Path</a> iterator.</td>
@@ -299,7 +299,7 @@ verbs: kMove_Verb kLine_Verb kQuad_Verb kClose_Verb kMove_Verb kCubic_Verb kConi
## <a name="SkPath_Direction"></a> Enum SkPath::Direction
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#Direction">Direction</a> {
<a href="#SkPath_kCW_Direction">kCW Direction</a>,
<a href="#SkPath_kCCW_Direction">kCCW Direction</a>,
@@ -341,7 +341,7 @@ travel counterclockwise.
<a name="SkPath_empty_constructor"></a>
## SkPath
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkPath()
</pre>
@@ -373,7 +373,7 @@ path is empty
<a name="SkPath_copy_const_SkPath"></a>
## SkPath
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkPath(const SkPath& path)
</pre>
@@ -415,14 +415,14 @@ path2 verbs: 3
### See Also
-<a href="#SkPath_copy_assignment_operator">operator=(const SkPath& path)</a>
+<a href="#SkPath_copy_operator">operator=(const SkPath& path)</a>
---
<a name="SkPath_destructor"></a>
## ~SkPath
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
~SkPath()
</pre>
@@ -434,14 +434,14 @@ Releases ownership of any shared data and deletes data if <a href="#Path">Path</
### See Also
-<a href="#SkPath_empty_constructor">SkPath()</a> <a href="#SkPath_copy_const_SkPath">SkPath(const SkPath& path)</a> <a href="#SkPath_copy_assignment_operator">operator=(const SkPath& path)</a>
+<a href="#SkPath_empty_constructor">SkPath()</a> <a href="#SkPath_copy_const_SkPath">SkPath(const SkPath& path)</a> <a href="#SkPath_copy_operator">operator=(const SkPath& path)</a>
---
-<a name="SkPath_copy_assignment_operator"></a>
+<a name="SkPath_copy_operator"></a>
## operator=
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkPath& operator=(const SkPath& path)
</pre>
@@ -455,7 +455,7 @@ pointers are not exposed.
### Parameters
-<table> <tr> <td><a name="SkPath_copy_assignment_operator_path"> <code><strong>path </strong></code> </a></td> <td>
+<table> <tr> <td><a name="SkPath_copy_operator_path"> <code><strong>path </strong></code> </a></td> <td>
<a href="#Verb_Array">Verb Array</a>, <a href="#Point_Array">Point Array</a>, <a href="#Weight">Weights</a>, and <a href="#Fill_Type">Fill Type</a> to copy</td>
</tr>
</table>
@@ -486,7 +486,7 @@ path2 bounds = 10, 20, 30, 40
<a name="SkPath_equal_operator"></a>
## operator==
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool operator==(const SkPath& a, const SkPath& b)
</pre>
@@ -524,21 +524,21 @@ reset one == two
---
-<a name="SkPath_not_equal_operator"></a>
+<a name="SkPath_notequal_operator"></a>
## operator!=
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool operator!=(const SkPath& a, const SkPath& b)
</pre>
-Compares <a href="#SkPath_not_equal_operator_a">a</a> and <a href="#SkPath_not_equal_operator_b">b</a>; returns true if <a href="#Fill_Type">Fill Type</a>, <a href="#Verb_Array">Verb Array</a>, <a href="#Point_Array">Point Array</a>, and <a href="#Weight">Weights</a>
+Compares <a href="#SkPath_notequal_operator_a">a</a> and <a href="#SkPath_notequal_operator_b">b</a>; returns true if <a href="#Fill_Type">Fill Type</a>, <a href="#Verb_Array">Verb Array</a>, <a href="#Point_Array">Point Array</a>, and <a href="#Weight">Weights</a>
are not equivalent.
### Parameters
-<table> <tr> <td><a name="SkPath_not_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
+<table> <tr> <td><a name="SkPath_notequal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
<a href="#Path">Path</a> to compare</td>
- </tr> <tr> <td><a name="SkPath_not_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
+ </tr> <tr> <td><a name="SkPath_notequal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
<a href="#Path">Path</a> to compare</td>
</tr>
</table>
@@ -567,7 +567,7 @@ convexity !=
<a name="SkPath_isInterpolatable"></a>
## isInterpolatable
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isInterpolatable(const SkPath& compare) const
</pre>
@@ -610,7 +610,7 @@ paths are interpolatable
<a name="SkPath_interpolate"></a>
## interpolate
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool interpolate(const SkPath& ending, SkScalar weight, SkPath* out) const
</pre>
@@ -618,7 +618,7 @@ Interpolate between <a href="#Path">Paths</a> with equal sized <a href="SkPath_R
Copy <a href="#Verb_Array">Verb Array</a> and <a href="#Weight">Weights</a> to <a href="#SkPath_interpolate_out">out</a>,
and set <a href="#SkPath_interpolate_out">out</a> <a href="#Point_Array">Point Array</a> to a weighted average of this <a href="#Point_Array">Point Array</a> and <a href="#SkPath_interpolate_ending">ending</a>
<a href="#Point_Array">Point Array</a>, using the formula:
-(this->points * <a href="#SkPath_interpolate_weight">weight</a>) + ending->points * (1 - <a href="#SkPath_interpolate_weight">weight</a>).
+(this->points * <a href="#SkPath_interpolate_weight">weight</a>) + <a href="#SkPath_interpolate_ending">ending</a>->points * (1 - <a href="#SkPath_interpolate_weight">weight</a>).
<a href="#SkPath_interpolate_weight">weight</a> is most useful when between zero (<a href="#SkPath_interpolate_ending">ending</a> <a href="#Point_Array">Point Array</a>) and
one (this <a href="#Point_Array">Point Array</a>); will work with values outside of this
@@ -657,7 +657,7 @@ true if <a href="#Path">Paths</a> contain same number of <a href="#Point">Points
<a name="SkPath_unique"></a>
## unique
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool unique() const
</pre>
@@ -671,7 +671,7 @@ true if <a href="#Path">Path</a> has one owner
## <a name="SkPath_FillType"></a> Enum SkPath::FillType
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#SkPath_FillType">FillType</a> {
<a href="#SkPath_kWinding_FillType">kWinding FillType</a>,
<a href="#SkPath_kEvenOdd_FillType">kEvenOdd FillType</a>,
@@ -724,7 +724,7 @@ same as the outer parts of the top rectangles, which have a winding of 1.</div><
<a name="SkPath_getFillType"></a>
## getFillType
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
FillType getFillType() const
</pre>
@@ -757,7 +757,7 @@ default path fill type is kWinding_FillType
<a name="SkPath_setFillType"></a>
## setFillType
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setFillType(FillType ft)
</pre>
@@ -785,7 +785,7 @@ one of: <a href="#SkPath_kWinding_FillType">kWinding FillType</a>, <a href="#SkP
<a name="SkPath_isInverseFillType"></a>
## isInverseFillType
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isInverseFillType() const
</pre>
@@ -817,7 +817,7 @@ default path fill type is inverse: false
<a name="SkPath_toggleInverseFillType"></a>
## toggleInverseFillType
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void toggleInverseFillType()
</pre>
@@ -845,7 +845,7 @@ unmodified by the original <a href="#SkPath_FillType">FillType</a>.
## <a name="SkPath_Convexity"></a> Enum SkPath::Convexity
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#Convexity">Convexity</a> : uint8_t {
<a href="#SkPath_kUnknown_Convexity">kUnknown Convexity</a>,
<a href="#SkPath_kConvex_Convexity">kConvex Convexity</a>,
@@ -861,7 +861,7 @@ another is counterclockwise, or the sum of the changes in <a href="#SkPath_Direc
degrees.
Initially <a href="#Path">Path</a> <a href="#Convexity">Convexity</a> is <a href="#SkPath_kUnknown_Convexity">kUnknown Convexity</a>. <a href="#Path">Path</a> <a href="#Convexity">Convexity</a> is computed
-if needed by destination <a href="undocumented#Surface">Surface</a>.
+if needed by destination <a href="SkSurface_Reference#Surface">Surface</a>.
### Constants
@@ -890,7 +890,7 @@ if needed by destination <a href="undocumented#Surface">Surface</a>.
<a name="SkPath_getConvexity"></a>
## getConvexity
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Convexity getConvexity() const
</pre>
@@ -915,7 +915,7 @@ computed or stored <a href="#Convexity">Convexity</a>
<a name="SkPath_getConvexityOrUnknown"></a>
## getConvexityOrUnknown
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Convexity getConvexityOrUnknown() const
</pre>
@@ -940,7 +940,7 @@ that alters the path.</div></fiddle-embed></div>
<a name="SkPath_setConvexity"></a>
## setConvexity
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setConvexity(Convexity convexity)
</pre>
@@ -975,7 +975,7 @@ one of: <a href="#SkPath_kUnknown_Convexity">kUnknown Convexity</a>, <a href="#S
<a name="SkPath_isConvex"></a>
## isConvex
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isConvex() const
</pre>
@@ -1001,7 +1001,7 @@ true if <a href="#Convexity">Convexity</a> stored or computed is <a href="#SkPat
<a name="SkPath_setIsConvex"></a>
## setIsConvex
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setIsConvex(bool isConvex)
</pre>
@@ -1016,7 +1016,7 @@ Deprecated. Use <a href="#SkPath_setConvexity">setConvexity</a>.
<a name="SkPath_isOval"></a>
## isOval
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isOval(SkRect* rect, Direction* dir = nullptr, unsigned* start = nullptr) const
</pre>
@@ -1061,7 +1061,7 @@ true if <a href="#Path">Path</a> was constructed by method that reduces to <a hr
<a name="SkPath_isRRect"></a>
## isRRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isRRect(SkRRect* rrect, Direction* dir = nullptr, unsigned* start = nullptr) const
</pre>
@@ -1107,7 +1107,7 @@ rectangle starts and its direction.</div></fiddle-embed></div>
<a name="SkPath_reset"></a>
## reset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void reset()
</pre>
@@ -1128,7 +1128,7 @@ Internal storage associated with <a href="#Path">Path</a> is released.
<a name="SkPath_rewind"></a>
## rewind
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void rewind()
</pre>
@@ -1153,11 +1153,11 @@ a newly initialized path.</div></fiddle-embed></div>
<a name="SkPath_isEmpty"></a>
## isEmpty
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isEmpty() const
</pre>
-Empty <a href="#Path">Path</a> may have <a href="#SkPath_FillType">FillType</a> but has no <a href="undocumented#SkPoint">SkPoint</a>, <a href="#SkPath_Verb">Verb</a>, or <a href="#Conic_Weight">Conic Weight</a>.
+Empty <a href="#Path">Path</a> may have <a href="#SkPath_FillType">FillType</a> but has no <a href="SkPoint_Reference#SkPoint">SkPoint</a>, <a href="#SkPath_Verb">Verb</a>, or <a href="#Conic_Weight">Conic Weight</a>.
<a href="#SkPath_empty_constructor">SkPath()</a> constructs empty <a href="#Path">Path</a>; <a href="#SkPath_reset">reset</a> and (<a href="#SkPath_rewind">rewind</a>) make <a href="#Path">Path</a> empty.
### Return Value
@@ -1189,12 +1189,12 @@ after reset path is empty
<a name="SkPath_isLastContourClosed"></a>
## isLastContourClosed
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isLastContourClosed() const
</pre>
<a href="#Contour">Contour</a> is closed if <a href="#Path">Path</a> <a href="#SkPath_Verb">Verb</a> array was last modified by <a href="#SkPath_close">close</a>. When stroked,
-closed <a href="#Contour">Contour</a> draws <a href="#Stroke_Join">Paint Stroke Join</a> instead of <a href="#Stroke_Cap">Paint Stroke Cap</a> at first and last <a href="undocumented#Point">Point</a>.
+closed <a href="#Contour">Contour</a> draws <a href="#Stroke_Join">Paint Stroke Join</a> instead of <a href="#Stroke_Cap">Paint Stroke Cap</a> at first and last <a href="SkPoint_Reference#Point">Point</a>.
### Return Value
@@ -1225,17 +1225,17 @@ after close last contour is closed
<a name="SkPath_isFinite"></a>
## isFinite
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isFinite() const
</pre>
-Returns true for finite <a href="undocumented#Point">Point</a> array values between negative <a href="undocumented#SK_ScalarMax">SK ScalarMax</a> and
-positive <a href="undocumented#SK_ScalarMax">SK ScalarMax</a>. Returns false for any <a href="undocumented#Point">Point</a> array value of
+Returns true for finite <a href="SkPoint_Reference#Point">Point</a> array values between negative <a href="undocumented#SK_ScalarMax">SK ScalarMax</a> and
+positive <a href="undocumented#SK_ScalarMax">SK ScalarMax</a>. Returns false for any <a href="SkPoint_Reference#Point">Point</a> array value of
<a href="undocumented#SK_ScalarInfinity">SK ScalarInfinity</a>, <a href="undocumented#SK_ScalarNegativeInfinity">SK ScalarNegativeInfinity</a>, or <a href="undocumented#SK_ScalarNaN">SK ScalarNaN</a>.
### Return Value
-true if all <a href="undocumented#Point">Point</a> values are finite
+true if all <a href="SkPoint_Reference#Point">Point</a> values are finite
### Example
@@ -1260,13 +1260,13 @@ after scale path is not finite
<a name="SkPath_isVolatile"></a>
## isVolatile
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isVolatile() const
</pre>
Returns true if the path is volatile; it will not be altered or discarded
by the caller after it is drawn. <a href="#Path">Paths</a> by default have volatile set false, allowing
-<a href="undocumented#Surface">Surface</a> to attach a cache of data which speeds repeated drawing. If true, <a href="undocumented#Surface">Surface</a>
+<a href="SkSurface_Reference#Surface">Surface</a> to attach a cache of data which speeds repeated drawing. If true, <a href="SkSurface_Reference#Surface">Surface</a>
may not speed repeated drawing.
### Return Value
@@ -1294,7 +1294,7 @@ volatile by default is false
<a name="SkPath_setIsVolatile"></a>
## setIsVolatile
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setIsVolatile(bool isVolatile)
</pre>
@@ -1331,11 +1331,11 @@ true if caller will alter <a href="#Path">Path</a> after drawing</td>
<a name="SkPath_IsLineDegenerate"></a>
## IsLineDegenerate
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static bool IsLineDegenerate(const SkPoint& p1, const SkPoint& p2, bool exact)
</pre>
-Test if <a href="undocumented#Line">Line</a> between <a href="undocumented#Point">Point</a> pair is degenerate.
+Test if <a href="undocumented#Line">Line</a> between <a href="SkPoint_Reference#Point">Point</a> pair is degenerate.
<a href="undocumented#Line">Line</a> with no length or that moves a very short distance is degenerate; it is
treated as a point.
@@ -1376,16 +1376,15 @@ line from (100,100) to (100.0001,100.0001) is not degenerate, exactly
### See Also
-<a href="#SkPath_IsQuadDegenerate">IsQuadDegenerate</a> <a href="#SkPath_IsCubicDegenerate">IsCubicDegenerate</a> <a href="#SkPoint_equalsWithinTolerance">SkPoint::equalsWithinTolerance</a>
+<a href="#SkPath_IsQuadDegenerate">IsQuadDegenerate</a> <a href="#SkPath_IsCubicDegenerate">IsCubicDegenerate</a>
---
<a name="SkPath_IsQuadDegenerate"></a>
## IsQuadDegenerate
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-static bool IsQuadDegenerate(const SkPoint& p1, const SkPoint& p2,
- const SkPoint& p3, bool exact)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static bool IsQuadDegenerate(const SkPoint& p1, const SkPoint& p2, const SkPoint& p3, bool exact)
</pre>
Test if <a href="#Quad">Quad</a> is degenerate.
@@ -1429,16 +1428,16 @@ quad (1100,1100), (1100,1100), (1100,1100) is degenerate, exactly
### See Also
-<a href="#SkPath_IsLineDegenerate">IsLineDegenerate</a> <a href="#SkPath_IsCubicDegenerate">IsCubicDegenerate</a> <a href="#SkPoint_equalsWithinTolerance">SkPoint::equalsWithinTolerance</a>
+<a href="#SkPath_IsLineDegenerate">IsLineDegenerate</a> <a href="#SkPath_IsCubicDegenerate">IsCubicDegenerate</a>
---
<a name="SkPath_IsCubicDegenerate"></a>
## IsCubicDegenerate
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-static bool IsCubicDegenerate(const SkPoint& p1, const SkPoint& p2,
- const SkPoint& p3, const SkPoint& p4, bool exact)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static bool IsCubicDegenerate(const SkPoint& p1, const SkPoint& p2, const SkPoint& p3,
+ const SkPoint& p4, bool exact)
</pre>
Test if <a href="#Cubic">Cubic</a> is degenerate.
@@ -1483,7 +1482,7 @@ true if <a href="#Cubic">Cubic</a> is degenerate; its length is effectively zero
<a name="SkPath_isLine"></a>
## isLine
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isLine(SkPoint line[2]) const
</pre>
@@ -1526,7 +1525,7 @@ second move is not line
<a href="#Point_Array">Point Array</a> <a href="#SkPath_contains">contains</a> <a href="#Point">Points</a> satisfying the allocated <a href="#Point">Points</a> for
each <a href="#SkPath_Verb">Verb</a> in <a href="#Verb_Array">Verb Array</a>. For instance, <a href="#Path">Path</a> containing one <a href="#Contour">Contour</a> with <a href="undocumented#Line">Line</a>
and <a href="#Quad">Quad</a> is described by <a href="#Verb_Array">Verb Array</a>: Verb::kMoveTo, Verb::kLineTo, Verb::kQuadTo; and
-one <a href="undocumented#Point">Point</a> for move, one <a href="undocumented#Point">Point</a> for <a href="undocumented#Line">Line</a>, two <a href="#Point">Points</a> for <a href="#Quad">Quad</a>; totaling four <a href="#Point">Points</a>.
+one <a href="SkPoint_Reference#Point">Point</a> for move, one <a href="SkPoint_Reference#Point">Point</a> for <a href="undocumented#Line">Line</a>, two <a href="#Point">Points</a> for <a href="#Quad">Quad</a>; totaling four <a href="#Point">Points</a>.
<a href="#Point_Array">Point Array</a> may be read directly from <a href="#Path">Path</a> with <a href="#SkPath_getPoints">getPoints</a>, or inspected with
<a href="#SkPath_getPoint">getPoint</a>, with <a href="#SkPath_Iter">Iter</a>, or with <a href="#SkPath_RawIter">RawIter</a>.
@@ -1534,7 +1533,7 @@ one <a href="undocumented#Point">Point</a> for move, one <a href="undocumented#P
<a name="SkPath_getPoints"></a>
## getPoints
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int getPoints(SkPoint points[], int max) const
</pre>
@@ -1545,7 +1544,7 @@ If <a href="#SkPath_getPoints_max">max</a> is greater than number of <a href="#S
### Parameters
<table> <tr> <td><a name="SkPath_getPoints_points"> <code><strong>points </strong></code> </a></td> <td>
-storage for <a href="#Path">Path</a> <a href="undocumented#Point">Point</a> array. May be nullptr</td>
+storage for <a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a> array. May be nullptr</td>
</tr> <tr> <td><a name="SkPath_getPoints_max"> <code><strong>max </strong></code> </a></td> <td>
maximum to copy; must be greater than or equal to zero</td>
</tr>
@@ -1553,7 +1552,7 @@ maximum to copy; must be greater than or equal to zero</td>
### Return Value
-<a href="#Path">Path</a> <a href="undocumented#Point">Point</a> array length
+<a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a> array length
### Example
@@ -1579,16 +1578,16 @@ just right point count: 3 (0,0) (20,20) (-10,-10)
<a name="SkPath_countPoints"></a>
## countPoints
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int countPoints() const
</pre>
Returns the number of points in <a href="#Path">Path</a>.
-<a href="undocumented#Point">Point</a> count is initially zero.
+<a href="SkPoint_Reference#Point">Point</a> count is initially zero.
### Return Value
-<a href="#Path">Path</a> <a href="undocumented#Point">Point</a> array length
+<a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a> array length
### Example
@@ -1614,24 +1613,24 @@ second move point count: 3
<a name="SkPath_getPoint"></a>
## getPoint
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkPoint getPoint(int index) const
</pre>
-Returns <a href="undocumented#Point">Point</a> at <a href="#SkPath_getPoint_index">index</a> in <a href="#Point_Array">Point Array</a>. Valid range for <a href="#SkPath_getPoint_index">index</a> is
+Returns <a href="SkPoint_Reference#Point">Point</a> at <a href="#SkPath_getPoint_index">index</a> in <a href="#Point_Array">Point Array</a>. Valid range for <a href="#SkPath_getPoint_index">index</a> is
0 to <a href="#SkPath_countPoints">countPoints</a> - 1.
Returns (0, 0) if <a href="#SkPath_getPoint_index">index</a> is out of range.
### Parameters
<table> <tr> <td><a name="SkPath_getPoint_index"> <code><strong>index </strong></code> </a></td> <td>
-<a href="undocumented#Point">Point</a> array element selector</td>
+<a href="SkPoint_Reference#Point">Point</a> array element selector</td>
</tr>
</table>
### Return Value
-<a href="undocumented#Point">Point</a> array value or (0, 0)
+<a href="SkPoint_Reference#Point">Point</a> array value or (0, 0)
### Example
@@ -1666,7 +1665,7 @@ or with <a href="#SkPath_RawIter">RawIter</a>.
<a name="SkPath_countVerbs"></a>
## countVerbs
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int countVerbs() const
</pre>
@@ -1699,7 +1698,7 @@ round rect verb count: 10
<a name="SkPath_getVerbs"></a>
## getVerbs
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int getVerbs(uint8_t verbs[], int max) const
</pre>
@@ -1743,7 +1742,7 @@ just right verb count: 3 move line line
<a name="SkPath_swap"></a>
## swap
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void swap(SkPath& other)
</pre>
@@ -1751,7 +1750,7 @@ Exchanges the <a href="#Verb_Array">Verb Array</a>, <a href="#Point_Array">Point
Cached state is also exchanged. <a href="#SkPath_swap">swap</a> internally exchanges pointers, so
it is lightweight and does not allocate memory.
-<a href="#SkPath_swap">swap</a> usage has largely been replaced by <a href="#SkPath_copy_assignment_operator">operator=(const SkPath& path)</a>.
+<a href="#SkPath_swap">swap</a> usage has largely been replaced by <a href="#SkPath_copy_operator">operator=(const SkPath& path)</a>.
<a href="#Path">Paths</a> do not copy their content on assignment until they are written to,
making assignment as efficient as <a href="#SkPath_swap">swap</a>.
@@ -1777,14 +1776,14 @@ path2 bounds = 10, 20, 30, 40
### See Also
-<a href="#SkPath_copy_assignment_operator">operator=(const SkPath& path)</a>
+<a href="#SkPath_copy_operator">operator=(const SkPath& path)</a>
---
<a name="SkPath_getBounds"></a>
## getBounds
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
const SkRect& getBounds() const
</pre>
@@ -1823,7 +1822,7 @@ rotated circle bounds = 14.6447, 9.64466, 85.3553, 80.3553
<a name="SkPath_updateBoundsCache"></a>
## updateBoundsCache
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void updateBoundsCache() const
</pre>
@@ -1858,7 +1857,7 @@ cached avg: 0.182784 ms
<a name="SkPath_computeTightBounds"></a>
## computeTightBounds
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkRect computeTightBounds() const
</pre>
@@ -1902,7 +1901,7 @@ rotated circle bounds = 25, 20, 75, 70
<a name="SkPath_conservativelyContainsRect"></a>
## conservativelyContainsRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool conservativelyContainsRect(const SkRect& rect) const
</pre>
@@ -1912,12 +1911,12 @@ May return false when <a href="#SkPath_conservativelyContainsRect_rect">rect</a>
For now, only returns true if <a href="#Path">Path</a> has one <a href="#Contour">Contour</a> and is convex.
<a href="#SkPath_conservativelyContainsRect_rect">rect</a> may share points and edges with <a href="#Path">Path</a> and be contained.
Returns true if <a href="#SkPath_conservativelyContainsRect_rect">rect</a> is empty, that is, it has zero width or height; and
-the <a href="undocumented#Point">Point</a> or <a href="undocumented#Line">Line</a> described by <a href="#SkPath_conservativelyContainsRect_rect">rect</a> is contained by <a href="#Path">Path</a>.
+the <a href="SkPoint_Reference#Point">Point</a> or <a href="undocumented#Line">Line</a> described by <a href="#SkPath_conservativelyContainsRect_rect">rect</a> is contained by <a href="#Path">Path</a>.
### Parameters
<table> <tr> <td><a name="SkPath_conservativelyContainsRect_rect"> <code><strong>rect </strong></code> </a></td> <td>
-<a href="SkRect_Reference#Rect">Rect</a>, <a href="undocumented#Line">Line</a>, or <a href="undocumented#Point">Point</a> checked for containment</td>
+<a href="SkRect_Reference#Rect">Rect</a>, <a href="undocumented#Line">Line</a>, or <a href="SkPoint_Reference#Point">Point</a> checked for containment</td>
</tr>
</table>
@@ -1938,7 +1937,7 @@ true if <a href="#SkPath_conservativelyContainsRect_rect">rect</a> is contained
<a name="SkPath_incReserve"></a>
## incReserve
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void incReserve(unsigned extraPtCount)
</pre>
@@ -1966,18 +1965,18 @@ number of additional <a href="#Point">Points</a> to allocate</td>
<a name="SkPath_moveTo"></a>
## moveTo
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void moveTo(SkScalar x, SkScalar y)
</pre>
-Adds beginning of <a href="#Contour">Contour</a> at <a href="undocumented#Point">Point</a> (<a href="#SkPath_moveTo_x">x</a>, <a href="#SkPath_moveTo_y">y</a>).
+Adds beginning of <a href="#Contour">Contour</a> at <a href="SkPoint_Reference#Point">Point</a> (<a href="#SkPath_moveTo_x">x</a>, <a href="#SkPath_moveTo_y">y</a>).
### Parameters
<table> <tr> <td><a name="SkPath_moveTo_x"> <code><strong>x </strong></code> </a></td> <td>
-x-coordinate of <a href="#Contour">Contour</a> start</td>
+<a href="#SkPath_moveTo_x">x</a>-coordinate of <a href="#Contour">Contour</a> start</td>
</tr> <tr> <td><a name="SkPath_moveTo_y"> <code><strong>y </strong></code> </a></td> <td>
-y-coordinate of <a href="#Contour">Contour</a> start</td>
+<a href="#SkPath_moveTo_y">y</a>-coordinate of <a href="#Contour">Contour</a> start</td>
</tr>
</table>
@@ -1991,11 +1990,11 @@ y-coordinate of <a href="#Contour">Contour</a> start</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void moveTo(const SkPoint& p)
</pre>
-Adds beginning of <a href="#Contour">Contour</a> at <a href="undocumented#Point">Point</a> <a href="#SkPath_moveTo_2_p">p</a>.
+Adds beginning of <a href="#Contour">Contour</a> at <a href="SkPoint_Reference#Point">Point</a> <a href="#SkPath_moveTo_2_p">p</a>.
### Parameters
@@ -2017,7 +2016,7 @@ contour start</td>
<a name="SkPath_rMoveTo"></a>
## rMoveTo
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void rMoveTo(SkScalar dx, SkScalar dy)
</pre>
@@ -2048,7 +2047,7 @@ Function name stands for "relative move to".
<a name="SkPath_lineTo"></a>
## lineTo
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void lineTo(SkScalar x, SkScalar y)
</pre>
@@ -2077,20 +2076,20 @@ end of added <a href="undocumented#Line">Line</a> in <a href="#SkPath_lineTo_y">
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void lineTo(const SkPoint& p)
</pre>
-Adds <a href="undocumented#Line">Line</a> from <a href="#Last_Point">Last Point</a> to <a href="undocumented#Point">Point</a> <a href="#SkPath_lineTo_2_p">p</a>. If <a href="#Path">Path</a> is empty, or last <a href="#SkPath_Verb">Verb</a> is
+Adds <a href="undocumented#Line">Line</a> from <a href="#Last_Point">Last Point</a> to <a href="SkPoint_Reference#Point">Point</a> <a href="#SkPath_lineTo_2_p">p</a>. If <a href="#Path">Path</a> is empty, or last <a href="#SkPath_Verb">Verb</a> is
<a href="#SkPath_kClose_Verb">kClose Verb</a>, <a href="#Last_Point">Last Point</a> is set to (0, 0) before adding <a href="undocumented#Line">Line</a>.
<a href="#SkPath_lineTo">lineTo</a> first appends <a href="#SkPath_kMove_Verb">kMove Verb</a> to <a href="#Verb_Array">Verb Array</a> and (0, 0) to <a href="#Point_Array">Point Array</a>, if needed.
-<a href="#SkPath_lineTo">lineTo</a> then appends <a href="#SkPath_kLine_Verb">kLine Verb</a> to <a href="#Verb_Array">Verb Array</a> and <a href="undocumented#Point">Point</a> <a href="#SkPath_lineTo_2_p">p</a> to <a href="#Point_Array">Point Array</a>.
+<a href="#SkPath_lineTo">lineTo</a> then appends <a href="#SkPath_kLine_Verb">kLine Verb</a> to <a href="#Verb_Array">Verb Array</a> and <a href="SkPoint_Reference#Point">Point</a> <a href="#SkPath_lineTo_2_p">p</a> to <a href="#Point_Array">Point Array</a>.
### Parameters
<table> <tr> <td><a name="SkPath_lineTo_2_p"> <code><strong>p </strong></code> </a></td> <td>
-end <a href="undocumented#Point">Point</a> of added <a href="undocumented#Line">Line</a></td>
+end <a href="SkPoint_Reference#Point">Point</a> of added <a href="undocumented#Line">Line</a></td>
</tr>
</table>
@@ -2107,16 +2106,16 @@ end <a href="undocumented#Point">Point</a> of added <a href="undocumented#Line">
<a name="SkPath_rLineTo"></a>
## rLineTo
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void rLineTo(SkScalar dx, SkScalar dy)
</pre>
-Adds <a href="undocumented#Line">Line</a> from <a href="#Last_Point">Last Point</a> to <a href="undocumented#Vector">Vector</a> (<a href="#SkPath_rLineTo_dx">dx</a>, <a href="#SkPath_rLineTo_dy">dy</a>). If <a href="#Path">Path</a> is empty, or last <a href="#SkPath_Verb">Verb</a> is
+Adds <a href="undocumented#Line">Line</a> from <a href="#Last_Point">Last Point</a> to <a href="SkPoint_Reference#Vector">Vector</a> (<a href="#SkPath_rLineTo_dx">dx</a>, <a href="#SkPath_rLineTo_dy">dy</a>). If <a href="#Path">Path</a> is empty, or last <a href="#SkPath_Verb">Verb</a> is
<a href="#SkPath_kClose_Verb">kClose Verb</a>, <a href="#Last_Point">Last Point</a> is set to (0, 0) before adding <a href="undocumented#Line">Line</a>.
Appends <a href="#SkPath_kMove_Verb">kMove Verb</a> to <a href="#Verb_Array">Verb Array</a> and (0, 0) to <a href="#Point_Array">Point Array</a>, if needed;
then appends <a href="#SkPath_kLine_Verb">kLine Verb</a> to <a href="#Verb_Array">Verb Array</a> and <a href="undocumented#Line">Line</a> end to <a href="#Point_Array">Point Array</a>.
-<a href="undocumented#Line">Line</a> end is <a href="#Last_Point">Last Point</a> plus <a href="undocumented#Vector">Vector</a> (<a href="#SkPath_rLineTo_dx">dx</a>, <a href="#SkPath_rLineTo_dy">dy</a>).
+<a href="undocumented#Line">Line</a> end is <a href="#Last_Point">Last Point</a> plus <a href="SkPoint_Reference#Vector">Vector</a> (<a href="#SkPath_rLineTo_dx">dx</a>, <a href="#SkPath_rLineTo_dy">dy</a>).
Function name stands for "relative line to".
### Parameters
@@ -2139,9 +2138,9 @@ Function name stands for "relative line to".
---
# <a name="Quad"></a> Quad
-<a href="#Quad">Quad</a> describes a quadratic <a href="undocumented#Bezier">Bezier</a>, a second-order curve identical to a section
-of a parabola. <a href="#Quad">Quad</a> begins at a start <a href="undocumented#Point">Point</a>, curves towards a control <a href="undocumented#Point">Point</a>,
-and then curves to an end <a href="undocumented#Point">Point</a>.
+<a href="#Quad">Quad</a> describes a quadratic Bezier, a second-order curve identical to a section
+of a parabola. <a href="#Quad">Quad</a> begins at a start <a href="SkPoint_Reference#Point">Point</a>, curves towards a control <a href="SkPoint_Reference#Point">Point</a>,
+and then curves to an end <a href="SkPoint_Reference#Point">Point</a>.
### Example
@@ -2150,8 +2149,8 @@ and then curves to an end <a href="undocumented#Point">Point</a>.
<a href="#Quad">Quad</a> is a special case of <a href="#Conic">Conic</a> where <a href="#Conic_Weight">Conic Weight</a> is set to one.
<a href="#Quad">Quad</a> is always contained by the triangle connecting its three <a href="#Point">Points</a>. <a href="#Quad">Quad</a>
-begins tangent to the line between start <a href="undocumented#Point">Point</a> and control <a href="undocumented#Point">Point</a>, and ends
-tangent to the line between control <a href="undocumented#Point">Point</a> and end <a href="undocumented#Point">Point</a>.
+begins tangent to the line between start <a href="SkPoint_Reference#Point">Point</a> and control <a href="SkPoint_Reference#Point">Point</a>, and ends
+tangent to the line between control <a href="SkPoint_Reference#Point">Point</a> and end <a href="SkPoint_Reference#Point">Point</a>.
### Example
@@ -2160,7 +2159,7 @@ tangent to the line between control <a href="undocumented#Point">Point</a> and e
<a name="SkPath_quadTo"></a>
## quadTo
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void quadTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2)
</pre>
@@ -2175,13 +2174,13 @@ to <a href="#Point_Array">Point Array</a>.
### Parameters
<table> <tr> <td><a name="SkPath_quadTo_x1"> <code><strong>x1 </strong></code> </a></td> <td>
-control <a href="undocumented#Point">Point</a> of <a href="#Quad">Quad</a> in x</td>
+control <a href="SkPoint_Reference#Point">Point</a> of <a href="#Quad">Quad</a> in x</td>
</tr> <tr> <td><a name="SkPath_quadTo_y1"> <code><strong>y1 </strong></code> </a></td> <td>
-control <a href="undocumented#Point">Point</a> of <a href="#Quad">Quad</a> in y</td>
+control <a href="SkPoint_Reference#Point">Point</a> of <a href="#Quad">Quad</a> in y</td>
</tr> <tr> <td><a name="SkPath_quadTo_x2"> <code><strong>x2 </strong></code> </a></td> <td>
-end <a href="undocumented#Point">Point</a> of <a href="#Quad">Quad</a> in x</td>
+end <a href="SkPoint_Reference#Point">Point</a> of <a href="#Quad">Quad</a> in x</td>
</tr> <tr> <td><a name="SkPath_quadTo_y2"> <code><strong>y2 </strong></code> </a></td> <td>
-end <a href="undocumented#Point">Point</a> of <a href="#Quad">Quad</a> in y</td>
+end <a href="SkPoint_Reference#Point">Point</a> of <a href="#Quad">Quad</a> in y</td>
</tr>
</table>
@@ -2195,11 +2194,11 @@ end <a href="undocumented#Point">Point</a> of <a href="#Quad">Quad</a> in y</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void quadTo(const SkPoint& p1, const SkPoint& p2)
</pre>
-Adds <a href="#Quad">Quad</a> from <a href="#Last_Point">Last Point</a> towards <a href="undocumented#Point">Point</a> <a href="#SkPath_quadTo_2_p1">p1</a>, to <a href="undocumented#Point">Point</a> <a href="#SkPath_quadTo_2_p2">p2</a>.
+Adds <a href="#Quad">Quad</a> from <a href="#Last_Point">Last Point</a> towards <a href="SkPoint_Reference#Point">Point</a> <a href="#SkPath_quadTo_2_p1">p1</a>, to <a href="SkPoint_Reference#Point">Point</a> <a href="#SkPath_quadTo_2_p2">p2</a>.
If <a href="#Path">Path</a> is empty, or last <a href="#SkPath_Verb">Verb</a> is <a href="#SkPath_kClose_Verb">kClose Verb</a>, <a href="#Last_Point">Last Point</a> is set to (0, 0)
before adding <a href="#Quad">Quad</a>.
@@ -2210,9 +2209,9 @@ to <a href="#Point_Array">Point Array</a>.
### Parameters
<table> <tr> <td><a name="SkPath_quadTo_2_p1"> <code><strong>p1 </strong></code> </a></td> <td>
-control <a href="undocumented#Point">Point</a> of added <a href="#Quad">Quad</a></td>
+control <a href="SkPoint_Reference#Point">Point</a> of added <a href="#Quad">Quad</a></td>
</tr> <tr> <td><a name="SkPath_quadTo_2_p2"> <code><strong>p2 </strong></code> </a></td> <td>
-end <a href="undocumented#Point">Point</a> of added <a href="#Quad">Quad</a></td>
+end <a href="SkPoint_Reference#Point">Point</a> of added <a href="#Quad">Quad</a></td>
</tr>
</table>
@@ -2229,19 +2228,19 @@ end <a href="undocumented#Point">Point</a> of added <a href="#Quad">Quad</a></td
<a name="SkPath_rQuadTo"></a>
## rQuadTo
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void rQuadTo(SkScalar dx1, SkScalar dy1, SkScalar dx2, SkScalar dy2)
</pre>
-Adds <a href="#Quad">Quad</a> from <a href="#Last_Point">Last Point</a> towards <a href="undocumented#Vector">Vector</a> (<a href="#SkPath_rQuadTo_dx1">dx1</a>, <a href="#SkPath_rQuadTo_dy1">dy1</a>), to <a href="undocumented#Vector">Vector</a> (<a href="#SkPath_rQuadTo_dx2">dx2</a>, <a href="#SkPath_rQuadTo_dy2">dy2</a>).
+Adds <a href="#Quad">Quad</a> from <a href="#Last_Point">Last Point</a> towards <a href="SkPoint_Reference#Vector">Vector</a> (<a href="#SkPath_rQuadTo_dx1">dx1</a>, <a href="#SkPath_rQuadTo_dy1">dy1</a>), to <a href="SkPoint_Reference#Vector">Vector</a> (<a href="#SkPath_rQuadTo_dx2">dx2</a>, <a href="#SkPath_rQuadTo_dy2">dy2</a>).
If <a href="#Path">Path</a> is empty, or last <a href="#SkPath_Verb">Verb</a>
is <a href="#SkPath_kClose_Verb">kClose Verb</a>, <a href="#Last_Point">Last Point</a> is set to (0, 0) before adding <a href="#Quad">Quad</a>.
Appends <a href="#SkPath_kMove_Verb">kMove Verb</a> to <a href="#Verb_Array">Verb Array</a> and (0, 0) to <a href="#Point_Array">Point Array</a>,
if needed; then appends <a href="#SkPath_kQuad_Verb">kQuad Verb</a> to <a href="#Verb_Array">Verb Array</a>; and appends <a href="#Quad">Quad</a>
control and <a href="#Quad">Quad</a> end to <a href="#Point_Array">Point Array</a>.
-<a href="#Quad">Quad</a> control is <a href="#Last_Point">Last Point</a> plus <a href="undocumented#Vector">Vector</a> (<a href="#SkPath_rQuadTo_dx1">dx1</a>, <a href="#SkPath_rQuadTo_dy1">dy1</a>).
-<a href="#Quad">Quad</a> end is <a href="#Last_Point">Last Point</a> plus <a href="undocumented#Vector">Vector</a> (<a href="#SkPath_rQuadTo_dx2">dx2</a>, <a href="#SkPath_rQuadTo_dy2">dy2</a>).
+<a href="#Quad">Quad</a> control is <a href="#Last_Point">Last Point</a> plus <a href="SkPoint_Reference#Vector">Vector</a> (<a href="#SkPath_rQuadTo_dx1">dx1</a>, <a href="#SkPath_rQuadTo_dy1">dy1</a>).
+<a href="#Quad">Quad</a> end is <a href="#Last_Point">Last Point</a> plus <a href="SkPoint_Reference#Vector">Vector</a> (<a href="#SkPath_rQuadTo_dx2">dx2</a>, <a href="#SkPath_rQuadTo_dy2">dy2</a>).
Function name stands for "relative quad to".
### Parameters
@@ -2269,16 +2268,16 @@ Function name stands for "relative quad to".
# <a name="Conic"></a> Conic
<a href="#Conic">Conic</a> describes a conical section: a piece of an ellipse, or a piece of a
-parabola, or a piece of a hyperbola. <a href="#Conic">Conic</a> begins at a start <a href="undocumented#Point">Point</a>,
-curves towards a control <a href="undocumented#Point">Point</a>, and then curves to an end <a href="undocumented#Point">Point</a>. The influence
-of the control <a href="undocumented#Point">Point</a> is determined by <a href="#Conic_Weight">Conic Weight</a>.
+parabola, or a piece of a hyperbola. <a href="#Conic">Conic</a> begins at a start <a href="SkPoint_Reference#Point">Point</a>,
+curves towards a control <a href="SkPoint_Reference#Point">Point</a>, and then curves to an end <a href="SkPoint_Reference#Point">Point</a>. The influence
+of the control <a href="SkPoint_Reference#Point">Point</a> is determined by <a href="#Conic_Weight">Conic Weight</a>.
Each <a href="#Conic">Conic</a> in <a href="#Path">Path</a> adds two <a href="#Point">Points</a> and one <a href="#Conic_Weight">Conic Weight</a>. <a href="#Weight">Conic Weights</a> in <a href="#Path">Path</a>
may be inspected with <a href="#SkPath_Iter">Iter</a>, or with <a href="#SkPath_RawIter">RawIter</a>.
## <a name="Weight"></a> Weight
-<a href="#Conic_Weight">Weight</a> determines both the strength of the control <a href="undocumented#Point">Point</a> and the type of <a href="#Conic">Conic</a>.
+<a href="#Conic_Weight">Weight</a> determines both the strength of the control <a href="SkPoint_Reference#Point">Point</a> and the type of <a href="#Conic">Conic</a>.
If <a href="#Conic_Weight">Weight</a> is exactly one, then <a href="#Conic">Conic</a> is identical to <a href="#Quad">Quad</a>; it is always a
parabolic segment.
@@ -2314,7 +2313,7 @@ done
If weight is greater than one, <a href="#Conic">Conic</a> is a hyperbolic segment. As weight gets large,
a hyperbolic segment can be approximated by straight lines connecting the
-control <a href="undocumented#Point">Point</a> with the end <a href="#Point">Points</a>.
+control <a href="SkPoint_Reference#Point">Point</a> with the end <a href="#Point">Points</a>.
### Example
@@ -2334,7 +2333,7 @@ done
<a name="SkPath_conicTo"></a>
## conicTo
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void conicTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar w)
</pre>
@@ -2356,13 +2355,13 @@ If <a href="#SkPath_conicTo_w">w</a> is not finite, appends <a href="#SkPath_kLi
### Parameters
<table> <tr> <td><a name="SkPath_conicTo_x1"> <code><strong>x1 </strong></code> </a></td> <td>
-control <a href="undocumented#Point">Point</a> of <a href="#Conic">Conic</a> in x</td>
+control <a href="SkPoint_Reference#Point">Point</a> of <a href="#Conic">Conic</a> in x</td>
</tr> <tr> <td><a name="SkPath_conicTo_y1"> <code><strong>y1 </strong></code> </a></td> <td>
-control <a href="undocumented#Point">Point</a> of <a href="#Conic">Conic</a> in y</td>
+control <a href="SkPoint_Reference#Point">Point</a> of <a href="#Conic">Conic</a> in y</td>
</tr> <tr> <td><a name="SkPath_conicTo_x2"> <code><strong>x2 </strong></code> </a></td> <td>
-end <a href="undocumented#Point">Point</a> of <a href="#Conic">Conic</a> in x</td>
+end <a href="SkPoint_Reference#Point">Point</a> of <a href="#Conic">Conic</a> in x</td>
</tr> <tr> <td><a name="SkPath_conicTo_y2"> <code><strong>y2 </strong></code> </a></td> <td>
-end <a href="undocumented#Point">Point</a> of <a href="#Conic">Conic</a> in y</td>
+end <a href="SkPoint_Reference#Point">Point</a> of <a href="#Conic">Conic</a> in y</td>
</tr> <tr> <td><a name="SkPath_conicTo_w"> <code><strong>w </strong></code> </a></td> <td>
weight of added <a href="#Conic">Conic</a></td>
</tr>
@@ -2380,11 +2379,11 @@ top curve is hyperbolic.</div></fiddle-embed></div>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void conicTo(const SkPoint& p1, const SkPoint& p2, SkScalar w)
</pre>
-Adds <a href="#Conic">Conic</a> from <a href="#Last_Point">Last Point</a> towards <a href="undocumented#Point">Point</a> <a href="#SkPath_conicTo_2_p1">p1</a>, to <a href="undocumented#Point">Point</a> <a href="#SkPath_conicTo_2_p2">p2</a>, weighted by <a href="#SkPath_conicTo_2_w">w</a>.
+Adds <a href="#Conic">Conic</a> from <a href="#Last_Point">Last Point</a> towards <a href="SkPoint_Reference#Point">Point</a> <a href="#SkPath_conicTo_2_p1">p1</a>, to <a href="SkPoint_Reference#Point">Point</a> <a href="#SkPath_conicTo_2_p2">p2</a>, weighted by <a href="#SkPath_conicTo_2_w">w</a>.
If <a href="#Path">Path</a> is empty, or last <a href="#SkPath_Verb">Verb</a> is <a href="#SkPath_kClose_Verb">kClose Verb</a>, <a href="#Last_Point">Last Point</a> is set to (0, 0)
before adding <a href="#Conic">Conic</a>.
@@ -2402,9 +2401,9 @@ If <a href="#SkPath_conicTo_2_w">w</a> is not finite, appends <a href="#SkPath_k
### Parameters
<table> <tr> <td><a name="SkPath_conicTo_2_p1"> <code><strong>p1 </strong></code> </a></td> <td>
-control <a href="undocumented#Point">Point</a> of added <a href="#Conic">Conic</a></td>
+control <a href="SkPoint_Reference#Point">Point</a> of added <a href="#Conic">Conic</a></td>
</tr> <tr> <td><a name="SkPath_conicTo_2_p2"> <code><strong>p2 </strong></code> </a></td> <td>
-end <a href="undocumented#Point">Point</a> of added <a href="#Conic">Conic</a></td>
+end <a href="SkPoint_Reference#Point">Point</a> of added <a href="#Conic">Conic</a></td>
</tr> <tr> <td><a name="SkPath_conicTo_2_w"> <code><strong>w </strong></code> </a></td> <td>
weight of added <a href="#Conic">Conic</a></td>
</tr>
@@ -2424,11 +2423,11 @@ the <a href="#Conic_Weight">Conic Weight</a> also increases, but remains smaller
<a name="SkPath_rConicTo"></a>
## rConicTo
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void rConicTo(SkScalar dx1, SkScalar dy1, SkScalar dx2, SkScalar dy2, SkScalar w)
</pre>
-Adds <a href="#Conic">Conic</a> from <a href="#Last_Point">Last Point</a> towards <a href="undocumented#Vector">Vector</a> (<a href="#SkPath_rConicTo_dx1">dx1</a>, <a href="#SkPath_rConicTo_dy1">dy1</a>), to <a href="undocumented#Vector">Vector</a> (<a href="#SkPath_rConicTo_dx2">dx2</a>, <a href="#SkPath_rConicTo_dy2">dy2</a>),
+Adds <a href="#Conic">Conic</a> from <a href="#Last_Point">Last Point</a> towards <a href="SkPoint_Reference#Vector">Vector</a> (<a href="#SkPath_rConicTo_dx1">dx1</a>, <a href="#SkPath_rConicTo_dy1">dy1</a>), to <a href="SkPoint_Reference#Vector">Vector</a> (<a href="#SkPath_rConicTo_dx2">dx2</a>, <a href="#SkPath_rConicTo_dy2">dy2</a>),
weighted by <a href="#SkPath_rConicTo_w">w</a>. If <a href="#Path">Path</a> is empty, or last <a href="#SkPath_Verb">Verb</a>
is <a href="#SkPath_kClose_Verb">kClose Verb</a>, <a href="#Last_Point">Last Point</a> is set to (0, 0) before adding <a href="#Conic">Conic</a>.
@@ -2440,8 +2439,8 @@ and <a href="#SkPath_rConicTo_w">w</a> is recorded as <a href="#Conic_Weight">Co
twice to <a href="#Verb_Array">Verb Array</a>.
In all cases appends <a href="#Point">Points</a> control and end to <a href="#Point_Array">Point Array</a>.
-control is <a href="#Last_Point">Last Point</a> plus <a href="undocumented#Vector">Vector</a> (<a href="#SkPath_rConicTo_dx1">dx1</a>, <a href="#SkPath_rConicTo_dy1">dy1</a>).
-end is <a href="#Last_Point">Last Point</a> plus <a href="undocumented#Vector">Vector</a> (<a href="#SkPath_rConicTo_dx2">dx2</a>, <a href="#SkPath_rConicTo_dy2">dy2</a>).
+control is <a href="#Last_Point">Last Point</a> plus <a href="SkPoint_Reference#Vector">Vector</a> (<a href="#SkPath_rConicTo_dx1">dx1</a>, <a href="#SkPath_rConicTo_dy1">dy1</a>).
+end is <a href="#Last_Point">Last Point</a> plus <a href="SkPoint_Reference#Vector">Vector</a> (<a href="#SkPath_rConicTo_dx2">dx2</a>, <a href="#SkPath_rConicTo_dy2">dy2</a>).
Function name stands for "relative conic to".
@@ -2471,9 +2470,9 @@ weight of added <a href="#Conic">Conic</a></td>
---
# <a name="Cubic"></a> Cubic
-<a href="#Cubic">Cubic</a> describes a <a href="undocumented#Bezier">Bezier</a> curve segment described by a third-order polynomial.
-<a href="#Cubic">Cubic</a> begins at a start <a href="undocumented#Point">Point</a>, curving towards the first control <a href="undocumented#Point">Point</a>;
-and curves from the end <a href="undocumented#Point">Point</a> towards the second control <a href="undocumented#Point">Point</a>.
+<a href="#Cubic">Cubic</a> describes a <a href="undocumented#Bezier_Curve">Bezier Curve</a> segment described by a third-order polynomial.
+<a href="#Cubic">Cubic</a> begins at a start <a href="SkPoint_Reference#Point">Point</a>, curving towards the first control <a href="SkPoint_Reference#Point">Point</a>;
+and curves from the end <a href="SkPoint_Reference#Point">Point</a> towards the second control <a href="SkPoint_Reference#Point">Point</a>.
### Example
@@ -2482,9 +2481,8 @@ and curves from the end <a href="undocumented#Point">Point</a> towards the secon
<a name="SkPath_cubicTo"></a>
## cubicTo
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void cubicTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar x3,
- SkScalar y3)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void cubicTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar x3, SkScalar y3)
</pre>
Adds <a href="#Cubic">Cubic</a> from <a href="#Last_Point">Last Point</a> towards (<a href="#SkPath_cubicTo_x1">x1</a>, <a href="#SkPath_cubicTo_y1">y1</a>), then towards (<a href="#SkPath_cubicTo_x2">x2</a>, <a href="#SkPath_cubicTo_y2">y2</a>), ending at
@@ -2498,17 +2496,17 @@ to <a href="#Point_Array">Point Array</a>.
### Parameters
<table> <tr> <td><a name="SkPath_cubicTo_x1"> <code><strong>x1 </strong></code> </a></td> <td>
-first control <a href="undocumented#Point">Point</a> of <a href="#Cubic">Cubic</a> in x</td>
+first control <a href="SkPoint_Reference#Point">Point</a> of <a href="#Cubic">Cubic</a> in x</td>
</tr> <tr> <td><a name="SkPath_cubicTo_y1"> <code><strong>y1 </strong></code> </a></td> <td>
-first control <a href="undocumented#Point">Point</a> of <a href="#Cubic">Cubic</a> in y</td>
+first control <a href="SkPoint_Reference#Point">Point</a> of <a href="#Cubic">Cubic</a> in y</td>
</tr> <tr> <td><a name="SkPath_cubicTo_x2"> <code><strong>x2 </strong></code> </a></td> <td>
-second control <a href="undocumented#Point">Point</a> of <a href="#Cubic">Cubic</a> in x</td>
+second control <a href="SkPoint_Reference#Point">Point</a> of <a href="#Cubic">Cubic</a> in x</td>
</tr> <tr> <td><a name="SkPath_cubicTo_y2"> <code><strong>y2 </strong></code> </a></td> <td>
-second control <a href="undocumented#Point">Point</a> of <a href="#Cubic">Cubic</a> in y</td>
+second control <a href="SkPoint_Reference#Point">Point</a> of <a href="#Cubic">Cubic</a> in y</td>
</tr> <tr> <td><a name="SkPath_cubicTo_x3"> <code><strong>x3 </strong></code> </a></td> <td>
-end <a href="undocumented#Point">Point</a> of <a href="#Cubic">Cubic</a> in x</td>
+end <a href="SkPoint_Reference#Point">Point</a> of <a href="#Cubic">Cubic</a> in x</td>
</tr> <tr> <td><a name="SkPath_cubicTo_y3"> <code><strong>y3 </strong></code> </a></td> <td>
-end <a href="undocumented#Point">Point</a> of <a href="#Cubic">Cubic</a> in y</td>
+end <a href="SkPoint_Reference#Point">Point</a> of <a href="#Cubic">Cubic</a> in y</td>
</tr>
</table>
@@ -2522,12 +2520,12 @@ end <a href="undocumented#Point">Point</a> of <a href="#Cubic">Cubic</a> in y</t
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void cubicTo(const SkPoint& p1, const SkPoint& p2, const SkPoint& p3)
</pre>
-Adds <a href="#Cubic">Cubic</a> from <a href="#Last_Point">Last Point</a> towards <a href="undocumented#Point">Point</a> <a href="#SkPath_cubicTo_2_p1">p1</a>, then towards <a href="undocumented#Point">Point</a> <a href="#SkPath_cubicTo_2_p2">p2</a>, ending at
-<a href="undocumented#Point">Point</a> <a href="#SkPath_cubicTo_2_p3">p3</a>. If <a href="#Path">Path</a> is empty, or last <a href="#SkPath_Verb">Verb</a> is <a href="#SkPath_kClose_Verb">kClose Verb</a>, <a href="#Last_Point">Last Point</a> is set to
+Adds <a href="#Cubic">Cubic</a> from <a href="#Last_Point">Last Point</a> towards <a href="SkPoint_Reference#Point">Point</a> <a href="#SkPath_cubicTo_2_p1">p1</a>, then towards <a href="SkPoint_Reference#Point">Point</a> <a href="#SkPath_cubicTo_2_p2">p2</a>, ending at
+<a href="SkPoint_Reference#Point">Point</a> <a href="#SkPath_cubicTo_2_p3">p3</a>. If <a href="#Path">Path</a> is empty, or last <a href="#SkPath_Verb">Verb</a> is <a href="#SkPath_kClose_Verb">kClose Verb</a>, <a href="#Last_Point">Last Point</a> is set to
(0, 0) before adding <a href="#Cubic">Cubic</a>.
Appends <a href="#SkPath_kMove_Verb">kMove Verb</a> to <a href="#Verb_Array">Verb Array</a> and (0, 0) to <a href="#Point_Array">Point Array</a>, if needed;
@@ -2537,11 +2535,11 @@ to <a href="#Point_Array">Point Array</a>.
### Parameters
<table> <tr> <td><a name="SkPath_cubicTo_2_p1"> <code><strong>p1 </strong></code> </a></td> <td>
-first control <a href="undocumented#Point">Point</a> of <a href="#Cubic">Cubic</a></td>
+first control <a href="SkPoint_Reference#Point">Point</a> of <a href="#Cubic">Cubic</a></td>
</tr> <tr> <td><a name="SkPath_cubicTo_2_p2"> <code><strong>p2 </strong></code> </a></td> <td>
-second control <a href="undocumented#Point">Point</a> of <a href="#Cubic">Cubic</a></td>
+second control <a href="SkPoint_Reference#Point">Point</a> of <a href="#Cubic">Cubic</a></td>
</tr> <tr> <td><a name="SkPath_cubicTo_2_p3"> <code><strong>p3 </strong></code> </a></td> <td>
-end <a href="undocumented#Point">Point</a> of <a href="#Cubic">Cubic</a></td>
+end <a href="SkPoint_Reference#Point">Point</a> of <a href="#Cubic">Cubic</a></td>
</tr>
</table>
@@ -2558,21 +2556,20 @@ end <a href="undocumented#Point">Point</a> of <a href="#Cubic">Cubic</a></td>
<a name="SkPath_rCubicTo"></a>
## rCubicTo
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void rCubicTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar x3,
- SkScalar y3)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void rCubicTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar x3, SkScalar y3)
</pre>
-Adds <a href="#Cubic">Cubic</a> from <a href="#Last_Point">Last Point</a> towards <a href="undocumented#Vector">Vector</a> (dx1, dy1), then towards
-<a href="undocumented#Vector">Vector</a> (dx2, dy2), to <a href="undocumented#Vector">Vector</a> (dx3, dy3).
+Adds <a href="#Cubic">Cubic</a> from <a href="#Last_Point">Last Point</a> towards <a href="SkPoint_Reference#Vector">Vector</a> (dx1, dy1), then towards
+<a href="SkPoint_Reference#Vector">Vector</a> (dx2, dy2), to <a href="SkPoint_Reference#Vector">Vector</a> (dx3, dy3).
If <a href="#Path">Path</a> is empty, or last <a href="#SkPath_Verb">Verb</a>
is <a href="#SkPath_kClose_Verb">kClose Verb</a>, <a href="#Last_Point">Last Point</a> is set to (0, 0) before adding <a href="#Cubic">Cubic</a>.
Appends <a href="#SkPath_kMove_Verb">kMove Verb</a> to <a href="#Verb_Array">Verb Array</a> and (0, 0) to <a href="#Point_Array">Point Array</a>,
if needed; then appends <a href="#SkPath_kCubic_Verb">kCubic Verb</a> to <a href="#Verb_Array">Verb Array</a>; and appends <a href="#Cubic">Cubic</a>
control and <a href="#Cubic">Cubic</a> end to <a href="#Point_Array">Point Array</a>.
-<a href="#Cubic">Cubic</a> control is <a href="#Last_Point">Last Point</a> plus <a href="undocumented#Vector">Vector</a> (dx1, dy1).
-<a href="#Cubic">Cubic</a> end is <a href="#Last_Point">Last Point</a> plus <a href="undocumented#Vector">Vector</a> (dx2, dy2).
+<a href="#Cubic">Cubic</a> control is <a href="#Last_Point">Last Point</a> plus <a href="SkPoint_Reference#Vector">Vector</a> (dx1, dy1).
+<a href="#Cubic">Cubic</a> end is <a href="#Last_Point">Last Point</a> plus <a href="SkPoint_Reference#Vector">Vector</a> (dx2, dy2).
Function name stands for "relative cubic to".
### Parameters
@@ -2618,13 +2615,13 @@ requiring <a href="#Path">Path</a>.
<a href="#SkPath_arcTo_2">arcTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar radius)</a>
describes <a href="#Arc">Arc</a> as tangent to the line (x0, y0), (x1, y1) and tangent to the line (x1, y1), (x2, y2)
-where (x0, y0) is the last <a href="undocumented#Point">Point</a> added to <a href="#Path">Path</a>. This construction is similar to <a href="undocumented#PostScript">PostScript</a> and
+where (x0, y0) is the last <a href="SkPoint_Reference#Point">Point</a> added to <a href="#Path">Path</a>. This construction is similar to <a href="undocumented#PostScript">PostScript</a> and
<a href="undocumented#HTML_Canvas">HTML Canvas</a> arcs.
<a href="#SkPath_arcTo_4">arcTo(SkScalar rx, SkScalar ry, SkScalar xAxisRotate, ArcSize largeArc, Direction sweep,
SkScalar x, SkScalar y)</a>
describes <a href="#Arc">Arc</a> as part of <a href="undocumented#Oval">Oval</a> with radii (rx, ry), beginning at
-last <a href="undocumented#Point">Point</a> added to <a href="#Path">Path</a> and ending at (x, y). More than one <a href="#Arc">Arc</a> satisfies this criteria,
+last <a href="SkPoint_Reference#Point">Point</a> added to <a href="#Path">Path</a> and ending at (x, y). More than one <a href="#Arc">Arc</a> satisfies this criteria,
so additional values choose a single solution. This construction is similar to <a href="undocumented#SVG">SVG</a> arcs.
<a href="#SkPath_conicTo">conicTo</a> describes <a href="#Arc">Arc</a> of less than 180 degrees as a pair of tangent lines and <a href="#Conic_Weight">Conic Weight</a>.
@@ -2652,15 +2649,14 @@ Direction sweep, SkScalar x, SkScalar y)</a></td> </tr>
2 is similar to 1, but does not require building a path to draw.
3 is similar to 1, but always begins new <a href="#Contour">Contour</a>.
4 describes an arc from a pair of tangent lines and a radius.
-5 describes an arc from <a href="undocumented#Oval">Oval</a> center, arc start <a href="undocumented#Point">Point</a> and arc end <a href="undocumented#Point">Point</a>.
+5 describes an arc from <a href="undocumented#Oval">Oval</a> center, arc start <a href="SkPoint_Reference#Point">Point</a> and arc end <a href="SkPoint_Reference#Point">Point</a>.
6 describes an arc from a pair of tangent lines and a <a href="#Conic_Weight">Conic Weight</a>.</div></fiddle-embed></div>
<a name="SkPath_arcTo"></a>
## arcTo
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void arcTo(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle,
- bool forceMoveTo)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void arcTo(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool forceMoveTo)
</pre>
Append <a href="#Arc">Arc</a> to <a href="#Path">Path</a>. <a href="#Arc">Arc</a> added is part of ellipse
@@ -2668,7 +2664,7 @@ bounded by <a href="#SkPath_arcTo_oval">oval</a>, from <a href="#SkPath_arcTo_st
<a href="#SkPath_arcTo_sweepAngle">sweepAngle</a> are measured in degrees, where zero degrees is aligned with the
positive x-axis, and positive sweeps extends <a href="#Arc">Arc</a> clockwise.
-<a href="#SkPath_arcTo">arcTo</a> adds <a href="undocumented#Line">Line</a> connecting <a href="#Path">Path</a> last <a href="undocumented#Point">Point</a> to initial <a href="#Arc">Arc</a> <a href="undocumented#Point">Point</a> if <a href="#SkPath_arcTo_forceMoveTo">forceMoveTo</a>
+<a href="#SkPath_arcTo">arcTo</a> adds <a href="undocumented#Line">Line</a> connecting <a href="#Path">Path</a> last <a href="SkPoint_Reference#Point">Point</a> to initial <a href="#Arc">Arc</a> <a href="SkPoint_Reference#Point">Point</a> if <a href="#SkPath_arcTo_forceMoveTo">forceMoveTo</a>
is false and <a href="#Path">Path</a> is not empty. Otherwise, added <a href="#Contour">Contour</a> begins with first point
of <a href="#Arc">Arc</a>. Angles greater than -360 and less than 360 are treated modulo 360.
@@ -2696,7 +2692,7 @@ is not empty.</div></fiddle-embed></div>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void arcTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar radius)
</pre>
@@ -2709,15 +2705,15 @@ is part of <a href="undocumented#Circle">Circle</a> sized to <a href="#SkPath_ar
<div><fiddle-embed name="d9c6435f26f37b3d63c664a99028f77f"></fiddle-embed></div>
-If last <a href="#Path">Path</a> <a href="undocumented#Point">Point</a> does not start <a href="#Arc">Arc</a>, <a href="#SkPath_arcTo">arcTo</a> appends connecting <a href="undocumented#Line">Line</a> to <a href="#Path">Path</a>.
-The length of <a href="undocumented#Vector">Vector</a> from (<a href="#SkPath_arcTo_2_x1">x1</a>, <a href="#SkPath_arcTo_2_y1">y1</a>) to (<a href="#SkPath_arcTo_2_x2">x2</a>, <a href="#SkPath_arcTo_2_y2">y2</a>) does not affect <a href="#Arc">Arc</a>.
+If last <a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a> does not start <a href="#Arc">Arc</a>, <a href="#SkPath_arcTo">arcTo</a> appends connecting <a href="undocumented#Line">Line</a> to <a href="#Path">Path</a>.
+The length of <a href="SkPoint_Reference#Vector">Vector</a> from (<a href="#SkPath_arcTo_2_x1">x1</a>, <a href="#SkPath_arcTo_2_y1">y1</a>) to (<a href="#SkPath_arcTo_2_x2">x2</a>, <a href="#SkPath_arcTo_2_y2">y2</a>) does not affect <a href="#Arc">Arc</a>.
### Example
<div><fiddle-embed name="01d2ddfd539ab86a86989e210640dffc"></fiddle-embed></div>
<a href="#Arc">Arc</a> sweep is always less than 180 degrees. If <a href="#SkPath_arcTo_2_radius">radius</a> is zero, or if
-tangents are nearly parallel, <a href="#SkPath_arcTo">arcTo</a> appends <a href="undocumented#Line">Line</a> from last <a href="#Path">Path</a> <a href="undocumented#Point">Point</a> to (<a href="#SkPath_arcTo_2_x1">x1</a>, <a href="#SkPath_arcTo_2_y1">y1</a>).
+tangents are nearly parallel, <a href="#SkPath_arcTo">arcTo</a> appends <a href="undocumented#Line">Line</a> from last <a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a> to (<a href="#SkPath_arcTo_2_x1">x1</a>, <a href="#SkPath_arcTo_2_y1">y1</a>).
<a href="#SkPath_arcTo">arcTo</a> appends at most one <a href="undocumented#Line">Line</a> and one <a href="#Conic">Conic</a>.
<a href="#SkPath_arcTo">arcTo</a> implements the functionality of <a href="#Arct">PostScript Arct</a> and <a href="undocumented#HTML_Canvas_ArcTo">HTML Canvas ArcTo</a>.
@@ -2757,7 +2753,7 @@ conic (79.2893,20),(200,20),(114.645,105.355) weight 0.382683
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void arcTo(const SkPoint p1, const SkPoint p2, SkScalar radius)
</pre>
@@ -2766,11 +2762,11 @@ weighted to describe part of <a href="undocumented#Circle">Circle</a>. <a href="
last <a href="#Path">Path</a> point to <a href="#SkPath_arcTo_3_p1">p1</a>, and tangent from <a href="#SkPath_arcTo_3_p1">p1</a> to <a href="#SkPath_arcTo_3_p2">p2</a>. <a href="#Arc">Arc</a>
is part of <a href="undocumented#Circle">Circle</a> sized to <a href="#SkPath_arcTo_3_radius">radius</a>, positioned so it touches both tangent lines.
-If last <a href="#Path">Path</a> <a href="undocumented#Point">Point</a> does not start <a href="#Arc">Arc</a>, <a href="#SkPath_arcTo">arcTo</a> appends connecting <a href="undocumented#Line">Line</a> to <a href="#Path">Path</a>.
-The length of <a href="undocumented#Vector">Vector</a> from <a href="#SkPath_arcTo_3_p1">p1</a> to <a href="#SkPath_arcTo_3_p2">p2</a> does not affect <a href="#Arc">Arc</a>.
+If last <a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a> does not start <a href="#Arc">Arc</a>, <a href="#SkPath_arcTo">arcTo</a> appends connecting <a href="undocumented#Line">Line</a> to <a href="#Path">Path</a>.
+The length of <a href="SkPoint_Reference#Vector">Vector</a> from <a href="#SkPath_arcTo_3_p1">p1</a> to <a href="#SkPath_arcTo_3_p2">p2</a> does not affect <a href="#Arc">Arc</a>.
<a href="#Arc">Arc</a> sweep is always less than 180 degrees. If <a href="#SkPath_arcTo_3_radius">radius</a> is zero, or if
-tangents are nearly parallel, <a href="#SkPath_arcTo">arcTo</a> appends <a href="undocumented#Line">Line</a> from last <a href="#Path">Path</a> <a href="undocumented#Point">Point</a> to <a href="#SkPath_arcTo_3_p1">p1</a>.
+tangents are nearly parallel, <a href="#SkPath_arcTo">arcTo</a> appends <a href="undocumented#Line">Line</a> from last <a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a> to <a href="#SkPath_arcTo_3_p1">p1</a>.
<a href="#SkPath_arcTo">arcTo</a> appends at most one <a href="undocumented#Line">Line</a> and one <a href="#Conic">Conic</a>.
<a href="#SkPath_arcTo">arcTo</a> implements the functionality of <a href="#Arct">PostScript Arct</a> and <a href="undocumented#HTML_Canvas_ArcTo">HTML Canvas ArcTo</a>.
@@ -2778,7 +2774,7 @@ tangents are nearly parallel, <a href="#SkPath_arcTo">arcTo</a> appends <a href=
### Parameters
<table> <tr> <td><a name="SkPath_arcTo_3_p1"> <code><strong>p1 </strong></code> </a></td> <td>
-<a href="undocumented#Point">Point</a> common to pair of tangents</td>
+<a href="SkPoint_Reference#Point">Point</a> common to pair of tangents</td>
</tr> <tr> <td><a name="SkPath_arcTo_3_p2"> <code><strong>p2 </strong></code> </a></td> <td>
end of second tangent</td>
</tr> <tr> <td><a name="SkPath_arcTo_3_radius"> <code><strong>radius </strong></code> </a></td> <td>
@@ -2788,7 +2784,7 @@ distance from <a href="#Arc">Arc</a> to <a href="undocumented#Circle">Circle</a>
### Example
-<div><fiddle-embed name="0c056264a361579c18e5d02d3172d4d4"><div>Because tangent lines are parallel, <a href="#SkPath_arcTo">arcTo</a> appends line from last <a href="#Path">Path</a> <a href="undocumented#Point">Point</a> to
+<div><fiddle-embed name="0c056264a361579c18e5d02d3172d4d4"><div>Because tangent lines are parallel, <a href="#SkPath_arcTo">arcTo</a> appends line from last <a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a> to
<a href="#SkPath_arcTo_3_p1">p1</a>, but does not append a circular <a href="#Conic">Conic</a>.</div>
#### Example Output
@@ -2808,13 +2804,13 @@ line (156,20),(200,20)
## <a name="SkPath_ArcSize"></a> Enum SkPath::ArcSize
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#SkPath_ArcSize">ArcSize</a> {
<a href="#SkPath_kSmall_ArcSize">kSmall ArcSize</a>,
<a href="#SkPath_kLarge_ArcSize">kLarge ArcSize</a>,
};</pre>
-Four <a href="undocumented#Oval">Oval</a> parts with radii (rx, ry) start at last <a href="#Path">Path</a> <a href="undocumented#Point">Point</a> and ends at (x, y).
+Four <a href="undocumented#Oval">Oval</a> parts with radii (rx, ry) start at last <a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a> and ends at (x, y).
<a href="#SkPath_ArcSize">ArcSize</a> and <a href="#SkPath_Direction">Direction</a> select one of the four <a href="undocumented#Oval">Oval</a> parts.
### Constants
@@ -2838,34 +2834,34 @@ and counterclockwise is blue.</div></fiddle-embed></div>
<a href="#SkPath_arcTo">arcTo</a> <a href="#SkPath_Direction">Direction</a>
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void arcTo(SkScalar rx, SkScalar ry, SkScalar xAxisRotate, ArcSize largeArc,
- Direction sweep, SkScalar x, SkScalar y)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void arcTo(SkScalar rx, SkScalar ry, SkScalar xAxisRotate, ArcSize largeArc, Direction sweep,
+ SkScalar x, SkScalar y)
</pre>
Append <a href="#Arc">Arc</a> to <a href="#Path">Path</a>. <a href="#Arc">Arc</a> is implemented by one or more <a href="#Conic">Conics</a> weighted to
describe part of <a href="undocumented#Oval">Oval</a> with radii (<a href="#SkPath_arcTo_4_rx">rx</a>, <a href="#SkPath_arcTo_4_ry">ry</a>) rotated by <a href="#SkPath_arcTo_4_xAxisRotate">xAxisRotate</a> degrees. <a href="#Arc">Arc</a>
-curves from last <a href="#Path">Path</a> <a href="undocumented#Point">Point</a> to (<a href="#SkPath_arcTo_4_x">x</a>, <a href="#SkPath_arcTo_4_y">y</a>), choosing one of four possible routes:
+curves from last <a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a> to (<a href="#SkPath_arcTo_4_x">x</a>, <a href="#SkPath_arcTo_4_y">y</a>), choosing one of four possible routes:
clockwise or counterclockwise, and smaller or larger.
<a href="#Arc">Arc</a> <a href="#SkPath_arcTo_4_sweep">sweep</a> is always less than 360 degrees. <a href="#SkPath_arcTo">arcTo</a> appends <a href="undocumented#Line">Line</a> to (<a href="#SkPath_arcTo_4_x">x</a>, <a href="#SkPath_arcTo_4_y">y</a>) if
-either radii are zero, or if last <a href="#Path">Path</a> <a href="undocumented#Point">Point</a> equals (<a href="#SkPath_arcTo_4_x">x</a>, <a href="#SkPath_arcTo_4_y">y</a>). <a href="#SkPath_arcTo">arcTo</a> scales radii
-(<a href="#SkPath_arcTo_4_rx">rx</a>, <a href="#SkPath_arcTo_4_ry">ry</a>) to fit last <a href="#Path">Path</a> <a href="undocumented#Point">Point</a> and (<a href="#SkPath_arcTo_4_x">x</a>, <a href="#SkPath_arcTo_4_y">y</a>) if both are greater than zero but
+either radii are zero, or if last <a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a> equals (<a href="#SkPath_arcTo_4_x">x</a>, <a href="#SkPath_arcTo_4_y">y</a>). <a href="#SkPath_arcTo">arcTo</a> scales radii
+(<a href="#SkPath_arcTo_4_rx">rx</a>, <a href="#SkPath_arcTo_4_ry">ry</a>) to fit last <a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a> and (<a href="#SkPath_arcTo_4_x">x</a>, <a href="#SkPath_arcTo_4_y">y</a>) if both are greater than zero but
too small.
<a href="#SkPath_arcTo">arcTo</a> appends up to four <a href="#Conic">Conic</a> curves.
-<a href="#SkPath_arcTo">arcTo</a> implements the functionality of <a href="#Arc">SVG Arc</a>, although <a href="undocumented#SVG">SVG</a> "" value
-is opposite the integer value of <a href="#SkPath_arcTo_4_sweep">sweep</a>; <a href="undocumented#SVG">SVG</a> "" uses 1 for clockwise,
+<a href="#SkPath_arcTo">arcTo</a> implements the functionality of <a href="#Arc">SVG Arc</a>, although <a href="undocumented#SVG">SVG</a> "<a href="#SkPath_arcTo_4_sweep">sweep</a>-flag" value
+is opposite the integer value of <a href="#SkPath_arcTo_4_sweep">sweep</a>; <a href="undocumented#SVG">SVG</a> "<a href="#SkPath_arcTo_4_sweep">sweep</a>-flag" uses 1 for clockwise,
while <a href="#SkPath_kCW_Direction">kCW Direction</a> cast to int is zero.
### Parameters
<table> <tr> <td><a name="SkPath_arcTo_4_rx"> <code><strong>rx </strong></code> </a></td> <td>
-radius in <a href="#SkPath_arcTo_4_x">x</a> before x-axis rotation</td>
+radius in <a href="#SkPath_arcTo_4_x">x</a> before <a href="#SkPath_arcTo_4_x">x</a>-axis rotation</td>
</tr> <tr> <td><a name="SkPath_arcTo_4_ry"> <code><strong>ry </strong></code> </a></td> <td>
-radius in <a href="#SkPath_arcTo_4_y">y</a> before x-axis rotation</td>
+radius in <a href="#SkPath_arcTo_4_y">y</a> before <a href="#SkPath_arcTo_4_x">x</a>-axis rotation</td>
</tr> <tr> <td><a name="SkPath_arcTo_4_xAxisRotate"> <code><strong>xAxisRotate </strong></code> </a></td> <td>
-x-axis rotation in degrees; positive values are clockwise</td>
+<a href="#SkPath_arcTo_4_x">x</a>-axis rotation in degrees; positive values are clockwise</td>
</tr> <tr> <td><a name="SkPath_arcTo_4_largeArc"> <code><strong>largeArc </strong></code> </a></td> <td>
chooses smaller or larger <a href="#Arc">Arc</a></td>
</tr> <tr> <td><a name="SkPath_arcTo_4_sweep"> <code><strong>sweep </strong></code> </a></td> <td>
@@ -2887,23 +2883,22 @@ end of <a href="#Arc">Arc</a></td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void arcTo(const SkPoint r, SkScalar xAxisRotate, ArcSize largeArc,
- Direction sweep, const SkPoint xy)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void arcTo(const SkPoint r, SkScalar xAxisRotate, ArcSize largeArc, Direction sweep, const SkPoint xy)
</pre>
Append <a href="#Arc">Arc</a> to <a href="#Path">Path</a>. <a href="#Arc">Arc</a> is implemented by one or more <a href="#Conic">Conic</a> weighted to describe part of <a href="undocumented#Oval">Oval</a>
-with radii (<a href="#SkPath_arcTo_5_r">r</a>.fX, <a href="#SkPath_arcTo_5_r">r</a>.fY) rotated by <a href="#SkPath_arcTo_5_xAxisRotate">xAxisRotate</a> degrees. <a href="#Arc">Arc</a> curves from last <a href="#Path">Path</a> <a href="undocumented#Point">Point</a> to
+with radii (<a href="#SkPath_arcTo_5_r">r</a>.fX, <a href="#SkPath_arcTo_5_r">r</a>.fY) rotated by <a href="#SkPath_arcTo_5_xAxisRotate">xAxisRotate</a> degrees. <a href="#Arc">Arc</a> curves from last <a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a> to
(<a href="#SkPath_arcTo_5_xy">xy</a>.fX, <a href="#SkPath_arcTo_5_xy">xy</a>.fY), choosing one of four possible routes: clockwise or counterclockwise,
and smaller or larger.
<a href="#Arc">Arc</a> <a href="#SkPath_arcTo_5_sweep">sweep</a> is always less than 360 degrees. <a href="#SkPath_arcTo">arcTo</a> appends <a href="undocumented#Line">Line</a> to <a href="#SkPath_arcTo_5_xy">xy</a> if either radii are zero,
-or if last <a href="#Path">Path</a> <a href="undocumented#Point">Point</a> equals (x, y). <a href="#SkPath_arcTo">arcTo</a> scales radii <a href="#SkPath_arcTo_5_r">r</a> to fit last <a href="#Path">Path</a> <a href="undocumented#Point">Point</a> and
+or if last <a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a> equals (x, y). <a href="#SkPath_arcTo">arcTo</a> scales radii <a href="#SkPath_arcTo_5_r">r</a> to fit last <a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a> and
<a href="#SkPath_arcTo_5_xy">xy</a> if both are greater than zero but too small to describe an arc.
<a href="#SkPath_arcTo">arcTo</a> appends up to four <a href="#Conic">Conic</a> curves.
-<a href="#SkPath_arcTo">arcTo</a> implements the functionality of <a href="#Arc">SVG Arc</a>, although <a href="undocumented#SVG">SVG</a> "" value is
-opposite the integer value of <a href="#SkPath_arcTo_5_sweep">sweep</a>; <a href="undocumented#SVG">SVG</a> "" uses 1 for clockwise, while
+<a href="#SkPath_arcTo">arcTo</a> implements the functionality of <a href="#Arc">SVG Arc</a>, although <a href="undocumented#SVG">SVG</a> "<a href="#SkPath_arcTo_5_sweep">sweep</a>-flag" value is
+opposite the integer value of <a href="#SkPath_arcTo_5_sweep">sweep</a>; <a href="undocumented#SVG">SVG</a> "<a href="#SkPath_arcTo_5_sweep">sweep</a>-flag" uses 1 for clockwise, while
<a href="#SkPath_kCW_Direction">kCW Direction</a> cast to int is zero.
### Parameters
@@ -2934,28 +2929,28 @@ end of <a href="#Arc">Arc</a></td>
<a name="SkPath_rArcTo"></a>
## rArcTo
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void rArcTo(SkScalar rx, SkScalar ry, SkScalar xAxisRotate, ArcSize largeArc,
- Direction sweep, SkScalar dx, SkScalar dy)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void rArcTo(SkScalar rx, SkScalar ry, SkScalar xAxisRotate, ArcSize largeArc, Direction sweep,
+ SkScalar dx, SkScalar dy)
</pre>
-Append <a href="#Arc">Arc</a> to <a href="#Path">Path</a>, relative to last <a href="#Path">Path</a> <a href="undocumented#Point">Point</a>. <a href="#Arc">Arc</a> is implemented by one or
+Append <a href="#Arc">Arc</a> to <a href="#Path">Path</a>, relative to last <a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a>. <a href="#Arc">Arc</a> is implemented by one or
more <a href="#Conic">Conic</a>, weighted to describe part of <a href="undocumented#Oval">Oval</a> with radii (<a href="#SkPath_rArcTo_rx">rx</a>, <a href="#SkPath_rArcTo_ry">ry</a>) rotated by
-<a href="#SkPath_rArcTo_xAxisRotate">xAxisRotate</a> degrees. <a href="#Arc">Arc</a> curves from last <a href="#Path">Path</a> <a href="undocumented#Point">Point</a> (x0, y0) to end <a href="undocumented#Point">Point</a>:
+<a href="#SkPath_rArcTo_xAxisRotate">xAxisRotate</a> degrees. <a href="#Arc">Arc</a> curves from last <a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a> (x0, y0) to end <a href="SkPoint_Reference#Point">Point</a>:
(x0 + <a href="#SkPath_rArcTo_dx">dx</a>, y0 + <a href="#SkPath_rArcTo_dy">dy</a>),
choosing one of four possible routes: clockwise or
-counterclockwise, and smaller or larger. If <a href="#Path">Path</a> is empty, the start <a href="#Arc">Arc</a> <a href="undocumented#Point">Point</a>
+counterclockwise, and smaller or larger. If <a href="#Path">Path</a> is empty, the start <a href="#Arc">Arc</a> <a href="SkPoint_Reference#Point">Point</a>
is (0, 0).
-<a href="#Arc">Arc</a> <a href="#SkPath_rArcTo_sweep">sweep</a> is always less than 360 degrees. <a href="#SkPath_arcTo">arcTo</a> appends <a href="undocumented#Line">Line</a> to end <a href="undocumented#Point">Point</a>
-if either radii are zero, or if last <a href="#Path">Path</a> <a href="undocumented#Point">Point</a> equals end <a href="undocumented#Point">Point</a>.
-<a href="#SkPath_arcTo">arcTo</a> scales radii (<a href="#SkPath_rArcTo_rx">rx</a>, <a href="#SkPath_rArcTo_ry">ry</a>) to fit last <a href="#Path">Path</a> <a href="undocumented#Point">Point</a> and end <a href="undocumented#Point">Point</a> if both are
+<a href="#Arc">Arc</a> <a href="#SkPath_rArcTo_sweep">sweep</a> is always less than 360 degrees. <a href="#SkPath_arcTo">arcTo</a> appends <a href="undocumented#Line">Line</a> to end <a href="SkPoint_Reference#Point">Point</a>
+if either radii are zero, or if last <a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a> equals end <a href="SkPoint_Reference#Point">Point</a>.
+<a href="#SkPath_arcTo">arcTo</a> scales radii (<a href="#SkPath_rArcTo_rx">rx</a>, <a href="#SkPath_rArcTo_ry">ry</a>) to fit last <a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a> and end <a href="SkPoint_Reference#Point">Point</a> if both are
greater than zero but too small to describe an arc.
<a href="#SkPath_arcTo">arcTo</a> appends up to four <a href="#Conic">Conic</a> curves.
-<a href="#SkPath_arcTo">arcTo</a> implements the functionality of <a href="#Arc">SVG Arc</a>, although <a href="undocumented#SVG">SVG</a> "" value is
-opposite the integer value of <a href="#SkPath_rArcTo_sweep">sweep</a>; <a href="undocumented#SVG">SVG</a> "" uses 1 for clockwise, while
+<a href="#SkPath_arcTo">arcTo</a> implements the functionality of <a href="#Arc">SVG Arc</a>, although <a href="undocumented#SVG">SVG</a> "<a href="#SkPath_rArcTo_sweep">sweep</a>-flag" value is
+opposite the integer value of <a href="#SkPath_rArcTo_sweep">sweep</a>; <a href="undocumented#SVG">SVG</a> "<a href="#SkPath_rArcTo_sweep">sweep</a>-flag" uses 1 for clockwise, while
<a href="#SkPath_kCW_Direction">kCW Direction</a> cast to int is zero.
### Parameters
@@ -2971,9 +2966,9 @@ chooses smaller or larger <a href="#Arc">Arc</a></td>
</tr> <tr> <td><a name="SkPath_rArcTo_sweep"> <code><strong>sweep </strong></code> </a></td> <td>
chooses clockwise or counterclockwise <a href="#Arc">Arc</a></td>
</tr> <tr> <td><a name="SkPath_rArcTo_dx"> <code><strong>dx </strong></code> </a></td> <td>
-x <a href="#SkPath_offset">offset</a> end of <a href="#Arc">Arc</a> from last <a href="#Path">Path</a> <a href="undocumented#Point">Point</a></td>
+x <a href="#SkPath_offset">offset</a> end of <a href="#Arc">Arc</a> from last <a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a></td>
</tr> <tr> <td><a name="SkPath_rArcTo_dy"> <code><strong>dy </strong></code> </a></td> <td>
-y <a href="#SkPath_offset">offset</a> end of <a href="#Arc">Arc</a> from last <a href="#Path">Path</a> <a href="undocumented#Point">Point</a></td>
+y <a href="#SkPath_offset">offset</a> end of <a href="#Arc">Arc</a> from last <a href="#Path">Path</a> <a href="SkPoint_Reference#Point">Point</a></td>
</tr>
</table>
@@ -2990,11 +2985,11 @@ y <a href="#SkPath_offset">offset</a> end of <a href="#Arc">Arc</a> from last <a
<a name="SkPath_close"></a>
## close
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void close()
</pre>
-Append <a href="#SkPath_kClose_Verb">kClose Verb</a> to <a href="#Path">Path</a>. A closed <a href="#Contour">Contour</a> connects the first and last <a href="undocumented#Point">Point</a>
+Append <a href="#SkPath_kClose_Verb">kClose Verb</a> to <a href="#Path">Path</a>. A closed <a href="#Contour">Contour</a> connects the first and last <a href="SkPoint_Reference#Point">Point</a>
with <a href="undocumented#Line">Line</a>, forming a continuous loop. Open and closed <a href="#Contour">Contour</a> draw the same
with <a href="#SkPaint_kFill_Style">SkPaint::kFill Style</a>. With <a href="#SkPaint_kStroke_Style">SkPaint::kStroke Style</a>, open <a href="#Contour">Contour</a> draws
<a href="#Stroke_Cap">Paint Stroke Cap</a> at <a href="#Contour">Contour</a> start and end; closed <a href="#Contour">Contour</a> draws
@@ -3013,7 +3008,7 @@ with <a href="#SkPaint_kFill_Style">SkPaint::kFill Style</a>. With <a href="#SkP
<a name="SkPath_IsInverseFillType"></a>
## IsInverseFillType
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static bool IsInverseFillType(FillType fill)
</pre>
@@ -3063,7 +3058,7 @@ IsInverseFillType(kInverseEvenOdd_FillType) == true
<a name="SkPath_ConvertToNonInverseFillType"></a>
## ConvertToNonInverseFillType
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static FillType ConvertToNonInverseFillType(FillType fill)
</pre>
@@ -3113,17 +3108,16 @@ ConvertToNonInverseFillType(kInverseEvenOdd_FillType) == kEvenOdd_FillType
<a name="SkPath_ConvertConicToQuads"></a>
## ConvertConicToQuads
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-static int ConvertConicToQuads(const SkPoint& p0, const SkPoint& p1,
- const SkPoint& p2, SkScalar w, SkPoint pts[],
- int pow2)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static int ConvertConicToQuads(const SkPoint& p0, const SkPoint& p1, const SkPoint& p2, SkScalar w,
+ SkPoint pts[], int pow2)
</pre>
-Approximates <a href="#Conic">Conic</a> with <a href="#Quad">Quad</a> array. <a href="#Conic">Conic</a> is constructed from start <a href="undocumented#Point">Point</a> <a href="#SkPath_ConvertConicToQuads_p0">p0</a>,
-control <a href="undocumented#Point">Point</a> <a href="#SkPath_ConvertConicToQuads_p1">p1</a>, end <a href="undocumented#Point">Point</a> <a href="#SkPath_ConvertConicToQuads_p2">p2</a>, and weight <a href="#SkPath_ConvertConicToQuads_w">w</a>.
+Approximates <a href="#Conic">Conic</a> with <a href="#Quad">Quad</a> array. <a href="#Conic">Conic</a> is constructed from start <a href="SkPoint_Reference#Point">Point</a> <a href="#SkPath_ConvertConicToQuads_p0">p0</a>,
+control <a href="SkPoint_Reference#Point">Point</a> <a href="#SkPath_ConvertConicToQuads_p1">p1</a>, end <a href="SkPoint_Reference#Point">Point</a> <a href="#SkPath_ConvertConicToQuads_p2">p2</a>, and weight <a href="#SkPath_ConvertConicToQuads_w">w</a>.
<a href="#Quad">Quad</a> array is stored in <a href="#SkPath_ConvertConicToQuads_pts">pts</a>; this storage is supplied by caller.
Maximum <a href="#Quad">Quad</a> count is 2 to the <a href="#SkPath_ConvertConicToQuads_pow2">pow2</a>.
-Every third point in array shares last <a href="undocumented#Point">Point</a> of previous <a href="#Quad">Quad</a> and first <a href="undocumented#Point">Point</a> of
+Every third point in array shares last <a href="SkPoint_Reference#Point">Point</a> of previous <a href="#Quad">Quad</a> and first <a href="SkPoint_Reference#Point">Point</a> of
next <a href="#Quad">Quad</a>. Maximum <a href="#SkPath_ConvertConicToQuads_pts">pts</a> storage size is given by:
(1 + 2 * (1 << <a href="#SkPath_ConvertConicToQuads_pow2">pow2</a>)) * sizeof(SkPoint).
@@ -3139,11 +3133,11 @@ of up to 90 degrees; in this case, set <a href="#SkPath_ConvertConicToQuads_pow2
### Parameters
<table> <tr> <td><a name="SkPath_ConvertConicToQuads_p0"> <code><strong>p0 </strong></code> </a></td> <td>
-<a href="#Conic">Conic</a> start <a href="undocumented#Point">Point</a></td>
+<a href="#Conic">Conic</a> start <a href="SkPoint_Reference#Point">Point</a></td>
</tr> <tr> <td><a name="SkPath_ConvertConicToQuads_p1"> <code><strong>p1 </strong></code> </a></td> <td>
-<a href="#Conic">Conic</a> control <a href="undocumented#Point">Point</a></td>
+<a href="#Conic">Conic</a> control <a href="SkPoint_Reference#Point">Point</a></td>
</tr> <tr> <td><a name="SkPath_ConvertConicToQuads_p2"> <code><strong>p2 </strong></code> </a></td> <td>
-<a href="#Conic">Conic</a> end <a href="undocumented#Point">Point</a></td>
+<a href="#Conic">Conic</a> end <a href="SkPoint_Reference#Point">Point</a></td>
</tr> <tr> <td><a name="SkPath_ConvertConicToQuads_w"> <code><strong>w </strong></code> </a></td> <td>
<a href="#Conic">Conic</a> weight</td>
</tr> <tr> <td><a name="SkPath_ConvertConicToQuads_pts"> <code><strong>pts </strong></code> </a></td> <td>
@@ -3172,9 +3166,8 @@ be drawn exactly with a single <a href="#Quad">Quad</a>.</div></fiddle-embed></d
<a name="SkPath_isRect"></a>
## isRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool isRect(SkRect* rect, bool* isClosed = nullptr,
- Direction* direction = nullptr) const
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool isRect(SkRect* rect, bool* isClosed = nullptr, Direction* direction = nullptr) const
</pre>
Returns true if <a href="#Path">Path</a> is equivalent to <a href="SkRect_Reference#Rect">Rect</a> when filled.
@@ -3226,7 +3219,7 @@ addPoly is rect (0, 0, 80, 80); is not closed; direction CCW
<a name="SkPath_isNestedFillRects"></a>
## isNestedFillRects
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isNestedFillRects(SkRect rect[2], Direction dirs[2] = nullptr) const
</pre>
@@ -3272,7 +3265,7 @@ inner (12.5, 22.5, 27.5, 37.5); direction CCW
<a name="SkPath_addRect"></a>
## addRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void addRect(const SkRect& rect, Direction dir = kCW_Direction)
</pre>
@@ -3301,7 +3294,7 @@ The right <a href="SkRect_Reference#Rect">Rect</a> dashes starting at the top-le
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void addRect(const SkRect& rect, Direction dir, unsigned start)
</pre>
@@ -3339,16 +3332,16 @@ corner appended to <a href="#Path">Path</a>.</div></fiddle-embed></div>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void addRect(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom,
Direction dir = kCW_Direction)
</pre>
Add <a href="SkRect_Reference#Rect">Rect</a> (<a href="#SkPath_addRect_3_left">left</a>, <a href="#SkPath_addRect_3_top">top</a>, <a href="#SkPath_addRect_3_right">right</a>, <a href="#SkPath_addRect_3_bottom">bottom</a>) to <a href="#Path">Path</a>,
appending <a href="#SkPath_kMove_Verb">kMove Verb</a>, three <a href="#SkPath_kLine_Verb">kLine Verb</a>, and <a href="#SkPath_kClose_Verb">kClose Verb</a>,
-starting with top-left corner of <a href="SkRect_Reference#Rect">Rect</a>; followed by top-right, bottom-right,
-and bottom-left if <a href="#SkPath_addRect_3_dir">dir</a> is <a href="#SkPath_kCW_Direction">kCW Direction</a>; or followed by bottom-left,
-bottom-right, and top-right if <a href="#SkPath_addRect_3_dir">dir</a> is <a href="#SkPath_kCCW_Direction">kCCW Direction</a>.
+starting with <a href="#SkPath_addRect_3_top">top</a>-<a href="#SkPath_addRect_3_left">left</a> corner of <a href="SkRect_Reference#Rect">Rect</a>; followed by <a href="#SkPath_addRect_3_top">top</a>-<a href="#SkPath_addRect_3_right">right</a>, <a href="#SkPath_addRect_3_bottom">bottom</a>-<a href="#SkPath_addRect_3_right">right</a>,
+and <a href="#SkPath_addRect_3_bottom">bottom</a>-<a href="#SkPath_addRect_3_left">left</a> if <a href="#SkPath_addRect_3_dir">dir</a> is <a href="#SkPath_kCW_Direction">kCW Direction</a>; or followed by <a href="#SkPath_addRect_3_bottom">bottom</a>-<a href="#SkPath_addRect_3_left">left</a>,
+<a href="#SkPath_addRect_3_bottom">bottom</a>-<a href="#SkPath_addRect_3_right">right</a>, and <a href="#SkPath_addRect_3_top">top</a>-<a href="#SkPath_addRect_3_right">right</a> if <a href="#SkPath_addRect_3_dir">dir</a> is <a href="#SkPath_kCCW_Direction">kCCW Direction</a>.
### Parameters
@@ -3367,8 +3360,8 @@ larger y of <a href="SkRect_Reference#Rect">Rect</a></td>
### Example
-<div><fiddle-embed name="3837827310e8b88b8c2e128ef9fbbd65"><div>The <a href="#SkPath_addRect_3_left">left</a> <a href="SkRect_Reference#Rect">Rect</a> dashes start at the top-left corner, and continue to the <a href="#SkPath_addRect_3_right">right</a>.
-The <a href="#SkPath_addRect_3_right">right</a> <a href="SkRect_Reference#Rect">Rect</a> dashes start at the top-left corner, and continue down.</div></fiddle-embed></div>
+<div><fiddle-embed name="3837827310e8b88b8c2e128ef9fbbd65"><div>The <a href="#SkPath_addRect_3_left">left</a> <a href="SkRect_Reference#Rect">Rect</a> dashes start at the <a href="#SkPath_addRect_3_top">top</a>-<a href="#SkPath_addRect_3_left">left</a> corner, and continue to the <a href="#SkPath_addRect_3_right">right</a>.
+The <a href="#SkPath_addRect_3_right">right</a> <a href="SkRect_Reference#Rect">Rect</a> dashes start at the <a href="#SkPath_addRect_3_top">top</a>-<a href="#SkPath_addRect_3_left">left</a> corner, and continue down.</div></fiddle-embed></div>
### See Also
@@ -3379,7 +3372,7 @@ The <a href="#SkPath_addRect_3_right">right</a> <a href="SkRect_Reference#Rect">
<a name="SkPath_addOval"></a>
## addOval
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void addOval(const SkRect& oval, Direction dir = kCW_Direction)
</pre>
@@ -3409,7 +3402,7 @@ bounds of ellipse added</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void addOval(const SkRect& oval, Direction dir, unsigned start)
</pre>
@@ -3418,7 +3411,7 @@ Add <a href="undocumented#Oval">Oval</a> to <a href="#Path">Path</a>, appending
and half <a href="#SkPath_addOval_2_oval">oval</a> height. <a href="undocumented#Oval">Oval</a> begins at <a href="#SkPath_addOval_2_start">start</a> and continues
clockwise if <a href="#SkPath_addOval_2_dir">dir</a> is <a href="#SkPath_kCW_Direction">kCW Direction</a>, counterclockwise if <a href="#SkPath_addOval_2_dir">dir</a> is <a href="#SkPath_kCCW_Direction">kCCW Direction</a>.
-| <a href="#SkPath_addOval_2_start">start</a> | <a href="undocumented#Point">Point</a> |
+| <a href="#SkPath_addOval_2_start">start</a> | <a href="SkPoint_Reference#Point">Point</a> |
| --- | --- |
| 0 | <a href="#SkPath_addOval_2_oval">oval</a>.centerX(), <a href="#SkPath_addOval_2_oval">oval</a>.fTop |
| 1 | <a href="#SkPath_addOval_2_oval">oval</a>.fRight, <a href="#SkPath_addOval_2_oval">oval</a>.centerY() |
@@ -3449,9 +3442,8 @@ index of initial point of ellipse</td>
<a name="SkPath_addCircle"></a>
## addCircle
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void addCircle(SkScalar x, SkScalar y, SkScalar radius,
- Direction dir = kCW_Direction)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void addCircle(SkScalar x, SkScalar y, SkScalar radius, Direction dir = kCW_Direction)
</pre>
Add <a href="undocumented#Circle">Circle</a> centered at (<a href="#SkPath_addCircle_x">x</a>, <a href="#SkPath_addCircle_y">y</a>) of size <a href="#SkPath_addCircle_radius">radius</a> to <a href="#Path">Path</a>, appending <a href="#SkPath_kMove_Verb">kMove Verb</a>,
@@ -3488,7 +3480,7 @@ distance from center to edge</td>
<a name="SkPath_addArc"></a>
## addArc
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void addArc(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle)
</pre>
@@ -3527,9 +3519,8 @@ and <a href="#SkPath_addArc_startAngle">startAngle</a> modulo 90 is not zero.</d
<a name="SkPath_addRoundRect"></a>
## addRoundRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void addRoundRect(const SkRect& rect, SkScalar rx, SkScalar ry,
- Direction dir = kCW_Direction)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void addRoundRect(const SkRect& rect, SkScalar rx, SkScalar ry, Direction dir = kCW_Direction)
</pre>
Append <a href="undocumented#Round_Rect">Round Rect</a> to <a href="#Path">Path</a>, creating a new closed <a href="#Contour">Contour</a>. <a href="undocumented#Round_Rect">Round Rect</a> has bounds
@@ -3571,9 +3562,8 @@ drawn in green.</div></fiddle-embed></div>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void addRoundRect(const SkRect& rect, const SkScalar radii[],
- Direction dir = kCW_Direction)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void addRoundRect(const SkRect& rect, const SkScalar radii[], Direction dir = kCW_Direction)
</pre>
Append <a href="undocumented#Round_Rect">Round Rect</a> to <a href="#Path">Path</a>, creating a new closed <a href="#Contour">Contour</a>. <a href="undocumented#Round_Rect">Round Rect</a> has bounds
@@ -3625,7 +3615,7 @@ array of 8 <a href="undocumented#SkScalar">SkScalar</a> values, a radius pair fo
<a name="SkPath_addRRect"></a>
## addRRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void addRRect(const SkRRect& rrect, Direction dir = kCW_Direction)
</pre>
@@ -3655,7 +3645,7 @@ bounds and radii of rounded rectangle</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void addRRect(const SkRRect& rrect, Direction dir, unsigned start)
</pre>
@@ -3700,12 +3690,12 @@ index of initial point of <a href="undocumented#Round_Rect">Round Rect</a></td>
<a name="SkPath_addPoly"></a>
## addPoly
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void addPoly(const SkPoint pts[], int count, bool close)
</pre>
Add <a href="#Contour">Contour</a> created from <a href="undocumented#Line">Line</a> array, adding (<a href="#SkPath_addPoly_count">count</a> - 1) <a href="undocumented#Line">Line</a> segments.
-<a href="#Contour">Contour</a> added starts at <a href="#SkPath_addPoly_pts">pts</a>[0], then adds a line for every additional <a href="undocumented#Point">Point</a>
+<a href="#Contour">Contour</a> added starts at <a href="#SkPath_addPoly_pts">pts</a>[0], then adds a line for every additional <a href="SkPoint_Reference#Point">Point</a>
in <a href="#SkPath_addPoly_pts">pts</a> array. If <a href="#SkPath_close">close</a> is true,appends <a href="#SkPath_kClose_Verb">kClose Verb</a> to <a href="#Path">Path</a>, connecting
<a href="#SkPath_addPoly_pts">pts</a>[<a href="#SkPath_addPoly_count">count</a> - 1] and <a href="#SkPath_addPoly_pts">pts</a>[0].
@@ -3715,9 +3705,9 @@ Has no effect if <a href="#SkPath_addPoly_count">count</a> is less than one.
### Parameters
<table> <tr> <td><a name="SkPath_addPoly_pts"> <code><strong>pts </strong></code> </a></td> <td>
-array of <a href="undocumented#Line">Line</a> sharing end and start <a href="undocumented#Point">Point</a></td>
+array of <a href="undocumented#Line">Line</a> sharing end and start <a href="SkPoint_Reference#Point">Point</a></td>
</tr> <tr> <td><a name="SkPath_addPoly_count"> <code><strong>count </strong></code> </a></td> <td>
-length of <a href="undocumented#Point">Point</a> array</td>
+length of <a href="SkPoint_Reference#Point">Point</a> array</td>
</tr> <tr> <td><a name="SkPath_addPoly_close"> <code><strong>close </strong></code> </a></td> <td>
true to add <a href="undocumented#Line">Line</a> connecting <a href="#Contour">Contour</a> end and start</td>
</tr>
@@ -3735,7 +3725,7 @@ true to add <a href="undocumented#Line">Line</a> connecting <a href="#Contour">C
## <a name="SkPath_AddPathMode"></a> Enum SkPath::AddPathMode
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#SkPath_AddPathMode">AddPathMode</a> {
<a href="#SkPath_kAppend_AddPathMode">kAppend AddPathMode</a>,
<a href="#SkPath_kExtend_AddPathMode">kExtend AddPathMode</a>,
@@ -3752,7 +3742,7 @@ the last <a href="#Contour">Contour</a> or start a new <a href="#Contour">Contou
starts a new <a href="#Contour">Contour</a>.</td>
</tr>
<tr>
- <td><a name="SkPath_kExtend_AddPathMode"> <code><strong>SkPath::kExtend_AddPathMode </strong></code> </a></td><td>If destination is closed or empty, start a new Contour. If destination</td><td>is not empty, add <a href="undocumented#Line">Line</a> from <a href="#Last_Point">Last Point</a> to added <a href="#Path">Path</a> first <a href="undocumented#Point">Point</a>. Skip added
+ <td><a name="SkPath_kExtend_AddPathMode"> <code><strong>SkPath::kExtend_AddPathMode </strong></code> </a></td><td>If destination is closed or empty, start a new Contour. If destination</td><td>is not empty, add <a href="undocumented#Line">Line</a> from <a href="#Last_Point">Last Point</a> to added <a href="#Path">Path</a> first <a href="SkPoint_Reference#Point">Point</a>. Skip added
<a href="#Path">Path</a> initial <a href="#SkPath_kMove_Verb">kMove Verb</a>, then append remining <a href="#Verb">Verbs</a>, <a href="#Point">Points</a>, and <a href="#Weight">Conic Weights</a>.</td>
</tr>
</table>
@@ -3772,9 +3762,8 @@ The top right composition is made up of one contour; the other three have two.</
<a name="SkPath_addPath"></a>
## addPath
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void addPath(const SkPath& src, SkScalar dx, SkScalar dy,
- AddPathMode mode = kAppend_AddPathMode)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void addPath(const SkPath& src, SkScalar dx, SkScalar dy, AddPathMode mode = kAppend_AddPathMode)
</pre>
Append <a href="#SkPath_addPath_src">src</a> to <a href="#Path">Path</a>, <a href="#SkPath_offset">offset</a> by (<a href="#SkPath_addPath_dx">dx</a>, <a href="#SkPath_addPath_dy">dy</a>).
@@ -3806,7 +3795,7 @@ added unaltered. If <a href="#SkPath_addPath_mode">mode</a> is <a href="#SkPath_
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void addPath(const SkPath& src, AddPathMode mode = kAppend_AddPathMode)
</pre>
@@ -3835,9 +3824,8 @@ added unaltered. If <a href="#SkPath_addPath_2_mode">mode</a> is <a href="#SkPat
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void addPath(const SkPath& src, const SkMatrix& matrix,
- AddPathMode mode = kAppend_AddPathMode)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void addPath(const SkPath& src, const SkMatrix& matrix, AddPathMode mode = kAppend_AddPathMode)
</pre>
Append <a href="#SkPath_addPath_3_src">src</a> to <a href="#Path">Path</a>, transformed by <a href="#SkPath_addPath_3_matrix">matrix</a>. Transformed curves may have different
@@ -3871,7 +3859,7 @@ added unaltered. If <a href="#SkPath_addPath_3_mode">mode</a> is <a href="#SkPat
<a name="SkPath_reverseAddPath"></a>
## reverseAddPath
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void reverseAddPath(const SkPath& src)
</pre>
@@ -3898,7 +3886,7 @@ Reversed <a href="#SkPath_reverseAddPath_src">src</a> always appends a new <a hr
<a name="SkPath_offset"></a>
## offset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void offset(SkScalar dx, SkScalar dy, SkPath* dst) const
</pre>
@@ -3926,7 +3914,7 @@ overwritten, translated copy of <a href="#Path">Path</a>; may be nullptr</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void offset(SkScalar dx, SkScalar dy)
</pre>
@@ -3954,7 +3942,7 @@ Offset <a href="#Point_Array">Point Array</a> by (<a href="#SkPath_offset_2_dx">
<a name="SkPath_transform"></a>
## transform
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void transform(const SkMatrix& matrix, SkPath* dst) const
</pre>
@@ -3982,7 +3970,7 @@ overwritten, transformed copy of <a href="#Path">Path</a>; may be nullptr</td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void transform(const SkMatrix& matrix)
</pre>
@@ -4010,13 +3998,13 @@ Transform <a href="#Verb_Array">Verb Array</a>, <a href="#Point_Array">Point Arr
## <a name="Last_Point"></a> Last Point
<a href="#Path">Path</a> is defined cumulatively, often by adding a segment to the end of last
-<a href="#Contour">Contour</a>. <a href="#Last_Point">Last Point</a> of <a href="#Contour">Contour</a> is shared as first <a href="undocumented#Point">Point</a> of added <a href="undocumented#Line">Line</a> or <a href="undocumented#Curve">Curve</a>.
+<a href="#Contour">Contour</a>. <a href="#Last_Point">Last Point</a> of <a href="#Contour">Contour</a> is shared as first <a href="SkPoint_Reference#Point">Point</a> of added <a href="undocumented#Line">Line</a> or <a href="undocumented#Curve">Curve</a>.
<a href="#Last_Point">Last Point</a> can be read and written directly with <a href="#SkPath_getLastPt">getLastPt</a> and <a href="#SkPath_setLastPt">setLastPt</a>.
<a name="SkPath_getLastPt"></a>
## getLastPt
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool getLastPt(SkPoint* lastPt) const
</pre>
@@ -4026,7 +4014,7 @@ storing (0, 0) if <a href="#SkPath_getLastPt_lastPt">lastPt</a> is not nullptr.
### Parameters
<table> <tr> <td><a name="SkPath_getLastPt_lastPt"> <code><strong>lastPt </strong></code> </a></td> <td>
-storage for final <a href="undocumented#Point">Point</a> in <a href="#Point_Array">Point Array</a>; may be nullptr</td>
+storage for final <a href="SkPoint_Reference#Point">Point</a> in <a href="#Point_Array">Point Array</a>; may be nullptr</td>
</tr>
</table>
@@ -4055,7 +4043,7 @@ last point: 35.2786, 52.9772
<a name="SkPath_setLastPt"></a>
## setLastPt
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setLastPt(SkScalar x, SkScalar y)
</pre>
@@ -4065,9 +4053,9 @@ Set <a href="#Last_Point">Last Point</a> to (<a href="#SkPath_setLastPt_x">x</a>
### Parameters
<table> <tr> <td><a name="SkPath_setLastPt_x"> <code><strong>x </strong></code> </a></td> <td>
-set x-coordinate of <a href="#Last_Point">Last Point</a></td>
+set <a href="#SkPath_setLastPt_x">x</a>-coordinate of <a href="#Last_Point">Last Point</a></td>
</tr> <tr> <td><a name="SkPath_setLastPt_y"> <code><strong>y </strong></code> </a></td> <td>
-set y-coordinate of <a href="#Last_Point">Last Point</a></td>
+set <a href="#SkPath_setLastPt_y">y</a>-coordinate of <a href="#Last_Point">Last Point</a></td>
</tr>
</table>
@@ -4081,7 +4069,7 @@ set y-coordinate of <a href="#Last_Point">Last Point</a></td>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setLastPt(const SkPoint& p)
</pre>
@@ -4106,7 +4094,7 @@ set value of <a href="#Last_Point">Last Point</a></td>
## <a name="SkPath_SegmentMask"></a> Enum SkPath::SegmentMask
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
enum <a href="#SkPath_SegmentMask">SegmentMask</a> {
<a href="#SkPath_kLine_SegmentMask">kLine SegmentMask</a> = 1 << 0,
<a href="#SkPath_kQuad_SegmentMask">kQuad SegmentMask</a> = 1 << 1,
@@ -4156,7 +4144,7 @@ Path kQuad_SegmentMask is set
<a name="SkPath_getSegmentMasks"></a>
## getSegmentMasks
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
uint32_t getSegmentMasks() const
</pre>
@@ -4191,14 +4179,14 @@ mask quad set
<a name="SkPath_contains"></a>
## contains
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool contains(SkScalar x, SkScalar y) const
</pre>
Returns true if the point (<a href="#SkPath_contains_x">x</a>, <a href="#SkPath_contains_y">y</a>) is contained by <a href="#Path">Path</a>, taking into
account <a href="#SkPath_FillType">FillType</a>.
-| <a href="#SkPath_FillType">FillType</a> | <a href="#SkPath_contains">contains</a> returns true if <a href="undocumented#Point">Point</a> is enclosed by |
+| <a href="#SkPath_FillType">FillType</a> | <a href="#SkPath_contains">contains</a> returns true if <a href="SkPoint_Reference#Point">Point</a> is enclosed by |
| --- | --- |
| <a href="#SkPath_kWinding_FillType">kWinding FillType</a> | a non-zero sum of <a href="#Contour">Contour</a> <a href="#Direction">Directions</a>. |
| <a href="#SkPath_kEvenOdd_FillType">kEvenOdd FillType</a> | an odd number of <a href="#Contour">Contours</a>. |
@@ -4208,15 +4196,15 @@ account <a href="#SkPath_FillType">FillType</a>.
### Parameters
<table> <tr> <td><a name="SkPath_contains_x"> <code><strong>x </strong></code> </a></td> <td>
-x-coordinate of containment test</td>
+<a href="#SkPath_contains_x">x</a>-coordinate of containment test</td>
</tr> <tr> <td><a name="SkPath_contains_y"> <code><strong>y </strong></code> </a></td> <td>
-y-coordinate of containment test</td>
+<a href="#SkPath_contains_y">y</a>-coordinate of containment test</td>
</tr>
</table>
### Return Value
-true if <a href="undocumented#Point">Point</a> is in <a href="#Path">Path</a>
+true if <a href="SkPoint_Reference#Point">Point</a> is in <a href="#Path">Path</a>
### Example
@@ -4231,7 +4219,7 @@ true if <a href="undocumented#Point">Point</a> is in <a href="#Path">Path</a>
<a name="SkPath_dump"></a>
## dump
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void dump(SkWStream* stream, bool forceClose, bool dumpAsHex) const
</pre>
@@ -4284,7 +4272,7 @@ path.close();
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void dump() const
</pre>
@@ -4317,7 +4305,7 @@ path is not equal to copy
<a name="SkPath_dumpHex"></a>
## dumpHex
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void dumpHex() const
</pre>
@@ -4352,7 +4340,7 @@ path is equal to copy
<a name="SkPath_writeToMemory"></a>
## writeToMemory
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
size_t writeToMemory(void* buffer) const
</pre>
@@ -4397,7 +4385,7 @@ path is equal to copy
<a name="SkPath_serialize"></a>
## serialize
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
sk_sp&lt;SkData&gt; serialize() const
</pre>
@@ -4434,7 +4422,7 @@ path is equal to copy
<a name="SkPath_readFromMemory"></a>
## readFromMemory
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
size_t readFromMemory(const void* buffer, size_t length)
</pre>
@@ -4489,7 +4477,7 @@ Empty <a href="#Path">Paths</a> have a <a href="#Generation_ID">Generation ID</a
<a name="SkPath_getGenerationID"></a>
## getGenerationID
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
uint32_t getGenerationID() const
</pre>
@@ -4528,7 +4516,7 @@ empty genID = 1
<a name="SkPath_isValid"></a>
## isValid
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isValid() const
</pre>
@@ -4545,7 +4533,7 @@ true if <a href="#Path">Path</a> data is consistent
<a name="SkPath_pathRefIsValid"></a>
## pathRefIsValid
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool pathRefIsValid() const
</pre>
@@ -4564,7 +4552,7 @@ Iterates through <a href="#Verb_Array">Verb Array</a>, and associated <a href="#
Provides options to treat open <a href="#Contour">Contours</a> as closed, and to ignore
degenerate data.
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
class <a href="#SkPath_Iter_Iter">Iter</a> {
public:
<a href="#SkPath_Iter_Iter">Iter()</a>;
@@ -4588,7 +4576,7 @@ path of the glyph.</div></fiddle-embed></div>
<a name="SkPath_Iter_Iter"></a>
## Iter
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Iter()
</pre>
@@ -4618,7 +4606,7 @@ iter is done
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Iter(const SkPath& path, bool forceClose)
</pre>
@@ -4669,7 +4657,7 @@ kDone_Verb
<a name="SkPath_Iter_setPath"></a>
## setPath
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setPath(const SkPath& path, bool forceClose)
</pre>
@@ -4716,7 +4704,7 @@ kDone_Verb
<a name="SkPath_Iter_next"></a>
## next
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Verb next(SkPoint pts[4], bool doConsumeDegenerates = true, bool exact = false)
</pre>
@@ -4734,7 +4722,7 @@ if <a href="#SkPath_Iter_next_doConsumeDegenerates">doConsumeDegenerates</a> is
### Parameters
<table> <tr> <td><a name="SkPath_Iter_next_pts"> <code><strong>pts </strong></code> </a></td> <td>
-storage for <a href="undocumented#Point">Point</a> data describing returned <a href="#SkPath_Verb">Verb</a></td>
+storage for <a href="SkPoint_Reference#Point">Point</a> data describing returned <a href="#SkPath_Verb">Verb</a></td>
</tr> <tr> <td><a name="SkPath_Iter_next_doConsumeDegenerates"> <code><strong>doConsumeDegenerates </strong></code> </a></td> <td>
if true, skip degenerate <a href="#Verb">Verbs</a></td>
</tr> <tr> <td><a name="SkPath_Iter_next_exact"> <code><strong>exact </strong></code> </a></td> <td>
@@ -4793,7 +4781,7 @@ kDone_Verb
<a name="SkPath_Iter_conicWeight"></a>
## conicWeight
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar conicWeight() const
</pre>
@@ -4830,7 +4818,7 @@ conic weight: 0.5
<a name="SkPath_Iter_isCloseLine"></a>
## isCloseLine
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isCloseLine() const
</pre>
@@ -4872,7 +4860,7 @@ line generated by close
<a name="SkPath_Iter_isClosedContour"></a>
## isClosedContour
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isClosedContour() const
</pre>
@@ -4909,7 +4897,7 @@ with close(), forceClose is true : isClosedContour returns true
Iterates through <a href="#Verb_Array">Verb Array</a>, and associated <a href="#Point_Array">Point Array</a> and <a href="#Conic_Weight">Conic Weight</a>.
<a href="#Verb_Array">Verb Array</a>, <a href="#Point_Array">Point Array</a>, and <a href="#Conic_Weight">Conic Weight</a> are returned unaltered.
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
class <a href="#SkPath_RawIter_RawIter">RawIter</a> {
public:
<a href="#SkPath_RawIter_RawIter">RawIter()</a>;
@@ -4923,7 +4911,7 @@ void <a href="#SkPath_RawIter_setPath">setPath(const SkPath& path)</a>;
<a name="SkPath_RawIter_RawIter"></a>
## RawIter
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
RawIter()
</pre>
@@ -4936,7 +4924,7 @@ Call <a href="#SkPath_RawIter_setPath">setPath</a> to initialize <a href="#SkPat
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
RawIter(const SkPath& path)
</pre>
@@ -4958,7 +4946,7 @@ Sets <a href="#SkPath_RawIter_RawIter">RawIter</a> to return elements of <a href
<a name="SkPath_RawIter_setPath"></a>
## setPath
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setPath(const SkPath& path)
</pre>
@@ -4976,7 +4964,7 @@ Sets <a href="#SkPath_Iter">Iter</a> to return elements of <a href="#Verb_Array"
<a name="SkPath_RawIter_next"></a>
## next
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Verb next(SkPoint pts[4])
</pre>
@@ -4987,7 +4975,7 @@ Zero to four <a href="#Point">Points</a> are stored in <a href="#SkPath_RawIter_
### Parameters
<table> <tr> <td><a name="SkPath_RawIter_next_pts"> <code><strong>pts </strong></code> </a></td> <td>
-storage for <a href="undocumented#Point">Point</a> data describing returned <a href="#SkPath_Verb">Verb</a></td>
+storage for <a href="SkPoint_Reference#Point">Point</a> data describing returned <a href="#SkPath_Verb">Verb</a></td>
</tr>
</table>
@@ -5023,7 +5011,7 @@ kDone_Verb
<a name="SkPath_RawIter_peek"></a>
## peek
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Verb peek() const
</pre>
@@ -5060,7 +5048,7 @@ peek Done == verb Done
<a name="SkPath_RawIter_conicWeight"></a>
## conicWeight
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar conicWeight() const
</pre>
diff --git a/site/user/api/SkPixmap_Reference.md b/site/user/api/SkPixmap_Reference.md
index 969fdb3ed6..6d85c6ff47 100644
--- a/site/user/api/SkPixmap_Reference.md
+++ b/site/user/api/SkPixmap_Reference.md
@@ -9,7 +9,7 @@ SkPixmap Reference
raster destinations. <a href="SkCanvas_Reference#Canvas">Canvas</a> can not draw <a href="#Pixmap">Pixmap</a>, nor does <a href="#Pixmap">Pixmap</a> provide
a direct drawing destination.
-Use <a href="SkBitmap_Reference#Bitmap">Bitmap</a> to draw pixels referenced by <a href="#Pixmap">Pixmap</a>; use <a href="undocumented#Surface">Surface</a> to draw into
+Use <a href="SkBitmap_Reference#Bitmap">Bitmap</a> to draw pixels referenced by <a href="#Pixmap">Pixmap</a>; use <a href="SkSurface_Reference#Surface">Surface</a> to draw into
pixels referenced by <a href="#Pixmap">Pixmap</a>.
<a href="#Pixmap">Pixmap</a> does not try to manage the lifetime of the pixel memory. Use <a href="undocumented#Pixel_Ref">Pixel Ref</a>
@@ -21,7 +21,7 @@ to manage pixel memory; <a href="undocumented#Pixel_Ref">Pixel Ref</a> is safe a
| topics | description |
| --- | --- |
-| <a href="#Image_Info_Access">Image Info Access</a> | Returns all or part of <a href="#Info">Image Info</a>. |
+| <a href="#Image_Info_Access">Image Info Access</a> | Returns all or part of <a href="undocumented#Image_Info">Image Info</a>. |
| <a href="#Initialization">Initialization</a> | Sets fields for use. |
| <a href="#Reader">Reader</a> | Examine pixel value. |
| <a href="#Writer">Writer</a> | Copy to pixel values. |
@@ -33,7 +33,7 @@ to manage pixel memory; <a href="undocumented#Pixel_Ref">Pixel Ref</a> is safe a
| | description |
| --- | --- |
| <a href="#SkPixmap_empty_constructor">SkPixmap()</a> | Constructs with default values. |
-| <a href="#SkPixmap_const_SkImageInfo_const_star">SkPixmap(const SkImageInfo& info, const void* addr, size t rowBytes)</a> | Constructs from <a href="#Info">Image Info</a>, pixels. |
+| <a href="#SkPixmap_const_SkImageInfo_const_star">SkPixmap(const SkImageInfo& info, const void* addr, size t rowBytes)</a> | Constructs from <a href="undocumented#Image_Info">Image Info</a>, pixels. |
## <a name="Member_Functions"></a> Member Functions
@@ -45,24 +45,24 @@ to manage pixel memory; <a href="undocumented#Pixel_Ref">Pixel Ref</a> is safe a
| <a href="#SkPixmap_addr64">addr64</a> | Returns readable pixel address as 64-bit pointer. |
| <a href="#SkPixmap_addr8">addr8</a> | Returns readable pixel address as 8-bit pointer. |
| <a href="#SkPixmap_addrF16">addrF16</a> | Returns readable pixel component address as 16-bit pointer. |
-| <a href="#SkPixmap_alphaType">alphaType</a> | Returns <a href="#Info">Image Info</a> <a href="undocumented#Alpha_Type">Alpha Type</a>. |
+| <a href="#SkPixmap_alphaType">alphaType</a> | Returns <a href="undocumented#Image_Info">Image Info</a> <a href="undocumented#Image_Alpha_Type">Alpha Type</a>. |
| <a href="#SkPixmap_bounds">bounds</a> | Returns <a href="#SkPixmap_width">width</a> and <a href="#SkPixmap_height">height</a> as Rectangle. |
-| <a href="#SkPixmap_colorSpace">colorSpace</a> | Returns <a href="#Info">Image Info</a> <a href="undocumented#Color_Space">Color Space</a>. |
-| <a href="#SkPixmap_colorType">colorType</a> | Returns <a href="#Info">Image Info</a> <a href="undocumented#Color_Type">Color Type</a>. |
+| <a href="#SkPixmap_colorSpace">colorSpace</a> | Returns <a href="undocumented#Image_Info">Image Info</a> <a href="undocumented#Color_Space">Color Space</a>. |
+| <a href="#SkPixmap_colorType">colorType</a> | Returns <a href="undocumented#Image_Info">Image Info</a> <a href="undocumented#Image_Color_Type">Color Type</a>. |
| <a href="#SkPixmap_computeByteSize">computeByteSize</a> | Returns size required for pixels. |
| <a href="#SkPixmap_computeIsOpaque">computeIsOpaque</a> | Returns true if all pixels are opaque. |
| <a href="#SkPixmap_erase">erase</a> | Writes <a href="undocumented#Color">Color</a> to pixels. |
| <a href="#SkPixmap_extractSubset">extractSubset</a> | Sets pointer to portion of original. |
| <a href="#SkPixmap_getColor">getColor</a> | Returns one pixel as <a href="#Unpremultiply">Unpremultiplied</a> <a href="undocumented#Color">Color</a>. |
| <a href="#SkPixmap_height">height</a> | Returns pixel row count. |
-| <a href="#SkPixmap_info">info</a> | Returns <a href="#Info">Image Info</a>. |
-| <a href="#SkPixmap_isOpaque">isOpaque</a> | Returns true if <a href="#Info">Image Info</a> describes opaque pixels. |
+| <a href="#SkPixmap_info">info</a> | Returns <a href="undocumented#Image_Info">Image Info</a>. |
+| <a href="#SkPixmap_isOpaque">isOpaque</a> | Returns true if <a href="undocumented#Image_Info">Image Info</a> describes opaque pixels. |
| <a href="#SkPixmap_readPixels">readPixels</a> | Copies and converts pixels. |
| <a href="#SkPixmap_reset">reset</a> | Reuses existing <a href="#Pixmap">Pixmap</a> with replacement values. |
| <a href="#SkPixmap_rowBytes">rowBytes</a> | Returns interval between rows in bytes. |
| <a href="#SkPixmap_rowBytesAsPixels">rowBytesAsPixels</a> | Returns interval between rows in pixels. |
| <a href="#SkPixmap_scalePixels">scalePixels</a> | Scales and converts pixels. |
-| <a href="#SkPixmap_setColorSpace">setColorSpace</a> | Sets <a href="#Info">Image Info</a> <a href="undocumented#Color_Space">Color Space</a>. |
+| <a href="#SkPixmap_setColorSpace">setColorSpace</a> | Sets <a href="undocumented#Image_Info">Image Info</a> <a href="undocumented#Color_Space">Color Space</a>. |
| <a href="#SkPixmap_shiftPerPixel">shiftPerPixel</a> | Returns bit shift from pixels to bytes. |
| <a href="#SkPixmap_width">width</a> | Returns pixel column count. |
| <a href="#SkPixmap_writable_addr">writable addr</a> | Returns writable pixel address as void pointer. |
@@ -77,7 +77,7 @@ to manage pixel memory; <a href="undocumented#Pixel_Ref">Pixel Ref</a> is safe a
<a name="SkPixmap_empty_constructor"></a>
## SkPixmap
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkPixmap()
</pre>
@@ -112,7 +112,7 @@ width: 25 height: 35 color: kRGBA_8888_SkColorType alpha: kOpaque_SkAlphaType
<a name="SkPixmap_const_SkImageInfo_const_star"></a>
## SkPixmap
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkPixmap(const SkImageInfo& info, const void* addr, size_t rowBytes)
</pre>
@@ -132,7 +132,7 @@ storage.
### Parameters
<table> <tr> <td><a name="SkPixmap_const_SkImageInfo_const_star_info"> <code><strong>info </strong></code> </a></td> <td>
-<a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#SkAlphaType">SkAlphaType</a>, <a href="undocumented#SkColorType">SkColorType</a> of <a href="#Info">Image Info</a></td>
+<a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#SkAlphaType">SkAlphaType</a>, <a href="undocumented#SkColorType">SkColorType</a> of <a href="undocumented#Image_Info">Image Info</a></td>
</tr> <tr> <td><a name="SkPixmap_const_SkImageInfo_const_star_addr"> <code><strong>addr </strong></code> </a></td> <td>
pointer to pixels allocated by caller; may be nullptr</td>
</tr> <tr> <td><a name="SkPixmap_const_SkImageInfo_const_star_rowBytes"> <code><strong>rowBytes </strong></code> </a></td> <td>
@@ -167,7 +167,7 @@ copy alpha only = true
<a name="SkPixmap_reset"></a>
## reset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void reset()
</pre>
@@ -196,7 +196,7 @@ width: 0 height: 0 color: kUnknown_SkColorType alpha: kUnknown_SkAlphaType
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void reset(const SkImageInfo& info, const void* addr, size_t rowBytes)
</pre>
@@ -214,7 +214,7 @@ out of scope, <a href="#SkPixmap_addr">addr</a> is unaffected.
### Parameters
<table> <tr> <td><a name="SkPixmap_reset_2_info"> <code><strong>info </strong></code> </a></td> <td>
-<a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#SkAlphaType">SkAlphaType</a>, <a href="undocumented#SkColorType">SkColorType</a> of <a href="#Info">Image Info</a></td>
+<a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#SkAlphaType">SkAlphaType</a>, <a href="undocumented#SkColorType">SkColorType</a> of <a href="undocumented#Image_Info">Image Info</a></td>
</tr> <tr> <td><a name="SkPixmap_reset_2_addr"> <code><strong>addr </strong></code> </a></td> <td>
pointer to pixels allocated by caller; may be nullptr</td>
</tr> <tr> <td><a name="SkPixmap_reset_2_rowBytes"> <code><strong>rowBytes </strong></code> </a></td> <td>
@@ -235,18 +235,18 @@ size of one row of <a href="#SkPixmap_addr">addr</a>; <a href="#SkPixmap_width">
<a name="SkPixmap_setColorSpace"></a>
## setColorSpace
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setColorSpace(sk_sp&lt;SkColorSpace&gt; colorSpace)
</pre>
-Changes <a href="undocumented#Color_Space">Color Space</a> in <a href="#Info">Image Info</a>; preserves <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#SkAlphaType">SkAlphaType</a>, and
-<a href="undocumented#SkColorType">SkColorType</a> in <a href="undocumented#Image">Image</a>, and leaves pixel address and row bytes unchanged.
+Changes <a href="undocumented#Color_Space">Color Space</a> in <a href="undocumented#Image_Info">Image Info</a>; preserves <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#SkAlphaType">SkAlphaType</a>, and
+<a href="undocumented#SkColorType">SkColorType</a> in <a href="SkImage_Reference#Image">Image</a>, and leaves pixel address and row bytes unchanged.
<a href="undocumented#Color_Space">Color Space</a> reference count is incremented.
### Parameters
<table> <tr> <td><a name="SkPixmap_setColorSpace_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
-<a href="undocumented#Color_Space">Color Space</a> moved to <a href="#Info">Image Info</a></td>
+<a href="undocumented#Color_Space">Color Space</a> moved to <a href="undocumented#Image_Info">Image Info</a></td>
</tr>
</table>
@@ -269,7 +269,7 @@ is not unique
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool SK_WARN_UNUSED_RESULT reset(const SkMask& mask)
</pre>
@@ -313,7 +313,7 @@ success: false width: 0 height: 0
<a name="SkPixmap_extractSubset"></a>
## extractSubset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool SK_WARN_UNUSED_RESULT extractSubset(SkPixmap* subset, const SkIRect& area) const
</pre>
@@ -351,11 +351,11 @@ true if intersection of <a href="#Pixmap">Pixmap</a> and <a href="#SkPixmap_extr
<a name="SkPixmap_info"></a>
## info
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
const SkImageInfo& info() const
</pre>
-Returns <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Type">Color Type</a>, and <a href="undocumented#Color_Space">Color Space</a>.
+Returns <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, and <a href="undocumented#Color_Space">Color Space</a>.
### Return Value
@@ -375,14 +375,14 @@ width: 384 height: 384 color: BGRA_8888 alpha: Opaque
### See Also
-<a href="#Info">Image Info</a>
+<a href="undocumented#Image_Info">Image Info</a>
---
<a name="SkPixmap_rowBytes"></a>
## rowBytes
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
size_t rowBytes() const
</pre>
@@ -419,7 +419,7 @@ rowBytes: 8 minRowBytes: 4
<a name="SkPixmap_addr"></a>
## addr
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
const void* addr() const
</pre>
@@ -454,7 +454,7 @@ inset address: 0x7f2a440fb210
<a name="SkPixmap_width"></a>
## width
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int width() const
</pre>
@@ -464,7 +464,7 @@ Returns pixel count in each pixel row. Should be equal or less than:
### Return Value
-pixel <a href="#SkPixmap_width">width</a> in <a href="#Info">Image Info</a>
+pixel <a href="#SkPixmap_width">width</a> in <a href="undocumented#Image_Info">Image Info</a>
### Example
@@ -487,7 +487,7 @@ pixmap width: 16 info width: 16
<a name="SkPixmap_height"></a>
## height
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int height() const
</pre>
@@ -495,7 +495,7 @@ Returns pixel row count.
### Return Value
-pixel <a href="#SkPixmap_height">height</a> in <a href="#Info">Image Info</a>
+pixel <a href="#SkPixmap_height">height</a> in <a href="undocumented#Image_Info">Image Info</a>
### Example
@@ -518,17 +518,17 @@ pixmap height: 32 info height: 32
<a name="SkPixmap_colorType"></a>
## colorType
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkColorType colorType() const
</pre>
-Returns <a href="undocumented#Color_Type">Color Type</a>, one of: <a href="undocumented#SkColorType">kUnknown SkColorType</a>, <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>,
+Returns <a href="undocumented#Image_Color_Type">Color Type</a>, one of: <a href="undocumented#SkColorType">kUnknown SkColorType</a>, <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>,
<a href="undocumented#SkColorType">kRGB 565 SkColorType</a>, <a href="undocumented#SkColorType">kARGB 4444 SkColorType</a>, <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a>,
<a href="undocumented#SkColorType">kBGRA 8888 SkColorType</a>, <a href="undocumented#SkColorType">kGray 8 SkColorType</a>, <a href="undocumented#SkColorType">kRGBA F16 SkColorType</a>.
### Return Value
-<a href="undocumented#Color_Type">Color Type</a> in <a href="#Info">Image Info</a>
+<a href="undocumented#Image_Color_Type">Color Type</a> in <a href="undocumented#Image_Info">Image Info</a>
### Example
@@ -551,16 +551,16 @@ color type: kAlpha_SkColorType
<a name="SkPixmap_alphaType"></a>
## alphaType
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkAlphaType alphaType() const
</pre>
-Returns <a href="undocumented#Alpha_Type">Alpha Type</a>, one of: <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a>, <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>,
+Returns <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, one of: <a href="undocumented#SkAlphaType">kUnknown SkAlphaType</a>, <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>,
<a href="undocumented#SkAlphaType">kPremul SkAlphaType</a>, <a href="undocumented#SkAlphaType">kUnpremul SkAlphaType</a>.
### Return Value
-<a href="undocumented#Alpha_Type">Alpha Type</a> in <a href="#Info">Image Info</a>
+<a href="undocumented#Image_Alpha_Type">Alpha Type</a> in <a href="undocumented#Image_Info">Image Info</a>
### Example
@@ -583,22 +583,22 @@ alpha type: kPremul_SkAlphaType
<a name="SkPixmap_colorSpace"></a>
## colorSpace
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkColorSpace* colorSpace() const
</pre>
-Returns <a href="undocumented#Color_Space">Color Space</a> associated with <a href="#Info">Image Info</a>. The
+Returns <a href="undocumented#Color_Space">Color Space</a> associated with <a href="undocumented#Image_Info">Image Info</a>. The
reference count of <a href="undocumented#Color_Space">Color Space</a> is unchanged. The returned <a href="undocumented#Color_Space">Color Space</a> is
immutable.
### Return Value
-<a href="undocumented#Color_Space">Color Space</a>, the range of colors, in <a href="#Info">Image Info</a>
+<a href="undocumented#Color_Space">Color Space</a>, the range of colors, in <a href="undocumented#Image_Info">Image Info</a>
### Example
<div><fiddle-embed name="34c71f803b8edb48eaf1cd0c55bb212e"><div><a href="#SkColorSpace_MakeSRGBLinear">SkColorSpace::MakeSRGBLinear</a> creates <a href="undocumented#Color_Space">Color Space</a> with linear gamma
-and an sRGB gamut. This <a href="undocumented#Color_Space">Color Space</a> gamma is not close to sRGB gamma.</div>
+and an <a href="undocumented#sRGB">sRGB</a> gamut. This <a href="undocumented#Color_Space">Color Space</a> gamma is not close to <a href="undocumented#sRGB">sRGB</a> gamma.</div>
#### Example Output
@@ -617,17 +617,17 @@ gammaCloseToSRGB: false gammaIsLinear: true isSRGB: false
<a name="SkPixmap_isOpaque"></a>
## isOpaque
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isOpaque() const
</pre>
-Returns true if <a href="undocumented#Alpha_Type">Alpha Type</a> is <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>.
-Does not check if <a href="undocumented#Color_Type">Color Type</a> allows <a href="#Alpha">Alpha</a>, or if any pixel value has
+Returns true if <a href="undocumented#Image_Alpha_Type">Alpha Type</a> is <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>.
+Does not check if <a href="undocumented#Image_Color_Type">Color Type</a> allows <a href="#Alpha">Alpha</a>, or if any pixel value has
transparency.
### Return Value
-true if <a href="#Info">Image Info</a> has opaque <a href="undocumented#Alpha_Type">Alpha Type</a>
+true if <a href="undocumented#Image_Info">Image Info</a> has opaque <a href="undocumented#Image_Alpha_Type">Alpha Type</a>
### Example
@@ -653,7 +653,7 @@ isOpaque: true
<a name="SkPixmap_bounds"></a>
## bounds
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkIRect bounds() const
</pre>
@@ -687,7 +687,7 @@ width: 2 height: 2 empty: false
<a name="SkPixmap_rowBytesAsPixels"></a>
## rowBytesAsPixels
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int rowBytesAsPixels() const
</pre>
@@ -723,7 +723,7 @@ rowBytes: 8 rowBytesAsPixels: 2
<a name="SkPixmap_shiftPerPixel"></a>
## shiftPerPixel
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int shiftPerPixel() const
</pre>
@@ -762,7 +762,7 @@ color: kRGBA_F16_SkColorType bytesPerPixel: 8 shiftPerPixel: 3
<a name="SkPixmap_computeByteSize"></a>
## computeByteSize
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
size_t computeByteSize() const
</pre>
@@ -807,19 +807,19 @@ width: 1000000 height: 1000000 computeByteSize: 4999999000000
<a name="SkPixmap_computeIsOpaque"></a>
## computeIsOpaque
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool computeIsOpaque() const
</pre>
-Returns true if all pixels are opaque. <a href="undocumented#Color_Type">Color Type</a> determines how pixels
-are encoded, and whether pixel describes <a href="#Alpha">Alpha</a>. Returns true for <a href="undocumented#Color_Type">Color Types</a>
-without alpha in each pixel; for other <a href="undocumented#Color_Type">Color Types</a>, returns true if all
+Returns true if all pixels are opaque. <a href="undocumented#Image_Color_Type">Color Type</a> determines how pixels
+are encoded, and whether pixel describes <a href="#Alpha">Alpha</a>. Returns true for <a href="undocumented#Image_Color_Type">Color Types</a>
+without alpha in each pixel; for other <a href="undocumented#Image_Color_Type">Color Types</a>, returns true if all
pixels have alpha values equivalent to 1.0 or greater.
-For <a href="undocumented#Color_Type">Color Types</a> <a href="undocumented#SkColorType">kRGB 565 SkColorType</a> or <a href="undocumented#SkColorType">kGray 8 SkColorType</a>: always
-returns true. For <a href="undocumented#Color_Type">Color Types</a> <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>, <a href="undocumented#SkColorType">kBGRA 8888 SkColorType</a>,
+For <a href="undocumented#Image_Color_Type">Color Types</a> <a href="undocumented#SkColorType">kRGB 565 SkColorType</a> or <a href="undocumented#SkColorType">kGray 8 SkColorType</a>: always
+returns true. For <a href="undocumented#Image_Color_Type">Color Types</a> <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>, <a href="undocumented#SkColorType">kBGRA 8888 SkColorType</a>,
<a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a>: returns true if all pixel <a href="#Alpha">Alpha</a> values are 255.
-For <a href="undocumented#Color_Type">Color Type</a> <a href="undocumented#SkColorType">kARGB 4444 SkColorType</a>: returns true if all pixel <a href="#Alpha">Alpha</a> values are 15.
+For <a href="undocumented#Image_Color_Type">Color Type</a> <a href="undocumented#SkColorType">kARGB 4444 SkColorType</a>: returns true if all pixel <a href="#Alpha">Alpha</a> values are 15.
For <a href="undocumented#SkColorType">kRGBA F16 SkColorType</a>: returns true if all pixel <a href="#Alpha">Alpha</a> values are 1.0 or
greater.
@@ -827,7 +827,7 @@ Returns false for <a href="undocumented#SkColorType">kUnknown SkColorType</a>.
### Return Value
-true if all pixels have opaque values or <a href="undocumented#Color_Type">Color Type</a> is opaque
+true if all pixels have opaque values or <a href="undocumented#Image_Color_Type">Color Type</a> is opaque
### Example
@@ -846,26 +846,26 @@ computeIsOpaque: true
### See Also
-<a href="#SkPixmap_isOpaque">isOpaque</a> <a href="undocumented#Color_Type">Color Type</a> <a href="#Alpha">Alpha</a>
+<a href="#SkPixmap_isOpaque">isOpaque</a> <a href="undocumented#Image_Color_Type">Color Type</a> <a href="#Alpha">Alpha</a>
---
<a name="SkPixmap_getColor"></a>
## getColor
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkColor getColor(int x, int y) const
</pre>
Returns pixel at (<a href="#SkPixmap_getColor_x">x</a>, <a href="#SkPixmap_getColor_y">y</a>) as <a href="#Unpremultiply">Unpremultiplied</a> <a href="undocumented#Color">Color</a>.
-Returns black with <a href="#Alpha">Alpha</a> if <a href="undocumented#Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>.
+Returns black with <a href="#Alpha">Alpha</a> if <a href="undocumented#Image_Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>.
Input is not validated: out of <a href="#SkPixmap_bounds">bounds</a> values of <a href="#SkPixmap_getColor_x">x</a> or <a href="#SkPixmap_getColor_y">y</a> trigger an assert() if
built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined; and returns undefined values or may crash if
-<a href="undocumented#SK_RELEASE">SK RELEASE</a> is defined. Fails if <a href="undocumented#Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kUnknown SkColorType</a> or
+<a href="undocumented#SK_RELEASE">SK RELEASE</a> is defined. Fails if <a href="undocumented#Image_Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kUnknown SkColorType</a> or
pixel address is nullptr.
-<a href="undocumented#Color_Space">Color Space</a> in <a href="#Info">Image Info</a> is ignored. Some <a href="undocumented#Color">Color</a> precision may be lost in the
+<a href="undocumented#Color_Space">Color Space</a> in <a href="undocumented#Image_Info">Image Info</a> is ignored. Some <a href="undocumented#Color">Color</a> precision may be lost in the
conversion to <a href="#Unpremultiply">Unpremultiplied</a> <a href="undocumented#Color">Color</a>; original pixel data may have additional
precision.
@@ -911,14 +911,14 @@ Unpremultiplied:
## <a name="Readable_Address"></a> Readable Address
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
const void* addr(int x, int y) const
</pre>
Returns readable pixel address at (<a href="#SkPixmap_addr_2_x">x</a>, <a href="#SkPixmap_addr_2_y">y</a>). Returns nullptr if <a href="undocumented#Pixel_Ref">Pixel Ref</a> is nullptr.
Input is not validated: out of <a href="#SkPixmap_bounds">bounds</a> values of <a href="#SkPixmap_addr_2_x">x</a> or <a href="#SkPixmap_addr_2_y">y</a> trigger an assert() if
-built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined. Returns nullptr if <a href="undocumented#Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kUnknown SkColorType</a>.
+built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined. Returns nullptr if <a href="undocumented#Image_Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kUnknown SkColorType</a>.
Performs a lookup of pixel size; for better performance, call
one of: <a href="#SkPixmap_addr8">addr8</a>, <a href="#SkPixmap_addr16">addr16</a>, <a href="#SkPixmap_addr32">addr32</a>, <a href="#SkPixmap_addr64">addr64</a>, or <a href="#SkPixmap_addrF16">addrF16</a>.
@@ -957,12 +957,12 @@ pixmap.addr(1, 2) == &storage[1 + 2 * w]
<a name="SkPixmap_addr8"></a>
## addr8
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
const uint8_t* addr8() const
</pre>
Returns readable base pixel address. Result is addressable as unsigned 8-bit bytes.
-Will trigger an assert() if <a href="undocumented#Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a> or
+Will trigger an assert() if <a href="undocumented#Image_Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a> or
<a href="undocumented#SkColorType">kGray 8 SkColorType</a>, and is built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined.
One byte corresponds to one pixel.
@@ -992,12 +992,12 @@ pixmap.addr8() == storage
<a name="SkPixmap_addr16"></a>
## addr16
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
const uint16_t* addr16() const
</pre>
Returns readable base pixel address. Result is addressable as unsigned 16-bit words.
-Will trigger an assert() if <a href="undocumented#Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kRGB 565 SkColorType</a> or
+Will trigger an assert() if <a href="undocumented#Image_Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kRGB 565 SkColorType</a> or
<a href="undocumented#SkColorType">kARGB 4444 SkColorType</a>, and is built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined.
One word corresponds to one pixel.
@@ -1027,12 +1027,12 @@ pixmap.addr16() == storage
<a name="SkPixmap_addr32"></a>
## addr32
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
const uint32_t* addr32() const
</pre>
Returns readable base pixel address. Result is addressable as unsigned 32-bit words.
-Will trigger an assert() if <a href="undocumented#Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> or
+Will trigger an assert() if <a href="undocumented#Image_Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> or
<a href="undocumented#SkColorType">kBGRA 8888 SkColorType</a>, and is built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined.
One word corresponds to one pixel.
@@ -1062,12 +1062,12 @@ pixmap.addr32() == storage
<a name="SkPixmap_addr64"></a>
## addr64
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
const uint64_t* addr64() const
</pre>
Returns readable base pixel address. Result is addressable as unsigned 64-bit words.
-Will trigger an assert() if <a href="undocumented#Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> and is built
+Will trigger an assert() if <a href="undocumented#Image_Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> and is built
with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined.
One word corresponds to one pixel.
@@ -1097,12 +1097,12 @@ pixmap.addr64() == storage
<a name="SkPixmap_addrF16"></a>
## addrF16
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
const uint16_t* addrF16() const
</pre>
Returns readable base pixel address. Result is addressable as unsigned 16-bit words.
-Will trigger an assert() if <a href="undocumented#Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> and is built
+Will trigger an assert() if <a href="undocumented#Image_Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> and is built
with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined.
Each word represents one color component encoded as a half float.
@@ -1130,7 +1130,7 @@ pixmap.addrF16() == storage
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
const uint8_t* addr8(int x, int y) const
</pre>
@@ -1139,7 +1139,7 @@ Returns readable pixel address at (<a href="#SkPixmap_addr8_2_x">x</a>, <a href=
Input is not validated: out of <a href="#SkPixmap_bounds">bounds</a> values of <a href="#SkPixmap_addr8_2_x">x</a> or <a href="#SkPixmap_addr8_2_y">y</a> trigger an assert() if
built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined.
-Will trigger an assert() if <a href="undocumented#Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a> or
+Will trigger an assert() if <a href="undocumented#Image_Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a> or
<a href="undocumented#SkColorType">kGray 8 SkColorType</a>, and is built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined.
### Parameters
@@ -1173,7 +1173,7 @@ pixmap.addr8(1, 2) == &storage[1 + 2 * w]
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
const uint16_t* addr16(int x, int y) const
</pre>
@@ -1182,7 +1182,7 @@ Returns readable pixel address at (<a href="#SkPixmap_addr16_2_x">x</a>, <a href
Input is not validated: out of <a href="#SkPixmap_bounds">bounds</a> values of <a href="#SkPixmap_addr16_2_x">x</a> or <a href="#SkPixmap_addr16_2_y">y</a> trigger an assert() if
built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined.
-Will trigger an assert() if <a href="undocumented#Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kRGB 565 SkColorType</a> or
+Will trigger an assert() if <a href="undocumented#Image_Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kRGB 565 SkColorType</a> or
<a href="undocumented#SkColorType">kARGB 4444 SkColorType</a>, and is built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined.
### Parameters
@@ -1216,7 +1216,7 @@ pixmap.addr16(1, 2) == &storage[1 + 2 * w]
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
const uint32_t* addr32(int x, int y) const
</pre>
@@ -1225,7 +1225,7 @@ Returns readable pixel address at (<a href="#SkPixmap_addr32_2_x">x</a>, <a href
Input is not validated: out of <a href="#SkPixmap_bounds">bounds</a> values of <a href="#SkPixmap_addr32_2_x">x</a> or <a href="#SkPixmap_addr32_2_y">y</a> trigger an assert() if
built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined.
-Will trigger an assert() if <a href="undocumented#Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> or
+Will trigger an assert() if <a href="undocumented#Image_Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> or
<a href="undocumented#SkColorType">kBGRA 8888 SkColorType</a>, and is built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined.
### Parameters
@@ -1259,7 +1259,7 @@ pixmap.addr32(1, 2) == &storage[1 + 2 * w]
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
const uint64_t* addr64(int x, int y) const
</pre>
@@ -1268,7 +1268,7 @@ Returns readable pixel address at (<a href="#SkPixmap_addr64_2_x">x</a>, <a href
Input is not validated: out of <a href="#SkPixmap_bounds">bounds</a> values of <a href="#SkPixmap_addr64_2_x">x</a> or <a href="#SkPixmap_addr64_2_y">y</a> trigger an assert() if
built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined.
-Will trigger an assert() if <a href="undocumented#Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> and is built
+Will trigger an assert() if <a href="undocumented#Image_Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> and is built
with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined.
### Parameters
@@ -1302,7 +1302,7 @@ pixmap.addr64(1, 2) == &storage[1 + 2 * w]
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
const uint16_t* addrF16(int x, int y) const
</pre>
@@ -1311,7 +1311,7 @@ Returns readable pixel address at (<a href="#SkPixmap_addrF16_2_x">x</a>, <a hre
Input is not validated: out of <a href="#SkPixmap_bounds">bounds</a> values of <a href="#SkPixmap_addrF16_2_x">x</a> or <a href="#SkPixmap_addrF16_2_y">y</a> trigger an assert() if
built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined.
-Will trigger an assert() if <a href="undocumented#Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> and is built
+Will trigger an assert() if <a href="undocumented#Image_Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> and is built
with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined.
Each unsigned 16-bit word represents one color component encoded as a half float.
@@ -1353,7 +1353,7 @@ pixmap.addrF16(1, 2) == &storage[1 * wordsPerPixel + 2 * rowWords]
<a name="SkPixmap_writable_addr"></a>
## writable_addr
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void* writable_addr() const
</pre>
@@ -1383,14 +1383,14 @@ pixmap.getColor(0, 0) == 0xFFFFFFFF
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void* writable_addr(int x, int y) const
</pre>
Returns writable pixel address at (<a href="#SkPixmap_writable_addr_2_x">x</a>, <a href="#SkPixmap_writable_addr_2_y">y</a>).
Input is not validated: out of <a href="#SkPixmap_bounds">bounds</a> values of <a href="#SkPixmap_writable_addr_2_x">x</a> or <a href="#SkPixmap_writable_addr_2_y">y</a> trigger an assert() if
-built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined. Returns zero if <a href="undocumented#Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kUnknown SkColorType</a>.
+built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined. Returns zero if <a href="undocumented#Image_Color_Type">Color Type</a> is <a href="undocumented#SkColorType">kUnknown SkColorType</a>.
### Parameters
@@ -1428,12 +1428,12 @@ pixmap.getColor(1, 2) == 0xFFFFFFFF
<a name="SkPixmap_writable_addr8"></a>
## writable_addr8
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
uint8_t* writable_addr8(int x, int y) const
</pre>
Returns writable pixel address at (<a href="#SkPixmap_writable_addr8_x">x</a>, <a href="#SkPixmap_writable_addr8_y">y</a>). Result is addressable as unsigned
-8-bit bytes. Will trigger an assert() if <a href="undocumented#Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>
+8-bit bytes. Will trigger an assert() if <a href="undocumented#Image_Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>
or <a href="undocumented#SkColorType">kGray 8 SkColorType</a>, and is built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined.
One byte corresponds to one pixel.
@@ -1466,12 +1466,12 @@ pixel memory is safer.</div></fiddle-embed></div>
<a name="SkPixmap_writable_addr16"></a>
## writable_addr16
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
uint16_t* writable_addr16(int x, int y) const
</pre>
Returns <a href="#SkPixmap_writable_addr">writable addr</a> pixel address at (<a href="#SkPixmap_writable_addr16_x">x</a>, <a href="#SkPixmap_writable_addr16_y">y</a>). Result is addressable as unsigned
-16-bit words. Will trigger an assert() if <a href="undocumented#Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kRGB 565 SkColorType</a>
+16-bit words. Will trigger an assert() if <a href="undocumented#Image_Color_Type">Color Type</a> is not <a href="undocumented#SkColorType">kRGB 565 SkColorType</a>
or <a href="undocumented#SkColorType">kARGB 4444 SkColorType</a>, and is built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined.
One word corresponds to one pixel.
@@ -1503,12 +1503,12 @@ The low nibble of the 16-bit word is <a href="#Alpha">Alpha</a>.</div></fiddle-e
<a name="SkPixmap_writable_addr32"></a>
## writable_addr32
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
uint32_t* writable_addr32(int x, int y) const
</pre>
Returns writable pixel address at (<a href="#SkPixmap_writable_addr32_x">x</a>, <a href="#SkPixmap_writable_addr32_y">y</a>). Result is addressable as unsigned
-32-bit words. Will trigger an assert() if <a href="undocumented#Color_Type">Color Type</a> is not
+32-bit words. Will trigger an assert() if <a href="undocumented#Image_Color_Type">Color Type</a> is not
<a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> or <a href="undocumented#SkColorType">kBGRA 8888 SkColorType</a>, and is built with <a href="undocumented#SK_DEBUG">SK DEBUG</a>
defined.
@@ -1540,12 +1540,12 @@ writable unsigned 32-bit pointer to pixel
<a name="SkPixmap_writable_addr64"></a>
## writable_addr64
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
uint64_t* writable_addr64(int x, int y) const
</pre>
Returns writable pixel address at (<a href="#SkPixmap_writable_addr64_x">x</a>, <a href="#SkPixmap_writable_addr64_y">y</a>). Result is addressable as unsigned
-64-bit words. Will trigger an assert() if <a href="undocumented#Color_Type">Color Type</a> is not
+64-bit words. Will trigger an assert() if <a href="undocumented#Image_Color_Type">Color Type</a> is not
<a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> and is built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined.
One word corresponds to one pixel.
@@ -1576,12 +1576,12 @@ writable unsigned 64-bit pointer to pixel
<a name="SkPixmap_writable_addrF16"></a>
## writable_addrF16
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
uint16_t* writable_addrF16(int x, int y) const
</pre>
Returns writable pixel address at (<a href="#SkPixmap_writable_addrF16_x">x</a>, <a href="#SkPixmap_writable_addrF16_y">y</a>). Result is addressable as unsigned
-16-bit words. Will trigger an assert() if <a href="undocumented#Color_Type">Color Type</a> is not
+16-bit words. Will trigger an assert() if <a href="undocumented#Image_Color_Type">Color Type</a> is not
<a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> and is built with <a href="undocumented#SK_DEBUG">SK DEBUG</a> defined.
Each word represents one color component encoded as a half float.
@@ -1616,15 +1616,15 @@ is drawn after overwriting bottom half float color with top half float color.</d
<a name="SkPixmap_readPixels"></a>
## readPixels
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes,
- int srcX, int srcY, SkTransferFunctionBehavior behavior) const
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, int srcX, int srcY,
+ SkTransferFunctionBehavior behavior) const
</pre>
Copies a <a href="SkRect_Reference#Rect">Rect</a> of pixels to <a href="#SkPixmap_readPixels_dstPixels">dstPixels</a>. Copy starts at (<a href="#SkPixmap_readPixels_srcX">srcX</a>, <a href="#SkPixmap_readPixels_srcY">srcY</a>), and does not
exceed (this-><a href="#SkPixmap_width">width</a>, this-><a href="#SkPixmap_height">height</a>).
-<a href="#SkPixmap_readPixels_dstInfo">dstInfo</a> specifies <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, and
+<a href="#SkPixmap_readPixels_dstInfo">dstInfo</a> specifies <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, and
<a href="undocumented#Color_Space">Color Space</a> of destination. <a href="#SkPixmap_readPixels_dstRowBytes">dstRowBytes</a> specifics the gap from one destination
row to the next. Returns true if pixels are copied. Returns false if
<a href="#SkPixmap_readPixels_dstInfo">dstInfo</a>.<a href="#SkPixmap_addr">addr</a> equals nullptr, or <a href="#SkPixmap_readPixels_dstRowBytes">dstRowBytes</a> is less than <a href="#SkPixmap_readPixels_dstInfo">dstInfo</a>.<a href="undocumented#SkImageInfo">minRowBytes</a>.
@@ -1649,7 +1649,7 @@ pixels are treated as if they are linear, regardless of how they are encoded.
### Parameters
<table> <tr> <td><a name="SkPixmap_readPixels_dstInfo"> <code><strong>dstInfo </strong></code> </a></td> <td>
-destination <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
+destination <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
</tr> <tr> <td><a name="SkPixmap_readPixels_dstPixels"> <code><strong>dstPixels </strong></code> </a></td> <td>
destination pixel storage</td>
</tr> <tr> <td><a name="SkPixmap_readPixels_dstRowBytes"> <code><strong>dstRowBytes </strong></code> </a></td> <td>
@@ -1678,14 +1678,14 @@ true if pixels are copied to <a href="#SkPixmap_readPixels_dstPixels">dstPixels<
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes) const
</pre>
Copies a <a href="SkRect_Reference#Rect">Rect</a> of pixels to <a href="#SkPixmap_readPixels_2_dstPixels">dstPixels</a>. Copy starts at (0, 0), and does not
exceed (this-><a href="#SkPixmap_width">width</a>, this-><a href="#SkPixmap_height">height</a>).
-<a href="#SkPixmap_readPixels_2_dstInfo">dstInfo</a> specifies <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, and
+<a href="#SkPixmap_readPixels_2_dstInfo">dstInfo</a> specifies <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, and
<a href="undocumented#Color_Space">Color Space</a> of destination. <a href="#SkPixmap_readPixels_2_dstRowBytes">dstRowBytes</a> specifics the gap from one destination
row to the next. Returns true if pixels are copied. Returns false if
<a href="#SkPixmap_readPixels_2_dstInfo">dstInfo</a>.<a href="#SkPixmap_addr">addr</a> equals nullptr, or <a href="#SkPixmap_readPixels_2_dstRowBytes">dstRowBytes</a> is less than <a href="#SkPixmap_readPixels_2_dstInfo">dstInfo</a>.<a href="undocumented#SkImageInfo">minRowBytes</a>.
@@ -1702,7 +1702,7 @@ Returns false if this-><a href="#SkPixmap_width">width</a> or this-><a href="#Sk
### Parameters
<table> <tr> <td><a name="SkPixmap_readPixels_2_dstInfo"> <code><strong>dstInfo </strong></code> </a></td> <td>
-destination <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
+destination <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
</tr> <tr> <td><a name="SkPixmap_readPixels_2_dstPixels"> <code><strong>dstPixels </strong></code> </a></td> <td>
destination pixel storage</td>
</tr> <tr> <td><a name="SkPixmap_readPixels_2_dstRowBytes"> <code><strong>dstRowBytes </strong></code> </a></td> <td>
@@ -1725,15 +1725,14 @@ creates visible banding.</div></fiddle-embed></div>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes,
- int srcX, int srcY) const
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, int srcX, int srcY) const
</pre>
Copies a <a href="SkRect_Reference#Rect">Rect</a> of pixels to <a href="#SkPixmap_readPixels_3_dstPixels">dstPixels</a>. Copy starts at (<a href="#SkPixmap_readPixels_3_srcX">srcX</a>, <a href="#SkPixmap_readPixels_3_srcY">srcY</a>), and does not
exceed (this-><a href="#SkPixmap_width">width</a>, this-><a href="#SkPixmap_height">height</a>).
-<a href="#SkPixmap_readPixels_3_dstInfo">dstInfo</a> specifies <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, and
+<a href="#SkPixmap_readPixels_3_dstInfo">dstInfo</a> specifies <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, and
<a href="undocumented#Color_Space">Color Space</a> of destination. <a href="#SkPixmap_readPixels_3_dstRowBytes">dstRowBytes</a> specifics the gap from one destination
row to the next. Returns true if pixels are copied. Returns false if
<a href="#SkPixmap_readPixels_3_dstInfo">dstInfo</a>.<a href="#SkPixmap_addr">addr</a> equals nullptr, or <a href="#SkPixmap_readPixels_3_dstRowBytes">dstRowBytes</a> is less than <a href="#SkPixmap_readPixels_3_dstInfo">dstInfo</a>.<a href="undocumented#SkImageInfo">minRowBytes</a>.
@@ -1753,7 +1752,7 @@ or ifabs(srcY) >= this-><a href="#SkPixmap_height">height</a>.
### Parameters
<table> <tr> <td><a name="SkPixmap_readPixels_3_dstInfo"> <code><strong>dstInfo </strong></code> </a></td> <td>
-destination <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#Color_Type">Color Type</a>, <a href="undocumented#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
+destination <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#Image_Color_Type">Color Type</a>, <a href="undocumented#Image_Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
</tr> <tr> <td><a name="SkPixmap_readPixels_3_dstPixels"> <code><strong>dstPixels </strong></code> </a></td> <td>
destination pixel storage</td>
</tr> <tr> <td><a name="SkPixmap_readPixels_3_dstRowBytes"> <code><strong>dstRowBytes </strong></code> </a></td> <td>
@@ -1779,13 +1778,13 @@ true if pixels are copied to <a href="#SkPixmap_readPixels_3_dstPixels">dstPixel
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool readPixels(const SkPixmap& dst, int srcX, int srcY) const
</pre>
Copies a <a href="SkRect_Reference#Rect">Rect</a> of pixels to <a href="#SkPixmap_readPixels_4_dst">dst</a>. Copy starts at (<a href="#SkPixmap_readPixels_4_srcX">srcX</a>, <a href="#SkPixmap_readPixels_4_srcY">srcY</a>), and does not
-exceed (this-><a href="#SkPixmap_width">width</a>, this-><a href="#SkPixmap_height">height</a>). <a href="#SkPixmap_readPixels_4_dst">dst</a> specifies <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#Color_Type">Color Type</a>,
-<a href="undocumented#Alpha_Type">Alpha Type</a>, and <a href="undocumented#Color_Space">Color Space</a> of destination. Returns true if pixels are copied.
+exceed (this-><a href="#SkPixmap_width">width</a>, this-><a href="#SkPixmap_height">height</a>). <a href="#SkPixmap_readPixels_4_dst">dst</a> specifies <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#Image_Color_Type">Color Type</a>,
+<a href="undocumented#Image_Alpha_Type">Alpha Type</a>, and <a href="undocumented#Color_Space">Color Space</a> of destination. Returns true if pixels are copied.
Returns false if <a href="#SkPixmap_readPixels_4_dst">dst</a>.<a href="#SkPixmap_addr">addr</a> equals nullptr, or <a href="#SkPixmap_readPixels_4_dst">dst</a>.<a href="#SkPixmap_rowBytes">rowBytes</a> is less than
<a href="#SkPixmap_readPixels_4_dst">dst</a> <a href="#SkImageInfo_minRowBytes">SkImageInfo::minRowBytes</a>.
@@ -1804,7 +1803,7 @@ or ifabs(srcY) >= this-><a href="#SkPixmap_height">height</a>.
### Parameters
<table> <tr> <td><a name="SkPixmap_readPixels_4_dst"> <code><strong>dst </strong></code> </a></td> <td>
-<a href="#Info">Image Info</a> and pixel address to write to</td>
+<a href="undocumented#Image_Info">Image Info</a> and pixel address to write to</td>
</tr> <tr> <td><a name="SkPixmap_readPixels_4_srcX"> <code><strong>srcX </strong></code> </a></td> <td>
column index whose absolute value is less than <a href="#SkPixmap_width">width</a></td>
</tr> <tr> <td><a name="SkPixmap_readPixels_4_srcY"> <code><strong>srcY </strong></code> </a></td> <td>
@@ -1826,19 +1825,19 @@ true if pixels are copied to <a href="#SkPixmap_readPixels_4_dst">dst</a>
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool readPixels(const SkPixmap& dst) const
</pre>
-Copies pixels inside <a href="#SkPixmap_bounds">bounds</a> to <a href="#SkPixmap_readPixels_5_dst">dst</a>. <a href="#SkPixmap_readPixels_5_dst">dst</a> specifies <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#Color_Type">Color Type</a>,
-<a href="undocumented#Alpha_Type">Alpha Type</a>, and <a href="undocumented#Color_Space">Color Space</a> of destination. Returns true if pixels are copied.
+Copies pixels inside <a href="#SkPixmap_bounds">bounds</a> to <a href="#SkPixmap_readPixels_5_dst">dst</a>. <a href="#SkPixmap_readPixels_5_dst">dst</a> specifies <a href="#SkPixmap_width">width</a>, <a href="#SkPixmap_height">height</a>, <a href="undocumented#Image_Color_Type">Color Type</a>,
+<a href="undocumented#Image_Alpha_Type">Alpha Type</a>, and <a href="undocumented#Color_Space">Color Space</a> of destination. Returns true if pixels are copied.
Returns false if <a href="#SkPixmap_readPixels_5_dst">dst</a>.<a href="#SkPixmap_addr">addr</a> equals nullptr, or <a href="#SkPixmap_readPixels_5_dst">dst</a>.<a href="#SkPixmap_rowBytes">rowBytes</a> is less than
<a href="#SkPixmap_readPixels_5_dst">dst</a> <a href="#SkImageInfo_minRowBytes">SkImageInfo::minRowBytes</a>.
Pixels are copied only if pixel conversion is possible. If this-><a href="#SkPixmap_colorType">colorType</a> is
-<a href="undocumented#SkColorType">kGray 8 SkColorType</a>, or <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>; <a href="#SkPixmap_readPixels_5_dst">dst</a> <a href="undocumented#Color_Type">Color Type</a> must match.
+<a href="undocumented#SkColorType">kGray 8 SkColorType</a>, or <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>; <a href="#SkPixmap_readPixels_5_dst">dst</a> <a href="undocumented#Image_Color_Type">Color Type</a> must match.
If this-><a href="#SkPixmap_colorType">colorType</a> is <a href="undocumented#SkColorType">kGray 8 SkColorType</a>, <a href="#SkPixmap_readPixels_5_dst">dst</a> <a href="undocumented#Color_Space">Color Space</a> must match.
-If this-><a href="#SkPixmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>, <a href="#SkPixmap_readPixels_5_dst">dst</a> <a href="undocumented#Alpha_Type">Alpha Type</a> must
+If this-><a href="#SkPixmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>, <a href="#SkPixmap_readPixels_5_dst">dst</a> <a href="undocumented#Image_Alpha_Type">Alpha Type</a> must
match. If this-><a href="#SkPixmap_colorSpace">colorSpace</a> is nullptr, <a href="#SkPixmap_readPixels_5_dst">dst</a> <a href="undocumented#Color_Space">Color Space</a> must match. Returns
false if pixel conversion is not possible.
Returns false if this-><a href="#SkPixmap_width">width</a> or this-><a href="#SkPixmap_height">height</a> is zero or negative.
@@ -1846,7 +1845,7 @@ Returns false if this-><a href="#SkPixmap_width">width</a> or this-><a href="#Sk
### Parameters
<table> <tr> <td><a name="SkPixmap_readPixels_5_dst"> <code><strong>dst </strong></code> </a></td> <td>
-<a href="#Info">Image Info</a> and pixel address to write to</td>
+<a href="undocumented#Image_Info">Image Info</a> and pixel address to write to</td>
</tr>
</table>
@@ -1867,7 +1866,7 @@ true if pixels are copied to <a href="#SkPixmap_readPixels_5_dst">dst</a>
<a name="SkPixmap_scalePixels"></a>
## scalePixels
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool scalePixels(const SkPixmap& dst, SkFilterQuality filterQuality) const
</pre>
@@ -1877,9 +1876,9 @@ pixels are copied. Returns false if <a href="#SkPixmap_scalePixels_dst">dst</a>.
less than <a href="#SkPixmap_scalePixels_dst">dst</a> <a href="#SkImageInfo_minRowBytes">SkImageInfo::minRowBytes</a>.
Pixels are copied only if pixel conversion is possible. If this-><a href="#SkPixmap_colorType">colorType</a> is
-<a href="undocumented#SkColorType">kGray 8 SkColorType</a>, or <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>; <a href="#SkPixmap_scalePixels_dst">dst</a> <a href="undocumented#Color_Type">Color Type</a> must match.
+<a href="undocumented#SkColorType">kGray 8 SkColorType</a>, or <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a>; <a href="#SkPixmap_scalePixels_dst">dst</a> <a href="undocumented#Image_Color_Type">Color Type</a> must match.
If this-><a href="#SkPixmap_colorType">colorType</a> is <a href="undocumented#SkColorType">kGray 8 SkColorType</a>, <a href="#SkPixmap_scalePixels_dst">dst</a> <a href="undocumented#Color_Space">Color Space</a> must match.
-If this-><a href="#SkPixmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>, <a href="#SkPixmap_scalePixels_dst">dst</a> <a href="undocumented#Alpha_Type">Alpha Type</a> must
+If this-><a href="#SkPixmap_alphaType">alphaType</a> is <a href="undocumented#SkAlphaType">kOpaque SkAlphaType</a>, <a href="#SkPixmap_scalePixels_dst">dst</a> <a href="undocumented#Image_Alpha_Type">Alpha Type</a> must
match. If this-><a href="#SkPixmap_colorSpace">colorSpace</a> is nullptr, <a href="#SkPixmap_scalePixels_dst">dst</a> <a href="undocumented#Color_Space">Color Space</a> must match. Returns
false if pixel conversion is not possible.
@@ -1895,7 +1894,7 @@ Scales the image, with <a href="#SkPixmap_scalePixels_filterQuality">filterQuali
### Parameters
<table> <tr> <td><a name="SkPixmap_scalePixels_dst"> <code><strong>dst </strong></code> </a></td> <td>
-<a href="#Info">Image Info</a> and pixel address to write to</td>
+<a href="undocumented#Image_Info">Image Info</a> and pixel address to write to</td>
</tr> <tr> <td><a name="SkPixmap_scalePixels_filterQuality"> <code><strong>filterQuality </strong></code> </a></td> <td>
one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a></td>
@@ -1919,7 +1918,7 @@ true if pixels are copied to <a href="#SkPixmap_scalePixels_dst">dst</a>
<a name="SkPixmap_erase"></a>
## erase
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool erase(SkColor color, const SkIRect& subset) const
</pre>
@@ -1950,7 +1949,7 @@ true if pixels are changed
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool erase(SkColor color) const
</pre>
@@ -1979,7 +1978,7 @@ true if pixels are changed
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool erase(const SkColor4f& color, const SkIRect* subset = nullptr) const
</pre>
diff --git a/site/user/api/SkPoint_Reference.md b/site/user/api/SkPoint_Reference.md
new file mode 100644
index 0000000000..95c6eebf98
--- /dev/null
+++ b/site/user/api/SkPoint_Reference.md
@@ -0,0 +1,1313 @@
+SkPoint Reference
+===
+
+# <a name="Vector"></a> Vector
+
+# <a name="Point"></a> Point
+
+# <a name="SkPoint"></a> Struct SkPoint
+
+# <a name="Overview"></a> Overview
+
+## <a name="Subtopics"></a> Subtopics
+
+| topics | description |
+| --- | --- |
+
+## <a name="Operators"></a> Operators
+
+| description | function |
+| --- | --- |
+| <a href="#SkPoint">SkPoint</a> <a href="#SkPoint_multiply_operator">operator*(SkScalar scale) const</a> | Returns <a href="#Point">Point</a> multiplied by <a href="#SkPoint_scale">scale</a>. |
+| <a href="#SkPoint">SkPoint</a> <a href="#SkPoint_minus_operator">operator-() const</a> | Reverses sign of <a href="#Point">Point</a>. |
+| <a href="#SkPoint">SkPoint</a>& <a href="#SkPoint_multiplyby_operator">operator*=(SkScalar scale)</a> | Multiplies <a href="#Point">Point</a> by <a href="#SkPoint_scale">scale</a> factor. |
+| <a href="#SkPoint">SkPoint</a> <a href="#SkPoint_add_operator">operator+(const SkPoint& a, const SkVector& b)</a> | Returns <a href="#Point">Point</a> <a href="#SkPoint_offset">offset</a> by <a href="SkPoint_Reference#Vector">Vector</a>. |
+| <a href="SkPoint_Reference#SkVector">SkVector</a> <a href="#SkPoint_subtract_operator">operator-(const SkPoint& a, const SkPoint& b)</a> | Returns <a href="SkPoint_Reference#Vector">Vector</a> between <a href="#Point">Points</a>. |
+| bool <a href="#SkPoint_notequal_operator">operator!=(const SkPoint& a, const SkPoint& b)</a> | Returns true if <a href="#Point">Point</a> are unequal. |
+| bool <a href="#SkPoint_equal_operator">operator==(const SkPoint& a, const SkPoint& b)</a> | Returns true if <a href="#Point">Point</a> are equal. |
+| void <a href="#SkPoint_addto_operator">operator+=(const SkVector& v)</a> | Adds <a href="SkPoint_Reference#Vector">Vector</a> to <a href="#Point">Point</a>. |
+| void <a href="#SkPoint_subtractfrom_operator">operator-=(const SkVector& v)</a> | Subtracts <a href="SkPoint_Reference#Vector">Vector</a> from <a href="#Point">Point</a>. |
+
+## <a name="Member_Functions"></a> Member Functions
+
+| description | function |
+| --- | --- |
+| <a href="#SkPoint_CrossProduct">CrossProduct</a> | Returns <a href="#SkPoint_cross">cross</a> product. |
+| <a href="#SkPoint_Distance">Distance</a> | Returns straight-line distance between points. |
+| <a href="#SkPoint_DotProduct">DotProduct</a> | Returns <a href="#SkPoint_dot">dot</a> product. |
+| <a href="#SkPoint_Length">Length</a> | Returns straight-line distance to origin. |
+| <a href="#SkPoint_Make">Make</a> | Constructs from <a href="undocumented#SkScalar">SkScalar</a> inputs. |
+| <a href="#SkPoint_Normalize">Normalize</a> | Sets <a href="#SkPoint_length">length</a> to one, and returns prior <a href="#SkPoint_length">length</a>. |
+| <a href="#SkPoint_Offset">Offset</a> | Translates <a href="#Point">Point</a> array. |
+| <a href="#SkPoint_cross">cross</a> | Returns <a href="#SkPoint_cross">cross</a> product. |
+| <a href="#SkPoint_distanceToOrigin">distanceToOrigin</a> | Returns straight-line distance to origin. |
+| <a href="#SkPoint_dot">dot</a> | Returns <a href="#SkPoint_dot">dot</a> product. |
+| <a href="#SkPoint_equals">equals</a> | Returns true if <a href="#Point">Points</a> are equal. |
+| <a href="#SkPoint_isFinite">isFinite</a> | Returns true if no member is infinite or <a href="undocumented#NaN">NaN</a>. |
+| <a href="#SkPoint_isZero">isZero</a> | Returns true if both members equal zero. |
+| <a href="#SkPoint_iset">iset</a> | Sets to integer input. |
+| <a href="#SkPoint_length">length</a> | Returns straight-line distance to origin. |
+| <a href="#SkPoint_negate">negate</a> | Reverses the sign of both members. |
+| <a href="#SkPoint_normalize">normalize</a> | Sets <a href="#SkPoint_length">length</a> to one, preserving direction. |
+| <a href="#SkPoint_offset">offset</a> | Translates <a href="#Point">Point</a>. |
+| <a href="#SkPoint_scale">scale</a> | Multiplies <a href="#Point">Point</a> by <a href="#SkPoint_scale">scale</a> factor. |
+| <a href="#SkPoint_set">set</a> | Sets to <a href="undocumented#SkScalar">SkScalar</a> input. |
+| <a href="#SkPoint_setAbs">setAbs</a> | Sets sign of both members to positive. |
+| <a href="#SkPoint_setLength">setLength</a> | Sets straight-line distance to origin. |
+| <a href="#SkPoint_setNormalize">setNormalize</a> | Sets <a href="#SkPoint_length">length</a> to one, in direction of (<a href="#SkPoint_x">x</a>, <a href="#SkPoint_y">y</a>). |
+| <a href="#SkPoint_x">x</a> | Returns <a href="#SkPoint_fX">fX</a>. |
+| <a href="#SkPoint_y">y</a> | Returns <a href="#SkPoint_fY">fY</a>. |
+
+<a name="SkPoint_fX"> <code><strong>SkScalar fX</strong></code> </a>
+
+<a href="#SkPoint_x">x</a>-axis value used by both <a href="#Point">Point</a> and <a href="SkPoint_Reference#Vector">Vector</a>. May contain any value, including
+infinities and <a href="undocumented#NaN">NaN</a>.
+
+<a name="SkPoint_fY"> <code><strong>SkScalar fY</strong></code> </a>
+
+<a href="#SkPoint_y">y</a>-axis value used by both <a href="#Point">Point</a> and <a href="SkPoint_Reference#Vector">Vector</a>. May contain any value, including
+infinities and <a href="undocumented#NaN">NaN</a>.
+
+<a name="SkPoint_Make"></a>
+## Make
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static constexpr SkPoint Make(SkScalar x, SkScalar y)
+</pre>
+
+Sets <a href="#SkPoint_fX">fX</a> to <a href="#SkPoint_x">x</a>, <a href="#SkPoint_fY">fY</a> to <a href="#SkPoint_y">y</a>. Used both to <a href="#SkPoint_set">set</a> <a href="#Point">Point</a> and <a href="SkPoint_Reference#Vector">Vector</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_Make_x"> <code><strong>x </strong></code> </a></td> <td>
+<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPoint_x">x</a>-axis value of constructed <a href="#Point">Point</a> or <a href="SkPoint_Reference#Vector">Vector</a></td>
+ </tr> <tr> <td><a name="SkPoint_Make_y"> <code><strong>y </strong></code> </a></td> <td>
+<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPoint_y">y</a>-axis value of constructed <a href="#Point">Point</a> or <a href="SkPoint_Reference#Vector">Vector</a></td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="#Point">Point</a> (<a href="#SkPoint_x">x</a>, <a href="#SkPoint_y">y</a>)
+
+### Example
+
+<div><fiddle-embed name="d266e70977847001f7c42f8a2513bee7">
+
+#### Example Output
+
+~~~~
+all equal
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_set">set</a> <a href="#SkPoint_iset">iset</a> <a href="#SkIPoint_Make">SkIPoint::Make</a>
+
+---
+
+<a name="SkPoint_x"></a>
+## x
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkScalar x() const
+</pre>
+
+Returns <a href="#SkPoint_x">x</a>-axis value of <a href="#Point">Point</a> or <a href="SkPoint_Reference#Vector">Vector</a>.
+
+### Return Value
+
+<a href="#SkPoint_fX">fX</a>
+
+### Example
+
+<div><fiddle-embed name="9f3fe446b800ae1d940785d438634941">
+
+#### Example Output
+
+~~~~
+pt1.fX == pt1.x()
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_y">y</a> <a href="#SkIPoint_x">SkIPoint::x()</a>
+
+---
+
+<a name="SkPoint_y"></a>
+## y
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkScalar y() const
+</pre>
+
+Returns <a href="#SkPoint_y">y</a>-axis value of <a href="#Point">Point</a> or <a href="SkPoint_Reference#Vector">Vector</a>.
+
+### Return Value
+
+<a href="#SkPoint_fY">fY</a>
+
+### Example
+
+<div><fiddle-embed name="4c962850c2dbea4d2325df469400680e">
+
+#### Example Output
+
+~~~~
+pt1.fY == pt1.y()
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_x">x</a> <a href="#SkIPoint_y">SkIPoint::y()</a>
+
+---
+
+<a name="SkPoint_isZero"></a>
+## isZero
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool isZero() const
+</pre>
+
+Returns true if <a href="#SkPoint_fX">fX</a> and <a href="#SkPoint_fY">fY</a> are both zero.
+
+### Return Value
+
+true if <a href="#SkPoint_fX">fX</a> is zero and <a href="#SkPoint_fY">fY</a> is zero
+
+### Example
+
+<div><fiddle-embed name="81b9665110b88ef6bcbc20464aed7da1">
+
+#### Example Output
+
+~~~~
+pt.fX=+0 pt.fY=-0
+pt.isZero() == true
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_isFinite">isFinite</a> <a href="#SkIPoint_isZero">SkIPoint::isZero</a>
+
+---
+
+<a name="SkPoint_set"></a>
+## set
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void set(SkScalar x, SkScalar y)
+</pre>
+
+Sets <a href="#SkPoint_fX">fX</a> to <a href="#SkPoint_x">x</a> and <a href="#SkPoint_fY">fY</a> to <a href="#SkPoint_y">y</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_set_x"> <code><strong>x </strong></code> </a></td> <td>
+new value for <a href="#SkPoint_fX">fX</a></td>
+ </tr> <tr> <td><a name="SkPoint_set_y"> <code><strong>y </strong></code> </a></td> <td>
+new value for <a href="#SkPoint_fY">fY</a></td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="d08d1e7dafcad4342d1619fdbb2f5781">
+
+#### Example Output
+
+~~~~
+pt1 == pt2
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_iset">iset</a> <a href="#SkPoint_Make">Make</a>
+
+---
+
+<a name="SkPoint_iset"></a>
+## iset
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void iset(int32_t x, int32_t y)
+</pre>
+
+Sets <a href="#SkPoint_fX">fX</a> to <a href="#SkPoint_x">x</a> and <a href="#SkPoint_fY">fY</a> to <a href="#SkPoint_y">y</a>, promoting integers to <a href="undocumented#SkScalar">SkScalar</a> values.
+
+Assigning a large integer value directly to <a href="#SkPoint_fX">fX</a> or <a href="#SkPoint_fY">fY</a> may cause a compiler
+error, triggered by narrowing conversion of int to <a href="undocumented#SkScalar">SkScalar</a>. This safely
+casts <a href="#SkPoint_x">x</a> and <a href="#SkPoint_y">y</a> to avoid the error.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_iset_x"> <code><strong>x </strong></code> </a></td> <td>
+new value for <a href="#SkPoint_fX">fX</a></td>
+ </tr> <tr> <td><a name="SkPoint_iset_y"> <code><strong>y </strong></code> </a></td> <td>
+new value for <a href="#SkPoint_fY">fY</a></td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="0d9e8ed734981b5b113f22c7bfde5357"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_set">set</a> <a href="#SkPoint_Make">Make</a> <a href="#SkIPoint_set">SkIPoint::set</a>
+
+---
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void iset(const SkIPoint& p)
+</pre>
+
+Sets <a href="#SkPoint_fX">fX</a> to <a href="#SkPoint_iset_2_p">p</a>.<a href="#SkPoint_fX">fX</a> and <a href="#SkPoint_fY">fY</a> to <a href="#SkPoint_iset_2_p">p</a>.<a href="#SkPoint_fY">fY</a>, promoting integers to <a href="undocumented#SkScalar">SkScalar</a> values.
+
+Assigning an <a href="SkIPoint_Reference#IPoint">IPoint</a> containing a large integer value directly to <a href="#SkPoint_fX">fX</a> or <a href="#SkPoint_fY">fY</a> may
+cause a compiler error, triggered by narrowing conversion of int to <a href="undocumented#SkScalar">SkScalar</a>.
+This safely casts <a href="#SkPoint_iset_2_p">p</a>.<a href="#SkPoint_fX">fX</a> and <a href="#SkPoint_iset_2_p">p</a>.<a href="#SkPoint_fY">fY</a> to avoid the error.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_iset_2_p"> <code><strong>p </strong></code> </a></td> <td>
+<a href="SkIPoint_Reference#IPoint">IPoint</a> members promoted to <a href="undocumented#SkScalar">SkScalar</a></td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="12b7164a769e232bb772f19c59600ee7">
+
+#### Example Output
+
+~~~~
+iPt: -2147483647, 2147483647
+fPt: -2.14748e+09, 2.14748e+09
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_set">set</a> <a href="#SkPoint_Make">Make</a> <a href="#SkIPoint_set">SkIPoint::set</a>
+
+---
+
+<a name="SkPoint_setAbs"></a>
+## setAbs
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void setAbs(const SkPoint& pt)
+</pre>
+
+Sets <a href="#SkPoint_fX">fX</a> to absolute value of <a href="#SkPoint_setAbs_pt">pt</a>.<a href="#SkPoint_fX">fX</a>; and <a href="#SkPoint_fY">fY</a> to absolute value of <a href="#SkPoint_setAbs_pt">pt</a>.<a href="#SkPoint_fY">fY</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_setAbs_pt"> <code><strong>pt </strong></code> </a></td> <td>
+members providing magnitude for <a href="#SkPoint_fX">fX</a> and <a href="#SkPoint_fY">fY</a></td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="7f70860e820b67a347cff03c00488426">
+
+#### Example Output
+
+~~~~
+pt: 0, -0 abs: 0, 0
+pt: -1, -2 abs: 1, 2
+pt: inf, -inf abs: inf, inf
+pt: nan, -nan abs: nan, nan
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_set">set</a> <a href="#SkPoint_Make">Make</a> <a href="#SkPoint_negate">negate</a>
+
+---
+
+<a name="SkPoint_Offset"></a>
+## Offset
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static void Offset(SkPoint points[], int count, const SkVector& offset)
+</pre>
+
+Adds <a href="#SkPoint_offset">offset</a> to each <a href="#Point">Point</a> in <a href="#SkPoint_Offset_points">points</a> array with <a href="#SkPoint_Offset_count">count</a> entries.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_Offset_points"> <code><strong>points </strong></code> </a></td> <td>
+<a href="#Point">Point</a> array</td>
+ </tr> <tr> <td><a name="SkPoint_Offset_count"> <code><strong>count </strong></code> </a></td> <td>
+entries in array</td>
+ </tr> <tr> <td><a name="SkPoint_Offset_offset"> <code><strong>offset </strong></code> </a></td> <td>
+<a href="SkPoint_Reference#Vector">Vector</a> added to <a href="#SkPoint_Offset_points">points</a></td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="f0f24726df78a5d797bcf311e694a0a3"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_offset">offset</a> <a href="#SkPoint_addto_operator">operator+=(const SkVector& v)</a>
+
+---
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static void Offset(SkPoint points[], int count, SkScalar dx, SkScalar dy)
+</pre>
+
+Adds <a href="#SkPoint_offset">offset</a> (<a href="#SkPoint_Offset_2_dx">dx</a>, <a href="#SkPoint_Offset_2_dy">dy</a>) to each <a href="#Point">Point</a> in <a href="#SkPoint_Offset_2_points">points</a> array of <a href="#SkPoint_length">length</a> <a href="#SkPoint_Offset_2_count">count</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_Offset_2_points"> <code><strong>points </strong></code> </a></td> <td>
+<a href="#Point">Point</a> array</td>
+ </tr> <tr> <td><a name="SkPoint_Offset_2_count"> <code><strong>count </strong></code> </a></td> <td>
+entries in array</td>
+ </tr> <tr> <td><a name="SkPoint_Offset_2_dx"> <code><strong>dx </strong></code> </a></td> <td>
+added to <a href="#SkPoint_fX">fX</a> in <a href="#SkPoint_Offset_2_points">points</a></td>
+ </tr> <tr> <td><a name="SkPoint_Offset_2_dy"> <code><strong>dy </strong></code> </a></td> <td>
+added to <a href="#SkPoint_fY">fY</a> in <a href="#SkPoint_Offset_2_points">points</a></td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="532849faa838de885b86d3ebffae3712"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_offset">offset</a> <a href="#SkPoint_addto_operator">operator+=(const SkVector& v)</a>
+
+---
+
+<a name="SkPoint_offset"></a>
+## offset
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void offset(SkScalar dx, SkScalar dy)
+</pre>
+
+Adds <a href="#SkPoint_offset">offset</a> (<a href="#SkPoint_offset_dx">dx</a>, <a href="#SkPoint_offset_dy">dy</a>) to <a href="#Point">Point</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_offset_dx"> <code><strong>dx </strong></code> </a></td> <td>
+added to <a href="#SkPoint_fX">fX</a></td>
+ </tr> <tr> <td><a name="SkPoint_offset_dy"> <code><strong>dy </strong></code> </a></td> <td>
+added to <a href="#SkPoint_fY">fY</a></td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="02750ceaa874f956e6e6544ef6b858ee"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_Offset">Offset</a> <a href="#SkPoint_addto_operator">operator+=(const SkVector& v)</a>
+
+---
+
+<a name="SkPoint_length"></a>
+## length
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkScalar length() const
+</pre>
+
+Returns the <a href="undocumented#Euclidean_Distance">Euclidean Distance</a> from origin, computed as:
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+sqrt(fX * fX + fY * fY)</pre>
+
+.
+
+### Return Value
+
+straight-line distance to origin
+
+### Example
+
+<div><fiddle-embed name="8363ab179447ee4b827679e20d3d81eb"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_distanceToOrigin">distanceToOrigin</a> <a href="#SkPoint_Length">Length</a> <a href="#SkPoint_setLength">setLength</a> <a href="#SkPoint_Distance">Distance</a>
+
+---
+
+<a name="SkPoint_distanceToOrigin"></a>
+## distanceToOrigin
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkScalar distanceToOrigin() const
+</pre>
+
+Returns the <a href="undocumented#Euclidean_Distance">Euclidean Distance</a> from origin, computed as:
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+sqrt(fX * fX + fY * fY)</pre>
+
+.
+
+### Return Value
+
+straight-line distance to origin
+
+### Example
+
+<div><fiddle-embed name="812cf26d91b1cdcd2c6b9438a8172518"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_length">length</a> <a href="#SkPoint_Length">Length</a> <a href="#SkPoint_setLength">setLength</a> <a href="#SkPoint_Distance">Distance</a>
+
+---
+
+<a name="SkPoint_normalize"></a>
+## normalize
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool normalize()
+</pre>
+
+Scales (<a href="#SkPoint_fX">fX</a>, <a href="#SkPoint_fY">fY</a>) so that <a href="#SkPoint_length">length</a> returns one, while preserving ratio of <a href="#SkPoint_fX">fX</a> to <a href="#SkPoint_fY">fY</a>,
+if possible. If prior <a href="#SkPoint_length">length</a> is nearly zero, sets <a href="SkPoint_Reference#Vector">Vector</a> to (0, 0) and returns
+false; otherwise returns true.
+
+### Return Value
+
+true if former <a href="#SkPoint_length">length</a> is not zero or nearly zero
+
+### Example
+
+<div><fiddle-embed name="d84fce292d86c7d9ef37ae2d179c03c7"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_Normalize">Normalize</a> <a href="#SkPoint_setLength">setLength</a> <a href="#SkPoint_length">length</a> <a href="#SkPoint_Length">Length</a>
+
+---
+
+<a name="SkPoint_setNormalize"></a>
+## setNormalize
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool setNormalize(SkScalar x, SkScalar y)
+</pre>
+
+Sets <a href="SkPoint_Reference#Vector">Vector</a> to (<a href="#SkPoint_x">x</a>, <a href="#SkPoint_y">y</a>) scaled so <a href="#SkPoint_length">length</a> returns one, and so that
+(<a href="#SkPoint_fX">fX</a>, <a href="#SkPoint_fY">fY</a>) is proportional to (<a href="#SkPoint_x">x</a>, <a href="#SkPoint_y">y</a>). If (<a href="#SkPoint_x">x</a>, <a href="#SkPoint_y">y</a>) <a href="#SkPoint_length">length</a> is nearly zero,
+sets <a href="SkPoint_Reference#Vector">Vector</a> to (0, 0) and returns false; otherwise returns true.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_setNormalize_x"> <code><strong>x </strong></code> </a></td> <td>
+proportional value for <a href="#SkPoint_fX">fX</a></td>
+ </tr> <tr> <td><a name="SkPoint_setNormalize_y"> <code><strong>y </strong></code> </a></td> <td>
+proportional value for <a href="#SkPoint_fY">fY</a></td>
+ </tr>
+</table>
+
+### Return Value
+
+true if (<a href="#SkPoint_x">x</a>, <a href="#SkPoint_y">y</a>) <a href="#SkPoint_length">length</a> is not zero or nearly zero
+
+### Example
+
+<div><fiddle-embed name="3e4f147d143a388802484bf0d26534c2"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_normalize">normalize</a> <a href="#SkPoint_setLength">setLength</a>
+
+---
+
+<a name="SkPoint_setLength"></a>
+## setLength
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool setLength(SkScalar length)
+</pre>
+
+Scales <a href="SkPoint_Reference#Vector">Vector</a> so that <a href="#SkPoint_distanceToOrigin">distanceToOrigin</a> returns <a href="#SkPoint_length">length</a>, if possible. If former
+<a href="#SkPoint_length">length</a> is nearly zero, sets <a href="SkPoint_Reference#Vector">Vector</a> to (0, 0) and return false; otherwise returns
+true.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_setLength_length"> <code><strong>length </strong></code> </a></td> <td>
+straight-line distance to origin</td>
+ </tr>
+</table>
+
+### Return Value
+
+true if former <a href="#SkPoint_length">length</a> is not zero or nearly zero
+
+### Example
+
+<div><fiddle-embed name="cbe7db206ece825aa3b9b7c3256aeaf0"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_length">length</a> <a href="#SkPoint_Length">Length</a> <a href="#SkPoint_setNormalize">setNormalize</a> <a href="#SkPoint_setAbs">setAbs</a>
+
+---
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool setLength(SkScalar x, SkScalar y, SkScalar length)
+</pre>
+
+Sets <a href="SkPoint_Reference#Vector">Vector</a> to (<a href="#SkPoint_x">x</a>, <a href="#SkPoint_y">y</a>) scaled to <a href="#SkPoint_length">length</a>, if possible. If former
+<a href="#SkPoint_length">length</a> is nearly zero, sets <a href="SkPoint_Reference#Vector">Vector</a> to (0, 0) and return false; otherwise returns
+true.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_setLength_2_x"> <code><strong>x </strong></code> </a></td> <td>
+proportional value for <a href="#SkPoint_fX">fX</a></td>
+ </tr> <tr> <td><a name="SkPoint_setLength_2_y"> <code><strong>y </strong></code> </a></td> <td>
+proportional value for <a href="#SkPoint_fY">fY</a></td>
+ </tr> <tr> <td><a name="SkPoint_setLength_2_length"> <code><strong>length </strong></code> </a></td> <td>
+straight-line distance to origin</td>
+ </tr>
+</table>
+
+### Return Value
+
+true if (<a href="#SkPoint_x">x</a>, <a href="#SkPoint_y">y</a>) <a href="#SkPoint_length">length</a> is not zero or nearly zero
+
+### Example
+
+<div><fiddle-embed name="3cc0662b6fbbee1fe3442a0acfece22c"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_length">length</a> <a href="#SkPoint_Length">Length</a> <a href="#SkPoint_setNormalize">setNormalize</a> <a href="#SkPoint_setAbs">setAbs</a>
+
+---
+
+<a name="SkPoint_scale"></a>
+## scale
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void scale(SkScalar scale, SkPoint* dst) const
+</pre>
+
+Sets <a href="#SkPoint_scale_dst">dst</a> to <a href="#Point">Point</a> times <a href="#SkPoint_scale">scale</a>. <a href="#SkPoint_scale_dst">dst</a> may be <a href="#Point">Point</a> to modify <a href="#Point">Point</a> in place.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_scale_scale"> <code><strong>scale </strong></code> </a></td> <td>
+factor to multiply <a href="#Point">Point</a> by</td>
+ </tr> <tr> <td><a name="SkPoint_scale_dst"> <code><strong>dst </strong></code> </a></td> <td>
+storage for scaled <a href="#Point">Point</a></td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="972e4e230806281adb928e068bcd8551"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_multiply_operator">operator*(SkScalar scale) const</a> <a href="#SkPoint_multiplyby_operator">operator*=(SkScalar scale)</a> <a href="#SkPoint_setLength">setLength</a>
+
+---
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void scale(SkScalar value)
+</pre>
+
+Scales <a href="#Point">Point</a> in place by <a href="#SkPoint_scale">scale</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_scale_2_value"> <code><strong>value </strong></code> </a></td> <td>
+factor to multiply <a href="#Point">Point</a> by</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="1060a4f27d8ef29519e6ac006ce90f2b"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_multiply_operator">operator*(SkScalar scale) const</a> <a href="#SkPoint_multiplyby_operator">operator*=(SkScalar scale)</a> <a href="#SkPoint_setLength">setLength</a>
+
+---
+
+<a name="SkPoint_negate"></a>
+## negate
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void negate()
+</pre>
+
+Changes the sign of <a href="#SkPoint_fX">fX</a> and <a href="#SkPoint_fY">fY</a>.
+
+### Example
+
+<div><fiddle-embed name="312c0c8065ab5d0adfda80cccf2d11e6">
+
+#### Example Output
+
+~~~~
+pt: 0, -0 negate: -0, 0
+pt: -1, -2 negate: 1, 2
+pt: inf, -inf negate: -inf, inf
+pt: nan, -nan negate: -nan, nan
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_minus_operator">operator-() const</a> <a href="#SkPoint_setAbs">setAbs</a>
+
+---
+
+<a name="SkPoint_minus_operator"></a>
+## operator-
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkPoint operator-() _const
+</pre>
+
+Returns <a href="#Point">Point</a> changing the signs of <a href="#SkPoint_fX">fX</a> and <a href="#SkPoint_fY">fY</a>.
+
+### Return Value
+
+<a href="#Point">Point</a> as (-<a href="#SkPoint_fX">fX</a>, -<a href="#SkPoint_fY">fY</a>)
+
+### Example
+
+<div><fiddle-embed name="9baf247cfcd8272c0ddf6ce93f676b37">
+
+#### Example Output
+
+~~~~
+pt: 0, -0 negate: -0, 0
+pt: -1, -2 negate: 1, 2
+pt: inf, -inf negate: -inf, inf
+pt: nan, -nan negate: -nan, nan
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_negate">negate</a> <a href="#SkPoint_subtract_operator">operator-(const SkPoint& a, const SkPoint& b)</a> <a href="#SkPoint_subtractfrom_operator">operator-=(const SkVector& v)</a> <a href="#SkIPoint_minus_operator">SkIPoint::operator-() const</a>
+
+---
+
+<a name="SkPoint_addto_operator"></a>
+## operator+=
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void operator+=(const SkVector& v)
+</pre>
+
+Adds <a href="SkPoint_Reference#Vector">Vector</a> <a href="#SkPoint_addto_operator_v">v</a> to <a href="#Point">Point</a>. Sets <a href="#Point">Point</a> to:
+(<a href="#SkPoint_fX">fX</a> + <a href="#SkPoint_addto_operator_v">v</a>.<a href="#SkPoint_fX">fX</a>, <a href="#SkPoint_fY">fY</a> + <a href="#SkPoint_addto_operator_v">v</a>.<a href="#SkPoint_fY">fY</a>).
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_addto_operator_v"> <code><strong>v </strong></code> </a></td> <td>
+<a href="SkPoint_Reference#Vector">Vector</a> to add</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="8b4e79109e2381345258cb744881b20c"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_offset">offset</a> <a href="#SkPoint_add_operator">operator+(const SkPoint& a, const SkVector& b)</a> <a href="#SkIPoint_addto_operator">SkIPoint::operator+=(const SkIVector& v)</a>
+
+---
+
+<a name="SkPoint_subtractfrom_operator"></a>
+## operator-=
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void operator-=(const SkVector& v)
+</pre>
+
+Subtracts <a href="SkPoint_Reference#Vector">Vector</a> <a href="#SkPoint_subtractfrom_operator_v">v</a> from <a href="#Point">Point</a>. Sets <a href="#Point">Point</a> to:
+(<a href="#SkPoint_fX">fX</a> - <a href="#SkPoint_subtractfrom_operator_v">v</a>.<a href="#SkPoint_fX">fX</a>, <a href="#SkPoint_fY">fY</a> - <a href="#SkPoint_subtractfrom_operator_v">v</a>.<a href="#SkPoint_fY">fY</a>).
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_subtractfrom_operator_v"> <code><strong>v </strong></code> </a></td> <td>
+<a href="SkPoint_Reference#Vector">Vector</a> to subtract</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="86c0399704d8dff4091bf87b8d87d40b"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_offset">offset</a> <a href="#SkPoint_subtract_operator">operator-(const SkPoint& a, const SkPoint& b)</a> <a href="#SkIPoint_subtractfrom_operator">SkIPoint::operator-=(const SkIVector& v)</a>
+
+---
+
+<a name="SkPoint_multiply_operator"></a>
+## operator*
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkPoint operator*(SkScalar scale) _const
+</pre>
+
+Returns <a href="#Point">Point</a> multiplied by <a href="#SkPoint_scale">scale</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_multiply_operator_scale"> <code><strong>scale </strong></code> </a></td> <td>
+<a href="#Scalar">Scalar</a> to multiply by</td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="#Point">Point</a> as (<a href="#SkPoint_fX">fX</a> * <a href="#SkPoint_scale">scale</a>, <a href="#SkPoint_fY">fY</a> * <a href="#SkPoint_scale">scale</a>)
+
+### Example
+
+<div><fiddle-embed name="35b3bc675779de043706ae4817ee950c"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_multiplyby_operator">operator*=(SkScalar scale)</a> <a href="#SkPoint_scale">scale</a> <a href="#SkPoint_setLength">setLength</a> <a href="#SkPoint_setNormalize">setNormalize</a>
+
+---
+
+<a name="SkPoint_multiplyby_operator"></a>
+## operator*=
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkPoint& operator*=(SkScalar scale)
+</pre>
+
+Multiplies <a href="#Point">Point</a> by <a href="#SkPoint_scale">scale</a>. Sets <a href="#Point">Point</a> to:
+(<a href="#SkPoint_fX">fX</a> * <a href="#SkPoint_scale">scale</a>, <a href="#SkPoint_fY">fY</a> * <a href="#SkPoint_scale">scale</a>)
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_multiplyby_operator_scale"> <code><strong>scale </strong></code> </a></td> <td>
+<a href="#Scalar">Scalar</a> to multiply by</td>
+ </tr>
+</table>
+
+### Return Value
+
+reference to <a href="#Point">Point</a>
+
+### Example
+
+<div><fiddle-embed name="3ce3db36235d80dbac4d39504cf756da"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_multiply_operator">operator*(SkScalar scale) const</a> <a href="#SkPoint_scale">scale</a> <a href="#SkPoint_setLength">setLength</a> <a href="#SkPoint_setNormalize">setNormalize</a>
+
+---
+
+<a name="SkPoint_isFinite"></a>
+## isFinite
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool isFinite() const
+</pre>
+
+Returns true if both <a href="#SkPoint_fX">fX</a> and <a href="#SkPoint_fY">fY</a> are measurable values.
+
+### Return Value
+
+true for values other than infinities and <a href="undocumented#NaN">NaN</a>
+
+### Example
+
+<div><fiddle-embed name="937cc166cc0e220f33fb82501141d0b3">
+
+#### Example Output
+
+~~~~
+pt: 0, -0 finite: true
+pt: -1, -2 finite: true
+pt: inf, 1 finite: false
+pt: nan, -1 finite: false
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkRect_isFinite">SkRect::isFinite</a> <a href="#SkPath_isFinite">SkPath::isFinite</a>
+
+---
+
+<a name="SkPoint_equals"></a>
+## equals
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool equals(SkScalar x, SkScalar y) const
+</pre>
+
+Returns true if <a href="#Point">Point</a> is equivalent to <a href="#Point">Point</a> constructed from (<a href="#SkPoint_x">x</a>, <a href="#SkPoint_y">y</a>).
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_equals_x"> <code><strong>x </strong></code> </a></td> <td>
+value compared with <a href="#SkPoint_fX">fX</a></td>
+ </tr> <tr> <td><a name="SkPoint_equals_y"> <code><strong>y </strong></code> </a></td> <td>
+value compared with <a href="#SkPoint_fY">fY</a></td>
+ </tr>
+</table>
+
+### Return Value
+
+true if <a href="#Point">Point</a> <a href="#SkPoint_equals">equals</a> (<a href="#SkPoint_x">x</a>, <a href="#SkPoint_y">y</a>)
+
+### Example
+
+<div><fiddle-embed name="4cecb878c8b66beffda051f26c00f817">
+
+#### Example Output
+
+~~~~
+pt: 0, -0 == pt
+pt: -1, -2 == pt
+pt: inf, 1 == pt
+pt: nan, -1 != pt
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_equal_operator">operator==(const SkPoint& a, const SkPoint& b)</a>
+
+---
+
+<a name="SkPoint_equal_operator"></a>
+## operator==
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool operator==(const SkPoint& a, const SkPoint& b)
+</pre>
+
+Returns true if <a href="#SkPoint_equal_operator_a">a</a> is equivalent to <a href="#SkPoint_equal_operator_b">b</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
+<a href="#Point">Point</a> to compare</td>
+ </tr> <tr> <td><a name="SkPoint_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
+<a href="#Point">Point</a> to compare</td>
+ </tr>
+</table>
+
+### Return Value
+
+true if <a href="#SkPoint_equal_operator_a">a</a>.<a href="#SkPoint_fX">fX</a> == <a href="#SkPoint_equal_operator_b">b</a>.<a href="#SkPoint_fX">fX</a> and <a href="#SkPoint_equal_operator_a">a</a>.<a href="#SkPoint_fY">fY</a> == <a href="#SkPoint_equal_operator_b">b</a>.<a href="#SkPoint_fY">fY</a>
+
+### Example
+
+<div><fiddle-embed name="741f793334a48a35dadf4310d7ea52cb">
+
+#### Example Output
+
+~~~~
+pt: 0, -0 == pt
+pt: -1, -2 == pt
+pt: inf, 1 == pt
+pt: nan, -1 != pt
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_equals">equals</a> <a href="#SkPoint_notequal_operator">operator!=(const SkPoint& a, const SkPoint& b)</a>
+
+---
+
+<a name="SkPoint_notequal_operator"></a>
+## operator!=
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool operator!=(const SkPoint& a, const SkPoint& b)
+</pre>
+
+Returns true if <a href="#SkPoint_notequal_operator_a">a</a> is not equivalent to <a href="#SkPoint_notequal_operator_b">b</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_notequal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
+<a href="#Point">Point</a> to compare</td>
+ </tr> <tr> <td><a name="SkPoint_notequal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
+<a href="#Point">Point</a> to compare</td>
+ </tr>
+</table>
+
+### Return Value
+
+true if <a href="#SkPoint_notequal_operator_a">a</a>.<a href="#SkPoint_fX">fX</a> != <a href="#SkPoint_notequal_operator_b">b</a>.<a href="#SkPoint_fX">fX</a> or <a href="#SkPoint_notequal_operator_a">a</a>.<a href="#SkPoint_fY">fY</a> != <a href="#SkPoint_notequal_operator_b">b</a>.<a href="#SkPoint_fY">fY</a>
+
+### Example
+
+<div><fiddle-embed name="8fe8572685eaa617f25a5a6767a874dc">
+
+#### Example Output
+
+~~~~
+pt: 0, -0 == pt
+pt: -1, -2 == pt
+pt: inf, 1 == pt
+pt: nan, -1 != pt
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_equal_operator">operator==(const SkPoint& a, const SkPoint& b)</a> <a href="#SkPoint_equals">equals</a>
+
+---
+
+<a name="SkPoint_subtract_operator"></a>
+## operator-
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkVector operator-(const SkPoint& a, const SkPoint& b)
+</pre>
+
+Returns <a href="SkPoint_Reference#Vector">Vector</a> from <a href="#SkPoint_subtract_operator_b">b</a> to <a href="#SkPoint_subtract_operator_a">a</a>, computed as(<a href="#SkPoint_subtract_operator_a">a</a>.<a href="#SkPoint_fX">fX</a> - <a href="#SkPoint_subtract_operator_b">b</a>.<a href="#SkPoint_fX">fX</a>, <a href="#SkPoint_subtract_operator_a">a</a>.<a href="#SkPoint_fY">fY</a> - <a href="#SkPoint_subtract_operator_b">b</a>.<a href="#SkPoint_fY">fY</a>).
+
+Can also be used to subtract <a href="SkPoint_Reference#Vector">Vector</a> from <a href="#Point">Point</a>, returning <a href="#Point">Point</a>.
+Can also be used to subtract <a href="SkPoint_Reference#Vector">Vector</a> from <a href="SkPoint_Reference#Vector">Vector</a>, returning <a href="SkPoint_Reference#Vector">Vector</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_subtract_operator_a"> <code><strong>a </strong></code> </a></td> <td>
+<a href="#Point">Point</a> to subtract from</td>
+ </tr> <tr> <td><a name="SkPoint_subtract_operator_b"> <code><strong>b </strong></code> </a></td> <td>
+<a href="#Point">Point</a> to subtract</td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="SkPoint_Reference#Vector">Vector</a> from <a href="#SkPoint_subtract_operator_b">b</a> to <a href="#SkPoint_subtract_operator_a">a</a>
+
+### Example
+
+<div><fiddle-embed name="b6c4943ecd0b2dccf9d220b8944009e0"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_subtractfrom_operator">operator-=(const SkVector& v)</a> <a href="#SkPoint_offset">offset</a>
+
+---
+
+<a name="SkPoint_add_operator"></a>
+## operator+
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkPoint operator+(const SkPoint& a, const SkVector& b)
+</pre>
+
+Returns <a href="#Point">Point</a> resulting from <a href="#Point">Point</a> <a href="#SkPoint_add_operator_a">a</a> <a href="#SkPoint_offset">offset</a> by <a href="SkPoint_Reference#Vector">Vector</a> <a href="#SkPoint_add_operator_b">b</a>, computed as:
+(<a href="#SkPoint_add_operator_a">a</a>.<a href="#SkPoint_fX">fX</a> + <a href="#SkPoint_add_operator_b">b</a>.<a href="#SkPoint_fX">fX</a>, <a href="#SkPoint_add_operator_a">a</a>.<a href="#SkPoint_fY">fY</a> + <a href="#SkPoint_add_operator_b">b</a>.<a href="#SkPoint_fY">fY</a>).
+
+Can also be used to <a href="#SkPoint_offset">offset</a> <a href="#Point">Point</a> <a href="#SkPoint_add_operator_b">b</a> by <a href="SkPoint_Reference#Vector">Vector</a> <a href="#SkPoint_add_operator_a">a</a>, returning <a href="#Point">Point</a>.
+Can also be used to add <a href="SkPoint_Reference#Vector">Vector</a> to <a href="SkPoint_Reference#Vector">Vector</a>, returning <a href="SkPoint_Reference#Vector">Vector</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_add_operator_a"> <code><strong>a </strong></code> </a></td> <td>
+<a href="#Point">Point</a> or <a href="SkPoint_Reference#Vector">Vector</a> to add to</td>
+ </tr> <tr> <td><a name="SkPoint_add_operator_b"> <code><strong>b </strong></code> </a></td> <td>
+<a href="#Point">Point</a> or <a href="SkPoint_Reference#Vector">Vector</a> to add</td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="#Point">Point</a> equal to <a href="#SkPoint_add_operator_a">a</a> <a href="#SkPoint_offset">offset</a> by <a href="#SkPoint_add_operator_b">b</a>
+
+### Example
+
+<div><fiddle-embed name="911a84253dfec4dabf94dbe3c71766f0"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_addto_operator">operator+=(const SkVector& v)</a> <a href="#SkPoint_offset">offset</a>
+
+---
+
+<a name="SkPoint_Length"></a>
+## Length
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static SkScalar Length(SkScalar x, SkScalar y)
+</pre>
+
+Returns the <a href="undocumented#Euclidean_Distance">Euclidean Distance</a> from origin, computed as:
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+sqrt(x * x + y * y)</pre>
+
+.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_Length_x"> <code><strong>x </strong></code> </a></td> <td>
+component of <a href="#SkPoint_length">length</a></td>
+ </tr> <tr> <td><a name="SkPoint_Length_y"> <code><strong>y </strong></code> </a></td> <td>
+component of <a href="#SkPoint_length">length</a></td>
+ </tr>
+</table>
+
+### Return Value
+
+straight-line distance to origin
+
+### Example
+
+<div><fiddle-embed name="c98773d8b4509969d78cb8121e4b77f6"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_length">length</a> <a href="#SkPoint_Distance">Distance</a> <a href="#SkPoint_setLength">setLength</a>
+
+---
+
+<a name="SkPoint_Normalize"></a>
+## Normalize
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static SkScalar Normalize(SkVector* vec)
+</pre>
+
+Scales (<a href="#SkPoint_Normalize_vec">vec</a>-><a href="#SkPoint_fX">fX</a>, <a href="#SkPoint_Normalize_vec">vec</a>-><a href="#SkPoint_fY">fY</a>) so that <a href="#SkPoint_length">length</a> returns one, while preserving ratio of <a href="#SkPoint_Normalize_vec">vec</a>-><a href="#SkPoint_fX">fX</a> to <a href="#SkPoint_Normalize_vec">vec</a>-><a href="#SkPoint_fY">fY</a>,
+if possible. If original <a href="#SkPoint_length">length</a> is nearly zero, sets <a href="#SkPoint_Normalize_vec">vec</a> to (0, 0) and returns zero;
+otherwise, returns <a href="#SkPoint_length">length</a> of <a href="#SkPoint_Normalize_vec">vec</a> before <a href="#SkPoint_Normalize_vec">vec</a> is scaled.
+
+Returned prior <a href="#SkPoint_length">length</a> may be <a href="undocumented#SK_ScalarInfinity">SK ScalarInfinity</a> if it can not be represented by <a href="undocumented#SkScalar">SkScalar</a>.
+
+Note that <a href="#SkPoint_normalize">normalize</a> is faster if prior <a href="#SkPoint_length">length</a> is not required.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_Normalize_vec"> <code><strong>vec </strong></code> </a></td> <td>
+normalized to unit <a href="#SkPoint_length">length</a></td>
+ </tr>
+</table>
+
+### Return Value
+
+original <a href="#SkPoint_Normalize_vec">vec</a> <a href="#SkPoint_length">length</a>
+
+### Example
+
+<div><fiddle-embed name="60a08f3ce75374fc815384616d114df7"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_normalize">normalize</a> <a href="#SkPoint_setLength">setLength</a> <a href="#SkPoint_Length">Length</a>
+
+---
+
+<a name="SkPoint_Distance"></a>
+## Distance
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static SkScalar Distance(const SkPoint& a, const SkPoint& b)
+</pre>
+
+Returns the <a href="undocumented#Euclidean_Distance">Euclidean Distance</a> between <a href="#SkPoint_Distance_a">a</a> and <a href="#SkPoint_Distance_b">b</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_Distance_a"> <code><strong>a </strong></code> </a></td> <td>
+line end point</td>
+ </tr> <tr> <td><a name="SkPoint_Distance_b"> <code><strong>b </strong></code> </a></td> <td>
+line end point</td>
+ </tr>
+</table>
+
+### Return Value
+
+straight-line distance from <a href="#SkPoint_Distance_a">a</a> to <a href="#SkPoint_Distance_b">b</a>
+
+### Example
+
+<div><fiddle-embed name="9e0a2de2eb94dba4521d733e73f2bda5"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_length">length</a> <a href="#SkPoint_setLength">setLength</a>
+
+---
+
+<a name="SkPoint_DotProduct"></a>
+## DotProduct
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static SkScalar DotProduct(const SkVector& a, const SkVector& b)
+</pre>
+
+Returns the <a href="#SkPoint_dot">dot</a> product of <a href="SkPoint_Reference#Vector">Vector</a> <a href="#SkPoint_DotProduct_a">a</a> and <a href="SkPoint_Reference#Vector">Vector</a> <a href="#SkPoint_DotProduct_b">b</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_DotProduct_a"> <code><strong>a </strong></code> </a></td> <td>
+left side of <a href="#SkPoint_dot">dot</a> product</td>
+ </tr> <tr> <td><a name="SkPoint_DotProduct_b"> <code><strong>b </strong></code> </a></td> <td>
+right side of <a href="#SkPoint_dot">dot</a> product</td>
+ </tr>
+</table>
+
+### Return Value
+
+product of input magnitudes and cosine of the angle between them
+
+### Example
+
+<div><fiddle-embed name="496db0131a003162faba7d7f98b30340"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_dot">dot</a> <a href="#SkPoint_CrossProduct">CrossProduct</a>
+
+---
+
+<a name="SkPoint_CrossProduct"></a>
+## CrossProduct
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static SkScalar CrossProduct(const SkVector& a, const SkVector& b)
+</pre>
+
+Returns the <a href="#SkPoint_cross">cross</a> product of <a href="SkPoint_Reference#Vector">Vector</a> <a href="#SkPoint_CrossProduct_a">a</a> and <a href="SkPoint_Reference#Vector">Vector</a> <a href="#SkPoint_CrossProduct_b">b</a>.
+
+<a href="#SkPoint_CrossProduct_a">a</a> and <a href="#SkPoint_CrossProduct_b">b</a> form three-dimensional vectors with z equal to zero. The <a href="#SkPoint_cross">cross</a> product
+is <a href="#SkPoint_CrossProduct_a">a</a> three-dimensional vector with <a href="#SkPoint_x">x</a> and <a href="#SkPoint_y">y</a> equal to zero. The <a href="#SkPoint_cross">cross</a> product z
+term <a href="#SkPoint_equals">equals</a> the returned value.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_CrossProduct_a"> <code><strong>a </strong></code> </a></td> <td>
+left side of <a href="#SkPoint_cross">cross</a> product</td>
+ </tr> <tr> <td><a name="SkPoint_CrossProduct_b"> <code><strong>b </strong></code> </a></td> <td>
+right side of <a href="#SkPoint_cross">cross</a> product</td>
+ </tr>
+</table>
+
+### Return Value
+
+area spanned by <a href="#Vector">Vectors</a> signed by angle direction
+
+### Example
+
+<div><fiddle-embed name="8b8a4cd8a29d22bb9c5e63b70357bd65"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_cross">cross</a> <a href="#SkPoint_DotProduct">DotProduct</a>
+
+---
+
+<a name="SkPoint_cross"></a>
+## cross
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkScalar cross(const SkVector& vec) const
+</pre>
+
+Returns the <a href="#SkPoint_cross">cross</a> product of <a href="SkPoint_Reference#Vector">Vector</a> and <a href="#SkPoint_cross_vec">vec</a>.
+
+<a href="SkPoint_Reference#Vector">Vector</a> and <a href="#SkPoint_cross_vec">vec</a> form three-dimensional vectors with z equal to zero. The
+<a href="#SkPoint_cross">cross</a> product is a three-dimensional vector with <a href="#SkPoint_x">x</a> and <a href="#SkPoint_y">y</a> equal to zero.
+The <a href="#SkPoint_cross">cross</a> product z term <a href="#SkPoint_equals">equals</a> the returned value.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_cross_vec"> <code><strong>vec </strong></code> </a></td> <td>
+right side of <a href="#SkPoint_cross">cross</a> product</td>
+ </tr>
+</table>
+
+### Return Value
+
+area spanned by <a href="#Vector">Vectors</a> signed by angle direction
+
+### Example
+
+<div><fiddle-embed name="0bc7b3997357e499817278b78bdfbf1d"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_CrossProduct">CrossProduct</a> <a href="#SkPoint_dot">dot</a>
+
+---
+
+<a name="SkPoint_dot"></a>
+## dot
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkScalar dot(const SkVector& vec) const
+</pre>
+
+Returns the <a href="#SkPoint_dot">dot</a> product of <a href="SkPoint_Reference#Vector">Vector</a> and <a href="SkPoint_Reference#Vector">Vector</a> <a href="#SkPoint_dot_vec">vec</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkPoint_dot_vec"> <code><strong>vec </strong></code> </a></td> <td>
+right side of <a href="#SkPoint_dot">dot</a> product</td>
+ </tr>
+</table>
+
+### Return Value
+
+product of input magnitudes and cosine of the angle between them
+
+### Example
+
+<div><fiddle-embed name="56d01ccfedd71d3c504b09afa2875d38"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkPoint_DotProduct">DotProduct</a> <a href="#SkPoint_cross">cross</a>
+
+---
+
diff --git a/site/user/api/SkRect_Reference.md b/site/user/api/SkRect_Reference.md
index fe1f090331..569603d9d3 100644
--- a/site/user/api/SkRect_Reference.md
+++ b/site/user/api/SkRect_Reference.md
@@ -24,8 +24,8 @@ integer input cannot convert to <a href="undocumented#SkScalar">SkScalar</a> wit
| description | function |
| --- | --- |
-| bool <a href="#SkRect_not_equal_operator">operator!=(const SkRect& a, const SkRect& b)</a> | Returns true if member bits are unequal. |
-| bool <a href="#SkRect_equal_operator">operator==(const SkRect& a, const SkRect& b)</a> | Returns true if member bits are equal. |
+| bool <a href="#SkRect_notequal_operator">operator!=(const SkRect& a, const SkRect& b)</a> | Returns true if members are unequal. |
+| bool <a href="#SkRect_equal_operator">operator==(const SkRect& a, const SkRect& b)</a> | Returns true if members are equal. |
## <a name="Member_Functions"></a> Member Functions
@@ -76,8 +76,8 @@ integer input cannot convert to <a href="undocumented#SkScalar">SkScalar</a> wit
| <a href="#SkRect_roundIn">roundIn</a> | Sets members to nearest integer value towards opposite. |
| <a href="#SkRect_roundOut">roundOut</a> | Sets members to nearest integer value away from opposite. |
| <a href="#SkRect_set">set</a> | Sets to <a href="undocumented#SkScalar">SkScalar</a> input (<a href="#SkRect_left">left</a>, <a href="#SkRect_top">top</a>, <a href="#SkRect_right">right</a>, <a href="#SkRect_bottom">bottom</a>) and others. |
-| <a href="#SkRect_setBounds">setBounds</a> | Sets to upper and lower limits of <a href="undocumented#Point">Point</a> array. |
-| <a href="#SkRect_setBoundsCheck">setBoundsCheck</a> | Sets to upper and lower limits of <a href="undocumented#Point">Point</a> array. |
+| <a href="#SkRect_setBounds">setBounds</a> | Sets to upper and lower limits of <a href="SkPoint_Reference#Point">Point</a> array. |
+| <a href="#SkRect_setBoundsCheck">setBoundsCheck</a> | Sets to upper and lower limits of <a href="SkPoint_Reference#Point">Point</a> array. |
| <a href="#SkRect_setEmpty">setEmpty</a> | Sets to (0, 0, 0, 0). |
| <a href="#SkRect_setLTRB">setLTRB</a> | Sets to <a href="undocumented#SkScalar">SkScalar</a> input (<a href="#SkRect_left">left</a>, <a href="#SkRect_top">top</a>, <a href="#SkRect_right">right</a>, <a href="#SkRect_bottom">bottom</a>). |
| <a href="#SkRect_setLargest">setLargest</a> | Sets to (<a href="undocumented#SK_ScalarMin">SK ScalarMin</a>, <a href="undocumented#SK_ScalarMin">SK ScalarMin</a>, <a href="undocumented#SK_ScalarMax">SK ScalarMax</a>, <a href="undocumented#SK_ScalarMax">SK ScalarMax</a>). |
@@ -85,7 +85,7 @@ integer input cannot convert to <a href="undocumented#SkScalar">SkScalar</a> wit
| <a href="#SkRect_setWH">setWH</a> | Sets to <a href="undocumented#SkScalar">SkScalar</a> input (0, 0, <a href="#SkRect_width">width</a>, <a href="#SkRect_height">height</a>). |
| <a href="#SkRect_setXYWH">setXYWH</a> | Sets to <a href="undocumented#SkScalar">SkScalar</a> input (<a href="#SkRect_x">x</a>, <a href="#SkRect_y">y</a>, <a href="#SkRect_width">width</a>, <a href="#SkRect_height">height</a>). |
| <a href="#SkRect_sort">sort</a> | Orders sides from smaller to larger. |
-| <a href="#SkRect_toQuad">toQuad</a> | Returns four corners as <a href="undocumented#Point">Point</a>. |
+| <a href="#SkRect_toQuad">toQuad</a> | Returns four corners as <a href="SkPoint_Reference#Point">Point</a>. |
| <a href="#SkRect_top">top</a> | Returns smaller bounds in <a href="#SkRect_y">y</a>, if sorted. |
| <a href="#SkRect_width">width</a> | Returns span in <a href="#SkRect_x">x</a>. |
| <a href="#SkRect_x">x</a> | Returns bounds <a href="#SkRect_left">left</a>. |
@@ -114,7 +114,7 @@ vertical values when sorted. When equal to or less than <a href="#SkRect_fTop">f
<a name="SkRect_MakeEmpty"></a>
## MakeEmpty
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static constexpr SkRect SK_WARN_UNUSED_RESULT MakeEmpty()
</pre>
@@ -151,7 +151,7 @@ outset rect isEmpty: false
<a name="SkRect_MakeLargest"></a>
## MakeLargest
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static SkRect SK_WARN_UNUSED_RESULT MakeLargest()
</pre>
@@ -188,7 +188,7 @@ outset a little more isFinite: false
<a name="SkRect_MakeLargestS32"></a>
## MakeLargestS32
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static SkRect SK_WARN_UNUSED_RESULT MakeLargestS32()
</pre>
@@ -225,7 +225,7 @@ f_rect == r_rect
<a name="SkRect_MakeWH"></a>
## MakeWH
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static constexpr SkRect SK_WARN_UNUSED_RESULT MakeWH(SkScalar w, SkScalar h)
</pre>
@@ -269,7 +269,7 @@ all equal
<a name="SkRect_MakeIWH"></a>
## MakeIWH
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static SkRect SK_WARN_UNUSED_RESULT MakeIWH(int w, int h)
</pre>
@@ -314,7 +314,7 @@ i_rect width: 125000111 f_rect width:125000112
<a name="SkRect_MakeSize"></a>
## MakeSize
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static constexpr SkRect SK_WARN_UNUSED_RESULT MakeSize(const SkSize& size)
</pre>
@@ -354,9 +354,8 @@ floor width: 25 height: 35
<a name="SkRect_MakeLTRB"></a>
## MakeLTRB
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-static constexpr SkRect SK_WARN_UNUSED_RESULT MakeLTRB(SkScalar l, SkScalar t,
- SkScalar r, SkScalar b)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static constexpr SkRect SK_WARN_UNUSED_RESULT MakeLTRB(SkScalar l, SkScalar t, SkScalar r, SkScalar b)
</pre>
Returns constructed <a href="#Rect">Rect</a> <a href="#SkRect_set">set</a> to (<a href="#SkRect_MakeLTRB_l">l</a>, <a href="#SkRect_MakeLTRB_t">t</a>, <a href="#SkRect_MakeLTRB_r">r</a>, <a href="#SkRect_MakeLTRB_b">b</a>). Does not <a href="#SkRect_sort">sort</a> input; <a href="#Rect">Rect</a> may
@@ -401,9 +400,8 @@ rect: 5, 25, 15, 35 isEmpty: false
<a name="SkRect_MakeXYWH"></a>
## MakeXYWH
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-static constexpr SkRect SK_WARN_UNUSED_RESULT MakeXYWH(SkScalar x, SkScalar y,
- SkScalar w, SkScalar h)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static constexpr SkRect SK_WARN_UNUSED_RESULT MakeXYWH(SkScalar x, SkScalar y, SkScalar w, SkScalar h)
</pre>
Returns constructed <a href="#Rect">Rect</a> <a href="#SkRect_set">set</a> to(<a href="#SkRect_x">x</a>, <a href="#SkRect_y">y</a>, <a href="#SkRect_x">x</a> + <a href="#SkRect_MakeXYWH_w">w</a>, <a href="#SkRect_y">y</a> + <a href="#SkRect_MakeXYWH_h">h</a>).
@@ -449,7 +447,7 @@ rect: -10, 35, 5, 60 isEmpty: false
<a name="SkRect_MakeFromIRect"></a>
## MakeFromIRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static SkRect SK_WARN_UNUSED_RESULT MakeFromIRect(const SkIRect& irect)
</pre>
@@ -475,7 +473,7 @@ integer rect</td>
<a name="SkRect_Make"></a>
## Make
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static SkRect Make(const SkISize& size)
</pre>
@@ -511,7 +509,7 @@ rect1 == rect2
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static SkRect SK_WARN_UNUSED_RESULT Make(const SkIRect& irect)
</pre>
@@ -543,7 +541,7 @@ integer unsorted bounds</td>
<a name="SkRect_isEmpty"></a>
## isEmpty
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isEmpty() const
</pre>
@@ -579,7 +577,7 @@ sorted: {20, 40, 20, 50} is empty
<a name="SkRect_isSorted"></a>
## isSorted
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isSorted() const
</pre>
@@ -615,7 +613,7 @@ sorted: {20, 40, 20, 50} is sorted
<a name="SkRect_isLargest"></a>
## isLargest
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isLargest() const
</pre>
@@ -650,7 +648,7 @@ large is finite: true
<a name="SkRect_isFinite"></a>
## isFinite
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isFinite() const
</pre>
@@ -684,7 +682,7 @@ widest is finite: false
<a name="SkRect_x"></a>
## x
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar x() const
</pre>
@@ -717,7 +715,7 @@ sorted.fLeft: 10 sorted.x(): 10
<a name="SkRect_y"></a>
## y
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar y() const
</pre>
@@ -750,7 +748,7 @@ sorted.fTop: 5 sorted.y(): 5
<a name="SkRect_left"></a>
## left
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar left() const
</pre>
@@ -783,7 +781,7 @@ sorted.fLeft: 10 sorted.left(): 10
<a name="SkRect_top"></a>
## top
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar top() const
</pre>
@@ -816,7 +814,7 @@ sorted.fTop: 5 sorted.top(): 5
<a name="SkRect_right"></a>
## right
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar right() const
</pre>
@@ -849,7 +847,7 @@ sorted.fRight: 15 sorted.right(): 15
<a name="SkRect_bottom"></a>
## bottom
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar bottom() const
</pre>
@@ -882,11 +880,11 @@ sorted.fBottom: 25 sorted.bottom(): 25
<a name="SkRect_width"></a>
## width
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar width() const
</pre>
-Returns span on the x-axis. This does not check if <a href="#Rect">Rect</a> is sorted, or if
+Returns span on the <a href="#SkRect_x">x</a>-axis. This does not check if <a href="#Rect">Rect</a> is sorted, or if
result fits in 32-bit float; result may be negative or infinity.
### Return Value
@@ -915,11 +913,11 @@ large width: 4294967296
<a name="SkRect_height"></a>
## height
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar height() const
</pre>
-Returns span on the y-axis. This does not check if <a href="SkIRect_Reference#IRect">IRect</a> is sorted, or if
+Returns span on the <a href="#SkRect_y">y</a>-axis. This does not check if <a href="SkIRect_Reference#IRect">IRect</a> is sorted, or if
result fits in 32-bit float; result may be negative or infinity.
### Return Value
@@ -948,7 +946,7 @@ large height: 4294967296
<a name="SkRect_centerX"></a>
## centerX
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar centerX() const
</pre>
@@ -983,7 +981,7 @@ left: -41 right: -20 centerX: -30.5
<a name="SkRect_centerY"></a>
## centerY
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalar centerY() const
</pre>
@@ -1015,7 +1013,7 @@ left: 2e+38 right: 3e+38 centerX: inf safe mid x: 2.5e+38
<a name="SkRect_equal_operator"></a>
## operator==
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool operator==(const SkRect& a, const SkRect& b)
</pre>
@@ -1055,28 +1053,28 @@ tests are equal
### See Also
-<a href="#SkRect_not_equal_operator">operator!=(const SkRect& a, const SkRect& b)</a>
+<a href="#SkRect_notequal_operator">operator!=(const SkRect& a, const SkRect& b)</a>
---
-<a name="SkRect_not_equal_operator"></a>
+<a name="SkRect_notequal_operator"></a>
## operator!=
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool operator!=(const SkRect& a, const SkRect& b)
</pre>
-Returns true if any in <a href="#SkRect_not_equal_operator_a">a</a>: <a href="#SkRect_fLeft">fLeft</a>, <a href="#SkRect_fTop">fTop</a>, <a href="#SkRect_fRight">fRight</a>, and <a href="#SkRect_fBottom">fBottom</a>; does not
-equal the corresponding members in <a href="#SkRect_not_equal_operator_b">b</a>.
+Returns true if any in <a href="#SkRect_notequal_operator_a">a</a>: <a href="#SkRect_fLeft">fLeft</a>, <a href="#SkRect_fTop">fTop</a>, <a href="#SkRect_fRight">fRight</a>, and <a href="#SkRect_fBottom">fBottom</a>; does not
+equal the corresponding members in <a href="#SkRect_notequal_operator_b">b</a>.
-<a href="#SkRect_not_equal_operator_a">a</a> and <a href="#SkRect_not_equal_operator_b">b</a> are not equal if either contain <a href="undocumented#NaN">NaN</a>. <a href="#SkRect_not_equal_operator_a">a</a> and <a href="#SkRect_not_equal_operator_b">b</a> are equal if members
+<a href="#SkRect_notequal_operator_a">a</a> and <a href="#SkRect_notequal_operator_b">b</a> are not equal if either contain <a href="undocumented#NaN">NaN</a>. <a href="#SkRect_notequal_operator_a">a</a> and <a href="#SkRect_notequal_operator_b">b</a> are equal if members
contain zeroes <a href="#SkRect_width">width</a> different signs.
### Parameters
-<table> <tr> <td><a name="SkRect_not_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
+<table> <tr> <td><a name="SkRect_notequal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
<a href="#Rect">Rect</a> to compare</td>
- </tr> <tr> <td><a name="SkRect_not_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
+ </tr> <tr> <td><a name="SkRect_notequal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
<a href="#Rect">Rect</a> to compare</td>
</tr>
</table>
@@ -1106,12 +1104,12 @@ test with NaN is not equal to itself
<a name="SkRect_toQuad"></a>
## toQuad
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void toQuad(SkPoint quad[4]) const
</pre>
-Returns four points in <a href="#SkRect_toQuad_quad">quad</a> that enclose <a href="#Rect">Rect</a> ordered as: top-left, top-right,
-bottom-right, bottom-left.
+Returns four points in <a href="#SkRect_toQuad_quad">quad</a> that enclose <a href="#Rect">Rect</a> ordered as: <a href="#SkRect_top">top</a>-<a href="#SkRect_left">left</a>, <a href="#SkRect_top">top</a>-<a href="#SkRect_right">right</a>,
+<a href="#SkRect_bottom">bottom</a>-<a href="#SkRect_right">right</a>, <a href="#SkRect_bottom">bottom</a>-<a href="#SkRect_left">left</a>.
### Parameters
@@ -1142,7 +1140,7 @@ corners: {1, 2} {3, 2} {3, 4} {1, 4}
<a name="SkRect_setEmpty"></a>
## setEmpty
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setEmpty()
</pre>
@@ -1174,7 +1172,7 @@ rect: {0, 0, 0, 0} is empty
<a name="SkRect_set"></a>
## set
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void set(const SkIRect& src)
</pre>
@@ -1207,7 +1205,7 @@ f_rect: {3, 4, 1, 2}
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void set(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom)
</pre>
@@ -1250,7 +1248,7 @@ rect2: {3, 4, 1, 2}
<a name="SkRect_setLTRB"></a>
## setLTRB
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setLTRB(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom)
</pre>
@@ -1293,7 +1291,7 @@ rect2: {3, 4, 1, 2}
<a name="SkRect_iset"></a>
## iset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void iset(int left, int top, int right, int bottom)
</pre>
@@ -1337,7 +1335,7 @@ rect2: {3, 4, 1, 2}
<a name="SkRect_isetWH"></a>
## isetWH
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void isetWH(int width, int height)
</pre>
@@ -1373,12 +1371,12 @@ rect2: {0, 0, 1, 2}
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void set(const SkPoint pts[], int count)
</pre>
-Sets to bounds of <a href="undocumented#Point">Point</a> array with <a href="#SkRect_set_3_count">count</a> entries. If <a href="#SkRect_set_3_count">count</a> is zero or smaller,
-or if <a href="undocumented#Point">Point</a> array <a href="#SkRect_contains">contains</a> an infinity or <a href="undocumented#NaN">NaN</a>, sets <a href="#Rect">Rect</a> to (0, 0, 0, 0).
+Sets to bounds of <a href="SkPoint_Reference#Point">Point</a> array with <a href="#SkRect_set_3_count">count</a> entries. If <a href="#SkRect_set_3_count">count</a> is zero or smaller,
+or if <a href="SkPoint_Reference#Point">Point</a> array <a href="#SkRect_contains">contains</a> an infinity or <a href="undocumented#NaN">NaN</a>, sets <a href="#Rect">Rect</a> to (0, 0, 0, 0).
Result is either empty or sorted: <a href="#SkRect_fLeft">fLeft</a> is less than or equal to <a href="#SkRect_fRight">fRight</a>, and
<a href="#SkRect_fTop">fTop</a> is less than or equal to <a href="#SkRect_fBottom">fBottom</a>.
@@ -1386,7 +1384,7 @@ Result is either empty or sorted: <a href="#SkRect_fLeft">fLeft</a> is less than
### Parameters
<table> <tr> <td><a name="SkRect_set_3_pts"> <code><strong>pts </strong></code> </a></td> <td>
-<a href="undocumented#Point">Point</a> array</td>
+<a href="SkPoint_Reference#Point">Point</a> array</td>
</tr> <tr> <td><a name="SkRect_set_3_count"> <code><strong>count </strong></code> </a></td> <td>
entries in array</td>
</tr>
@@ -1417,12 +1415,12 @@ added: nan, 8 count: 4 rect: 0, 0, 0, 0
<a name="SkRect_setBounds"></a>
## setBounds
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setBounds(const SkPoint pts[], int count)
</pre>
-Sets to bounds of <a href="undocumented#Point">Point</a> array with <a href="#SkRect_setBounds_count">count</a> entries. If <a href="#SkRect_setBounds_count">count</a> is zero or smaller,
-or if <a href="undocumented#Point">Point</a> array <a href="#SkRect_contains">contains</a> an infinity or <a href="undocumented#NaN">NaN</a>, sets to (0, 0, 0, 0).
+Sets to bounds of <a href="SkPoint_Reference#Point">Point</a> array with <a href="#SkRect_setBounds_count">count</a> entries. If <a href="#SkRect_setBounds_count">count</a> is zero or smaller,
+or if <a href="SkPoint_Reference#Point">Point</a> array <a href="#SkRect_contains">contains</a> an infinity or <a href="undocumented#NaN">NaN</a>, sets to (0, 0, 0, 0).
Result is either empty or sorted: <a href="#SkRect_fLeft">fLeft</a> is less than or equal to <a href="#SkRect_fRight">fRight</a>, and
<a href="#SkRect_fTop">fTop</a> is less than or equal to <a href="#SkRect_fBottom">fBottom</a>.
@@ -1430,7 +1428,7 @@ Result is either empty or sorted: <a href="#SkRect_fLeft">fLeft</a> is less than
### Parameters
<table> <tr> <td><a name="SkRect_setBounds_pts"> <code><strong>pts </strong></code> </a></td> <td>
-<a href="undocumented#Point">Point</a> array</td>
+<a href="SkPoint_Reference#Point">Point</a> array</td>
</tr> <tr> <td><a name="SkRect_setBounds_count"> <code><strong>count </strong></code> </a></td> <td>
entries in array</td>
</tr>
@@ -1461,12 +1459,12 @@ added: nan, 8 count: 4 rect: 0, 0, 0, 0
<a name="SkRect_setBoundsCheck"></a>
## setBoundsCheck
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool setBoundsCheck(const SkPoint pts[], int count)
</pre>
-Sets to bounds of <a href="undocumented#Point">Point</a> array with <a href="#SkRect_setBoundsCheck_count">count</a> entries. Returns false if <a href="#SkRect_setBoundsCheck_count">count</a> is
-zero or smaller, or if <a href="undocumented#Point">Point</a> array <a href="#SkRect_contains">contains</a> an infinity or <a href="undocumented#NaN">NaN</a>; in these cases
+Sets to bounds of <a href="SkPoint_Reference#Point">Point</a> array with <a href="#SkRect_setBoundsCheck_count">count</a> entries. Returns false if <a href="#SkRect_setBoundsCheck_count">count</a> is
+zero or smaller, or if <a href="SkPoint_Reference#Point">Point</a> array <a href="#SkRect_contains">contains</a> an infinity or <a href="undocumented#NaN">NaN</a>; in these cases
sets <a href="#Rect">Rect</a> to (0, 0, 0, 0).
Result is either empty or sorted: <a href="#SkRect_fLeft">fLeft</a> is less than or equal to <a href="#SkRect_fRight">fRight</a>, and
@@ -1475,7 +1473,7 @@ Result is either empty or sorted: <a href="#SkRect_fLeft">fLeft</a> is less than
### Parameters
<table> <tr> <td><a name="SkRect_setBoundsCheck_pts"> <code><strong>pts </strong></code> </a></td> <td>
-<a href="undocumented#Point">Point</a> array</td>
+<a href="SkPoint_Reference#Point">Point</a> array</td>
</tr> <tr> <td><a name="SkRect_setBoundsCheck_count"> <code><strong>count </strong></code> </a></td> <td>
entries in array</td>
</tr>
@@ -1483,7 +1481,7 @@ entries in array</td>
### Return Value
-true if all <a href="undocumented#Point">Point</a> values are finite
+true if all <a href="SkPoint_Reference#Point">Point</a> values are finite
### Example
@@ -1507,7 +1505,7 @@ added: nan, 8 count: 4 rect: 0, 0, 0, 0 success: false
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void set(const SkPoint& p0, const SkPoint& p1)
</pre>
@@ -1536,7 +1534,7 @@ corner to include</td>
<a name="SkRect_setXYWH"></a>
## setXYWH
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setXYWH(SkScalar x, SkScalar y, SkScalar width, SkScalar height)
</pre>
@@ -1579,7 +1577,7 @@ rect: -10, 35, 5, 60 isEmpty: false
<a name="SkRect_setWH"></a>
## setWH
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setWH(SkScalar width, SkScalar height)
</pre>
@@ -1617,7 +1615,7 @@ rect: -15, 0, 0, 25 isEmpty: false
<a name="SkRect_setLargest"></a>
## setLargest
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setLargest()
</pre>
@@ -1650,7 +1648,7 @@ outset a little more isFinite: false
<a name="SkRect_setLargestInverted"></a>
## setLargestInverted
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setLargestInverted()
</pre>
@@ -1681,7 +1679,7 @@ grown rect: 42, 24, 42, 24 isEmpty: true
<a name="SkRect_makeOffset"></a>
## makeOffset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkRect makeOffset(SkScalar dx, SkScalar dy) const
</pre>
@@ -1727,7 +1725,7 @@ rect: 25, 82, 35, 92 isEmpty: false
<a name="SkRect_makeInset"></a>
## makeInset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkRect makeInset(SkScalar dx, SkScalar dy) const
</pre>
@@ -1773,7 +1771,7 @@ rect: 25, 82, 5, 28 isEmpty: true
<a name="SkRect_makeOutset"></a>
## makeOutset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkRect makeOutset(SkScalar dx, SkScalar dy) const
</pre>
@@ -1819,7 +1817,7 @@ rect: -5, 18, 35, 92 isEmpty: false
<a name="SkRect_offset"></a>
## offset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void offset(SkScalar dx, SkScalar dy)
</pre>
@@ -1857,7 +1855,7 @@ rect: 15, 27, 55, 86
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void offset(const SkPoint& delta)
</pre>
@@ -1897,7 +1895,7 @@ rect: 15, 27, 55, 86
<a name="SkRect_offsetTo"></a>
## offsetTo
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void offsetTo(SkScalar newX, SkScalar newY)
</pre>
@@ -1934,7 +1932,7 @@ rect: 15, 27, 55, 86
<a name="SkRect_inset"></a>
## inset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void inset(SkScalar dx, SkScalar dy)
</pre>
@@ -1975,7 +1973,7 @@ rect: 15, 27, 45, 60
<a name="SkRect_outset"></a>
## outset
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void outset(SkScalar dx, SkScalar dy)
</pre>
@@ -2027,7 +2025,7 @@ describes an area: <a href="#SkRect_fLeft">fLeft</a> is less than <a href="#SkRe
<a name="SkRect_intersect"></a>
## intersect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool intersect(const SkRect& r)
</pre>
@@ -2067,7 +2065,7 @@ intersection: 30, 60, 50, 80
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool intersect(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom)
</pre>
@@ -2116,7 +2114,7 @@ intersection: 30, 60, 50, 80
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool SK_WARN_UNUSED_RESULT intersect(const SkRect& a, const SkRect& b)
</pre>
@@ -2159,7 +2157,7 @@ intersection: 30, 60, 50, 80
<a name="SkRect_intersects"></a>
## intersects
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool intersects(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom) const
</pre>
@@ -2204,7 +2202,7 @@ intersection
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool intersects(const SkRect& r) const
</pre>
@@ -2243,7 +2241,7 @@ intersection
<a name="SkRect_Intersects"></a>
## Intersects
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static bool Intersects(const SkRect& a, const SkRect& b)
</pre>
@@ -2284,7 +2282,7 @@ intersection
<a name="SkRect_join"></a>
## join
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void join(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom)
</pre>
@@ -2327,7 +2325,7 @@ join: 10, 20, 55, 65
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void join(const SkRect& r)
</pre>
@@ -2364,7 +2362,7 @@ join: 10, 20, 55, 65
<a name="SkRect_joinNonEmptyArg"></a>
## joinNonEmptyArg
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void joinNonEmptyArg(const SkRect& r)
</pre>
@@ -2404,7 +2402,7 @@ sorted: 10, 0, 55, 100
<a name="SkRect_joinPossiblyEmptyRect"></a>
## joinPossiblyEmptyRect
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void joinPossiblyEmptyRect(const SkRect& r)
</pre>
@@ -2441,7 +2439,7 @@ sorted: 10, 0, 55, 100
<a name="SkRect_growToInclude"></a>
## growToInclude
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void growToInclude(SkPoint pt)
</pre>
@@ -2455,7 +2453,7 @@ If <a href="#Rect">Rect</a> is initialized with <a href="#SkRect_setLargestInver
### Parameters
<table> <tr> <td><a name="SkRect_growToInclude_pt"> <code><strong>pt </strong></code> </a></td> <td>
-<a href="undocumented#Point">Point</a> to include</td>
+<a href="SkPoint_Reference#Point">Point</a> to include</td>
</tr>
</table>
@@ -2477,11 +2475,11 @@ rect: 42, 24, 42, 24 isEmpty: true
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void growToInclude(const SkPoint pts[], int count)
</pre>
-For each of <a href="#SkRect_growToInclude_2_count">count</a> <a href="undocumented#Point">Point</a> in <a href="#SkRect_growToInclude_2_pts">pts</a>, grows <a href="#Rect">Rect</a> to include (pt.fX, pt.fY), modifying
+For each of <a href="#SkRect_growToInclude_2_count">count</a> <a href="SkPoint_Reference#Point">Point</a> in <a href="#SkRect_growToInclude_2_pts">pts</a>, grows <a href="#Rect">Rect</a> to include (pt.fX, pt.fY), modifying
it so that:
<a href="#SkRect_fLeft">fLeft</a> <= pt.fX <= <a href="#SkRect_fRight">fRight</a> && <a href="#SkRect_fTop">fTop</a> <= pt.fY <= <a href="#SkRect_fBottom">fBottom</a>.
@@ -2491,7 +2489,7 @@ If <a href="#Rect">Rect</a> is initialized with <a href="#SkRect_setLargestInver
### Parameters
<table> <tr> <td><a name="SkRect_growToInclude_2_pts"> <code><strong>pts </strong></code> </a></td> <td>
-<a href="undocumented#Point">Point</a> array</td>
+<a href="SkPoint_Reference#Point">Point</a> array</td>
</tr> <tr> <td><a name="SkRect_growToInclude_2_count"> <code><strong>count </strong></code> </a></td> <td>
number of points in array</td>
</tr>
@@ -2515,16 +2513,16 @@ rect: 30, 50, 40, 60
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void growToInclude(const SkPoint pts[], size_t stride, int count)
</pre>
-For each of <a href="#SkRect_growToInclude_3_count">count</a> <a href="undocumented#Point">Point</a> in <a href="#SkRect_growToInclude_3_pts">pts</a>, grows <a href="#Rect">Rect</a> to include (pt.fX, pt.fY), modifying
+For each of <a href="#SkRect_growToInclude_3_count">count</a> <a href="SkPoint_Reference#Point">Point</a> in <a href="#SkRect_growToInclude_3_pts">pts</a>, grows <a href="#Rect">Rect</a> to include (pt.fX, pt.fY), modifying
it so that:
<a href="#SkRect_fLeft">fLeft</a> <= pt.fX <= <a href="#SkRect_fRight">fRight</a> && <a href="#SkRect_fTop">fTop</a> <= pt.fY <= <a href="#SkRect_fBottom">fBottom</a>.
-<a href="undocumented#Point">Point</a> may be followed with other data in each array element. <a href="#SkRect_growToInclude_3_stride">stride</a> is number
-of bytes in element; the interval to skip to advance from one <a href="undocumented#Point">Point</a> to
+<a href="SkPoint_Reference#Point">Point</a> may be followed with other data in each array element. <a href="#SkRect_growToInclude_3_stride">stride</a> is number
+of bytes in element; the interval to skip to advance from one <a href="SkPoint_Reference#Point">Point</a> to
the next.
If <a href="#Rect">Rect</a> is initialized with <a href="#SkRect_setLargestInverted">setLargestInverted</a>, then <a href="#Rect">Rect</a> will contain bounds of
@@ -2533,7 +2531,7 @@ If <a href="#Rect">Rect</a> is initialized with <a href="#SkRect_setLargestInver
### Parameters
<table> <tr> <td><a name="SkRect_growToInclude_3_pts"> <code><strong>pts </strong></code> </a></td> <td>
-array of elements beginning with <a href="undocumented#Point">Point</a></td>
+array of elements beginning with <a href="SkPoint_Reference#Point">Point</a></td>
</tr> <tr> <td><a name="SkRect_growToInclude_3_stride"> <code><strong>stride </strong></code> </a></td> <td>
size of <a href="#SkRect_growToInclude_3_pts">pts</a> elements in 32-bit words; zero or greater</td>
</tr> <tr> <td><a name="SkRect_growToInclude_3_count"> <code><strong>count </strong></code> </a></td> <td>
@@ -2563,7 +2561,7 @@ rect: 30, 50, 40, 60
<a name="SkRect_contains"></a>
## contains
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool contains(const SkRect& r) const
</pre>
@@ -2603,7 +2601,7 @@ rect: (30, 50, 40, 60) does not contain (29, 59, 30, 60)
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool contains(const SkIRect& r) const
</pre>
@@ -2648,7 +2646,7 @@ rect: (30, 50, 40, 60) does not contain (29, 59, 30, 60)
<a name="SkRect_round"></a>
## round
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void round(SkIRect* dst) const
</pre>
@@ -2683,7 +2681,7 @@ round: 31, 51, 41, 61
<a name="SkRect_roundOut"></a>
## roundOut
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void roundOut(SkIRect* dst) const
</pre>
@@ -2715,7 +2713,7 @@ round: 30, 50, 41, 61
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void roundOut(SkRect* dst) const
</pre>
@@ -2750,7 +2748,7 @@ round: 30, 50, 41, 61
<a name="SkRect_roundIn"></a>
## roundIn
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void roundIn(SkIRect* dst) const
</pre>
@@ -2782,7 +2780,7 @@ round: 31, 51, 40, 60
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkIRect round() const
</pre>
@@ -2811,7 +2809,7 @@ round: 31, 51, 41, 61
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkIRect roundOut() const
</pre>
@@ -2843,7 +2841,7 @@ round: 30, 50, 41, 61
<a name="SkRect_sort"></a>
## sort
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void sort()
</pre>
@@ -2873,7 +2871,7 @@ sorted: 20.5, 10.5, 30.5, 50.5
<a name="SkRect_makeSorted"></a>
## makeSorted
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkRect makeSorted() const
</pre>
@@ -2907,7 +2905,7 @@ sorted: 20.5, 10.5, 30.5, 50.5
<a name="SkRect_asScalars"></a>
## asScalars
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
const SkScalar* asScalars() const
</pre>
@@ -2939,7 +2937,7 @@ rect.asScalars() == &rect.fLeft
<a name="SkRect_dump"></a>
## dump
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void dump(bool asHex) const
</pre>
@@ -2975,7 +2973,7 @@ SkBits2Float(0x42480000) /* 50.000000 */);
---
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void dump() const
</pre>
@@ -3006,7 +3004,7 @@ rect is not equal to copy
<a name="SkRect_dumpHex"></a>
## dumpHex
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void dumpHex() const
</pre>
diff --git a/site/user/api/SkSurface_Reference.md b/site/user/api/SkSurface_Reference.md
new file mode 100644
index 0000000000..709e3bfb64
--- /dev/null
+++ b/site/user/api/SkSurface_Reference.md
@@ -0,0 +1,1541 @@
+SkSurface Reference
+===
+
+# <a name="Surface"></a> Surface
+
+# <a name="SkSurface"></a> Class SkSurface
+<a href="#SkSurface">SkSurface</a> is responsible for managing the pixels that a canvas draws into. The pixels can be
+allocated either in <a href="undocumented#CPU">CPU</a> memory (a raster surface) or on the <a href="undocumented#GPU">GPU</a> (a <a href="undocumented#GrRenderTarget">GrRenderTarget</a> surface).
+<a href="#SkSurface">SkSurface</a> takes care of allocating a <a href="SkCanvas_Reference#SkCanvas">SkCanvas</a> that will <a href="#SkSurface_draw">draw</a> into the surface. Call
+surface-><a href="#SkSurface_getCanvas">getCanvas</a> to use that canvas (but don't delete it, it is owned by the surface).
+<a href="#SkSurface">SkSurface</a> always has non-zero dimensions. If there is a request for a new surface, and either
+of the requested dimensions are zero, then nullptr will be returned.
+
+# <a name="Overview"></a> Overview
+
+## <a name="Subtopics"></a> Subtopics
+
+| topics | description |
+| --- | --- |
+
+## <a name="Member_Functions"></a> Member Functions
+
+| description | function |
+| --- | --- |
+| <a href="#SkSurface_MakeFromBackendRenderTarget">MakeFromBackendRenderTarget</a> | Creates <a href="#Surface">Surface</a> from <a href="undocumented#GPU">GPU</a> memory buffer. |
+| <a href="#SkSurface_MakeFromBackendTexture">MakeFromBackendTexture</a> | Creates <a href="#Surface">Surface</a> from <a href="undocumented#GPU">GPU</a>-backed texture. |
+| <a href="#SkSurface_MakeFromBackendTextureAsRenderTarget">MakeFromBackendTextureAsRenderTarget</a> | Creates <a href="#Surface">Surface</a> from <a href="undocumented#GPU">GPU</a>-backed texture. |
+| <a href="#SkSurface_MakeNull">MakeNull</a> | Creates <a href="#Surface">Surface</a> without backing pixels. |
+| <a href="#SkSurface_MakeRaster">MakeRaster</a> | Creates <a href="#Surface">Surface</a> from <a href="undocumented#SkImageInfo">SkImageInfo</a>. |
+| <a href="#SkSurface_MakeRasterDirect">MakeRasterDirect</a> | Creates <a href="#Surface">Surface</a> from <a href="undocumented#SkImageInfo">SkImageInfo</a> and <a href="#Storage">Pixel Storage</a>. |
+| <a href="#SkSurface_MakeRasterDirectReleaseProc">MakeRasterDirectReleaseProc</a> | Creates <a href="#Surface">Surface</a> from <a href="undocumented#SkImageInfo">SkImageInfo</a> and <a href="#Storage">Pixel Storage</a>. |
+| <a href="#SkSurface_MakeRasterN32Premul">MakeRasterN32Premul</a> | Creates <a href="#Surface">Surface</a> from <a href="#SkSurface_width">width</a>, <a href="#SkSurface_height">height</a> matching output. |
+| <a href="#SkSurface_MakeRenderTarget">MakeRenderTarget</a> | Creates <a href="#Surface">Surface</a> pointing to new <a href="undocumented#GPU">GPU</a> memory buffer. |
+| <a href="#SkSurface_characterize">characterize</a> | Set up <a href="#Characterization">Surface Characterization</a> for threaded pre-processing. |
+| <a href="#SkSurface_draw">draw</a> | Draws <a href="#Surface">Surface</a> contents to canvas. |
+| <a href="#SkSurface_flush">flush</a> | Resolve pending <a href="undocumented#I">I</a>/<a href="undocumented#O">O</a>. |
+| <a href="#SkSurface_flushAndSignalSemaphores">flushAndSignalSemaphores</a> | Resolve pending <a href="undocumented#I">I</a>/<a href="undocumented#O">O</a>, and signal. |
+| <a href="#SkSurface_generationID">generationID</a> | Returns unique ID. |
+| <a href="#SkSurface_getCanvas">getCanvas</a> | Returns <a href="SkCanvas_Reference#Canvas">Canvas</a> that draws into <a href="#Surface">Surface</a>. |
+| <a href="#SkSurface_getRenderTargetHandle">getRenderTargetHandle</a> | Returns the <a href="undocumented#GPU">GPU</a> reference to render target. |
+| <a href="#SkSurface_getTextureHandle">getTextureHandle</a> | Returns the <a href="undocumented#GPU">GPU</a> reference to texture. |
+| <a href="#SkSurface_height">height</a> | Returns pixel row count. |
+| <a href="#SkSurface_makeImageSnapshot">makeImageSnapshot</a> | Returns <a href="SkImage_Reference#Image">Image</a> capturing <a href="#Surface">Surface</a> contents. |
+| <a href="#SkSurface_makeSurface">makeSurface</a> | Returns a compatible <a href="#Surface">Surface</a>. |
+| <a href="#SkSurface_notifyContentWillChange">notifyContentWillChange</a> | Notifies that contents will be changed outside of <a href="undocumented#Skia">Skia</a>. |
+| <a href="#SkSurface_peekPixels">peekPixels</a> | Copies <a href="#Surface">Surface</a> parameters to <a href="SkPixmap_Reference#Pixmap">Pixmap</a>. |
+| <a href="#SkSurface_prepareForExternalIO">prepareForExternalIO</a> | To be deprecated. |
+| <a href="#SkSurface_props">props</a> | Returns <a href="#Properties">Surface Properties</a>. |
+| <a href="#SkSurface_readPixels">readPixels</a> | Copies <a href="SkRect_Reference#Rect">Rect</a> of pixels. |
+| <a href="#SkSurface_wait">wait</a> | Pause commands until signaled. |
+| <a href="#SkSurface_width">width</a> | Returns pixel column count. |
+
+<a name="SkSurface_MakeRasterDirect"></a>
+## MakeRasterDirect
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkSurface&gt; MakeRasterDirect(const SkImageInfo& imageInfo, void* pixels, size_t rowBytes,
+ const SkSurfaceProps* surfaceProps = nullptr)
+</pre>
+
+Allocates raster <a href="#Surface">Surface</a>. <a href="SkCanvas_Reference#Canvas">Canvas</a> returned by <a href="#Surface">Surface</a> draws directly into <a href="#SkSurface_MakeRasterDirect_pixels">pixels</a>.
+
+<a href="#Surface">Surface</a> is returned if all parameters are valid.
+Valid parameters include:
+info dimensions are greater than zero;
+info contains <a href="undocumented#Image_Color_Type">Image Color Type</a> and <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a> supported by <a href="undocumented#Raster_Surface">Raster Surface</a>;
+<a href="#SkSurface_MakeRasterDirect_pixels">pixels</a> is not nullptr;
+<a href="#SkSurface_MakeRasterDirect_rowBytes">rowBytes</a> is large enough to contain info <a href="#SkSurface_width">width</a> <a href="#SkSurface_MakeRasterDirect_pixels">pixels</a> of <a href="undocumented#Image_Color_Type">Image Color Type</a>.
+
+<a href="undocumented#Pixel">Pixel</a> buffer size should be info <a href="#SkSurface_height">height</a> times computed <a href="#SkSurface_MakeRasterDirect_rowBytes">rowBytes</a>.
+Pixels are not initialized.
+To access <a href="#SkSurface_MakeRasterDirect_pixels">pixels</a> after drawing, call <a href="#SkSurface_flush">flush</a> or <a href="#SkSurface_peekPixels">peekPixels</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_MakeRasterDirect_imageInfo"> <code><strong>imageInfo </strong></code> </a></td> <td>
+<a href="#SkSurface_width">width</a>, <a href="#SkSurface_height">height</a>, <a href="undocumented#Image_Color_Type">Image Color Type</a>, <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>,
+of <a href="undocumented#Raster_Surface">Raster Surface</a>; <a href="#SkSurface_width">width</a> and <a href="#SkSurface_height">height</a> must be greater than zero</td>
+ </tr> <tr> <td><a name="SkSurface_MakeRasterDirect_pixels"> <code><strong>pixels </strong></code> </a></td> <td>
+pointer to destination <a href="#SkSurface_MakeRasterDirect_pixels">pixels</a> buffer</td>
+ </tr> <tr> <td><a name="SkSurface_MakeRasterDirect_rowBytes"> <code><strong>rowBytes </strong></code> </a></td> <td>
+interval from one <a href="#Surface">Surface</a> row to the next</td>
+ </tr> <tr> <td><a name="SkSurface_MakeRasterDirect_surfaceProps"> <code><strong>surfaceProps </strong></code> </a></td> <td>
+<a href="undocumented#LCD">LCD</a> striping orientation and setting for device independent fonts;
+may be nullptr</td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="#Surface">Surface</a> if all parameters are valid; otherwise, nullptr
+
+### Example
+
+<div><fiddle-embed name="3f5aeb870104187643197354a7f1d27a">
+
+#### Example Output
+
+~~~~
+---
+-x-
+---
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_MakeRasterDirectReleaseProc">MakeRasterDirectReleaseProc</a> <a href="#SkSurface_MakeRaster">MakeRaster</a> <a href="#SkSurface_MakeRasterN32Premul">MakeRasterN32Premul</a> <a href="#SkCanvas_MakeRasterDirect">SkCanvas::MakeRasterDirect</a>
+
+---
+
+<a name="SkSurface_MakeRasterDirectReleaseProc"></a>
+## MakeRasterDirectReleaseProc
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkSurface&gt; MakeRasterDirectReleaseProc(const SkImageInfo& imageInfo, void* pixels,
+ size_t rowBytes, void (*releaseProc) (void* pixels,
+ void* context) , void* context,
+ const SkSurfaceProps* surfaceProps = nullptr)
+</pre>
+
+Allocates raster <a href="#Surface">Surface</a>. <a href="SkCanvas_Reference#Canvas">Canvas</a> returned by <a href="#Surface">Surface</a> draws directly into <a href="#SkSurface_MakeRasterDirectReleaseProc_pixels">pixels</a>.
+<a href="#SkSurface_MakeRasterDirectReleaseProc_releaseProc">releaseProc</a> is called with <a href="#SkSurface_MakeRasterDirectReleaseProc_pixels">pixels</a> and <a href="#SkSurface_MakeRasterDirectReleaseProc_context">context</a> when <a href="#Surface">Surface</a> is deleted.
+
+<a href="#Surface">Surface</a> is returned if all parameters are valid.
+Valid parameters include:
+info dimensions are greater than zero;
+info contains <a href="undocumented#Image_Color_Type">Image Color Type</a> and <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a> supported by <a href="undocumented#Raster_Surface">Raster Surface</a>;
+<a href="#SkSurface_MakeRasterDirectReleaseProc_pixels">pixels</a> is not nullptr;
+<a href="#SkSurface_MakeRasterDirectReleaseProc_rowBytes">rowBytes</a> is large enough to contain info <a href="#SkSurface_width">width</a> <a href="#SkSurface_MakeRasterDirectReleaseProc_pixels">pixels</a> of <a href="undocumented#Image_Color_Type">Image Color Type</a>.
+
+<a href="undocumented#Pixel">Pixel</a> buffer size should be info <a href="#SkSurface_height">height</a> times computed <a href="#SkSurface_MakeRasterDirectReleaseProc_rowBytes">rowBytes</a>.
+Pixels are not initialized.
+To access <a href="#SkSurface_MakeRasterDirectReleaseProc_pixels">pixels</a> after drawing, call <a href="#SkSurface_flush">flush</a> or <a href="#SkSurface_peekPixels">peekPixels</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_MakeRasterDirectReleaseProc_imageInfo"> <code><strong>imageInfo </strong></code> </a></td> <td>
+<a href="#SkSurface_width">width</a>, <a href="#SkSurface_height">height</a>, <a href="undocumented#Image_Color_Type">Image Color Type</a>, <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>,
+of <a href="undocumented#Raster_Surface">Raster Surface</a>; <a href="#SkSurface_width">width</a> and <a href="#SkSurface_height">height</a> must be greater than zero</td>
+ </tr> <tr> <td><a name="SkSurface_MakeRasterDirectReleaseProc_pixels"> <code><strong>pixels </strong></code> </a></td> <td>
+pointer to destination <a href="#SkSurface_MakeRasterDirectReleaseProc_pixels">pixels</a> buffer</td>
+ </tr> <tr> <td><a name="SkSurface_MakeRasterDirectReleaseProc_rowBytes"> <code><strong>rowBytes </strong></code> </a></td> <td>
+interval from one <a href="#Surface">Surface</a> row to the next</td>
+ </tr> <tr> <td><a name="SkSurface_MakeRasterDirectReleaseProc_releaseProc"> <code><strong>releaseProc </strong></code> </a></td> <td>
+called when <a href="#Surface">Surface</a> is deleted; may be nullptr</td>
+ </tr> <tr> <td><a name="SkSurface_MakeRasterDirectReleaseProc_context"> <code><strong>context </strong></code> </a></td> <td>
+passed to <a href="#SkSurface_MakeRasterDirectReleaseProc_releaseProc">releaseProc</a>; may be nullptr</td>
+ </tr> <tr> <td><a name="SkSurface_MakeRasterDirectReleaseProc_surfaceProps"> <code><strong>surfaceProps </strong></code> </a></td> <td>
+<a href="undocumented#LCD">LCD</a> striping orientation and setting for device independent fonts;
+may be nullptr</td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="#Surface">Surface</a> if all parameters are valid; otherwise, nullptr
+
+### Example
+
+<div><fiddle-embed name="8e6530b26ab4096a9a91cfaadda1c568">
+
+#### Example Output
+
+~~~~
+---
+-x-
+---
+expected release context
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_MakeRasterDirect">MakeRasterDirect</a> <a href="#SkSurface_MakeRasterN32Premul">MakeRasterN32Premul</a> <a href="#SkSurface_MakeRaster">MakeRaster</a>
+
+---
+
+<a name="SkSurface_MakeRaster"></a>
+## MakeRaster
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkSurface&gt; MakeRaster(const SkImageInfo& imageInfo, size_t rowBytes,
+ const SkSurfaceProps* surfaceProps)
+</pre>
+
+Allocates raster <a href="#Surface">Surface</a>. <a href="SkCanvas_Reference#Canvas">Canvas</a> returned by <a href="#Surface">Surface</a> draws directly into pixels.
+Allocates and zeroes pixel memory. <a href="undocumented#Pixel">Pixel</a> memory size is <a href="#SkSurface_MakeRaster_imageInfo">imageInfo</a>.<a href="#SkSurface_height">height</a> times
+<a href="#SkSurface_MakeRaster_rowBytes">rowBytes</a>, or times <a href="#SkSurface_MakeRaster_imageInfo">imageInfo</a>.minRowBytes() if <a href="#SkSurface_MakeRaster_rowBytes">rowBytes</a> is zero.
+<a href="undocumented#Pixel">Pixel</a> memory is deleted when <a href="#Surface">Surface</a> is deleted.
+
+<a href="#Surface">Surface</a> is returned if all parameters are valid.
+Valid parameters include:
+info dimensions are greater than zero;
+info contains <a href="undocumented#Image_Color_Type">Image Color Type</a> and <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a> supported by <a href="undocumented#Raster_Surface">Raster Surface</a>;
+<a href="#SkSurface_MakeRaster_rowBytes">rowBytes</a> is large enough to contain info <a href="#SkSurface_width">width</a> pixels of <a href="undocumented#Image_Color_Type">Image Color Type</a>, or is zero.
+
+If <a href="#SkSurface_MakeRaster_rowBytes">rowBytes</a> is not zero, subsequent images returned by <a href="#SkSurface_makeImageSnapshot">makeImageSnapshot</a>
+have the same <a href="#SkSurface_MakeRaster_rowBytes">rowBytes</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_MakeRaster_imageInfo"> <code><strong>imageInfo </strong></code> </a></td> <td>
+<a href="#SkSurface_width">width</a>, <a href="#SkSurface_height">height</a>, <a href="undocumented#Image_Color_Type">Image Color Type</a>, <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>,
+of <a href="undocumented#Raster_Surface">Raster Surface</a>; <a href="#SkSurface_width">width</a> and <a href="#SkSurface_height">height</a> must be greater than zero</td>
+ </tr> <tr> <td><a name="SkSurface_MakeRaster_rowBytes"> <code><strong>rowBytes </strong></code> </a></td> <td>
+interval from one <a href="#Surface">Surface</a> row to the next; may be zero</td>
+ </tr> <tr> <td><a name="SkSurface_MakeRaster_surfaceProps"> <code><strong>surfaceProps </strong></code> </a></td> <td>
+<a href="undocumented#LCD">LCD</a> striping orientation and setting for device independent fonts;
+may be nullptr</td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="#Surface">Surface</a> if all parameters are valid; otherwise, nullptr
+
+### Example
+
+<div><fiddle-embed name="a803910ada4f8733f0b62456afead55f">
+
+#### Example Output
+
+~~~~
+---
+-x-
+---
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_MakeRasterDirect">MakeRasterDirect</a> <a href="#SkSurface_MakeRasterN32Premul">MakeRasterN32Premul</a> <a href="#SkSurface_MakeRasterDirectReleaseProc">MakeRasterDirectReleaseProc</a>
+
+---
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkSurface&gt; MakeRaster(const SkImageInfo& imageInfo,
+ const SkSurfaceProps* props = nullptr)
+</pre>
+
+Allocates raster <a href="#Surface">Surface</a>. <a href="SkCanvas_Reference#Canvas">Canvas</a> returned by <a href="#Surface">Surface</a> draws directly into pixels.
+Allocates and zeroes pixel memory. <a href="undocumented#Pixel">Pixel</a> memory size is <a href="#SkSurface_MakeRaster_2_imageInfo">imageInfo</a>.<a href="#SkSurface_height">height</a> times
+<a href="#SkSurface_MakeRaster_2_imageInfo">imageInfo</a>.minRowBytes().
+<a href="undocumented#Pixel">Pixel</a> memory is deleted when <a href="#Surface">Surface</a> is deleted.
+
+<a href="#Surface">Surface</a> is returned if all parameters are valid.
+Valid parameters include:
+info dimensions are greater than zero;
+info contains <a href="undocumented#Image_Color_Type">Image Color Type</a> and <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a> supported by <a href="undocumented#Raster_Surface">Raster Surface</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_MakeRaster_2_imageInfo"> <code><strong>imageInfo </strong></code> </a></td> <td>
+<a href="#SkSurface_width">width</a>, <a href="#SkSurface_height">height</a>, <a href="undocumented#Image_Color_Type">Image Color Type</a>, <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>,
+of <a href="undocumented#Raster_Surface">Raster Surface</a>; <a href="#SkSurface_width">width</a> and <a href="#SkSurface_height">height</a> must be greater than zero</td>
+ </tr> <tr> <td><a name="SkSurface_MakeRaster_2_props"> <code><strong>props </strong></code> </a></td> <td>
+<a href="undocumented#LCD">LCD</a> striping orientation and setting for device independent fonts;
+may be nullptr</td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="#Surface">Surface</a> if all parameters are valid; otherwise, nullptr
+
+### Example
+
+<div><fiddle-embed name="c6197d204ef9e4ccfb583242651fb2a7"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_MakeRasterDirect">MakeRasterDirect</a> <a href="#SkSurface_MakeRasterN32Premul">MakeRasterN32Premul</a> <a href="#SkSurface_MakeRasterDirectReleaseProc">MakeRasterDirectReleaseProc</a>
+
+---
+
+<a name="SkSurface_MakeRasterN32Premul"></a>
+## MakeRasterN32Premul
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkSurface&gt; MakeRasterN32Premul(int width, int height,
+ const SkSurfaceProps* surfaceProps = nullptr)
+</pre>
+
+Allocates raster <a href="#Surface">Surface</a>. <a href="SkCanvas_Reference#Canvas">Canvas</a> returned by <a href="#Surface">Surface</a> draws directly into pixels.
+Allocates and zeroes pixel memory. <a href="undocumented#Pixel">Pixel</a> memory size is <a href="#SkSurface_height">height</a> times <a href="#SkSurface_width">width</a> times
+four. <a href="undocumented#Pixel">Pixel</a> memory is deleted when <a href="#Surface">Surface</a> is deleted.
+
+Internally, sets <a href="undocumented#Image_Info">Image Info</a> to <a href="#SkSurface_width">width</a>, <a href="#SkSurface_height">height</a>, <a href="undocumented#Native_Color_Type">Native Color Type</a>, and
+<a href="undocumented#SkAlphaType">kPremul SkAlphaType</a>.
+
+<a href="#Surface">Surface</a> is returned if <a href="#SkSurface_width">width</a> and <a href="#SkSurface_height">height</a> are greater than zero.
+
+Use to create <a href="#Surface">Surface</a> that matches <a href="undocumented#SkPMColor">SkPMColor</a>, the native pixel arrangement on
+the platform. <a href="#Surface">Surface</a> drawn to output device skips converting its pixel format.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_MakeRasterN32Premul_width"> <code><strong>width </strong></code> </a></td> <td>
+pixel column count; must be greater than zero</td>
+ </tr> <tr> <td><a name="SkSurface_MakeRasterN32Premul_height"> <code><strong>height </strong></code> </a></td> <td>
+pixel row count; must be greater than zero</td>
+ </tr> <tr> <td><a name="SkSurface_MakeRasterN32Premul_surfaceProps"> <code><strong>surfaceProps </strong></code> </a></td> <td>
+<a href="undocumented#LCD">LCD</a> striping orientation and setting for device independent
+fonts; may be nullptr</td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="#Surface">Surface</a> if all parameters are valid; otherwise, nullptr
+
+### Example
+
+<div><fiddle-embed name="b932a2bd68455fb0af2e7a1ed19e36b3">
+
+#### Example Output
+
+~~~~
+---
+-x-
+---
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_MakeRasterDirect">MakeRasterDirect</a> <a href="#SkSurface_MakeRasterN32Premul">MakeRasterN32Premul</a> <a href="#SkSurface_MakeRasterDirectReleaseProc">MakeRasterDirectReleaseProc</a>
+
+---
+
+<a name="SkSurface_MakeFromBackendTexture"></a>
+## MakeFromBackendTexture
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkSurface&gt; MakeFromBackendTexture(GrContext* context,
+ const GrBackendTexture& backendTexture,
+ GrSurfaceOrigin origin, int sampleCnt,
+ sk_sp&lt;SkColorSpace&gt; colorSpace,
+ const SkSurfaceProps* surfaceProps)
+</pre>
+
+Wraps a <a href="undocumented#GPU">GPU</a>-backed texture into <a href="#Surface">Surface</a>. Caller must ensure the texture is
+valid for the lifetime of returned <a href="#Surface">Surface</a>. If <a href="#SkSurface_MakeFromBackendTexture_sampleCnt">sampleCnt</a> greater than zero,
+creates an intermediate <a href="undocumented#MSAA">MSAA</a> <a href="#Surface">Surface</a> which is used for drawing <a href="#SkSurface_MakeFromBackendTexture_backendTexture">backendTexture</a>.
+
+<a href="#Surface">Surface</a> is returned if all parameters are valid. <a href="#SkSurface_MakeFromBackendTexture_backendTexture">backendTexture</a> is valid if
+its pixel configuration agrees with <a href="#SkSurface_MakeFromBackendTexture_colorSpace">colorSpace</a> and <a href="#SkSurface_MakeFromBackendTexture_context">context</a>; for instance, if
+<a href="#SkSurface_MakeFromBackendTexture_backendTexture">backendTexture</a> has an <a href="undocumented#sRGB">sRGB</a> configuration, then <a href="#SkSurface_MakeFromBackendTexture_context">context</a> must support <a href="undocumented#sRGB">sRGB</a>,
+and <a href="#SkSurface_MakeFromBackendTexture_colorSpace">colorSpace</a> must be present. Further, <a href="#SkSurface_MakeFromBackendTexture_backendTexture">backendTexture</a> <a href="#SkSurface_width">width</a> and <a href="#SkSurface_height">height</a> must
+not exceed <a href="#SkSurface_MakeFromBackendTexture_context">context</a> capabilities, and the <a href="#SkSurface_MakeFromBackendTexture_context">context</a> must be able to support
+back-end textures.
+
+If <a href="undocumented#SK_SUPPORT_GPU">SK SUPPORT GPU</a> is defined as zero, has no effect and returns nullptr.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_MakeFromBackendTexture_context"> <code><strong>context </strong></code> </a></td> <td>
+<a href="undocumented#GPU_Context">GPU Context</a></td>
+ </tr> <tr> <td><a name="SkSurface_MakeFromBackendTexture_backendTexture"> <code><strong>backendTexture </strong></code> </a></td> <td>
+texture residing on <a href="undocumented#GPU">GPU</a></td>
+ </tr> <tr> <td><a name="SkSurface_MakeFromBackendTexture_origin"> <code><strong>origin </strong></code> </a></td> <td>
+one of: <a href="undocumented#GrSurfaceOrigin">kBottomLeft GrSurfaceOrigin</a>, <a href="undocumented#GrSurfaceOrigin">kTopLeft GrSurfaceOrigin</a></td>
+ </tr> <tr> <td><a name="SkSurface_MakeFromBackendTexture_sampleCnt"> <code><strong>sampleCnt </strong></code> </a></td> <td>
+samples per pixel, or 0 to disable full scene anti-aliasing</td>
+ </tr> <tr> <td><a name="SkSurface_MakeFromBackendTexture_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
+range of colors</td>
+ </tr> <tr> <td><a name="SkSurface_MakeFromBackendTexture_surfaceProps"> <code><strong>surfaceProps </strong></code> </a></td> <td>
+<a href="undocumented#LCD">LCD</a> striping orientation and setting for device independent
+fonts; may be nullptr</td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="#Surface">Surface</a> if all parameters are valid; otherwise, nullptr
+
+### Example
+
+<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
+void draw(SkCanvas* canvas) {
+ SkPaint paint;
+ paint.setTextSize(32);
+ GrContext* context = canvas->getGrContext();
+ if (!context) {
+ canvas->drawString("GPU only!", 20, 40, paint);
+ return;
+ }
+ sk_sp<SkSurface> gpuSurface = SkSurface::MakeFromBackendTexture(context,
+ backEndTextureRenderTarget, kTopLeft_GrSurfaceOrigin, 0, nullptr, nullptr);
+ auto surfaceCanvas = gpuSurface->getCanvas();
+ surfaceCanvas->clear(SK_ColorWHITE);
+ surfaceCanvas->drawString("GPU rocks!", 20, 40, paint);
+ sk_sp<SkImage> image(gpuSurface->makeImageSnapshot());
+ canvas->drawImage(image, 0, 0);
+}
+</pre>
+
+### See Also
+
+<a href="undocumented#GrBackendTexture">GrBackendTexture</a> <a href="#SkSurface_MakeFromBackendRenderTarget">MakeFromBackendRenderTarget</a> <a href="#SkSurface_MakeRenderTarget">MakeRenderTarget</a>
+
+---
+
+<a name="SkSurface_MakeFromBackendRenderTarget"></a>
+## MakeFromBackendRenderTarget
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkSurface&gt; MakeFromBackendRenderTarget(GrContext* context,
+ const GrBackendRenderTarget& backendRenderTarget,
+ GrSurfaceOrigin origin,
+ sk_sp&lt;SkColorSpace&gt; colorSpace,
+ const SkSurfaceProps* surfaceProps)
+</pre>
+
+Wraps a <a href="undocumented#GPU">GPU</a>-backed buffer into <a href="#Surface">Surface</a>. Caller must ensure render target is
+valid for the lifetime of returned <a href="#Surface">Surface</a>.
+
+<a href="#Surface">Surface</a> is returned if all parameters are valid. <a href="#SkSurface_MakeFromBackendRenderTarget_backendRenderTarget">backendRenderTarget</a> is valid if
+its pixel configuration agrees with <a href="#SkSurface_MakeFromBackendRenderTarget_colorSpace">colorSpace</a> and <a href="#SkSurface_MakeFromBackendRenderTarget_context">context</a>; for instance, if
+<a href="#SkSurface_MakeFromBackendRenderTarget_backendRenderTarget">backendRenderTarget</a> has an <a href="undocumented#sRGB">sRGB</a> configuration, then <a href="#SkSurface_MakeFromBackendRenderTarget_context">context</a> must support <a href="undocumented#sRGB">sRGB</a>,
+and <a href="#SkSurface_MakeFromBackendRenderTarget_colorSpace">colorSpace</a> must be present. Further, <a href="#SkSurface_MakeFromBackendRenderTarget_backendRenderTarget">backendRenderTarget</a> <a href="#SkSurface_width">width</a> and <a href="#SkSurface_height">height</a> must
+not exceed <a href="#SkSurface_MakeFromBackendRenderTarget_context">context</a> capabilities, and the <a href="#SkSurface_MakeFromBackendRenderTarget_context">context</a> must be able to support
+back-end render targets.
+
+If <a href="undocumented#SK_SUPPORT_GPU">SK SUPPORT GPU</a> is defined as zero, has no effect and returns nullptr.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_MakeFromBackendRenderTarget_context"> <code><strong>context </strong></code> </a></td> <td>
+<a href="undocumented#GPU_Context">GPU Context</a></td>
+ </tr> <tr> <td><a name="SkSurface_MakeFromBackendRenderTarget_backendRenderTarget"> <code><strong>backendRenderTarget </strong></code> </a></td> <td>
+<a href="undocumented#GPU">GPU</a> intermediate memory buffer</td>
+ </tr> <tr> <td><a name="SkSurface_MakeFromBackendRenderTarget_origin"> <code><strong>origin </strong></code> </a></td> <td>
+one of: <a href="undocumented#GrSurfaceOrigin">kBottomLeft GrSurfaceOrigin</a>, <a href="undocumented#GrSurfaceOrigin">kTopLeft GrSurfaceOrigin</a></td>
+ </tr> <tr> <td><a name="SkSurface_MakeFromBackendRenderTarget_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
+range of colors</td>
+ </tr> <tr> <td><a name="SkSurface_MakeFromBackendRenderTarget_surfaceProps"> <code><strong>surfaceProps </strong></code> </a></td> <td>
+<a href="undocumented#LCD">LCD</a> striping orientation and setting for device independent
+fonts; may be nullptr</td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="#Surface">Surface</a> if all parameters are valid; otherwise, nullptr
+
+### Example
+
+<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
+void draw(SkCanvas* canvas) {
+ SkPaint paint;
+ paint.setTextSize(32);
+ GrContext* context = canvas->getGrContext();
+ if (!context) {
+ canvas->drawString("GPU only!", 20, 40, paint);
+ return;
+ }
+ sk_sp<SkSurface> gpuSurface = SkSurface::MakeFromBackendRenderTarget(context,
+ backEndRenderTarget, kTopLeft_GrSurfaceOrigin, nullptr, nullptr);
+ auto surfaceCanvas = gpuSurface->getCanvas();
+ surfaceCanvas->clear(SK_ColorWHITE);
+ surfaceCanvas->drawString("GPU rocks!", 20, 40, paint);
+ sk_sp<SkImage> image(gpuSurface->makeImageSnapshot());
+ canvas->drawImage(image, 0, 0);
+}
+</pre>
+
+### See Also
+
+<a href="#SkSurface_MakeFromBackendTexture">MakeFromBackendTexture</a> <a href="#SkSurface_MakeRenderTarget">MakeRenderTarget</a>
+
+---
+
+<a name="SkSurface_MakeFromBackendTextureAsRenderTarget"></a>
+## MakeFromBackendTextureAsRenderTarget
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkSurface&gt; MakeFromBackendTextureAsRenderTarget(GrContext* context,
+ const GrBackendTexture& backendTexture,
+ GrSurfaceOrigin origin, int sampleCnt,
+ sk_sp&lt;SkColorSpace&gt; colorSpace,
+ const SkSurfaceProps* surfaceProps)
+</pre>
+
+Used to wrap a <a href="undocumented#GPU">GPU</a>-backed texture as a <a href="#SkSurface">SkSurface</a>. <a href="undocumented#Skia">Skia</a> will treat the texture as
+a rendering target only, but unlike NewFromBackendRenderTarget, <a href="undocumented#Skia">Skia</a> will manage and own
+the associated render target objects (but not the provided texture). <a href="undocumented#Skia">Skia</a> will not assume
+ownership of the texture and the client must ensure the texture is valid for the lifetime
+of the <a href="#SkSurface">SkSurface</a>.
+
+If <a href="undocumented#SK_SUPPORT_GPU">SK SUPPORT GPU</a> is defined as zero, has no effect and returns nullptr.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_MakeFromBackendTextureAsRenderTarget_context"> <code><strong>context </strong></code> </a></td> <td>
+<a href="undocumented#GPU_Context">GPU Context</a></td>
+ </tr> <tr> <td><a name="SkSurface_MakeFromBackendTextureAsRenderTarget_backendTexture"> <code><strong>backendTexture </strong></code> </a></td> <td>
+texture residing on <a href="undocumented#GPU">GPU</a></td>
+ </tr> <tr> <td><a name="SkSurface_MakeFromBackendTextureAsRenderTarget_origin"> <code><strong>origin </strong></code> </a></td> <td>
+one of: <a href="undocumented#GrSurfaceOrigin">kBottomLeft GrSurfaceOrigin</a>, <a href="undocumented#GrSurfaceOrigin">kTopLeft GrSurfaceOrigin</a></td>
+ </tr> <tr> <td><a name="SkSurface_MakeFromBackendTextureAsRenderTarget_sampleCnt"> <code><strong>sampleCnt </strong></code> </a></td> <td>
+samples per pixel, or 0 to disable full scene anti-aliasing</td>
+ </tr> <tr> <td><a name="SkSurface_MakeFromBackendTextureAsRenderTarget_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
+range of colors</td>
+ </tr> <tr> <td><a name="SkSurface_MakeFromBackendTextureAsRenderTarget_surfaceProps"> <code><strong>surfaceProps </strong></code> </a></td> <td>
+<a href="undocumented#LCD">LCD</a> striping orientation and setting for device independent
+fonts; may be nullptr</td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="#Surface">Surface</a> if all parameters are valid; otherwise, nullptr
+
+### Example
+
+<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
+void draw(SkCanvas* canvas) {SkPaint paint;
+ paint.setTextSize(32);
+ GrContext* context = canvas->getGrContext();
+ if (!context) {
+ canvas->drawString("GPU only!", 20, 40, paint);
+ return;
+ }
+ sk_sp<SkSurface> gpuSurface = SkSurface::MakeFromBackendTextureAsRenderTarget(
+ context, backEndTextureRenderTarget, kTopLeft_GrSurfaceOrigin, 0,
+ nullptr, nullptr);
+ auto surfaceCanvas = gpuSurface->getCanvas();
+ surfaceCanvas->clear(SK_ColorWHITE);
+ surfaceCanvas->drawString("GPU rocks!", 20, 40, paint);
+ sk_sp<SkImage> image(gpuSurface->makeImageSnapshot());
+ canvas->drawImage(image, 0, 0);
+}
+</pre>
+
+### See Also
+
+<a href="#SkSurface_MakeFromBackendRenderTarget">MakeFromBackendRenderTarget</a> <a href="#SkSurface_MakeRenderTarget">MakeRenderTarget</a>
+
+---
+
+<a name="SkSurface_MakeRenderTarget"></a>
+## MakeRenderTarget
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkSurface&gt; MakeRenderTarget(GrContext* context, SkBudgeted budgeted,
+ const SkImageInfo& imageInfo, int sampleCount,
+ GrSurfaceOrigin surfaceOrigin,
+ const SkSurfaceProps* surfaceProps,
+ bool shouldCreateWithMips = false)
+</pre>
+
+Returns offscreen <a href="#Surface">Surface</a> on <a href="undocumented#GPU">GPU</a> indicated by <a href="#SkSurface_MakeRenderTarget_context">context</a>. Allocates memory for
+pixels, based on the <a href="#SkSurface_width">width</a>, <a href="#SkSurface_height">height</a>, and <a href="undocumented#Image_Color_Type">Image Color Type</a> in ImageInfo. <a href="#SkSurface_MakeRenderTarget_budgeted">budgeted</a>
+selects whether allocation for offscreen pixels is tracked by <a href="#SkSurface_MakeRenderTarget_context">context</a>. <a href="#SkSurface_MakeRenderTarget_imageInfo">imageInfo</a>
+describes the pixel format in <a href="undocumented#Image_Color_Type">Image Color Type</a>, and transparency in
+<a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>, and color matching in <a href="undocumented#Color_Space">Color Space</a>.
+
+<a href="#SkSurface_MakeRenderTarget_sampleCount">sampleCount</a> requests the number of samples per pixel.
+Pass zero to disable <a href="undocumented#Multi_Sample_Anti_Aliasing">Multi Sample Anti Aliasing</a>. The request is rounded
+up to the next supported count, or rounded down if it is larger than the
+maximum supported count.
+
+<a href="#SkSurface_MakeRenderTarget_surfaceOrigin">surfaceOrigin</a> pins either the top-left or the bottom-left corner to the origin.
+
+<a href="#SkSurface_MakeRenderTarget_shouldCreateWithMips">shouldCreateWithMips</a> hints that <a href="SkImage_Reference#Image">Image</a> returned by <a href="#SkSurface_makeImageSnapshot">makeImageSnapshot</a> is <a href="undocumented#Mip_Map">Mip Map</a>.
+
+If <a href="undocumented#SK_SUPPORT_GPU">SK SUPPORT GPU</a> is defined as zero, has no effect and returns nullptr.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_MakeRenderTarget_context"> <code><strong>context </strong></code> </a></td> <td>
+<a href="undocumented#GPU_Context">GPU Context</a></td>
+ </tr> <tr> <td><a name="SkSurface_MakeRenderTarget_budgeted"> <code><strong>budgeted </strong></code> </a></td> <td>
+one of: <a href="#SkBudgeted_kNo">SkBudgeted::kNo</a>, <a href="#SkBudgeted_kYes">SkBudgeted::kYes</a></td>
+ </tr> <tr> <td><a name="SkSurface_MakeRenderTarget_imageInfo"> <code><strong>imageInfo </strong></code> </a></td> <td>
+<a href="#SkSurface_width">width</a>, <a href="#SkSurface_height">height</a>, <a href="undocumented#Image_Color_Type">Image Color Type</a>, <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>;
+<a href="#SkSurface_width">width</a>, or <a href="#SkSurface_height">height</a>, or both, may be zero</td>
+ </tr> <tr> <td><a name="SkSurface_MakeRenderTarget_sampleCount"> <code><strong>sampleCount </strong></code> </a></td> <td>
+samples per pixel, or 0 to disable full scene anti-aliasing</td>
+ </tr> <tr> <td><a name="SkSurface_MakeRenderTarget_surfaceOrigin"> <code><strong>surfaceOrigin </strong></code> </a></td> <td>
+one of: <a href="undocumented#GrSurfaceOrigin">kBottomLeft GrSurfaceOrigin</a>, <a href="undocumented#GrSurfaceOrigin">kTopLeft GrSurfaceOrigin</a></td>
+ </tr> <tr> <td><a name="SkSurface_MakeRenderTarget_surfaceProps"> <code><strong>surfaceProps </strong></code> </a></td> <td>
+<a href="undocumented#LCD">LCD</a> striping orientation and setting for device independent
+fonts; may be nullptr</td>
+ </tr> <tr> <td><a name="SkSurface_MakeRenderTarget_shouldCreateWithMips"> <code><strong>shouldCreateWithMips </strong></code> </a></td> <td>
+hint that <a href="#Surface">Surface</a> will host <a href="undocumented#Mip_Map">Mip Map</a> images</td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="#Surface">Surface</a> if all parameters are valid; otherwise, nullptr
+
+### Example
+
+<div><fiddle-embed name="67b6609471a3f1ed0f4b1657004cdecb"gpu="true"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_MakeFromBackendRenderTarget">MakeFromBackendRenderTarget</a> <a href="#SkSurface_MakeFromBackendTextureAsRenderTarget">MakeFromBackendTextureAsRenderTarget</a>
+
+---
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkSurface&gt; MakeRenderTarget(GrContext* context, SkBudgeted budgeted,
+ const SkImageInfo& imageInfo, int sampleCount,
+ const SkSurfaceProps* props)
+</pre>
+
+Returns offscreen <a href="#Surface">Surface</a> on <a href="undocumented#GPU">GPU</a> indicated by <a href="#SkSurface_MakeRenderTarget_2_context">context</a>. Allocates memory for
+pixels, based on the <a href="#SkSurface_width">width</a>, <a href="#SkSurface_height">height</a>, and <a href="undocumented#Image_Color_Type">Image Color Type</a> in ImageInfo. <a href="#SkSurface_MakeRenderTarget_2_budgeted">budgeted</a>
+selects whether allocation for offscreen pixels is tracked by <a href="#SkSurface_MakeRenderTarget_2_context">context</a>. <a href="#SkSurface_MakeRenderTarget_2_imageInfo">imageInfo</a>
+describes the pixel format in <a href="undocumented#Image_Color_Type">Image Color Type</a>, and transparency in
+<a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>, and color matching in <a href="undocumented#Color_Space">Color Space</a>.
+
+<a href="#SkSurface_MakeRenderTarget_2_sampleCount">sampleCount</a> requests the number of samples per pixel.
+Pass zero to disable <a href="undocumented#Multi_Sample_Anti_Aliasing">Multi Sample Anti Aliasing</a>. The request is rounded
+up to the next supported count, or rounded down if it is larger than the
+maximum supported count.
+
+<a href="#Surface">Surface</a> bottom-left corner is pinned to the origin.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_MakeRenderTarget_2_context"> <code><strong>context </strong></code> </a></td> <td>
+<a href="undocumented#GPU_Context">GPU Context</a></td>
+ </tr> <tr> <td><a name="SkSurface_MakeRenderTarget_2_budgeted"> <code><strong>budgeted </strong></code> </a></td> <td>
+one of: <a href="#SkBudgeted_kNo">SkBudgeted::kNo</a>, <a href="#SkBudgeted_kYes">SkBudgeted::kYes</a></td>
+ </tr> <tr> <td><a name="SkSurface_MakeRenderTarget_2_imageInfo"> <code><strong>imageInfo </strong></code> </a></td> <td>
+<a href="#SkSurface_width">width</a>, <a href="#SkSurface_height">height</a>, <a href="undocumented#Image_Color_Type">Image Color Type</a>, <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>,
+of <a href="undocumented#Raster_Surface">Raster Surface</a>; <a href="#SkSurface_width">width</a>, or <a href="#SkSurface_height">height</a>, or both, may be zero</td>
+ </tr> <tr> <td><a name="SkSurface_MakeRenderTarget_2_sampleCount"> <code><strong>sampleCount </strong></code> </a></td> <td>
+samples per pixel, or 0 to disable <a href="undocumented#Multi_Sample_Anti_Aliasing">Multi Sample Anti Aliasing</a></td>
+ </tr> <tr> <td><a name="SkSurface_MakeRenderTarget_2_props"> <code><strong>props </strong></code> </a></td> <td>
+<a href="undocumented#LCD">LCD</a> striping orientation and setting for device independent
+fonts; may be nullptr</td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="#Surface">Surface</a> if all parameters are valid; otherwise, nullptr
+
+### Example
+
+<div><fiddle-embed name="4473daad1b11784a9869431af72c93e0"><div><a href="undocumented#LCD">LCD</a> text takes advantage of raster striping to improve resolution. Only one of
+the four combinations is correct, depending on whether the monitor's <a href="undocumented#LCD">LCD</a> is
+horizontal or vertical, and whether the order of the stripes is red blue green
+or red green blue.</div></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_MakeFromBackendRenderTarget">MakeFromBackendRenderTarget</a> <a href="#SkSurface_MakeFromBackendTextureAsRenderTarget">MakeFromBackendTextureAsRenderTarget</a>
+
+---
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkSurface&gt; MakeRenderTarget(GrContext* context, SkBudgeted budgeted,
+ const SkImageInfo& imageInfo)
+</pre>
+
+Returns offscreen <a href="#Surface">Surface</a> on <a href="undocumented#GPU">GPU</a> indicated by <a href="#SkSurface_MakeRenderTarget_3_context">context</a>. Allocates memory for
+pixels, based on the <a href="#SkSurface_width">width</a>, <a href="#SkSurface_height">height</a>, and <a href="undocumented#Image_Color_Type">Image Color Type</a> in ImageInfo. <a href="#SkSurface_MakeRenderTarget_3_budgeted">budgeted</a>
+selects whether allocation for offscreen pixels is tracked by <a href="#SkSurface_MakeRenderTarget_3_context">context</a>. <a href="#SkSurface_MakeRenderTarget_3_imageInfo">imageInfo</a>
+describes the pixel format in <a href="undocumented#Image_Color_Type">Image Color Type</a>, and transparency in
+<a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>, and color matching in <a href="undocumented#Color_Space">Color Space</a>.
+
+<a href="#Surface">Surface</a> bottom-left corner is pinned to the origin.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_MakeRenderTarget_3_context"> <code><strong>context </strong></code> </a></td> <td>
+<a href="undocumented#GPU_Context">GPU Context</a></td>
+ </tr> <tr> <td><a name="SkSurface_MakeRenderTarget_3_budgeted"> <code><strong>budgeted </strong></code> </a></td> <td>
+one of: <a href="#SkBudgeted_kNo">SkBudgeted::kNo</a>, <a href="#SkBudgeted_kYes">SkBudgeted::kYes</a></td>
+ </tr> <tr> <td><a name="SkSurface_MakeRenderTarget_3_imageInfo"> <code><strong>imageInfo </strong></code> </a></td> <td>
+<a href="#SkSurface_width">width</a>, <a href="#SkSurface_height">height</a>, <a href="undocumented#Image_Color_Type">Image Color Type</a>, <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>,
+of <a href="undocumented#Raster_Surface">Raster Surface</a>; <a href="#SkSurface_width">width</a>, or <a href="#SkSurface_height">height</a>, or both, may be zero</td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="#Surface">Surface</a> if all parameters are valid; otherwise, nullptr
+
+### Example
+
+<div><fiddle-embed name="5c7629c15e9ac93f098335e72560fa2e"gpu="true"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_MakeFromBackendRenderTarget">MakeFromBackendRenderTarget</a> <a href="#SkSurface_MakeFromBackendTextureAsRenderTarget">MakeFromBackendTextureAsRenderTarget</a>
+
+---
+
+<a name="SkSurface_MakeNull"></a>
+## MakeNull
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkSurface&gt; MakeNull(int width, int height)
+</pre>
+
+Returns <a href="#Surface">Surface</a> without backing pixels. Drawing to <a href="SkCanvas_Reference#Canvas">Canvas</a> returned from <a href="#Surface">Surface</a>
+has no effect. Calling <a href="#SkSurface_makeImageSnapshot">makeImageSnapshot</a> on returned <a href="#Surface">Surface</a> returns nullptr.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_MakeNull_width"> <code><strong>width </strong></code> </a></td> <td>
+one or greater</td>
+ </tr> <tr> <td><a name="SkSurface_MakeNull_height"> <code><strong>height </strong></code> </a></td> <td>
+one or greater</td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="#Surface">Surface</a> if <a href="#SkSurface_width">width</a> and <a href="#SkSurface_height">height</a> are positive; otherwise, nullptr
+
+### Example
+
+<div><fiddle-embed name="99a54b814ccab7d2b1143c88581649ff">
+
+#### Example Output
+
+~~~~
+SkSurface::MakeNull(0, 0) == nullptr
+surf->makeImageSnapshot() == nullptr
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_MakeRaster">MakeRaster</a> <a href="#SkSurface_MakeRenderTarget">MakeRenderTarget</a>
+
+---
+
+<a name="SkSurface_width"></a>
+## width
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+int width() const
+</pre>
+
+Returns pixel count in each row; may be zero or greater.
+
+### Return Value
+
+number of pixel columns
+
+### Example
+
+<div><fiddle-embed name="df066b56dd97c7c589fd2bb6a2539de8">
+
+#### Example Output
+
+~~~~
+surface width=37 canvas width=37
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_height">height</a>
+
+---
+
+<a name="SkSurface_height"></a>
+## height
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+int height() const
+</pre>
+
+Returns pixel row count; may be zero or greater.
+
+### Return Value
+
+number of pixel rows
+
+### Example
+
+<div><fiddle-embed name="20571cc23e3146deaa09046b64cc0aef">
+
+#### Example Output
+
+~~~~
+surface height=1000 canvas height=1000
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_width">width</a>
+
+---
+
+<a name="SkSurface_generationID"></a>
+## generationID
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+uint32_t generationID()
+</pre>
+
+Returns unique value identifying the content of <a href="#Surface">Surface</a>. Returned value changes
+each time the content changes. Content is changed by drawing, or by calling
+<a href="#SkSurface_notifyContentWillChange">notifyContentWillChange</a>.
+
+### Return Value
+
+unique content identifier
+
+### Example
+
+<div><fiddle-embed name="be9574c4a14f891e1abb4ec2b1e51d6c">
+
+#### Example Output
+
+~~~~
+surface generationID: 1
+surface generationID: 2
+surface generationID: 3
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_notifyContentWillChange">notifyContentWillChange</a> <a href="#SkSurface_ContentChangeMode">ContentChangeMode</a> <a href="#SkSurface_getCanvas">getCanvas</a>
+
+---
+
+## <a name="SkSurface_ContentChangeMode"></a> Enum SkSurface::ContentChangeMode
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+enum <a href="#SkSurface_ContentChangeMode">ContentChangeMode</a> {
+<a href="#SkSurface_kDiscard_ContentChangeMode">kDiscard ContentChangeMode</a>,
+<a href="#SkSurface_kRetain_ContentChangeMode">kRetain ContentChangeMode</a>,
+};</pre>
+
+<a href="#SkSurface_ContentChangeMode">ContentChangeMode</a> members are parameters to <a href="#SkSurface_notifyContentWillChange">notifyContentWillChange</a>.
+
+### Constants
+
+<table>
+ <tr>
+ <td><a name="SkSurface_kDiscard_ContentChangeMode"> <code><strong>SkSurface::kDiscard_ContentChangeMode </strong></code> </a></td><td>Pass to notifyContentWillChange to discard surface contents when</td><td>the surface is cleared or overwritten.</td>
+ </tr>
+ <tr>
+ <td><a name="SkSurface_kRetain_ContentChangeMode"> <code><strong>SkSurface::kRetain_ContentChangeMode </strong></code> </a></td><td>Pass to notifyContentWillChange when to preserve surface contents.</td><td>If a snapshot has been generated, this copies the <a href="#Surface">Surface</a> contents.</td>
+ </tr>
+</table>
+
+### See Also
+
+<a href="#SkSurface_notifyContentWillChange">notifyContentWillChange</a> <a href="#SkSurface_generationID">generationID</a>
+
+
+
+<a name="SkSurface_notifyContentWillChange"></a>
+## notifyContentWillChange
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void notifyContentWillChange(ContentChangeMode mode)
+</pre>
+
+Notifies that <a href="#Surface">Surface</a> contents will be changed by code outside of <a href="undocumented#Skia">Skia</a>.
+Subsequent calls to <a href="#SkSurface_generationID">generationID</a> return a different value.
+
+<a href="#SkSurface_notifyContentWillChange_mode">mode</a> is normally passed as <a href="#SkSurface_kRetain_ContentChangeMode">kRetain ContentChangeMode</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_notifyContentWillChange_mode"> <code><strong>mode </strong></code> </a></td> <td>
+one of: <a href="#SkSurface_kDiscard_ContentChangeMode">kDiscard ContentChangeMode</a>, <a href="#SkSurface_kRetain_ContentChangeMode">kRetain ContentChangeMode</a></td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="be9574c4a14f891e1abb4ec2b1e51d6c"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_ContentChangeMode">ContentChangeMode</a> <a href="#SkSurface_generationID">generationID</a>
+
+---
+
+## <a name="SkSurface_BackendHandleAccess"></a> Enum SkSurface::BackendHandleAccess
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+enum <a href="#SkSurface_BackendHandleAccess">BackendHandleAccess</a> {
+<a href="#SkSurface_kFlushRead_BackendHandleAccess">kFlushRead BackendHandleAccess</a>,
+<a href="#SkSurface_kFlushWrite_BackendHandleAccess">kFlushWrite BackendHandleAccess</a>,
+<a href="#SkSurface_kDiscardWrite_BackendHandleAccess">kDiscardWrite BackendHandleAccess</a>,
+};</pre>
+
+### Constants
+
+<table>
+ <tr>
+ <td><a name="SkSurface_kFlushRead_BackendHandleAccess"> <code><strong>SkSurface::kFlushRead_BackendHandleAccess </strong></code> </a></td><td>Caller may read from the back-end object.</td><td></td>
+ </tr>
+ <tr>
+ <td><a name="SkSurface_kFlushWrite_BackendHandleAccess"> <code><strong>SkSurface::kFlushWrite_BackendHandleAccess </strong></code> </a></td><td>Caller may write to the back-end object.</td><td></td>
+ </tr>
+ <tr>
+ <td><a name="SkSurface_kDiscardWrite_BackendHandleAccess"> <code><strong>SkSurface::kDiscardWrite_BackendHandleAccess </strong></code> </a></td><td>Caller must overwrite the entire back-end object.</td><td></td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="260a5ba014b00eeb5a74b3c6b8d31be4"gpu="true"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_getTextureHandle">getTextureHandle</a> <a href="#SkSurface_getRenderTargetHandle">getRenderTargetHandle</a>
+
+
+
+<a name="SkSurface_getTextureHandle"></a>
+## getTextureHandle
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+GrBackendObject getTextureHandle(BackendHandleAccess backendHandleAccess)
+</pre>
+
+Returns the <a href="undocumented#GPU">GPU</a> back-end reference of the texture used by <a href="#Surface">Surface</a>, or zero
+if <a href="#Surface">Surface</a> is not backed by a <a href="undocumented#GPU">GPU</a> texture.
+
+The returned texture handle is only valid until the next <a href="#SkSurface_draw">draw</a> into <a href="#Surface">Surface</a>,
+or when <a href="#Surface">Surface</a> is deleted.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_getTextureHandle_backendHandleAccess"> <code><strong>backendHandleAccess </strong></code> </a></td> <td>
+one of: <a href="#SkSurface_kFlushRead_BackendHandleAccess">kFlushRead BackendHandleAccess</a>,
+<a href="#SkSurface_kFlushWrite_BackendHandleAccess">kFlushWrite BackendHandleAccess</a>, <a href="#SkSurface_kDiscardWrite_BackendHandleAccess">kDiscardWrite BackendHandleAccess</a></td>
+ </tr>
+</table>
+
+### Return Value
+
+<a href="undocumented#GPU">GPU</a> texture reference
+
+### Example
+
+<div><fiddle-embed name="4b5720038daaf65ba1ba546e678ddd6e"gpu="true"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_getRenderTargetHandle">getRenderTargetHandle</a> <a href="undocumented#GrBackendObject">GrBackendObject</a> <a href="#SkSurface_BackendHandleAccess">BackendHandleAccess</a>
+
+---
+
+<a name="SkSurface_getRenderTargetHandle"></a>
+## getRenderTargetHandle
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool getRenderTargetHandle(GrBackendObject* backendObject, BackendHandleAccess backendHandleAccess)
+</pre>
+
+Returns true and stores the <a href="undocumented#GPU">GPU</a> back-end reference of the render target used
+by <a href="#Surface">Surface</a> in <a href="#SkSurface_getRenderTargetHandle_backendObject">backendObject</a>.
+
+Return false if <a href="#Surface">Surface</a> is not backed by a <a href="undocumented#GPU">GPU</a> render target, and leaves
+<a href="#SkSurface_getRenderTargetHandle_backendObject">backendObject</a> unchanged.
+
+The returned render target handle is only valid until the next <a href="#SkSurface_draw">draw</a> into <a href="#Surface">Surface</a>,
+or when <a href="#Surface">Surface</a> is deleted.
+
+In <a href="undocumented#OpenGL">OpenGL</a> this returns the frame buffer object ID.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_getRenderTargetHandle_backendObject"> <code><strong>backendObject </strong></code> </a></td> <td>
+<a href="undocumented#GPU">GPU</a> intermediate memory buffer</td>
+ </tr> <tr> <td><a name="SkSurface_getRenderTargetHandle_backendHandleAccess"> <code><strong>backendHandleAccess </strong></code> </a></td> <td>
+one of: <a href="#SkSurface_kFlushRead_BackendHandleAccess">kFlushRead BackendHandleAccess</a>,
+<a href="#SkSurface_kFlushWrite_BackendHandleAccess">kFlushWrite BackendHandleAccess</a>, <a href="#SkSurface_kDiscardWrite_BackendHandleAccess">kDiscardWrite BackendHandleAccess</a></td>
+ </tr>
+</table>
+
+### Return Value
+
+true if <a href="#Surface">Surface</a> is backed by <a href="undocumented#GPU">GPU</a> texture
+
+### Example
+
+<div><fiddle-embed name="16e848a4405ce08f8393bba13cc3b8bf"gpu="true"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_getTextureHandle">getTextureHandle</a> <a href="undocumented#GrBackendObject">GrBackendObject</a> <a href="#SkSurface_BackendHandleAccess">BackendHandleAccess</a>
+
+---
+
+<a name="SkSurface_getCanvas"></a>
+## getCanvas
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkCanvas* getCanvas()
+</pre>
+
+Returns <a href="SkCanvas_Reference#Canvas">Canvas</a> that draws into <a href="#Surface">Surface</a>. Subsequent calls return the same <a href="SkCanvas_Reference#Canvas">Canvas</a>.
+<a href="SkCanvas_Reference#Canvas">Canvas</a> returned is managed and owned by <a href="#Surface">Surface</a>, and is deleted when <a href="#Surface">Surface</a>
+is deleted.
+
+### Return Value
+
+drawing <a href="SkCanvas_Reference#Canvas">Canvas</a> for <a href="#Surface">Surface</a>
+
+### Example
+
+<div><fiddle-embed name="33d0c5ad5a4810e533ae1010e29f8b75"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_makeSurface">makeSurface</a> <a href="#SkSurface_makeImageSnapshot">makeImageSnapshot</a> <a href="#SkSurface_draw">draw</a>
+
+---
+
+<a name="SkSurface_makeSurface"></a>
+## makeSurface
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+sk_sp&lt;SkSurface&gt; makeSurface(const SkImageInfo& imageInfo)
+</pre>
+
+Returns a compatible <a href="#Surface">Surface</a>, or nullptr. Returned <a href="#Surface">Surface</a> contains
+the same raster, <a href="undocumented#GPU">GPU</a>, or null properties as the original. Returned <a href="#Surface">Surface</a>
+does not share the same pixels.
+
+Returns nullptr if <a href="#SkSurface_makeSurface_imageInfo">imageInfo</a> <a href="#SkSurface_width">width</a> or <a href="#SkSurface_height">height</a> are zero, or if <a href="#SkSurface_makeSurface_imageInfo">imageInfo</a>
+is incompatible with <a href="#Surface">Surface</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_makeSurface_imageInfo"> <code><strong>imageInfo </strong></code> </a></td> <td>
+<a href="#SkSurface_width">width</a>, <a href="#SkSurface_height">height</a>, <a href="undocumented#Image_Color_Type">Image Color Type</a>, <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>,
+of <a href="#Surface">Surface</a>; <a href="#SkSurface_width">width</a> and <a href="#SkSurface_height">height</a> must be greater than zero</td>
+ </tr>
+</table>
+
+### Return Value
+
+compatible <a href="#Surface">Surface</a> or nullptr
+
+### Example
+
+<div><fiddle-embed name="a9889b519a26896b900da0444e423c61"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_makeImageSnapshot">makeImageSnapshot</a> <a href="#SkSurface_getCanvas">getCanvas</a> <a href="#SkSurface_draw">draw</a>
+
+---
+
+<a name="SkSurface_makeImageSnapshot"></a>
+## makeImageSnapshot
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+sk_sp&lt;SkImage&gt; makeImageSnapshot()
+</pre>
+
+Returns <a href="SkImage_Reference#Image">Image</a> capturing <a href="#Surface">Surface</a> contents. Subsequent drawing to <a href="#Surface">Surface</a> contents
+are not captured. <a href="SkImage_Reference#Image">Image</a> allocation is accounted for if <a href="#Surface">Surface</a> was created with
+<a href="#SkBudgeted_kYes">SkBudgeted::kYes</a>.
+
+### Return Value
+
+<a href="SkImage_Reference#Image">Image</a> initialized with <a href="#Surface">Surface</a> contents
+
+### Example
+
+<div><fiddle-embed name="46f1fa0d95e590a64bed0140407ce5f7"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_draw">draw</a> <a href="#SkSurface_getCanvas">getCanvas</a>
+
+---
+
+<a name="SkSurface_draw"></a>
+## draw
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void draw(SkCanvas* canvas, SkScalar x, SkScalar y, const SkPaint* paint)
+</pre>
+
+Draws <a href="#Surface">Surface</a> contents to <a href="#SkSurface_draw_canvas">canvas</a>, with its top-left corner at (<a href="#SkSurface_draw_x">x</a>, <a href="#SkSurface_draw_y">y</a>).
+
+If <a href="SkPaint_Reference#Paint">Paint</a> <a href="#SkSurface_draw_paint">paint</a> is not nullptr, apply <a href="undocumented#Color_Filter">Color Filter</a>, <a href="#Alpha">Color Alpha</a>, <a href="undocumented#Image_Filter">Image Filter</a>,
+<a href="undocumented#Blend_Mode">Blend Mode</a>, and <a href="undocumented#Draw_Looper">Draw Looper</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_draw_canvas"> <code><strong>canvas </strong></code> </a></td> <td>
+<a href="SkCanvas_Reference#Canvas">Canvas</a> drawn into</td>
+ </tr> <tr> <td><a name="SkSurface_draw_x"> <code><strong>x </strong></code> </a></td> <td>
+horizontal offset in <a href="SkCanvas_Reference#Canvas">Canvas</a></td>
+ </tr> <tr> <td><a name="SkSurface_draw_y"> <code><strong>y </strong></code> </a></td> <td>
+vertical offset in <a href="SkCanvas_Reference#Canvas">Canvas</a></td>
+ </tr> <tr> <td><a name="SkSurface_draw_paint"> <code><strong>paint </strong></code> </a></td> <td>
+<a href="SkPaint_Reference#Paint">Paint</a> containing <a href="undocumented#Blend_Mode">Blend Mode</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Image_Filter">Image Filter</a>,
+and so on; or nullptr</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="0de693f4d8dd898a60be8cfba23952be"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_makeImageSnapshot">makeImageSnapshot</a> <a href="#SkSurface_getCanvas">getCanvas</a>
+
+---
+
+<a name="SkSurface_peekPixels"></a>
+## peekPixels
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool peekPixels(SkPixmap* pixmap)
+</pre>
+
+Copies <a href="#Surface">Surface</a> pixel address, row bytes, and <a href="undocumented#Image_Info">Image Info</a> to <a href="SkPixmap_Reference#Pixmap">Pixmap</a>, if address
+is available, and returns true. If pixel address is not available, return
+false and leave <a href="SkPixmap_Reference#Pixmap">Pixmap</a> unchanged.
+
+<a href="#SkSurface_peekPixels_pixmap">pixmap</a> contents become invalid on any future change to <a href="#Surface">Surface</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_peekPixels_pixmap"> <code><strong>pixmap </strong></code> </a></td> <td>
+storage for pixel state if pixels are readable; otherwise, ignored</td>
+ </tr>
+</table>
+
+### Return Value
+
+true if <a href="#Surface">Surface</a> has direct access to pixels
+
+### Example
+
+<div><fiddle-embed name="8c6184f22cfe068f021704cf92a147a1"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_readPixels">readPixels</a>
+
+---
+
+<a name="SkSurface_readPixels"></a>
+## readPixels
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool readPixels(const SkPixmap& dst, int srcX, int srcY)
+</pre>
+
+Copies <a href="SkRect_Reference#Rect">Rect</a> of pixels to <a href="#SkSurface_readPixels_dst">dst</a>.
+
+Source <a href="SkRect_Reference#Rect">Rect</a> corners are (<a href="#SkSurface_readPixels_srcX">srcX</a>, <a href="#SkSurface_readPixels_srcY">srcY</a>) and (this-><a href="#SkSurface_width">width</a>, this-><a href="#SkSurface_height">height</a>).
+Destination <a href="SkRect_Reference#Rect">Rect</a> corners are (0, 0) and (<a href="#SkSurface_readPixels_dst">dst</a>.<a href="#SkSurface_width">width</a>, <a href="#SkSurface_readPixels_dst">dst</a>.<a href="#SkSurface_height">height</a>).
+Copies each readable pixel intersecting both rectangles, without scaling,
+converting to <a href="#SkSurface_readPixels_dst">dst</a>.colorType() and <a href="#SkSurface_readPixels_dst">dst</a>.alphaType() if required.
+
+Pixels are readable when <a href="#Surface">Surface</a> is raster, or backed by a <a href="undocumented#GPU">GPU</a>.
+
+The destination pixel storage must be allocated by the caller.
+
+<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="undocumented#Image_Color_Type">Image Color Type</a> and <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>
+do not match. Only pixels within both source and destination rectangles
+are copied. <a href="#SkSurface_readPixels_dst">dst</a> contents outside <a href="SkRect_Reference#Rect">Rect</a> intersection are unchanged.
+
+Pass negative values for <a href="#SkSurface_readPixels_srcX">srcX</a> or <a href="#SkSurface_readPixels_srcY">srcY</a> to offset pixels across or down destination.
+
+Does not copy, and returns false if:
+
+<table> <tr>
+ <td>Source and destination rectangles do not intersect.</td> </tr> <tr>
+ <td><a href="SkPixmap_Reference#Pixmap">Pixmap</a> pixels could not be allocated.</td> </tr> <tr>
+ <td><a href="#SkSurface_readPixels_dst">dst</a>.rowBytes() is too small to contain one row of pixels.</td> </tr>
+</table>
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_readPixels_dst"> <code><strong>dst </strong></code> </a></td> <td>
+storage for pixels copied from <a href="#Surface">Surface</a></td>
+ </tr> <tr> <td><a name="SkSurface_readPixels_srcX"> <code><strong>srcX </strong></code> </a></td> <td>
+offset into readable pixels in x; may be negative</td>
+ </tr> <tr> <td><a name="SkSurface_readPixels_srcY"> <code><strong>srcY </strong></code> </a></td> <td>
+offset into readable pixels in y; may be negative</td>
+ </tr>
+</table>
+
+### Return Value
+
+true if pixels were copied
+
+### Example
+
+<div><fiddle-embed name="9f454fb93bca6482598d198b4121f0a6"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_peekPixels">peekPixels</a>
+
+---
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, int srcX, int srcY)
+</pre>
+
+Copies <a href="SkRect_Reference#Rect">Rect</a> of pixels from <a href="SkCanvas_Reference#Canvas">Canvas</a> into <a href="#SkSurface_readPixels_2_dstPixels">dstPixels</a>.
+
+Source <a href="SkRect_Reference#Rect">Rect</a> corners are (<a href="#SkSurface_readPixels_2_srcX">srcX</a>, <a href="#SkSurface_readPixels_2_srcY">srcY</a>) and (this-><a href="#SkSurface_width">width</a>, this-><a href="#SkSurface_height">height</a>).
+Destination <a href="SkRect_Reference#Rect">Rect</a> corners are (0, 0) and (<a href="#SkSurface_readPixels_2_dstInfo">dstInfo</a>.<a href="#SkSurface_width">width</a>, <a href="#SkSurface_readPixels_2_dstInfo">dstInfo</a>.<a href="#SkSurface_height">height</a>).
+Copies each readable pixel intersecting both rectangles, without scaling,
+converting to <a href="#SkSurface_readPixels_2_dstInfo">dstInfo</a>.colorType() and <a href="#SkSurface_readPixels_2_dstInfo">dstInfo</a>.alphaType() if required.
+
+Pixels are readable when <a href="#Surface">Surface</a> is raster, or backed by a <a href="undocumented#GPU">GPU</a>.
+
+The destination pixel storage must be allocated by the caller.
+
+<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="undocumented#Image_Color_Type">Image Color Type</a> and <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>
+do not match. Only pixels within both source and destination rectangles
+are copied. <a href="#SkSurface_readPixels_2_dstPixels">dstPixels</a> contents outside <a href="SkRect_Reference#Rect">Rect</a> intersection are unchanged.
+
+Pass negative values for <a href="#SkSurface_readPixels_2_srcX">srcX</a> or <a href="#SkSurface_readPixels_2_srcY">srcY</a> to offset pixels across or down destination.
+
+Does not copy, and returns false if:
+
+<table> <tr>
+ <td>Source and destination rectangles do not intersect.</td> </tr> <tr>
+ <td><a href="#Surface">Surface</a> pixels could not be converted to <a href="#SkSurface_readPixels_2_dstInfo">dstInfo</a>.colorType() or <a href="#SkSurface_readPixels_2_dstInfo">dstInfo</a>.alphaType().</td> </tr> <tr>
+ <td><a href="#SkSurface_readPixels_2_dstRowBytes">dstRowBytes</a> is too small to contain one row of pixels.</td> </tr>
+</table>
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_readPixels_2_dstInfo"> <code><strong>dstInfo </strong></code> </a></td> <td>
+<a href="#SkSurface_width">width</a>, <a href="#SkSurface_height">height</a>, <a href="undocumented#Image_Color_Type">Image Color Type</a>, and <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a> of <a href="#SkSurface_readPixels_2_dstPixels">dstPixels</a></td>
+ </tr> <tr> <td><a name="SkSurface_readPixels_2_dstPixels"> <code><strong>dstPixels </strong></code> </a></td> <td>
+storage for pixels; <a href="#SkSurface_readPixels_2_dstInfo">dstInfo</a>.<a href="#SkSurface_height">height</a> times <a href="#SkSurface_readPixels_2_dstRowBytes">dstRowBytes</a>, or larger</td>
+ </tr> <tr> <td><a name="SkSurface_readPixels_2_dstRowBytes"> <code><strong>dstRowBytes </strong></code> </a></td> <td>
+size of one destination row; <a href="#SkSurface_readPixels_2_dstInfo">dstInfo</a>.<a href="#SkSurface_width">width</a> times pixel size, or larger</td>
+ </tr> <tr> <td><a name="SkSurface_readPixels_2_srcX"> <code><strong>srcX </strong></code> </a></td> <td>
+offset into readable pixels in x; may be negative</td>
+ </tr> <tr> <td><a name="SkSurface_readPixels_2_srcY"> <code><strong>srcY </strong></code> </a></td> <td>
+offset into readable pixels in y; may be negative</td>
+ </tr>
+</table>
+
+### Return Value
+
+true if pixels were copied
+
+### Example
+
+<div><fiddle-embed name="d141d6c662d201d191fb1eea26d014fd"><div>A black oval drawn on a red background provides an image to copy.
+<a href="#SkSurface_readPixels">readPixels</a> copies one quarter of the <a href="#Surface">Surface</a> into each of the four corners.
+The copied quarter ovals overdraw the original oval.</div></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_peekPixels">peekPixels</a>
+
+---
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool readPixels(const SkBitmap& dst, int srcX, int srcY)
+</pre>
+
+Copies <a href="SkRect_Reference#Rect">Rect</a> of pixels from <a href="#Surface">Surface</a> into bitmap.
+
+Source <a href="SkRect_Reference#Rect">Rect</a> corners are (<a href="#SkSurface_readPixels_3_srcX">srcX</a>, <a href="#SkSurface_readPixels_3_srcY">srcY</a>) and (this-><a href="#SkSurface_width">width</a>, this-><a href="#SkSurface_height">height</a>).
+Destination <a href="SkRect_Reference#Rect">Rect</a> corners are (0, 0) and (bitmap.<a href="#SkSurface_width">width</a>, bitmap.<a href="#SkSurface_height">height</a>).
+Copies each readable pixel intersecting both rectangles, without scaling,
+converting to bitmap.colorType() and bitmap.alphaType() if required.
+
+Pixels are readable when <a href="#Surface">Surface</a> is raster, or backed by a <a href="undocumented#GPU">GPU</a>.
+
+The destination pixel storage must be allocated by the caller.
+
+<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="undocumented#Image_Color_Type">Image Color Type</a> and <a href="undocumented#Image_Alpha_Type">Image Alpha Type</a>
+do not match. Only pixels within both source and destination rectangles
+are copied. <a href="#SkSurface_readPixels_3_dst">dst</a> contents outside <a href="SkRect_Reference#Rect">Rect</a> intersection are unchanged.
+
+Pass negative values for <a href="#SkSurface_readPixels_3_srcX">srcX</a> or <a href="#SkSurface_readPixels_3_srcY">srcY</a> to offset pixels across or down destination.
+
+Does not copy, and returns false if:
+
+<table> <tr>
+ <td>Source and destination rectangles do not intersect.</td> </tr> <tr>
+ <td><a href="#Surface">Surface</a> pixels could not be converted to <a href="#SkSurface_readPixels_3_dst">dst</a>.colorType() or <a href="#SkSurface_readPixels_3_dst">dst</a>.alphaType().</td> </tr> <tr>
+ <td><a href="#SkSurface_readPixels_3_dst">dst</a> pixels could not be allocated.</td> </tr> <tr>
+ <td><a href="#SkSurface_readPixels_3_dst">dst</a>.rowBytes() is too small to contain one row of pixels.</td> </tr>
+</table>
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_readPixels_3_dst"> <code><strong>dst </strong></code> </a></td> <td>
+storage for pixels copied from <a href="#Surface">Surface</a></td>
+ </tr> <tr> <td><a name="SkSurface_readPixels_3_srcX"> <code><strong>srcX </strong></code> </a></td> <td>
+offset into readable pixels in x; may be negative</td>
+ </tr> <tr> <td><a name="SkSurface_readPixels_3_srcY"> <code><strong>srcY </strong></code> </a></td> <td>
+offset into readable pixels in y; may be negative</td>
+ </tr>
+</table>
+
+### Return Value
+
+true if pixels were copied
+
+### Example
+
+<div><fiddle-embed name="dcbd4af9151820f63de45a35f3a8d110"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_peekPixels">peekPixels</a>
+
+---
+
+<a name="SkSurface_props"></a>
+## props
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+const SkSurfaceProps& props() const
+</pre>
+
+Returns <a href="#Properties">Surface Properties</a> for surface.
+
+### Return Value
+
+<a href="undocumented#LCD">LCD</a> striping orientation and setting for device independent fonts
+
+### Example
+
+<div><fiddle-embed name="13cf9e7b2894ae6e98c1fd719040bf01">
+
+#### Example Output
+
+~~~~
+surf.props(): kRGB_H_SkPixelGeometry
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href="undocumented#SkSurfaceProps">SkSurfaceProps</a>
+
+---
+
+<a name="SkSurface_prepareForExternalIO"></a>
+## prepareForExternalIO
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void prepareForExternalIO()
+</pre>
+
+To be deprecated.
+
+---
+
+<a name="SkSurface_flush"></a>
+## flush
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void flush()
+</pre>
+
+Issues pending <a href="#Surface">Surface</a> commands to the <a href="undocumented#GPU">GPU</a>-backed <a href="undocumented#API">API</a> and resolves any <a href="#Surface">Surface</a> <a href="undocumented#MSAA">MSAA</a>.
+
+<a href="undocumented#Skia">Skia</a> flushes as needed, so it is not necessary to call this if <a href="undocumented#Skia">Skia</a> manages
+drawing and object lifetime. Call when interleaving <a href="undocumented#Skia">Skia</a> calls with native
+<a href="undocumented#GPU">GPU</a> calls.
+
+### See Also
+
+<a href="undocumented#GrBackendSemaphore">GrBackendSemaphore</a>
+
+---
+
+<a name="SkSurface_flushAndSignalSemaphores"></a>
+## flushAndSignalSemaphores
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+GrSemaphoresSubmitted flushAndSignalSemaphores(int numSemaphores,
+ GrBackendSemaphore signalSemaphores[])
+</pre>
+
+Issues pending <a href="#Surface">Surface</a> commands to the <a href="undocumented#GPU">GPU</a>-backed <a href="undocumented#API">API</a> and resolves any <a href="#Surface">Surface</a> <a href="undocumented#MSAA">MSAA</a>.
+After issuing all commands, <a href="#SkSurface_flushAndSignalSemaphores_signalSemaphores">signalSemaphores</a> of count <a href="#SkSurface_flushAndSignalSemaphores_numSemaphores">numSemaphores</a> semaphores
+are signaled by the <a href="undocumented#GPU">GPU</a>.
+
+For each <a href="undocumented#GrBackendSemaphore">GrBackendSemaphore</a> in <a href="#SkSurface_flushAndSignalSemaphores_signalSemaphores">signalSemaphores</a>:
+if <a href="undocumented#GrBackendSemaphore">GrBackendSemaphore</a> is initialized, the <a href="undocumented#GPU">GPU</a> back-end uses the semaphore as is;
+otherwise, a new semaphore is created and initializes <a href="undocumented#GrBackendSemaphore">GrBackendSemaphore</a>.
+
+The caller must delete the semaphores created and returned in <a href="#SkSurface_flushAndSignalSemaphores_signalSemaphores">signalSemaphores</a>.
+<a href="undocumented#GrBackendSemaphore">GrBackendSemaphore</a> can be deleted as soon as this function returns.
+
+If the back-end <a href="undocumented#API">API</a> is <a href="undocumented#OpenGL">OpenGL</a> only uninitialized <a href="#GrBackendSemaphore">GrBackendSemaphores</a> are supported.
+
+If the back-end <a href="undocumented#API">API</a> is <a href="undocumented#Vulkan">Vulkan</a> semaphores may be initialized or uninitialized.
+If uninitialized, created semaphores are valid only with the VkDevice
+with which they were created.
+
+If <a href="#kNo">GrSemaphoresSubmitted::kNo</a> is returned, the <a href="undocumented#GPU">GPU</a> back-end did not create or
+add any semaphores to signal on the <a href="undocumented#GPU">GPU</a>; the caller should not instruct the <a href="undocumented#GPU">GPU</a>
+to <a href="#SkSurface_wait">wait</a> on any of the semaphores.
+
+Pending surface commands are flushed regardless of the return result.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_flushAndSignalSemaphores_numSemaphores"> <code><strong>numSemaphores </strong></code> </a></td> <td>
+size of <a href="#SkSurface_flushAndSignalSemaphores_signalSemaphores">signalSemaphores</a> array</td>
+ </tr> <tr> <td><a name="SkSurface_flushAndSignalSemaphores_signalSemaphores"> <code><strong>signalSemaphores </strong></code> </a></td> <td>
+array of semaphore containers</td>
+ </tr>
+</table>
+
+### Return Value
+
+one of: <a href="#kYes">GrSemaphoresSubmitted::kYes</a>, <a href="#kNo">GrSemaphoresSubmitted::kNo</a>
+
+### See Also
+
+<a href="#SkSurface_wait">wait</a> <a href="undocumented#GrBackendSemaphore">GrBackendSemaphore</a>
+
+---
+
+<a name="SkSurface_wait"></a>
+## wait
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool wait(int numSemaphores, const GrBackendSemaphore* waitSemaphores)
+</pre>
+
+Inserts a list of <a href="undocumented#GPU">GPU</a> semaphores that the current <a href="undocumented#GPU">GPU</a>-backed <a href="undocumented#API">API</a> must <a href="#SkSurface_wait">wait</a> on before
+executing any more commands on the <a href="undocumented#GPU">GPU</a> for this surface. <a href="undocumented#Skia">Skia</a> will take ownership of the
+underlying semaphores and delete them once they have been signaled and waited on.
+If this call returns false, then the <a href="undocumented#GPU">GPU</a> back-end will not <a href="#SkSurface_wait">wait</a> on any passed in semaphores,
+and the client will still own the semaphores.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_wait_numSemaphores"> <code><strong>numSemaphores </strong></code> </a></td> <td>
+size of <a href="#SkSurface_wait_waitSemaphores">waitSemaphores</a> array</td>
+ </tr> <tr> <td><a name="SkSurface_wait_waitSemaphores"> <code><strong>waitSemaphores </strong></code> </a></td> <td>
+array of semaphore containers</td>
+ </tr>
+</table>
+
+### Return Value
+
+true if <a href="undocumented#GPU">GPU</a> is waiting on semaphores
+
+### Example
+
+<div><fiddle-embed name="c9033080af68efc0f270d748f1c0e011"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_flushAndSignalSemaphores">flushAndSignalSemaphores</a> <a href="undocumented#GrBackendSemaphore">GrBackendSemaphore</a>
+
+---
+
+<a name="SkSurface_characterize"></a>
+## characterize
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool characterize(SkSurfaceCharacterization* characterization) const
+</pre>
+
+Initializes <a href="#Characterization">Surface Characterization</a> that can be used to perform <a href="undocumented#GPU">GPU</a> back-end
+pre-processing in a separate thread. Typically this is used to divide drawing
+into multiple tiles. DeferredDisplayListRecorder records the drawing commands
+for each tile.
+
+Return true if <a href="#Surface">Surface</a> supports <a href="#SkSurface_characterize_characterization">characterization</a>. <a href="undocumented#Raster_Surface">Raster Surface</a> returns false.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_characterize_characterization"> <code><strong>characterization </strong></code> </a></td> <td>
+properties for parallel drawing</td>
+ </tr>
+</table>
+
+### Return Value
+
+true if supported
+
+### Example
+
+<div><fiddle-embed name="3df4e2fc63483a3fa19589b5388080bc"gpu="true"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_draw">draw</a> <a href="undocumented#SkSurfaceCharacterization">SkSurfaceCharacterization</a> <a href="undocumented#SkDeferredDisplayList">SkDeferredDisplayList</a>
+
+---
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void draw(SkDeferredDisplayList* deferredDisplayList)
+</pre>
+
+Draws deferred display list created using <a href="undocumented#SkDeferredDisplayListRecorder">SkDeferredDisplayListRecorder</a>.
+The <a href="#SkSurface_draw">draw</a> has no effect if <a href="#Characterization">Surface Characterization</a> stored in <a href="#SkSurface_draw_2_deferredDisplayList">deferredDisplayList</a>
+is not compatible with <a href="#Surface">Surface</a>.
+
+### Parameters
+
+<table> <tr> <td><a name="SkSurface_draw_2_deferredDisplayList"> <code><strong>deferredDisplayList </strong></code> </a></td> <td>
+drawing commands</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="3dfa7496268dfb2c7465cda5da39dfbd"gpu="true"cpu="true"></fiddle-embed></div>
+
+### See Also
+
+<a href="#SkSurface_characterize">characterize</a> <a href="undocumented#SkSurfaceCharacterization">SkSurfaceCharacterization</a> <a href="undocumented#SkDeferredDisplayList">SkDeferredDisplayList</a>
+
+---
+
diff --git a/site/user/api/catalog.htm b/site/user/api/catalog.htm
index de9d211879..1f6eb77738 100644
--- a/site/user/api/catalog.htm
+++ b/site/user/api/catalog.htm
@@ -47,7 +47,7 @@
"hash": "fe79a9c1ec350264eb9c7b2509dd3638",
"file": "SkBitmap_Reference",
"name": "SkBitmap::HeapAllocator::allocPixelRef",
- "stdout": "pixel address = (nil)\\npixel address = 0x5642246ef670\\n"
+ "stdout": "pixel address = (nil)\\npixel address = 0x55f1363e3670\\n"
},
"SkBitmap_alphaType": {
"code": "void draw(SkCanvas* canvas) {\n const char* alphas[] = {\"Unknown\", \"Opaque\", \"Premul\", \"Unpremul\"};\n SkPixmap pixmap(SkImageInfo::MakeA8(16, 32), nullptr, 64);\n SkDebugf(\"alpha type: k\" \"%s\" \"_SkAlphaType\\n\", alphas[pixmap.alphaType()]);\n}",
@@ -84,13 +84,6 @@
"name": "SkBitmap::computeByteSize",
"stdout": "width: 1 height: 1 computeByteSize: 4\\nwidth: 1 height: 1000 computeByteSize: 4999\\nwidth: 1 height: 1000000 computeByteSize: 4999999\\nwidth: 1000 height: 1 computeByteSize: 4000\\nwidth: 1000 height: 1000 computeByteSize: 4999000\\nwidth: 1000 height: 1000000 computeByteSize: 4999999000\\nwidth: 1000000 height: 1 computeByteSize: 4000000\\nwidth: 1000000 height: 1000 computeByteSize: 4999000000\\nwidth: 1000000 height: 1000000 computeByteSize: 4999999000000\\n"
},
- "SkBitmap_copy_assignment_operator": {
- "code": "void draw(SkCanvas* canvas) {\n SkBitmap original;\n original.tryAllocPixels(SkImageInfo::Make(25, 35, kRGBA_8888_SkColorType, kOpaque_SkAlphaType));\n SkDebugf(\"original has pixels before copy: %s\\n\", original.getPixels() ? \"true\" : \"false\");\n SkBitmap copy = original; \n SkDebugf(\"original has pixels after copy: %s\\n\", original.getPixels() ? \"true\" : \"false\");\n SkDebugf(\"copy has pixels: %s\\n\", copy.getPixels() ? \"true\" : \"false\");\n}\n",
- "hash": "6366fa1b1b3df1bebbfa3ed1c5a43457",
- "file": "SkBitmap_Reference",
- "name": "SkBitmap::operator=(const SkBitmap& src)",
- "stdout": "original has pixels before copy: true\\noriginal has pixels after copy: true\\ncopy has pixels: true\\n"
- },
"SkBitmap_copy_const_SkBitmap": {
"code": "void draw(SkCanvas* canvas) {\n SkBitmap original;\n original.tryAllocPixels(SkImageInfo::Make(25, 35, kRGBA_8888_SkColorType, kOpaque_SkAlphaType));\n SkDebugf(\"original has pixels before copy: %s\\n\", original.getPixels() ? \"true\" : \"false\");\n SkBitmap copy(original); \n SkDebugf(\"original has pixels after copy: %s\\n\", original.getPixels() ? \"true\" : \"false\");\n SkDebugf(\"copy has pixels: %s\\n\", copy.getPixels() ? \"true\" : \"false\");\n}\n",
"hash": "dbf46a0b60324ec611cc18d86772e7b9",
@@ -98,6 +91,13 @@
"name": "SkBitmap::SkBitmap(const SkBitmap& src)",
"stdout": "original has pixels before copy: true\\noriginal has pixels after copy: true\\ncopy has pixels: true\\n"
},
+ "SkBitmap_copy_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n SkBitmap original;\n original.tryAllocPixels(SkImageInfo::Make(25, 35, kRGBA_8888_SkColorType, kOpaque_SkAlphaType));\n SkDebugf(\"original has pixels before copy: %s\\n\", original.getPixels() ? \"true\" : \"false\");\n SkBitmap copy = original; \n SkDebugf(\"original has pixels after copy: %s\\n\", original.getPixels() ? \"true\" : \"false\");\n SkDebugf(\"copy has pixels: %s\\n\", copy.getPixels() ? \"true\" : \"false\");\n}\n",
+ "hash": "6366fa1b1b3df1bebbfa3ed1c5a43457",
+ "file": "SkBitmap_Reference",
+ "name": "SkBitmap::operator=(const SkBitmap& src)",
+ "stdout": "original has pixels before copy: true\\noriginal has pixels after copy: true\\ncopy has pixels: true\\n"
+ },
"SkBitmap_dimensions": {
"code": "void draw(SkCanvas* canvas) {\n SkBitmap bitmap;\n bitmap.setInfo(SkImageInfo::MakeN32(33, 55, kOpaque_SkAlphaType));\n SkISize dimensions = bitmap.dimensions();\n SkRect bounds;\n bitmap.getBounds(&bounds);\n SkRect dimensionsAsBounds = SkRect::Make(dimensions);\n SkDebugf(\"dimensionsAsBounds %c= bounds\\n\", dimensionsAsBounds == bounds ? '=' : '!');\n}",
"hash": "647056bcc12c27fb4413f212f33a2898",
@@ -245,7 +245,7 @@
"name": "SkBitmap::SkBitmap(SkBitmap&& src)",
"stdout": "original has pixels before move: true\\noriginal has pixels after move: false\\ncopy has pixels: true\\n"
},
- "SkBitmap_move_assignment_operator": {
+ "SkBitmap_move_operator": {
"code": "void draw(SkCanvas* canvas) {\n SkBitmap original;\n original.tryAllocPixels(SkImageInfo::Make(25, 35, kRGBA_8888_SkColorType, kOpaque_SkAlphaType));\n SkDebugf(\"original has pixels before move: %s\\n\", original.getPixels() ? \"true\" : \"false\");\n SkBitmap copy = std::move(original); \n SkDebugf(\"original has pixels after move: %s\\n\", original.getPixels() ? \"true\" : \"false\");\n SkDebugf(\"copy has pixels: %s\\n\", copy.getPixels() ? \"true\" : \"false\");\n}\n",
"hash": "5066583054077df5098bb1d2aa402149",
"file": "SkBitmap_Reference",
@@ -257,7 +257,7 @@
"hash": "0cc2c6a0dffa61a88711534bd3d43b40",
"file": "SkBitmap_Reference",
"name": "SkBitmap::peekPixels",
- "stdout": "------\\n--xxx-\\n-x--x-\\n----x-\\n---xx-\\n--xx--\\n--x---\\n------\\n--x---\\n--x---\\n------\\n"
+ "stdout": "------\\n-xxx--\\nx---x-\\n----x-\\n---x--\\n--x---\\n--x---\\n------\\n--x---\\n--x---\\n------\\n"
},
"SkBitmap_pixelRef": {
"code": "void draw(SkCanvas* canvas) {\n SkBitmap subset;\n source.extractSubset(&subset, SkIRect::MakeXYWH(32, 64, 128, 256));\n SkDebugf(\"src ref %c= sub ref\\n\", source.pixelRef() == subset.pixelRef() ? '=' : '!');\n SkDebugf(\"src pixels %c= sub pixels\\n\", source.getPixels() == subset.getPixels() ? '=' : '!');\n SkDebugf(\"src addr %c= sub addr\\n\", source.getAddr(32, 64) == subset.getAddr(0, 0) ? '=' : '!');\n}",
@@ -337,11 +337,11 @@
"stdout": "bitmap dimensions (6, 11)\\n"
},
"SkBitmap_tryAllocPixelsFlags": {
- "code": "void draw(SkCanvas* canvas) {\n SkBitmap bitmap;\n int loop = 0;\n while (++loop) {\n SkDebugf(\"attempt %d\\n\", loop);\n if (!bitmap.tryAllocPixelsFlags(SkImageInfo::MakeN32(100000, 100000, kOpaque_SkAlphaType), \n SkBitmap::kZeroPixels_AllocFlag)) {\n SkDebugf(\"failed!\\n\");\n break;\n }\n }\n}",
- "hash": "01e11c52fe4a3dc7ee800ce8e925b973",
+ "code": "void draw(SkCanvas* canvas) {\n SkBitmap bitmap;\n if (!bitmap.tryAllocPixelsFlags(SkImageInfo::MakeN32(10000, 10000, kOpaque_SkAlphaType), \n SkBitmap::kZeroPixels_AllocFlag)) {\n SkDebugf(\"bitmap allocation failed!\\n\");\n } else {\n SkDebugf(\"bitmap allocation succeeded!\\n\");\n }\n}",
+ "hash": "4fff5f5034ced615ad5a1d50c40aeff3",
"file": "SkBitmap_Reference",
"name": "SkBitmap::tryAllocPixelsFlags",
- "stdout": "attempt 1\\nfailed!\\n"
+ "stdout": "bitmap allocation succeeded!\\n"
},
"SkBitmap_width": {
"code": "void draw(SkCanvas* canvas) {\n SkImageInfo info = SkImageInfo::MakeA8(16, 32);\n SkBitmap bitmap;\n bitmap.setInfo(info);\n SkDebugf(\"bitmap width: %d info width: %d\\n\", bitmap.width(), info.width());\n}",
@@ -351,8 +351,8 @@
"stdout": "bitmap width: 16 info width: 16\\n"
},
"SkCanvas_MakeRasterDirect": {
- "code": "void draw(SkCanvas* ) {\n SkImageInfo info = SkImageInfo::MakeN32Premul(3, 3); // device aligned, 32 bpp, Premultiplied\n const size_t minRowBytes = info.minRowBytes(); // bytes used by one bitmap row\n const size_t size = info.getSafeSize(minRowBytes); // bytes used by all rows\n SkAutoTMalloc<SkPMColor> storage(size); // allocate storage for pixels\n SkPMColor* pixels = storage.get(); // get pointer to allocated storage\n // create a SkCanvas backed by a raster device, and delete it when the\n // function goes out of scope.\n std::unique_ptr<SkCanvas> canvas = SkCanvas::MakeRasterDirect(info, pixels, minRowBytes);\n canvas->clear(SK_ColorWHITE); // white is Unpremultiplied, in ARGB order\n canvas->flush(); // ensure that pixels are cleared\n SkPMColor pmWhite = pixels[0]; // the Premultiplied format may vary\n SkPaint paint; // by default, draws black\n canvas->drawPoint(1, 1, paint); // draw in the center\n canvas->flush(); // ensure that point was drawn\n for (int y = 0; y < info.height(); ++y) {\n for (int x = 0; x < info.width(); ++x) {\n SkDebugf(\"%c\", *pixels++ == pmWhite ? '-' : 'x');\n }\n SkDebugf(\"\\n\");\n }\n}\n",
- "hash": "11be884b8b4213a450b6dc43673bf807",
+ "code": "void draw(SkCanvas* ) {\n SkImageInfo info = SkImageInfo::MakeN32Premul(3, 3); // device aligned, 32 bpp, Premultiplied\n const size_t minRowBytes = info.minRowBytes(); // bytes used by one bitmap row\n const size_t size = info.computeMinByteSize(); // bytes used by all rows\n SkAutoTMalloc<SkPMColor> storage(size); // allocate storage for pixels\n SkPMColor* pixels = storage.get(); // get pointer to allocated storage\n // create a SkCanvas backed by a raster device, and delete it when the\n // function goes out of scope.\n std::unique_ptr<SkCanvas> canvas = SkCanvas::MakeRasterDirect(info, pixels, minRowBytes);\n canvas->clear(SK_ColorWHITE); // white is Unpremultiplied, in ARGB order\n canvas->flush(); // ensure that pixels are cleared\n SkPMColor pmWhite = pixels[0]; // the Premultiplied format may vary\n SkPaint paint; // by default, draws black\n canvas->drawPoint(1, 1, paint); // draw in the center\n canvas->flush(); // ensure that point was drawn\n for (int y = 0; y < info.height(); ++y) {\n for (int x = 0; x < info.width(); ++x) {\n SkDebugf(\"%c\", *pixels++ == pmWhite ? '-' : 'x');\n }\n SkDebugf(\"\\n\");\n }\n}\n",
+ "hash": "525285073aae7e53eb8f454a398f880c",
"file": "SkCanvas_Reference",
"name": "SkCanvas::MakeRasterDirect",
"stdout": "---\\n-x-\\n---\\n"
@@ -567,6 +567,97 @@
"name": "SkCanvas::restoreToCount",
"stdout": "depth = 1\\ndepth = 3\\ndepth = 1\\n"
},
+ "SkIPoint16_Make": {
+ "code": "void draw(SkCanvas* canvas) {\n SkIPoint16 pt1 = {45, 66};\n SkIPoint16 pt2 = SkIPoint16::Make(45, 66);\n SkDebugf(\"pt1.fX %c= pt2.fX\\n\", pt1.fX == pt2.fX ? '=' : '!');\n SkDebugf(\"pt1.fY %c= pt2.fY\\n\", pt1.fY == pt2.fY ? '=' : '!');\n}",
+ "hash": "d815ca04fbf22b5acec6f85b6351f362",
+ "file": "SkIPoint16_Reference",
+ "name": "SkIPoint16::Make",
+ "stdout": "pt1.fX == pt2.fX\\npt1.fY == pt2.fY\\n"
+ },
+ "SkIPoint16_set": {
+ "code": "void draw(SkCanvas* canvas) {\n SkIPoint16 pt1, pt2 = { SK_MinS16, SK_MaxS16 };\n pt1.set(SK_MinS16, SK_MaxS16);\n SkDebugf(\"pt1.fX %c= pt2.fX\\n\", pt1.fX == pt2.fX ? '=' : '!');\n SkDebugf(\"pt1.fY %c= pt2.fY\\n\", pt1.fY == pt2.fY ? '=' : '!');\n}",
+ "hash": "abff78d3f2d97b1284ccb13d0c56b6c8",
+ "file": "SkIPoint16_Reference",
+ "name": "SkIPoint16::set()",
+ "stdout": "pt1.fX == pt2.fX\\npt1.fY == pt2.fY\\n"
+ },
+ "SkIPoint16_x": {
+ "code": "void draw(SkCanvas* canvas) {\n SkIPoint16 pt1 = {45, 66};\n SkDebugf(\"pt1.fX %c= pt1.x()\\n\", pt1.fX == pt1.x() ? '=' : '!');\n}",
+ "hash": "f7fd3b3674f042869de3582ab793dbf7",
+ "file": "SkIPoint16_Reference",
+ "name": "SkIPoint16::x()",
+ "stdout": "pt1.fX == pt1.x()\\n"
+ },
+ "SkIPoint16_y": {
+ "code": "void draw(SkCanvas* canvas) {\n SkIPoint16 pt1 = {45, 66};\n SkDebugf(\"pt1.fY %c= pt1.y()\\n\", pt1.fY == pt1.y() ? '=' : '!');\n}",
+ "hash": "3662cedaf1e9924a401f794902da3b1f",
+ "file": "SkIPoint16_Reference",
+ "name": "SkIPoint16::y()",
+ "stdout": "pt1.fY == pt1.y()\\n"
+ },
+ "SkIPoint_Make": {
+ "code": "void draw(SkCanvas* canvas) {\n SkIPoint pt1 = {45, 66};\n SkIPoint pt2 = SkIPoint::Make(45, 66);\n SkDebugf(\"pt1 %c= pt2\\n\", pt1 == pt2 ? '=' : '!');\n}",
+ "hash": "e5cf5159525bd3140f288a95fe641fae",
+ "file": "SkIPoint_Reference",
+ "name": "SkIPoint::Make",
+ "stdout": "pt1 == pt2\\n"
+ },
+ "SkIPoint_equal_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n SkIPoint test[] = { {0, -0}, {-1, -2}, {SK_MaxS32, -1}, {SK_NaN32, -1} };\n for (const SkIPoint& pt : test) {\n SkDebugf(\"pt: %d, %d %c= pt\\n\", pt.fX, pt.fY, pt == pt ? '=' : '!');\n }\n}",
+ "hash": "37ffe2817d720f99e6c252332ce70460",
+ "file": "SkIPoint_Reference",
+ "name": "SkIPoint::operator==(const SkIPoint& a, const SkIPoint& b)",
+ "stdout": "pt: 0, 0 == pt\\npt: -1, -2 == pt\\npt: 2147483647, -1 == pt\\npt: -2147483648, -1 == pt\\n"
+ },
+ "SkIPoint_equals": {
+ "code": "void draw(SkCanvas* canvas) {\n SkIPoint test[] = { {0, -0}, {-1, -2}, {SK_MaxS32, -1}, {SK_NaN32, -1} };\n for (const SkIPoint& pt : test) {\n SkDebugf(\"pt: %d, %d %c= pt\\n\", pt.fX, pt.fY, pt.equals(pt.fX, pt.fY) ? '=' : '!');\n }\n}",
+ "hash": "64f575d36439d5b69aaed14ffeff1cc4",
+ "file": "SkIPoint_Reference",
+ "name": "SkIPoint::equals()",
+ "stdout": "pt: 0, 0 == pt\\npt: -1, -2 == pt\\npt: 2147483647, -1 == pt\\npt: -2147483648, -1 == pt\\n"
+ },
+ "SkIPoint_isZero": {
+ "code": "void draw(SkCanvas* canvas) {\n SkIPoint pt = { 0, -0};\n SkDebugf(\"pt.isZero() == %s\\n\", pt.isZero() ? \"true\" : \"false\");\n}",
+ "hash": "658c1df611b4577cc7e0bb384e95737e",
+ "file": "SkIPoint_Reference",
+ "name": "SkIPoint::isZero",
+ "stdout": "pt.isZero() == true\\n"
+ },
+ "SkIPoint_minus_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n SkIPoint test[] = { {0, -0}, {-1, -2},\n { SK_MaxS32, SK_MinS32 },\n { SK_NaN32, -SK_NaN32 } };\n for (const SkIPoint& pt : test) {\n SkIPoint negPt = -pt;\n SkDebugf(\"pt: %d, %d negate: %d, %d\\n\", pt.fX, pt.fY, negPt.fX, negPt.fY);\n }\n}",
+ "hash": "d283e8876366349aedd85b65cadb3706",
+ "file": "SkIPoint_Reference",
+ "name": "SkIPoint::operator-()_const",
+ "stdout": "pt: 0, 0 negate: 0, 0\\npt: -1, -2 negate: 1, 2\\npt: 2147483647, -2147483647 negate: -2147483647, 2147483647\\npt: -2147483648, -2147483648 negate: -2147483648, -2147483648\\n"
+ },
+ "SkIPoint_notequal_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n SkIPoint test[] = { {0, -0}, {-1, -2}, {SK_MaxS32, -1}, {SK_NaN32, -1} };\n for (const SkIPoint& pt : test) {\n SkDebugf(\"pt: %d, %d %c= pt\\n\", pt.fX, pt.fY, pt != pt ? '!' : '=');\n }\n}",
+ "hash": "dd89dc48dff69b53d99530b120f204bc",
+ "file": "SkIPoint_Reference",
+ "name": "SkIPoint::operator!=(const SkIPoint& a, const SkIPoint& b)",
+ "stdout": "pt: 0, 0 == pt\\npt: -1, -2 == pt\\npt: 2147483647, -1 == pt\\npt: -2147483648, -1 == pt\\n"
+ },
+ "SkIPoint_set": {
+ "code": "void draw(SkCanvas* canvas) {\n SkIPoint pt1, pt2 = { SK_MinS32, SK_MaxS32 };\n pt1.set(SK_MinS32, SK_MaxS32);\n SkDebugf(\"pt1 %c= pt2\\n\", pt1 == pt2 ? '=' : '!');\n}",
+ "hash": "165418b5718d79d8f1682a8a0ee32ba0",
+ "file": "SkIPoint_Reference",
+ "name": "SkIPoint::set()",
+ "stdout": "pt1 == pt2\\n"
+ },
+ "SkIPoint_x": {
+ "code": "void draw(SkCanvas* canvas) {\n SkIPoint pt1 = {45, 66};\n SkDebugf(\"pt1.fX %c= pt1.x()\\n\", pt1.fX == pt1.x() ? '=' : '!');\n}",
+ "hash": "eed4185294f8a8216fc354e6ee6b2e3a",
+ "file": "SkIPoint_Reference",
+ "name": "SkIPoint::x()",
+ "stdout": "pt1.fX == pt1.x()\\n"
+ },
+ "SkIPoint_y": {
+ "code": "void draw(SkCanvas* canvas) {\n SkIPoint pt1 = {45, 66};\n SkDebugf(\"pt1.fY %c= pt1.y()\\n\", pt1.fY == pt1.y() ? '=' : '!');\n}",
+ "hash": "35c41b8ba7cebf8c9a7a8494e610e14d",
+ "file": "SkIPoint_Reference",
+ "name": "SkIPoint::y()",
+ "stdout": "pt1.fY == pt1.y()\\n"
+ },
"SkIRect_EmptyIRect": {
"code": "void draw(SkCanvas* canvas) {\n const SkIRect& rect = SkIRect::EmptyIRect();\n SkDebugf(\"rect: %d, %d, %d, %d\\n\", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);\n}",
"hash": "65e0b9b52e907902630577941fb3ed6d",
@@ -812,7 +903,7 @@
"name": "SkIRect::makeSorted",
"stdout": "rect: 30, 50, 20, 10\\nsorted: 20, 10, 30, 50\\n"
},
- "SkIRect_not_equal_operator": {
+ "SkIRect_notequal_operator": {
"code": "void draw(SkCanvas* canvas) {\n SkIRect test = {2, 2, 0, 0};\n SkIRect sorted = test.makeSorted();\n SkDebugf(\"test %c= sorted\\n\", test != sorted ? '!' : '=');\n}",
"hash": "6c4acd8aa203f632b7d85cae672abf4d",
"file": "SkIRect_Reference",
@@ -973,6 +1064,20 @@
"name": "SkMatrix::TypeMask",
"stdout": "after reset: kIdentity_Mask \\nafter postTranslate: kTranslate_Mask \\nafter postScale: kTranslate_Mask kScale_Mask \\nafter postScale: kTranslate_Mask kScale_Mask kAffine_Mask \\nafter setPolyToPoly: kTranslate_Mask kScale_Mask kAffine_Mask kPerspective_Mask\\n"
},
+ "SkMatrix_array1_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n SkMatrix matrix;\n matrix.setIdentity();\n SkDebugf(\"with identity matrix: x = %g\\n\", matrix.mapXY(24, 42).fX);\n SkScalar& skewRef = matrix[SkMatrix::kMSkewX];\n skewRef = 0;\n SkDebugf(\"after skew x mod: x = %g\\n\", matrix.mapXY(24, 42).fX);\n skewRef = 1;\n SkDebugf(\"after 2nd skew x mod: x = %g\\n\", matrix.mapXY(24, 42).fX);\n matrix.dirtyMatrixTypeCache();\n SkDebugf(\"after dirty cache: x = %g\\n\", matrix.mapXY(24, 42).fX);\n}",
+ "hash": "f4365ef332f51f7fd25040e0771ba9a2",
+ "file": "SkMatrix_Reference",
+ "name": "SkMatrix::operator[](int index)",
+ "stdout": "with identity matrix: x = 24\\nafter skew x mod: x = 24\\nafter 2nd skew x mod: x = 24\\nafter dirty cache: x = 66\\n"
+ },
+ "SkMatrix_array_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n SkMatrix matrix;\n matrix.setScale(42, 24);\n SkDebugf(\"matrix[SkMatrix::kMScaleX] %c= 42\\n\", matrix[SkMatrix::kMScaleX] == 42 ? '=' : '!');\n SkDebugf(\"matrix[SkMatrix::kMScaleY] %c= 24\\n\", matrix[SkMatrix::kMScaleY] == 24 ? '=' : '!');\n}",
+ "hash": "e8740493abdf0c6341762db9cee56b89",
+ "file": "SkMatrix_Reference",
+ "name": "SkMatrix::operator[](int index)_const",
+ "stdout": "matrix[SkMatrix::kMScaleX] == 42\\nmatrix[SkMatrix::kMScaleY] == 24\\n"
+ },
"SkMatrix_asAffine": {
"code": "void draw(SkCanvas* canvas) {\n SkMatrix matrix;\n matrix.setAll(2, 3, 4, 5, 6, 7, 0, 0, 1);\n SkScalar affine[6];\n matrix.asAffine(affine);\n const char* names[] = { \"ScaleX\", \"SkewY\", \"SkewX\", \"ScaleY\", \"TransX\", \"TransY\" };\n for (int i = 0; i < 6; ++i) {\n SkDebugf(\"%s: %g \", names[i], affine[i]);\n }\n SkDebugf(\"\\n\");\n}",
"hash": "752e4a48ed1dae05765a2499c390f277",
@@ -1134,7 +1239,7 @@
"name": "SkMatrix::isTranslate",
"stdout": "is translate: true\\nis translate: true\\nis translate: false\\nis translate: false\\n"
},
- "SkMatrix_not_equal_operator": {
+ "SkMatrix_notequal_operator": {
"code": "void draw(SkCanvas* canvas) {\n auto debugster = [](const char* prefix, const SkMatrix& a, const SkMatrix& b) -> void {\n SkDebugf(\"%s: a %c= b a.cheapEqualTo(b): %s\\n\", prefix,\n a != b ? '!' : '=', a.cheapEqualTo(b) ? \"true\" : \"false\");\n };\n SkMatrix a, b;\n a.setAll(1, 0, 0, 0, 1, 0, 1, 0, 1);\n a.invert(&b);\n debugster(\"identity\", a, b);\n}",
"hash": "8a8fadf5fd294daa4ee152833cc0dc0e",
"file": "SkMatrix_Reference",
@@ -1197,20 +1302,6 @@
"name": "SkMatrix::setScaleTranslate",
"stdout": "[ 1.0000 0.0000 3.0000][ 0.0000 2.0000 4.0000][ 0.0000 0.0000 1.0000]\\n"
},
- "SkMatrix_subscript_operator": {
- "code": "void draw(SkCanvas* canvas) {\n SkMatrix matrix;\n matrix.setIdentity();\n SkDebugf(\"with identity matrix: x = %g\\n\", matrix.mapXY(24, 42).fX);\n SkScalar& skewRef = matrix[SkMatrix::kMSkewX];\n skewRef = 0;\n SkDebugf(\"after skew x mod: x = %g\\n\", matrix.mapXY(24, 42).fX);\n skewRef = 1;\n SkDebugf(\"after 2nd skew x mod: x = %g\\n\", matrix.mapXY(24, 42).fX);\n matrix.dirtyMatrixTypeCache();\n SkDebugf(\"after dirty cache: x = %g\\n\", matrix.mapXY(24, 42).fX);\n}",
- "hash": "f4365ef332f51f7fd25040e0771ba9a2",
- "file": "SkMatrix_Reference",
- "name": "SkMatrix::operator[](int index)_2",
- "stdout": "with identity matrix: x = 24\\nafter skew x mod: x = 24\\nafter 2nd skew x mod: x = 24\\nafter dirty cache: x = 66\\n"
- },
- "SkMatrix_subscript_operator_const": {
- "code": "void draw(SkCanvas* canvas) {\n SkMatrix matrix;\n matrix.setScale(42, 24);\n SkDebugf(\"matrix[SkMatrix::kMScaleX] %c= 42\\n\", matrix[SkMatrix::kMScaleX] == 42 ? '=' : '!');\n SkDebugf(\"matrix[SkMatrix::kMScaleY] %c= 24\\n\", matrix[SkMatrix::kMScaleY] == 24 ? '=' : '!');\n}",
- "hash": "e8740493abdf0c6341762db9cee56b89",
- "file": "SkMatrix_Reference",
- "name": "SkMatrix::operator[](int index)",
- "stdout": "matrix[SkMatrix::kMScaleX] == 42\\nmatrix[SkMatrix::kMScaleY] == 24\\n"
- },
"SkMatrix_toString": {
"code": "void draw(SkCanvas* canvas) {\n SkMatrix matrix;\n matrix.setRotate(45);\n SkString mStr, neStr;\n matrix.toString(&mStr);\n SkMatrix nearlyEqual;\n nearlyEqual.setAll(0.7071f, -0.7071f, 0, 0.7071f, 0.7071f, 0, 0, 0, 1);\n nearlyEqual.toString(&neStr);\n SkDebugf(\"mStr %s\\n\", mStr.c_str());\n SkDebugf(\"neStr %s\\n\", neStr.c_str());\n SkDebugf(\"matrix %c= nearlyEqual\\n\", matrix == nearlyEqual ? '=' : '!');\n}",
"hash": "1d86e43958e42b8eaaa9b16df1baa4c8",
@@ -1232,13 +1323,6 @@
"name": "SkPaint::containsText_2",
"stdout": "0x01ff == has glyph\\n0x0000 != has glyph\\n0xffff == has glyph\\n"
},
- "SkPaint_copy_assignment_operator": {
- "code": "void draw(SkCanvas* canvas) {\n SkPaint paint1, paint2;\n paint1.setColor(SK_ColorRED);\n paint2 = paint1;\n SkDebugf(\"SK_ColorRED %c= paint1.getColor()\\n\", SK_ColorRED == paint1.getColor() ? '=' : '!');\n SkDebugf(\"SK_ColorRED %c= paint2.getColor()\\n\", SK_ColorRED == paint2.getColor() ? '=' : '!');\n}",
- "hash": "b476a9088f80dece176ed577807d3992",
- "file": "SkPaint_Reference",
- "name": "SkPaint::operator=(const SkPaint& paint)",
- "stdout": "SK_ColorRED == paint1.getColor()\\nSK_ColorRED == paint2.getColor()\\n"
- },
"SkPaint_copy_const_SkPaint": {
"code": "void draw(SkCanvas* canvas) {\n SkPaint paint1;\n paint1.setColor(SK_ColorRED);\n SkPaint paint2(paint1);\n paint2.setColor(SK_ColorBLUE);\n SkDebugf(\"SK_ColorRED %c= paint1.getColor()\\n\", SK_ColorRED == paint1.getColor() ? '=' : '!');\n SkDebugf(\"SK_ColorBLUE %c= paint2.getColor()\\n\", SK_ColorBLUE == paint2.getColor() ? '=' : '!');\n}",
"hash": "b99971ad0ef243d617925289d963b62d",
@@ -1246,6 +1330,13 @@
"name": "SkPaint::SkPaint(const SkPaint& paint)",
"stdout": "SK_ColorRED == paint1.getColor()\\nSK_ColorBLUE == paint2.getColor()\\n"
},
+ "SkPaint_copy_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint1, paint2;\n paint1.setColor(SK_ColorRED);\n paint2 = paint1;\n SkDebugf(\"SK_ColorRED %c= paint1.getColor()\\n\", SK_ColorRED == paint1.getColor() ? '=' : '!');\n SkDebugf(\"SK_ColorRED %c= paint2.getColor()\\n\", SK_ColorRED == paint2.getColor() ? '=' : '!');\n}",
+ "hash": "b476a9088f80dece176ed577807d3992",
+ "file": "SkPaint_Reference",
+ "name": "SkPaint::operator=(const SkPaint& paint)",
+ "stdout": "SK_ColorRED == paint1.getColor()\\nSK_ColorRED == paint2.getColor()\\n"
+ },
"SkPaint_countText": {
"code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n const uint8_t utf8[] = { 0x24, 0xC2, 0xA2, 0xE2, 0x82, 0xAC, 0xC2, 0xA5, 0xC2, 0xA3 };\n SkDebugf(\"count = %d\\n\", paint.countText(utf8, sizeof(utf8)));\n}",
"hash": "85436c71aab5410767fc688ab0573e09",
@@ -1345,8 +1436,8 @@
"stdout": "SkPaint::kNormal_Hinting == paint.getHinting()\\n"
},
"SkPaint_getImageFilter": {
- "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n SkDebugf(\"nullptr %c= image filter\\n\", paint.getImageFilter() ? '!' : '=');\n paint.setImageFilter(SkImageFilter::MakeBlur(kOuter_SkBlurStyle, 3, nullptr, nullptr));\n SkDebugf(\"nullptr %c= image filter\\n\", paint.getImageFilter() ? '!' : '=');\n}\n",
- "hash": "38788d42772641606e08c60d9dd418a2",
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n SkDebugf(\"nullptr %c= image filter\\n\", paint.getImageFilter() ? '!' : '=');\n paint.setImageFilter(SkBlurImageFilter::Make(kOuter_SkBlurStyle, 3, nullptr, nullptr));\n SkDebugf(\"nullptr %c= image filter\\n\", paint.getImageFilter() ? '!' : '=');\n}\n",
+ "hash": "7b8118ff57fcb84e6bc82380d155b62e",
"file": "SkPaint_Reference",
"name": "SkPaint::getImageFilter",
"stdout": "nullptr == image filter\\nnullptr != image filter\\n"
@@ -1540,14 +1631,14 @@
"name": "SkPaint::SkPaint(SkPaint&& paint)",
"stdout": "path effect unique: true\\n"
},
- "SkPaint_move_assignment_operator": {
+ "SkPaint_move_operator": {
"code": "void draw(SkCanvas* canvas) {\n SkPaint paint1, paint2;\n paint1.setColor(SK_ColorRED);\n paint2 = std::move(paint1);\n SkDebugf(\"SK_ColorRED == paint2.getColor()\\n\", SK_ColorRED == paint2.getColor() ? '=' : '!');\n}",
"hash": "9fb7459b097d713f5f1fe5675afe14f5",
"file": "SkPaint_Reference",
"name": "SkPaint::operator=(SkPaint&& paint)",
"stdout": "SK_ColorRED == paint2.getColor()\\n"
},
- "SkPaint_not_equal_operator": {
+ "SkPaint_notequal_operator": {
"code": "void draw(SkCanvas* canvas) {\n SkPaint paint1, paint2;\n paint1.setColor(SK_ColorRED);\n paint2.setColor(0xFFFF0000);\n SkDebugf(\"paint1 %c= paint2\\n\", paint1 == paint2 ? '=' : '!');\n SkDebugf(\"paint1 %c= paint2\\n\", paint1 != paint2 ? '!' : '=');\n}",
"hash": "b6c8484b1187f555b435ad5369833be4",
"file": "SkPaint_Reference",
@@ -1590,8 +1681,8 @@
"stdout": "mask filter unique: true\\nmask filter unique: false\\n"
},
"SkPaint_refPathEffect": {
- "code": "void draw(SkCanvas* canvas) {\n SkPaint paint1, paint2;\n paint1.setPathEffect(SkArcToPathEffect::Make(10));\n SkDebugf(\"path effect unique: %s\\n\", paint1.getPathEffect()->unique() ? \"true\" : \"false\");\n paint2.setPathEffect(paint1.refPathEffect());\n SkDebugf(\"path effect unique: %s\\n\", paint1.getPathEffect()->unique() ? \"true\" : \"false\");\n}\n",
- "hash": "c55c74f8f581870bd2c18f2f99765579",
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint1, paint2;\n SkScalar intervals[] = {1, 2};\n paint1.setPathEffect(SkDashPathEffect::Make(intervals, SK_ARRAY_COUNT(intervals), 10));\n SkDebugf(\"path effect unique: %s\\n\", paint1.getPathEffect()->unique() ? \"true\" : \"false\");\n paint2.setPathEffect(paint1.refPathEffect());\n SkDebugf(\"path effect unique: %s\\n\", paint1.getPathEffect()->unique() ? \"true\" : \"false\");\n}\n",
+ "hash": "f56039b94c702c2704c8c5100e623aca",
"file": "SkPaint_Reference",
"name": "SkPaint::refPathEffect",
"stdout": "path effect unique: true\\npath effect unique: false\\n"
@@ -1932,13 +2023,6 @@
"name": "SkPath::computeTightBounds",
"stdout": "empty bounds = 0, 0, 0, 0\\ncircle bounds = 25, 20, 75, 70\\nrotated circle bounds = 25, 20, 75, 70\\n"
},
- "SkPath_copy_assignment_operator": {
- "code": "void draw(SkCanvas* canvas) {\n SkPath path1;\n path1.addRect({10, 20, 30, 40});\n SkPath path2 = path1;\n const SkRect& b1 = path1.getBounds();\n SkDebugf(\"path1 bounds = %g, %g, %g, %g\\n\", b1.fLeft, b1.fTop, b1.fRight, b1.fBottom);\n const SkRect& b2 = path2.getBounds();\n SkDebugf(\"path2 bounds = %g, %g, %g, %g\\n\", b2.fLeft, b2.fTop, b2.fRight, b2.fBottom);\n}",
- "hash": "bba288f5f77fc8e37e89d2ec08e0ac60",
- "file": "SkPath_Reference",
- "name": "SkPath::operator=(const SkPath& path)",
- "stdout": "path1 bounds = 10, 20, 30, 40\\npath2 bounds = 10, 20, 30, 40\\n"
- },
"SkPath_copy_const_SkPath": {
"code": "void draw(SkCanvas* canvas) {\n SkPath path;\n path.lineTo(20, 20);\n SkPath path2(path);\n path2.close();\n SkDebugf(\"path verbs: %d\\n\", path.countVerbs());\n SkDebugf(\"path2 verbs: %d\\n\", path2.countVerbs());\n path.reset();\n SkDebugf(\"after reset\\n\" \"path verbs: %d\\n\", path.countVerbs());\n SkDebugf(\"path2 verbs: %d\\n\", path2.countVerbs());\n}",
"hash": "647312aacd946c8a6eabaca797140432",
@@ -1946,6 +2030,13 @@
"name": "SkPath::SkPath(const SkPath& path)",
"stdout": "path verbs: 2\\npath2 verbs: 3\\nafter reset\\npath verbs: 0\\npath2 verbs: 3\\n"
},
+ "SkPath_copy_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPath path1;\n path1.addRect({10, 20, 30, 40});\n SkPath path2 = path1;\n const SkRect& b1 = path1.getBounds();\n SkDebugf(\"path1 bounds = %g, %g, %g, %g\\n\", b1.fLeft, b1.fTop, b1.fRight, b1.fBottom);\n const SkRect& b2 = path2.getBounds();\n SkDebugf(\"path2 bounds = %g, %g, %g, %g\\n\", b2.fLeft, b2.fTop, b2.fRight, b2.fBottom);\n}",
+ "hash": "bba288f5f77fc8e37e89d2ec08e0ac60",
+ "file": "SkPath_Reference",
+ "name": "SkPath::operator=(const SkPath& path)",
+ "stdout": "path1 bounds = 10, 20, 30, 40\\npath2 bounds = 10, 20, 30, 40\\n"
+ },
"SkPath_countPoints": {
"code": "void draw(SkCanvas* canvas) {\n auto debugster = [](const char* prefix, const SkPath& path) -> void {\n SkDebugf(\"%s point count: %d\\n\", prefix, path.countPoints());\n };\n SkPath path;\n debugster(\"empty\", path);\n path.lineTo(0, 0);\n debugster(\"zero line\", path);\n path.rewind();\n path.moveTo(10, 10);\n path.lineTo(20, 20);\n debugster(\"line\", path);\n path.moveTo(20, 20);\n debugster(\"second move\", path);\n}\n",
"hash": "bca6379ccef62cb081b10db7381deb27",
@@ -2135,7 +2226,7 @@
"name": "SkPath::isVolatile",
"stdout": "volatile by default is false\\n"
},
- "SkPath_not_equal_operator": {
+ "SkPath_notequal_operator": {
"code": "void draw(SkCanvas* canvas) {\n auto debugster = [](const char* prefix, const SkPath& a, const SkPath& b) -> void {\n SkDebugf(\"%s one %c= two\\n\", prefix, a != b ? '!' : '=');\n };\n SkPath one;\n SkPath two;\n debugster(\"empty\", one, two);\n one.addRect({10, 20, 30, 40});\n two.addRect({10, 20, 30, 40});\n debugster(\"addRect\", one, two);\n one.setConvexity(SkPath::kConcave_Convexity);\n debugster(\"setConvexity\", one, two);\n SkDebugf(\"convexity %c=\\n\", one.getConvexity() == two.getConvexity() ? '=' : '!');\n}\n",
"hash": "0c6870ba1cea85ce6da5abd489c23d83",
"file": "SkPath_Reference",
@@ -2189,7 +2280,7 @@
"hash": "bb761cd858e6d0ca05627262cd22ff5e",
"file": "SkPath_Reference",
"name": "SkPath::updateBoundsCache",
- "stdout": "uncached avg: 0.199424 ms\\ncached avg: 0.193792 ms\\n"
+ "stdout": "uncached avg: 0.16768 ms\\ncached avg: 0.163072 ms\\n"
},
"SkPath_writeToMemory": {
"code": "void draw(SkCanvas* canvas) {\n SkPath path, copy;\n path.lineTo(6.f / 7, 2.f / 3);\n size_t size = path.writeToMemory(nullptr);\n SkTDArray<char> storage;\n storage.setCount(size);\n path.writeToMemory(storage.begin());\n copy.readFromMemory(storage.begin(), size);\n SkDebugf(\"path is \" \"%s\" \"equal to copy\\n\", path == copy ? \"\" : \"not \");\n}\n",
@@ -2203,7 +2294,7 @@
"hash": "17bcabaaee2dbb7beba562e9ca50b55e",
"file": "SkPixmap_Reference",
"name": "SkPixmap::addr()",
- "stdout": "pixels address: 0x7fd2438f2010\\ninset address: 0x7fd243932210\\n"
+ "stdout": "pixels address: 0x7fe0b7478010\\ninset address: 0x7fe0b74b8210\\n"
},
"SkPixmap_addr16": {
"code": "void draw(SkCanvas* canvas) {\n const int w = 4;\n const int h = 4;\n uint16_t storage[w * h];\n SkPixmap pixmap(SkImageInfo::Make(w, h, kARGB_4444_SkColorType, kPremul_SkAlphaType),\n storage, w * sizeof(storage[0]));\n SkDebugf(\"pixmap.addr16() %c= storage\\n\",\n pixmap.addr16() == storage ? '=' : '!');\n}",
@@ -2429,6 +2520,104 @@
"name": "SkPixmap::writable_addr_2",
"stdout": "pixmap.writable_addr() == (void *)storage\\npixmap.getColor(0, 0) == 0x00000000\\npixmap.getColor(1, 2) == 0xFFFFFFFF\\n"
},
+ "SkPoint_Make": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPoint pt1 = {45, 66};\n SkPoint pt2 = SkPoint::Make(45, 66);\n SkVector v1 = {45, 66};\n SkVector v2 = SkPoint::Make(45, 66);\n SkDebugf(\"all %s\" \"equal\\n\", pt1 == pt2 && pt2 == v1 && v1 == v2 ? \"\" : \"not \");\n}",
+ "hash": "d266e70977847001f7c42f8a2513bee7",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::Make",
+ "stdout": "all equal\\n"
+ },
+ "SkPoint_equal_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPoint test[] = { {0, -0.f}, {-1, -2}, {SK_ScalarInfinity, 1}, {SK_ScalarNaN, -1} };\n for (const SkPoint& pt : test) {\n SkDebugf(\"pt: %g, %g %c= pt\\n\", pt.fX, pt.fY, pt == pt ? '=' : '!');\n }\n}",
+ "hash": "741f793334a48a35dadf4310d7ea52cb",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::operator==(const SkPoint& a, const SkPoint& b)",
+ "stdout": "pt: 0, -0 == pt\\npt: -1, -2 == pt\\npt: inf, 1 == pt\\npt: nan, -1 != pt\\n"
+ },
+ "SkPoint_equals": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPoint test[] = { {0, -0.f}, {-1, -2}, {SK_ScalarInfinity, 1}, {SK_ScalarNaN, -1} };\n for (const SkPoint& pt : test) {\n SkDebugf(\"pt: %g, %g %c= pt\\n\", pt.fX, pt.fY, pt.equals(pt.fX, pt.fY) ? '=' : '!');\n }\n}",
+ "hash": "4cecb878c8b66beffda051f26c00f817",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::equals()",
+ "stdout": "pt: 0, -0 == pt\\npt: -1, -2 == pt\\npt: inf, 1 == pt\\npt: nan, -1 != pt\\n"
+ },
+ "SkPoint_isFinite": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPoint test[] = { {0, -0.f}, {-1, -2}, {SK_ScalarInfinity, 1}, {SK_ScalarNaN, -1} };\n for (const SkPoint& pt : test) {\n SkDebugf(\"pt: %g, %g finite: %s\\n\", pt.fX, pt.fY, pt.isFinite() ? \"true\" : \"false\");\n }\n}",
+ "hash": "937cc166cc0e220f33fb82501141d0b3",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::isFinite",
+ "stdout": "pt: 0, -0 finite: true\\npt: -1, -2 finite: true\\npt: inf, 1 finite: false\\npt: nan, -1 finite: false\\n"
+ },
+ "SkPoint_isZero": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPoint pt = { 0.f, -0.f};\n SkDebugf(\"pt.fX=%c%g pt.fY=%c%g\\n\", std::signbit(pt.fX) ? '-' : '+', fabsf(pt.fX),\n std::signbit(pt.fY) ? '-' : '+', fabsf(pt.fY));\n SkDebugf(\"pt.isZero() == %s\\n\", pt.isZero() ? \"true\" : \"false\");\n}",
+ "hash": "81b9665110b88ef6bcbc20464aed7da1",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::isZero",
+ "stdout": "pt.fX=+0 pt.fY=-0\\npt.isZero() == true\\n"
+ },
+ "SkPoint_iset": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPoint pt1, pt2 = { SK_MinS16, SK_MaxS16 };\n pt1.iset(SK_MinS16, SK_MaxS16);\n SkDebugf(\"pt1 %c= pt2\\n\", pt1 == pt2 ? '=' : '!');\n}",
+ "hash": "0d9e8ed734981b5b113f22c7bfde5357",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::iset()",
+ "stdout": "pt1 == pt2\\n"
+ },
+ "SkPoint_iset_2": {
+ "code": "void draw(SkCanvas* canvas) {\n SkIPoint iPt = { SK_MinS32, SK_MaxS32 };\n SkPoint fPt;\n fPt.iset(iPt);\n SkDebugf(\"iPt: %d, %d\\n\", iPt.fX, iPt.fY);\n SkDebugf(\"fPt: %g, %g\\n\", fPt.fX, fPt.fY);\n}",
+ "hash": "12b7164a769e232bb772f19c59600ee7",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::iset_2",
+ "stdout": "iPt: -2147483647, 2147483647\\nfPt: -2.14748e+09, 2.14748e+09\\n"
+ },
+ "SkPoint_minus_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPoint test[] = { {0.f, -0.f}, {-1, -2},\n { SK_ScalarInfinity, SK_ScalarNegativeInfinity },\n { SK_ScalarNaN, -SK_ScalarNaN } };\n for (const SkPoint& pt : test) {\n SkPoint negPt = -pt;\n SkDebugf(\"pt: %g, %g negate: %g, %g\\n\", pt.fX, pt.fY, negPt.fX, negPt.fY);\n }\n}",
+ "hash": "9baf247cfcd8272c0ddf6ce93f676b37",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::operator-()_const",
+ "stdout": "pt: 0, -0 negate: -0, 0\\npt: -1, -2 negate: 1, 2\\npt: inf, -inf negate: -inf, inf\\npt: nan, -nan negate: -nan, nan\\n"
+ },
+ "SkPoint_negate": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPoint test[] = { {0.f, -0.f}, {-1, -2},\n { SK_ScalarInfinity, SK_ScalarNegativeInfinity },\n { SK_ScalarNaN, -SK_ScalarNaN } };\n for (const SkPoint& pt : test) {\n SkPoint negPt = pt;\n negPt.negate();\n SkDebugf(\"pt: %g, %g negate: %g, %g\\n\", pt.fX, pt.fY, negPt.fX, negPt.fY);\n }\n}",
+ "hash": "312c0c8065ab5d0adfda80cccf2d11e6",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::negate()",
+ "stdout": "pt: 0, -0 negate: -0, 0\\npt: -1, -2 negate: 1, 2\\npt: inf, -inf negate: -inf, inf\\npt: nan, -nan negate: -nan, nan\\n"
+ },
+ "SkPoint_notequal_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPoint test[] = { {0, -0.f}, {-1, -2}, {SK_ScalarInfinity, 1}, {SK_ScalarNaN, -1} };\n for (const SkPoint& pt : test) {\n SkDebugf(\"pt: %g, %g %c= pt\\n\", pt.fX, pt.fY, pt != pt ? '!' : '=');\n }\n}",
+ "hash": "8fe8572685eaa617f25a5a6767a874dc",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::operator!=(const SkPoint& a, const SkPoint& b)",
+ "stdout": "pt: 0, -0 == pt\\npt: -1, -2 == pt\\npt: inf, 1 == pt\\npt: nan, -1 != pt\\n"
+ },
+ "SkPoint_set": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPoint pt1, pt2 = { SK_ScalarPI, SK_ScalarSqrt2 };\n pt1.set(SK_ScalarPI, SK_ScalarSqrt2);\n SkDebugf(\"pt1 %c= pt2\\n\", pt1 == pt2 ? '=' : '!');\n}",
+ "hash": "d08d1e7dafcad4342d1619fdbb2f5781",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::set()",
+ "stdout": "pt1 == pt2\\n"
+ },
+ "SkPoint_setAbs": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPoint test[] = { {0.f, -0.f}, {-1, -2},\n { SK_ScalarInfinity, SK_ScalarNegativeInfinity },\n { SK_ScalarNaN, -SK_ScalarNaN } };\n for (const SkPoint& pt : test) {\n SkPoint absPt;\n absPt.setAbs(pt);\n SkDebugf(\"pt: %g, %g abs: %g, %g\\n\", pt.fX, pt.fY, absPt.fX, absPt.fY);\n }\n}",
+ "hash": "7f70860e820b67a347cff03c00488426",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::setAbs",
+ "stdout": "pt: 0, -0 abs: 0, 0\\npt: -1, -2 abs: 1, 2\\npt: inf, -inf abs: inf, inf\\npt: nan, -nan abs: nan, nan\\n"
+ },
+ "SkPoint_x": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPoint pt1 = {45, 66};\n SkDebugf(\"pt1.fX %c= pt1.x()\\n\", pt1.fX == pt1.x() ? '=' : '!');\n}",
+ "hash": "9f3fe446b800ae1d940785d438634941",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::x()",
+ "stdout": "pt1.fX == pt1.x()\\n"
+ },
+ "SkPoint_y": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPoint pt1 = {45, 66};\n SkDebugf(\"pt1.fY %c= pt1.y()\\n\", pt1.fY == pt1.y() ? '=' : '!');\n}",
+ "hash": "4c962850c2dbea4d2325df469400680e",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::y()",
+ "stdout": "pt1.fY == pt1.y()\\n"
+ },
"SkRect_Intersects": {
"code": "void draw(SkCanvas* canvas) {\n SkDebugf(\"%s intersection\", SkRect::Intersects({10, 40, 50, 80}, {30, 60, 70, 90}) ? \"\" : \"no \");\n}",
"hash": "795061764b10c9e05efb466c9cb60644",
@@ -2595,7 +2784,7 @@
"hash": "6dbf21017c60b76cae3379fd9101342a",
"file": "SkRect_Reference",
"name": "SkRect::growToInclude_3",
- "stdout": "rect: -1.53059e-20, 0, 3.85186e-34, 4"
+ "stdout": "rect: 0, 0, 1.04934e+27, 4"
},
"SkRect_height": {
"code": "void draw(SkCanvas* canvas) {\n SkRect unsorted = { 15, 25, 10, 20 };\n SkDebugf(\"unsorted height: %g\\n\", unsorted.height());\n SkRect large = { 1, -2147483647.f, 2, 2147483644.f };\n SkDebugf(\"large height: %.0f\\n\", large.height());\n}",
@@ -2751,7 +2940,7 @@
"name": "SkRect::makeSorted",
"stdout": "rect: 30.5, 50.5, 20.5, 10.5\\nsorted: 20.5, 10.5, 30.5, 50.5\\n"
},
- "SkRect_not_equal_operator": {
+ "SkRect_notequal_operator": {
"code": "void draw(SkCanvas* canvas) {\n SkRect test = {0, 0, 2, SK_ScalarNaN};\n SkDebugf(\"test with NaN is %s\" \"equal to itself\\n\", test == test ? \"\" : \"not \");\n}",
"hash": "286072f8c27ff15be9eb945fa38dc9f7",
"file": "SkRect_Reference",
@@ -2960,6 +3149,83 @@
"file": "SkRect_Reference",
"name": "SkRect::y()",
"stdout": "unsorted.fTop: 25 unsorted.y(): 25\\nsorted.fTop: 5 sorted.y(): 5\\n"
+ },
+ "SkSurface_MakeNull": {
+ "code": "void draw(SkCanvas* canvas) {\n SkDebugf(\"SkSurface::MakeNull(0, 0) %c= nullptr\\n\", SkSurface::MakeNull(0, 0) == nullptr ?\n '=' : '!');\n const int w = 37;\n const int h = 1000;\n auto surf = SkSurface::MakeNull(w, h);\n auto nullCanvas = surf->getCanvas();\n nullCanvas->drawPaint(SkPaint()); // does not crash, nothing draws\n SkDebugf(\"surf->makeImageSnapshot() %c= nullptr\\n\", surf->makeImageSnapshot() == nullptr ?\n '=' : '!');\n}",
+ "hash": "99a54b814ccab7d2b1143c88581649ff",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::MakeNull",
+ "stdout": "SkSurface::MakeNull(0, 0) == nullptr\\nsurf-\\u003emakeImageSnapshot() == nullptr\\n"
+ },
+ "SkSurface_MakeRaster": {
+ "code": "void draw(SkCanvas* ) {\n SkImageInfo info = SkImageInfo::MakeN32Premul(3, 3);\n const size_t rowBytes = 64;\n sk_sp<SkSurface> surface(SkSurface::MakeRaster(info, rowBytes, nullptr));\n SkCanvas* canvas = surface->getCanvas();\n canvas->clear(SK_ColorWHITE);\n SkPixmap pixmap;\n if (surface->peekPixels(&pixmap)) {\n const uint32_t* colorPtr = pixmap.addr32();\n SkPMColor pmWhite = colorPtr[0];\n SkPaint paint;\n canvas->drawPoint(1, 1, paint);\n canvas->flush(); // ensure that point was drawn\n for (int y = 0; y < info.height(); ++y) {\n for (int x = 0; x < info.width(); ++x) {\n SkDebugf(\"%c\", colorPtr[x] == pmWhite ? '-' : 'x');\n }\n colorPtr += rowBytes / sizeof(colorPtr[0]);\n SkDebugf(\"\\n\");\n }\n }\n}\n",
+ "hash": "a803910ada4f8733f0b62456afead55f",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::MakeRaster",
+ "stdout": "---\\n-x-\\n---\\n"
+ },
+ "SkSurface_MakeRasterDirect": {
+ "code": "void draw(SkCanvas* ) {\n SkImageInfo info = SkImageInfo::MakeN32Premul(3, 3);\n const size_t size = info.computeMinByteSize();\n SkAutoTMalloc<SkPMColor> storage(size);\n SkPMColor* pixels = storage.get();\n sk_sp<SkSurface> surface(SkSurface::MakeRasterDirect(info, pixels, info.minRowBytes()));\n SkCanvas* canvas = surface->getCanvas();\n canvas->clear(SK_ColorWHITE);\n SkPMColor pmWhite = pixels[0];\n SkPaint paint;\n canvas->drawPoint(1, 1, paint);\n canvas->flush(); // ensure that point was drawn\n for (int y = 0; y < info.height(); ++y) {\n for (int x = 0; x < info.width(); ++x) {\n SkDebugf(\"%c\", *pixels++ == pmWhite ? '-' : 'x');\n }\n SkDebugf(\"\\n\");\n }\n}\n",
+ "hash": "3f5aeb870104187643197354a7f1d27a",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::MakeRasterDirect",
+ "stdout": "---\\n-x-\\n---\\n"
+ },
+ "SkSurface_MakeRasterDirectReleaseProc": {
+ "code": "static void release_direct_surface_storage(void* pixels, void* context) {\n if (pixels == context) {\n SkDebugf(\"expected release context\\n\");\n }\n sk_free(pixels);\n}\n\nvoid draw(SkCanvas* ) {\n SkImageInfo info = SkImageInfo::MakeN32Premul(3, 3);\n const size_t rowBytes = info.minRowBytes();\n void* pixels = sk_malloc_throw(info.computeByteSize(rowBytes));\n sk_sp<SkSurface> surface(SkSurface::MakeRasterDirectReleaseProc(info, pixels, rowBytes,\n release_direct_surface_storage, pixels));\n SkCanvas* canvas = surface->getCanvas();\n canvas->clear(SK_ColorWHITE);\n SkPMColor* colorPtr = (SkPMColor*) pixels;\n SkPMColor pmWhite = colorPtr[0];\n SkPaint paint;\n canvas->drawPoint(1, 1, paint);\n canvas->flush(); // ensure that point was drawn\n for (int y = 0; y < info.height(); ++y) {\n for (int x = 0; x < info.width(); ++x) {\n SkDebugf(\"%c\", *colorPtr++ == pmWhite ? '-' : 'x');\n }\n SkDebugf(\"\\n\");\n }\n}\n",
+ "hash": "8e6530b26ab4096a9a91cfaadda1c568",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::MakeRasterDirectReleaseProc",
+ "stdout": "---\\n-x-\\n---\\nexpected release context\\n"
+ },
+ "SkSurface_MakeRasterN32Premul": {
+ "code": "void draw(SkCanvas* ) {\n sk_sp<SkSurface> surface(SkSurface::MakeRasterN32Premul(3, 3));\n SkCanvas* canvas = surface->getCanvas();\n canvas->clear(SK_ColorWHITE);\n SkPixmap pixmap;\n if (surface->peekPixels(&pixmap)) {\n const uint32_t* colorPtr = pixmap.addr32();\n SkPMColor pmWhite = colorPtr[0];\n SkPaint paint;\n canvas->drawPoint(1, 1, paint);\n canvas->flush(); // ensure that point was drawn\n for (int y = 0; y < surface->height(); ++y) {\n for (int x = 0; x < surface->width(); ++x) {\n SkDebugf(\"%c\", colorPtr[x] == pmWhite ? '-' : 'x');\n }\n colorPtr += surface->width();\n SkDebugf(\"\\n\");\n }\n }\n}\n",
+ "hash": "b932a2bd68455fb0af2e7a1ed19e36b3",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::MakeRasterN32Premul",
+ "stdout": "---\\n-x-\\n---\\n"
+ },
+ "SkSurface_MakeRaster_2": {
+ "code": "void draw(SkCanvas* ) {\n SkImageInfo info = SkImageInfo::MakeN32Premul(3, 3);\n sk_sp<SkSurface> surface(SkSurface::MakeRaster(info));\n SkCanvas* canvas = surface->getCanvas();\n canvas->clear(SK_ColorWHITE);\n SkPixmap pixmap;\n if (surface->peekPixels(&pixmap)) {\n const uint32_t* colorPtr = pixmap.addr32();\n SkPMColor pmWhite = colorPtr[0];\n SkPaint paint;\n canvas->drawPoint(1, 1, paint);\n canvas->flush(); // ensure that point was drawn\n for (int y = 0; y < info.height(); ++y) {\n for (int x = 0; x < info.width(); ++x) {\n SkDebugf(\"%c\", colorPtr[x] == pmWhite ? '-' : 'x');\n }\n colorPtr += info.width();\n SkDebugf(\"\\n\");\n }\n }\n}\n",
+ "hash": "c6197d204ef9e4ccfb583242651fb2a7",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::MakeRaster_2",
+ "stdout": "---\\n-x-\\n---\\n"
+ },
+ "SkSurface_generationID": {
+ "code": "void draw(SkCanvas* canvas) {\n auto surface = SkSurface::MakeRasterN32Premul(1, 1);\n for (int i = 0; i < 3; ++i) {\n SkDebugf(\"surface generationID: %d\\n\", surface->generationID());\n if (0 == i) {\n surface->getCanvas()->drawColor(SK_ColorBLACK);\n } else {\n surface->notifyContentWillChange(SkSurface::kDiscard_ContentChangeMode);\n }\n }\n}",
+ "hash": "be9574c4a14f891e1abb4ec2b1e51d6c",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::generationID",
+ "stdout": "surface generationID: 1\\nsurface generationID: 2\\nsurface generationID: 3\\n"
+ },
+ "SkSurface_height": {
+ "code": "void draw(SkCanvas* canvas) {\n const int width = 37;\n const int height = 1000;\n auto surf = SkSurface::MakeNull(width, height);\n auto nullCanvas = surf->getCanvas();\n SkDebugf(\"surface height=%d canvas height=%d\\n\", surf->height(),\n nullCanvas->getBaseLayerSize().fHeight);\n}",
+ "hash": "20571cc23e3146deaa09046b64cc0aef",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::height()",
+ "stdout": "surface height=1000 canvas height=1000\\n"
+ },
+ "SkSurface_notifyContentWillChange": {
+ "code": "void draw(SkCanvas* canvas) {\n auto surface = SkSurface::MakeRasterN32Premul(1, 1);\n for (int i = 0; i < 3; ++i) {\n SkDebugf(\"surface generationID: %d\\n\", surface->generationID());\n if (0 == i) {\n surface->getCanvas()->drawColor(SK_ColorBLACK);\n } else {\n surface->notifyContentWillChange(SkSurface::kDiscard_ContentChangeMode);\n }\n }\n}",
+ "hash": "be9574c4a14f891e1abb4ec2b1e51d6c",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::notifyContentWillChange",
+ "stdout": "surface generationID: 1\\nsurface generationID: 2\\nsurface generationID: 3\\n"
+ },
+ "SkSurface_props": {
+ "code": "void draw(SkCanvas* canvas) {\n const char* names[] = { \"Unknown\", \"RGB_H\", \"BGR_H\", \"RGB_V\", \"BGR_V\" };\n sk_sp<SkSurface> surf(SkSurface::MakeRasterN32Premul(64, 64));\n SkDebugf(\"surf.props(): k%s_SkPixelGeometry\\n\", names[surf->props().pixelGeometry()]);\n}",
+ "hash": "13cf9e7b2894ae6e98c1fd719040bf01",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::props()",
+ "stdout": "surf.props(): kRGB_H_SkPixelGeometry\\n"
+ },
+ "SkSurface_width": {
+ "code": "void draw(SkCanvas* canvas) {\n const int width = 37;\n const int height = 1000;\n auto surf = SkSurface::MakeNull(width, height);\n auto nullCanvas = surf->getCanvas();\n SkDebugf(\"surface width=%d canvas width=%d\\n\", surf->width(),\n nullCanvas->getBaseLayerSize().fWidth);\n}",
+ "hash": "df066b56dd97c7c589fd2bb6a2539de8",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::width()",
+ "stdout": "surface width=37 canvas width=37\\n"
}
}
@@ -3068,18 +3334,18 @@
"name": "Filter_Quality_Methods"
},
"Paint_Font_Metrics": {
- "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n paint.setTextSize(120);\n SkPaint::FontMetrics fm;\n SkScalar lineHeight = paint.getFontMetrics(&fm);\n SkPoint pt = { 70, 180 };\n canvas->drawString(\"M\", pt.fX, pt.fY, paint);\n canvas->drawLine(pt.fX, pt.fY, pt.fX, pt.fY + fm.fTop, paint);\n SkScalar ascent = pt.fY + fm.fAscent;\n canvas->drawLine(pt.fX - 25, ascent, pt.fX - 25, ascent + lineHeight, paint);\n canvas->drawLine(pt.fX - 50, pt.fY, pt.fX - 50, pt.fY + fm.fDescent, paint);\n canvas->drawLine(pt.fX + 100, pt.fY, pt.fX + 100, pt.fY + fm.fAscent, paint);\n canvas->drawLine(pt.fX + 125, pt.fY, pt.fX + 125, pt.fY - fm.fXHeight, paint);\n canvas->drawLine(pt.fX + 150, pt.fY, pt.fX + 150, pt.fY - fm.fCapHeight, paint);\n canvas->drawLine(pt.fX + 5, pt.fY, pt.fX + 5, pt.fY + fm.fBottom, paint);\n SkScalar xmin = pt.fX + fm.fXMin;\n canvas->drawLine(xmin, pt.fY + 60, xmin + fm.fMaxCharWidth, pt.fY + 60, paint);\n canvas->drawLine(xmin, pt.fY - 145, pt.fX, pt.fY - 145, paint);\n canvas->drawLine(pt.fX + fm.fXMax, pt.fY - 160, pt.fX, pt.fY - 160, paint);\n SkScalar upos = pt.fY + fm.fUnderlinePosition;\n canvas->drawLine(pt.fX + 25, upos, pt.fX + 130, upos, paint);\n SkScalar urad = fm.fUnderlineThickness / 2;\n canvas->drawLine(pt.fX + 130, upos - urad, pt.fX + 160, upos - urad, paint);\n canvas->drawLine(pt.fX + 130, upos + urad, pt.fX + 160, upos + urad, paint);\n paint.setTextSize(12);\n canvas->drawString(\"x-min\", pt.fX - 50, pt.fY - 148, paint);\n canvas->drawString(\"x-max\", pt.fX + 140, pt.fY - 150, paint);\n canvas->drawString(\"max char width\", pt.fX + 120, pt.fY + 57, paint);\n canvas->drawString(\"underline position\", pt.fX + 30, pt.fY + 22, paint);\n canvas->drawString(\"underline thickness\", pt.fX + 162, pt.fY + 13, paint);\n canvas->rotate(-90);\n canvas->drawString(\"descent\", -pt.fY - 30, pt.fX - 54, paint);\n canvas->drawString(\"line height\", -pt.fY, pt.fX - 29, paint);\n canvas->drawString(\"top\", -pt.fY + 30, pt.fX - 4, paint);\n canvas->drawString(\"ascent\", -pt.fY, pt.fX + 110, paint);\n canvas->drawString(\"x-height\", -pt.fY, pt.fX + 135, paint);\n canvas->drawString(\"cap-height\", -pt.fY, pt.fX + 160, paint);\n canvas->drawString(\"bottom\", -pt.fY - 50, pt.fX + 15, paint);\n}\n",
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n paint.setTextSize(120);\n SkPaint::FontMetrics fm;\n SkScalar lineHeight = paint.getFontMetrics(&fm);\n SkPoint pt = { 70, 180 };\n canvas->drawString(\"M\", pt.fX, pt.fY, paint);\n canvas->drawLine(pt.fX, pt.fY, pt.fX, pt.fY + fm.fTop, paint);\n SkScalar ascent = pt.fY + fm.fAscent;\n canvas->drawLine(pt.fX - 25, ascent, pt.fX - 25, ascent + lineHeight, paint);\n canvas->drawLine(pt.fX - 50, pt.fY, pt.fX - 50, pt.fY + fm.fDescent, paint);\n canvas->drawLine(pt.fX + 100, pt.fY, pt.fX + 100, pt.fY + fm.fAscent, paint);\n canvas->drawLine(pt.fX + 125, pt.fY, pt.fX + 125, pt.fY - fm.fXHeight, paint);\n canvas->drawLine(pt.fX + 150, pt.fY, pt.fX + 150, pt.fY - fm.fCapHeight, paint);\n canvas->drawLine(pt.fX + 5, pt.fY, pt.fX + 5, pt.fY + fm.fBottom, paint);\n SkScalar xmin = pt.fX + fm.fXMin;\n canvas->drawLine(xmin, pt.fY + 60, xmin + fm.fMaxCharWidth, pt.fY + 60, paint);\n canvas->drawLine(xmin, pt.fY - 145, pt.fX, pt.fY - 145, paint);\n canvas->drawLine(pt.fX + fm.fXMax, pt.fY - 160, pt.fX, pt.fY - 160, paint);\n SkScalar upos = pt.fY + fm.fUnderlinePosition;\n canvas->drawLine(pt.fX + 25, upos, pt.fX + 160, upos, paint);\n SkScalar ut = fm.fUnderlineThickness;\n canvas->drawLine(pt.fX + 130, upos + ut, pt.fX + 160, upos + ut, paint);\n paint.setTextSize(12);\n canvas->drawString(\"x-min\", pt.fX - 50, pt.fY - 148, paint);\n canvas->drawString(\"x-max\", pt.fX + 140, pt.fY - 150, paint);\n canvas->drawString(\"max char width\", pt.fX + 120, pt.fY + 57, paint);\n canvas->drawString(\"underline position\", pt.fX + 30, pt.fY + 22, paint);\n canvas->drawString(\"underline thickness\", pt.fX + 162, pt.fY + 13, paint);\n canvas->rotate(-90);\n canvas->drawString(\"descent\", -pt.fY - 30, pt.fX - 54, paint);\n canvas->drawString(\"line height\", -pt.fY, pt.fX - 29, paint);\n canvas->drawString(\"top\", -pt.fY + 30, pt.fX - 4, paint);\n canvas->drawString(\"ascent\", -pt.fY, pt.fX + 110, paint);\n canvas->drawString(\"x-height\", -pt.fY, pt.fX + 135, paint);\n canvas->drawString(\"cap-height\", -pt.fY, pt.fX + 160, paint);\n canvas->drawString(\"bottom\", -pt.fY - 50, pt.fX + 15, paint);\n}\n",
"width": 512,
"height": 256,
- "hash": "b5b76e0a15da0c3530071186a9006498",
+ "hash": "2bfa3783719fcd769af177a1b244e171",
"file": "SkPaint_Reference",
"name": "Font_Metrics"
},
"Paint_Image_Filter_Methods": {
- "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setStyle(SkPaint::kStroke_Style);\n paint.setStrokeWidth(2);\n SkRegion region;\n region.op( 10, 10, 50, 50, SkRegion::kUnion_Op);\n region.op( 10, 50, 90, 90, SkRegion::kUnion_Op);\n paint.setImageFilter(SkImageFilter::MakeBlur(5.0f, 5.0f, nullptr));\n canvas->drawRegion(region, paint);\n paint.setImageFilter(nullptr);\n paint.setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlurStyle, 5));\n canvas->translate(100, 100);\n canvas->drawRegion(region, paint);\n}\n",
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setStyle(SkPaint::kStroke_Style);\n paint.setStrokeWidth(2);\n SkRegion region;\n region.op( 10, 10, 50, 50, SkRegion::kUnion_Op);\n region.op( 10, 50, 90, 90, SkRegion::kUnion_Op);\n paint.setImageFilter(SkBlurImageFilter::Make(5.0f, 5.0f, nullptr));\n canvas->drawRegion(region, paint);\n paint.setImageFilter(nullptr);\n paint.setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlurStyle, 5));\n canvas->translate(100, 100);\n canvas->drawRegion(region, paint);\n}\n",
"width": 256,
"height": 256,
- "hash": "88804938b49eb4f7c7f01ad52f4db0d8",
+ "hash": "0b2eec148d6397d6231e1fa0b3d1496d",
"file": "SkPaint_Reference",
"name": "Image_Filter_Methods"
},
@@ -3204,10 +3470,10 @@
"name": "Text_Skew_X"
},
"Paint_Typeface_Methods": {
- "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setTypeface(SkTypeface::MakeDefault(SkTypeface::kBold));\n paint.setAntiAlias(true);\n paint.setTextSize(36);\n canvas->drawString(\"A Big Hello!\", 10, 40, paint);\n paint.setTypeface(nullptr);\n paint.setFakeBoldText(true);\n canvas->drawString(\"A Big Hello!\", 10, 80, paint);\n}\n",
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setTypeface(SkTypeface::MakeFromName(nullptr, SkFontStyle()));\n paint.setAntiAlias(true);\n paint.setTextSize(36);\n canvas->drawString(\"A Big Hello!\", 10, 40, paint);\n paint.setTypeface(nullptr);\n paint.setFakeBoldText(true);\n canvas->drawString(\"A Big Hello!\", 10, 80, paint);\n}\n",
"width": 256,
"height": 100,
- "hash": "c18b1696b8c1649bebf7eb1f8b89e0b0",
+ "hash": "1a7a5062725139760962582f599f1b97",
"file": "SkPaint_Reference",
"name": "Typeface_Methods"
},
@@ -4308,10 +4574,10 @@
"name": "SkCanvas::save()"
},
"SkCanvas_saveLayer": {
- "code": "void draw(SkCanvas* canvas) {\n SkPaint paint, blur;\n blur.setImageFilter(SkImageFilter::MakeBlur(3, 3, nullptr));\n canvas->saveLayer(nullptr, &blur);\n SkRect rect = { 25, 25, 50, 50};\n canvas->drawRect(rect, paint);\n canvas->translate(50, 50);\n paint.setColor(SK_ColorRED);\n canvas->drawRect(rect, paint);\n canvas->restore();\n}\n",
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint, blur;\n blur.setImageFilter(SkBlurImageFilter::Make(3, 3, nullptr));\n canvas->saveLayer(nullptr, &blur);\n SkRect rect = { 25, 25, 50, 50};\n canvas->drawRect(rect, paint);\n canvas->translate(50, 50);\n paint.setColor(SK_ColorRED);\n canvas->drawRect(rect, paint);\n canvas->restore();\n}\n",
"width": 256,
"height": 128,
- "hash": "05f9b6fa6b5007aea89dfe66c306855d",
+ "hash": "1a025d6018f64140af2dc36acad59008",
"file": "SkCanvas_Reference",
"name": "SkCanvas::saveLayer"
},
@@ -4332,10 +4598,10 @@
"name": "SkCanvas::saveLayerPreserveLCDTextRequests"
},
"SkCanvas_saveLayer_2": {
- "code": "void draw(SkCanvas* canvas) {\n SkPaint paint, blur;\n blur.setImageFilter(SkImageFilter::MakeBlur(3, 3, nullptr));\n canvas->saveLayer(SkRect::MakeWH(90, 90), &blur);\n SkRect rect = { 25, 25, 50, 50};\n canvas->drawRect(rect, paint);\n canvas->translate(50, 50);\n paint.setColor(SK_ColorRED);\n canvas->drawRect(rect, paint);\n canvas->restore();\n}\n",
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint, blur;\n blur.setImageFilter(SkBlurImageFilter::Make(3, 3, nullptr));\n canvas->saveLayer(SkRect::MakeWH(90, 90), &blur);\n SkRect rect = { 25, 25, 50, 50};\n canvas->drawRect(rect, paint);\n canvas->translate(50, 50);\n paint.setColor(SK_ColorRED);\n canvas->drawRect(rect, paint);\n canvas->restore();\n}\n",
"width": 256,
"height": 128,
- "hash": "812f3c8f8b93e8c7e55528c7a22887bf",
+ "hash": "5b59231feae0c09cb1ab6a292229d7a4",
"file": "SkCanvas_Reference",
"name": "SkCanvas::saveLayer_2"
},
@@ -4395,6 +4661,462 @@
"file": "SkCanvas_Reference",
"name": "SkCanvas::writePixels_2"
},
+ "SkIPoint_add_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n auto draw_lines = [=](const SkIPoint pts[], size_t count, SkPaint& paint) -> void {\n for (size_t i = 0; i < count - 1; ++i) {\n SkPoint p0, p1;\n p0.iset(pts[i]);\n p1.iset(pts[i + 1]);\n canvas->drawLine(p0, p1, paint);\n }\n };\n SkIPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 } };\n SkPaint paint;\n paint.setAntiAlias(true);\n paint.setStyle(SkPaint::kStroke_Style);\n canvas->scale(30, 15);\n draw_lines(points, SK_ARRAY_COUNT(points), paint);\n SkIPoint mod = {4, 1};\n for (auto& point : points) {\n point = point + mod;\n mod.fX -= 1;\n mod.fY += 1;\n }\n paint.setColor(SK_ColorRED);\n draw_lines(points, SK_ARRAY_COUNT(points), paint);\n}",
+ "width": 256,
+ "height": 128,
+ "hash": "63f4cba971c6d8434595906f865b5a29",
+ "file": "SkIPoint_Reference",
+ "name": "SkIPoint::operator+(const SkIPoint& a, const SkIVector& b)"
+},
+ "SkIPoint_addto_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n auto draw_lines = [=](const SkIPoint pts[], size_t count, SkPaint& paint) -> void {\n for (size_t i = 0; i < count - 1; ++i) {\n SkPoint p0, p1;\n p0.iset(pts[i]);\n p1.iset(pts[i + 1]);\n canvas->drawLine(p0, p1, paint);\n }\n };\n SkIPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 } };\n SkPaint paint;\n paint.setAntiAlias(true);\n paint.setStyle(SkPaint::kStroke_Style);\n canvas->scale(30, 15);\n draw_lines(points, SK_ARRAY_COUNT(points), paint);\n points[1] += {1, 1};\n points[2] += {-1, -1};\n paint.setColor(SK_ColorRED);\n draw_lines(points, SK_ARRAY_COUNT(points), paint);\n}",
+ "width": 256,
+ "height": 64,
+ "hash": "4eb2d95c9e9a66f05296e345bb68bd51",
+ "file": "SkIPoint_Reference",
+ "name": "SkIPoint::operator+=(const SkIVector& v)"
+},
+ "SkIPoint_subtract_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n auto draw_lines = [=](const SkIPoint pts[], size_t count, SkPaint& paint) -> void {\n for (size_t i = 0; i < count - 1; ++i) {\n SkPoint p0, p1;\n p0.iset(pts[i]);\n p1.iset(pts[i + 1]);\n canvas->drawLine(p0, p1, paint);\n }\n };\n SkIPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 } };\n SkPaint paint;\n paint.setAntiAlias(true);\n paint.setStyle(SkPaint::kStroke_Style);\n canvas->scale(30, 15);\n draw_lines(points, SK_ARRAY_COUNT(points), paint);\n points[1] += points[0] - points[3];\n points[2] -= points[1] - points[0];\n paint.setColor(SK_ColorRED);\n draw_lines(points, SK_ARRAY_COUNT(points), paint);\n}",
+ "width": 256,
+ "height": 64,
+ "hash": "e626e26bf557857b824aa7d03f723e0f",
+ "file": "SkIPoint_Reference",
+ "name": "SkIPoint::operator-(const SkIPoint& a, const SkIPoint& b)"
+},
+ "SkIPoint_subtractfrom_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n auto draw_lines = [=](const SkIPoint pts[], size_t count, SkPaint& paint) -> void {\n for (size_t i = 0; i < count - 1; ++i) {\n SkPoint p0, p1;\n p0.iset(pts[i]);\n p1.iset(pts[i + 1]);\n canvas->drawLine(p0, p1, paint);\n }\n };\n SkIPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 } };\n SkPaint paint;\n paint.setAntiAlias(true);\n paint.setStyle(SkPaint::kStroke_Style);\n canvas->scale(30, 15);\n draw_lines(points, SK_ARRAY_COUNT(points), paint);\n points[1] -= {1, 1};\n points[2] -= {-1, -1};\n paint.setColor(SK_ColorRED);\n draw_lines(points, SK_ARRAY_COUNT(points), paint);\n}",
+ "width": 256,
+ "height": 64,
+ "hash": "a01e533dc7ab34ed728dc4e7a5f1f0ee",
+ "file": "SkIPoint_Reference",
+ "name": "SkIPoint::operator-=(const SkIVector& v)"
+},
+ "SkImage_BitDepth": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::BitDepth"
+},
+ "SkImage_CachingHint": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::CachingHint"
+},
+ "SkImage_DeferredTextureImageUsageParams_DeferredTextureImageUsageParams": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::DeferredTextureImageUsageParams::DeferredTextureImageUsageParams"
+},
+ "SkImage_LegacyBitmapMode": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::LegacyBitmapMode"
+},
+ "SkImage_MakeBackendTextureFromSkImage": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::MakeBackendTextureFromSkImage"
+},
+ "SkImage_MakeCrossContextFromEncoded": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::MakeCrossContextFromEncoded"
+},
+ "SkImage_MakeFromAHardwareBuffer": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::MakeFromAHardwareBuffer"
+},
+ "SkImage_MakeFromAHardwareBuffer_2": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::MakeFromAHardwareBuffer_2"
+},
+ "SkImage_MakeFromAdoptedTexture": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::MakeFromAdoptedTexture"
+},
+ "SkImage_MakeFromBitmap": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::MakeFromBitmap"
+},
+ "SkImage_MakeFromDeferredTextureImageData": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::MakeFromDeferredTextureImageData"
+},
+ "SkImage_MakeFromEncoded": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::MakeFromEncoded"
+},
+ "SkImage_MakeFromGenerator": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::MakeFromGenerator"
+},
+ "SkImage_MakeFromNV12TexturesCopy": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::MakeFromNV12TexturesCopy"
+},
+ "SkImage_MakeFromPicture": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::MakeFromPicture"
+},
+ "SkImage_MakeFromRaster": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::MakeFromRaster"
+},
+ "SkImage_MakeFromTexture": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::MakeFromTexture"
+},
+ "SkImage_MakeFromTexture_2": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::MakeFromTexture_2"
+},
+ "SkImage_MakeFromYUVTexturesCopy": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::MakeFromYUVTexturesCopy"
+},
+ "SkImage_MakeRasterCopy": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::MakeRasterCopy"
+},
+ "SkImage_MakeRasterData": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::MakeRasterData"
+},
+ "SkImage_alphaType": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::alphaType"
+},
+ "SkImage_asLegacyBitmap": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::asLegacyBitmap"
+},
+ "SkImage_bounds": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::bounds()"
+},
+ "SkImage_colorSpace": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::colorSpace"
+},
+ "SkImage_dimensions": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::dimensions()"
+},
+ "SkImage_encodeToData": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::encodeToData"
+},
+ "SkImage_encodeToData_2": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::encodeToData_2"
+},
+ "SkImage_getDeferredTextureImageData": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::getDeferredTextureImageData"
+},
+ "SkImage_getTexture": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::getTexture"
+},
+ "SkImage_getTextureHandle": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::getTextureHandle"
+},
+ "SkImage_height": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::height()"
+},
+ "SkImage_isAlphaOnly": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::isAlphaOnly"
+},
+ "SkImage_isLazyGenerated": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::isLazyGenerated"
+},
+ "SkImage_isOpaque": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::isOpaque"
+},
+ "SkImage_isTextureBacked": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::isTextureBacked"
+},
+ "SkImage_isValid": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::isValid"
+},
+ "SkImage_makeColorSpace": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::makeColorSpace"
+},
+ "SkImage_makeNonTextureImage": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::makeNonTextureImage"
+},
+ "SkImage_makeShader": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::makeShader"
+},
+ "SkImage_makeShader_2": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::makeShader_2"
+},
+ "SkImage_makeSubset": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::makeSubset"
+},
+ "SkImage_makeTextureImage": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::makeTextureImage"
+},
+ "SkImage_makeWithFilter": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::makeWithFilter"
+},
+ "SkImage_peekPixels": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::peekPixels"
+},
+ "SkImage_readPixels": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::readPixels"
+},
+ "SkImage_readPixels_2": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::readPixels_2"
+},
+ "SkImage_refColorSpace": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::refColorSpace"
+},
+ "SkImage_refEncodedData": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::refEncodedData"
+},
+ "SkImage_scalePixels": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::scalePixels"
+},
+ "SkImage_toString": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::toString"
+},
+ "SkImage_uniqueID": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::uniqueID"
+},
+ "SkImage_width": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkImage_Reference",
+ "name": "SkImage::width()"
+},
"SkMatrix_Concat": {
"code": "void draw(SkCanvas* canvas) {\n SkMatrix matrix, matrix2;\n SkPoint bitmapBounds[4], perspect[4] = {{50, 10}, {180, 40}, {236, 176}, {10, 206}};\n SkRect::Make(source.bounds()).toQuad(bitmapBounds);\n matrix.setPolyToPoly(bitmapBounds, perspect, 4);\n matrix2.setPolyToPoly(perspect, bitmapBounds, 4);\n SkMatrix concat = SkMatrix::Concat(matrix, matrix2);\n canvas->concat(concat);\n canvas->drawBitmap(source, 0, 0);\n}",
"width": 256,
@@ -4500,10 +5222,10 @@
"name": "SkMatrix::isSimilarity"
},
"SkMatrix_mapHomogeneousPoints": {
- "code": "void draw(SkCanvas* canvas) {\n SkPoint3 src[] = {{3, 3, 1}, {8, 2, 2}, {5, 0, 4}, {0, 1, 3},\n {3, 7, 1}, {8, 6, 2}, {5, 4, 4}, {0, 5, 3}};\n int lines[] = { 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 };\n constexpr int count = SK_ARRAY_COUNT(src);\n auto debugster = [=](SkPoint3 src[]) -> void {\n for (size_t i = 0; i < SK_ARRAY_COUNT(lines); i += 2) {\n const SkPoint3& s = src[lines[i]];\n const SkPoint3& e = src[lines[i + 1]];\n SkPaint paint;\n paint.setARGB(77, 23, 99, 154);\n canvas->drawLine(s.fX / s.fZ, s.fY / s.fZ, e.fX / e.fZ, e.fY / e.fZ, paint);\n }\n };\n canvas->save();\n canvas->translate(5, 5);\n canvas->scale(15, 15);\n debugster(src);\n canvas->restore();\n canvas->translate(128, 128);\n SkMatrix matrix;\n matrix.setAll(15, 0, 0, 0, 15, 0, -0.08, 0.04, 1);\n matrix.mapHomogeneousPoints(&src[0].fX, &src[0].fX, count);\n debugster(src);\n}",
+ "code": "void draw(SkCanvas* canvas) {\n SkPoint3 src[] = {{3, 3, 1}, {8, 2, 2}, {5, 0, 4}, {0, 1, 3},\n {3, 7, 1}, {8, 6, 2}, {5, 4, 4}, {0, 5, 3}};\n int lines[] = { 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 };\n constexpr int count = SK_ARRAY_COUNT(src);\n auto debugster = [=](SkPoint3 src[]) -> void {\n for (size_t i = 0; i < SK_ARRAY_COUNT(lines); i += 2) {\n const SkPoint3& s = src[lines[i]];\n const SkPoint3& e = src[lines[i + 1]];\n SkPaint paint;\n paint.setARGB(77, 23, 99, 154);\n canvas->drawLine(s.fX / s.fZ, s.fY / s.fZ, e.fX / e.fZ, e.fY / e.fZ, paint);\n }\n };\n canvas->save();\n canvas->translate(5, 5);\n canvas->scale(15, 15);\n debugster(src);\n canvas->restore();\n canvas->translate(128, 128);\n SkMatrix matrix;\n matrix.setAll(15, 0, 0, 0, 15, 0, -0.08, 0.04, 1);\n matrix.mapHomogeneousPoints(src, src, count);\n debugster(src);\n}",
"width": 256,
"height": 256,
- "hash": "0d8c7aa7249048f2b83d32cf13f88560",
+ "hash": "d56f93e4bc763c7ba4914321ed07a8b5",
"file": "SkMatrix_Reference",
"name": "SkMatrix::mapHomogeneousPoints"
},
@@ -5810,6 +6532,334 @@
"hash": "7822d78f5cacf5c04267cbbc6c6d0b80",
"file": "SkPixmap_Reference",
"name": "SkPixmap::writable_addrF16"
+},
+ "SkPoint_CrossProduct": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n SkVector vectors[][2] = {{{50, 2}, {-14, 20}}, {{0, 50}, {-50, 0}}, {{-20, 25}, {25, -20}},\n {{-20, -24}, {-24, -20}}};\n SkPoint center[] = {{32, 32}, {160, 32}, {32, 160}, {160, 160}};\n paint.setStrokeWidth(2);\n for (size_t i = 0; i < 4; ++i) {\n paint.setColor(SK_ColorRED);\n canvas->drawLine(center[i], center[i] + vectors[i][0], paint);\n paint.setColor(SK_ColorBLUE);\n canvas->drawLine(center[i], center[i] + vectors[i][1], paint);\n SkString str;\n SkScalar cross = SkPoint::CrossProduct(vectors[i][1], vectors[i][0]);\n str.printf(\"cross = %g\", cross);\n paint.setColor(cross >= 0 ? SK_ColorRED : SK_ColorBLUE);\n canvas->drawString(str, center[i].fX, center[i].fY, paint);\n }\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "8b8a4cd8a29d22bb9c5e63b70357bd65",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::CrossProduct"
+},
+ "SkPoint_Distance": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n const SkPoint lines[][2] = {{{-10, -10}, {90, 30}}, {{0, 0}, {150, 30}}, {{10, 25}, {120, 150}}};\n const SkPoint origin = {30, 160};\n for (auto line : lines) {\n SkPoint a = origin + line[0];\n const SkPoint& b = line[1];\n canvas->drawLine(a, b, paint);\n SkAutoCanvasRestore acr(canvas, true);\n SkScalar angle = SkScalarATan2((b.fY - a.fY), b.fX - a.fX);\n canvas->rotate(angle * 180 / SK_ScalarPI, a.fX, a.fY);\n SkString distance(\"distance = \");\n distance.appendScalar(SkPoint::Distance(a, b));\n canvas->drawString(distance, a.fX + 25, a.fY - 4, paint);\n }\n}",
+ "width": 256,
+ "height": 192,
+ "hash": "9e0a2de2eb94dba4521d733e73f2bda5",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::Distance"
+},
+ "SkPoint_DotProduct": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n SkVector vectors[][2] = {{{50, 2}, {-14, 20}}, {{0, 50}, {-50, 0}}, {{-20, 25}, {25, -20}},\n {{-20, -24}, {-24, -20}}};\n SkPoint center[] = {{32, 32}, {160, 32}, {32, 160}, {160, 160}};\n paint.setStrokeWidth(2);\n for (size_t i = 0; i < 4; ++i) {\n canvas->drawLine(center[i], center[i] + vectors[i][0], paint);\n canvas->drawLine(center[i], center[i] + vectors[i][1], paint);\n SkString str;\n str.printf(\"dot = %g\", SkPoint::DotProduct(vectors[i][0], vectors[i][1]));\n canvas->drawString(str, center[i].fX, center[i].fY, paint);\n }\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "496db0131a003162faba7d7f98b30340",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::DotProduct"
+},
+ "SkPoint_Length": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n const SkPoint points[] = { { 90, 30 }, { 120, 150 }, { 150, 30 }, { 210, 90 } };\n const SkPoint origin = {30, 140};\n for (auto point : points) {\n canvas->drawLine(origin, point, paint);\n SkAutoCanvasRestore acr(canvas, true);\n SkScalar angle = SkScalarATan2((point.fY - origin.fY), point.fX - origin.fX);\n canvas->rotate(angle * 180 / SK_ScalarPI, origin.fX, origin.fY);\n SkString length(\"length = \");\n length.appendScalar(SkPoint::Length(point.fX, point.fY));\n canvas->drawString(length, origin.fX + 25, origin.fY - 4, paint);\n }\n}",
+ "width": 256,
+ "height": 192,
+ "hash": "c98773d8b4509969d78cb8121e4b77f6",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::Length"
+},
+ "SkPoint_Normalize": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n const SkPoint lines[][2] = { {{ 30, 110 }, { 190, 30 }},\n {{ 30, 220 }, { 120, 140 }}};\n for (auto line : lines) {\n canvas->drawLine(line[0], line[1], paint);\n SkVector vector = line[1] - line[0];\n SkScalar priorLength = SkPoint::Normalize(&vector);\n SkVector rotate90 = { -vector.fY, vector.fX };\n rotate90 *= 10.f;\n canvas->drawLine(line[0] - rotate90, line[0] + rotate90, paint);\n canvas->drawLine(line[1] - rotate90, line[1] + rotate90, paint);\n SkString length(\"length = \");\n length.appendScalar(priorLength);\n canvas->drawString(length, line[0].fX + 25, line[0].fY - 4, paint);\n }\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "60a08f3ce75374fc815384616d114df7",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::Normalize"
+},
+ "SkPoint_Offset": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n SkPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 },\n { 6, 4 }, { 7, 5 }, { 5, 7 },\n { 4, 6 }, { 3, 7 }, { 1, 5 },\n { 2, 4 }, { 1, 3 }, { 3, 1 } };\n canvas->scale(30, 15);\n paint.setStyle(SkPaint::kStroke_Style);\n canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);\n SkPoint::Offset(points, SK_ARRAY_COUNT(points), { 1, 9 } );\n canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "f0f24726df78a5d797bcf311e694a0a3",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::Offset"
+},
+ "SkPoint_Offset_2": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n SkPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 },\n { 6, 4 }, { 7, 5 }, { 5, 7 },\n { 4, 6 }, { 3, 7 }, { 1, 5 },\n { 2, 4 }, { 1, 3 }, { 3, 1 } };\n canvas->scale(30, 15);\n paint.setStyle(SkPaint::kStroke_Style);\n canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);\n SkPoint::Offset(points, SK_ARRAY_COUNT(points), 1, 9);\n canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "532849faa838de885b86d3ebffae3712",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::Offset_2"
+},
+ "SkPoint_add_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n SkPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 },\n { 6, 4 }, { 7, 5 }, { 5, 7 },\n { 4, 6 }, { 3, 7 }, { 1, 5 },\n { 2, 4 }, { 1, 3 }, { 3, 1 } };\n canvas->scale(30, 15);\n paint.setStyle(SkPaint::kStroke_Style);\n canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);\n SkVector mod = {1, 1};\n for (auto& point : points) {\n point = point + mod;\n mod.fX *= 1.1f;\n mod.fY += .2f;\n }\n paint.setColor(SK_ColorRED);\n canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "911a84253dfec4dabf94dbe3c71766f0",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::operator+(const SkPoint& a, const SkVector& b)"
+},
+ "SkPoint_addto_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n SkPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 },\n { 6, 4 }, { 7, 5 }, { 5, 7 },\n { 4, 6 }, { 3, 7 }, { 1, 5 },\n { 2, 4 }, { 1, 3 }, { 3, 1 } };\n canvas->scale(30, 15);\n paint.setStyle(SkPaint::kStroke_Style);\n canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);\n points[1] += {1, 1};\n points[2] += {-1, -1};\n paint.setColor(SK_ColorRED);\n canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);\n}",
+ "width": 256,
+ "height": 128,
+ "hash": "8b4e79109e2381345258cb744881b20c",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::operator+=(const SkVector& v)"
+},
+ "SkPoint_cross": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n SkVector vectors[][2] = {{{50, 2}, {-14, 20}}, {{0, 50}, {-50, 0}}, {{-20, 25}, {25, -20}},\n {{-20, -24}, {-24, -20}}};\n SkPoint center[] = {{32, 32}, {160, 32}, {32, 160}, {160, 160}};\n paint.setStrokeWidth(2);\n for (size_t i = 0; i < 4; ++i) {\n paint.setColor(SK_ColorRED);\n canvas->drawLine(center[i], center[i] + vectors[i][0], paint);\n paint.setColor(SK_ColorBLUE);\n canvas->drawLine(center[i], center[i] + vectors[i][1], paint);\n SkString str;\n SkScalar cross = vectors[i][0].cross(vectors[i][1]);\n str.printf(\"cross = %g\", cross);\n paint.setColor(cross >= 0 ? SK_ColorRED : SK_ColorBLUE);\n canvas->drawString(str, center[i].fX, center[i].fY, paint);\n }\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "0bc7b3997357e499817278b78bdfbf1d",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::cross()"
+},
+ "SkPoint_distanceToOrigin": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n const SkPoint points[] = { { 60, -110 }, { 90, 10 }, { 120, -110 }, { 180, -50 } };\n const SkPoint origin = {0, 0};\n canvas->translate(30, 140);\n for (auto point : points) {\n canvas->drawLine(origin, point, paint);\n SkAutoCanvasRestore acr(canvas, true);\n SkScalar angle = SkScalarATan2((point.fY - origin.fY), point.fX - origin.fX);\n canvas->rotate(angle * 180 / SK_ScalarPI, origin.fX, origin.fY);\n SkString distance(\"distance = \");\n distance.appendScalar(point.distanceToOrigin());\n canvas->drawString(distance, origin.fX + 25, origin.fY - 4, paint);\n }\n}",
+ "width": 256,
+ "height": 192,
+ "hash": "812cf26d91b1cdcd2c6b9438a8172518",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::distanceToOrigin"
+},
+ "SkPoint_dot": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n SkVector vectors[][2] = {{{50, 2}, {-14, 20}}, {{0, 50}, {-50, 0}}, {{-20, 25}, {25, -20}},\n {{-20, -24}, {-24, -20}}};\n SkPoint center[] = {{32, 32}, {160, 32}, {32, 160}, {160, 160}};\n paint.setStrokeWidth(2);\n for (size_t i = 0; i < 4; ++i) {\n canvas->drawLine(center[i], center[i] + vectors[i][0], paint);\n canvas->drawLine(center[i], center[i] + vectors[i][1], paint);\n SkString str;\n str.printf(\"dot = %g\", vectors[i][0].dot(vectors[i][1]));\n canvas->drawString(str, center[i].fX, center[i].fY, paint);\n }\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "56d01ccfedd71d3c504b09afa2875d38",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::dot()"
+},
+ "SkPoint_length": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n const SkPoint points[] = { { 90, 30 }, { 120, 150 }, { 150, 30 }, { 210, 90 } };\n const SkPoint origin = {30, 140};\n for (auto point : points) {\n canvas->drawLine(origin, point, paint);\n SkAutoCanvasRestore acr(canvas, true);\n SkScalar angle = SkScalarATan2((point.fY - origin.fY), point.fX - origin.fX);\n canvas->rotate(angle * 180 / SK_ScalarPI, origin.fX, origin.fY);\n SkString length(\"length = \");\n length.appendScalar(point.length());\n canvas->drawString(length, origin.fX + 25, origin.fY - 4, paint);\n }\n}",
+ "width": 256,
+ "height": 192,
+ "hash": "8363ab179447ee4b827679e20d3d81eb",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::length()"
+},
+ "SkPoint_multiply_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n SkPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 },\n { 6, 4 }, { 7, 5 }, { 5, 7 },\n { 4, 6 }, { 3, 7 }, { 1, 5 },\n { 2, 4 }, { 1, 3 }, { 3, 1 } };\n canvas->scale(15, 10);\n paint.setStyle(SkPaint::kStroke_Style);\n canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);\n for (auto& point : points) {\n point = point * 1.5f;\n }\n paint.setColor(SK_ColorRED);\n canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);\n}",
+ "width": 256,
+ "height": 128,
+ "hash": "35b3bc675779de043706ae4817ee950c",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::operator*(SkScalar scale)_const"
+},
+ "SkPoint_multiplyby_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n SkPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 },\n { 6, 4 }, { 7, 5 }, { 5, 7 },\n { 4, 6 }, { 3, 7 }, { 1, 5 },\n { 2, 4 }, { 1, 3 }, { 3, 1 } };\n canvas->scale(15, 10);\n paint.setStyle(SkPaint::kStroke_Style);\n canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);\n for (auto& point : points) {\n point *= 2;\n }\n paint.setColor(SK_ColorRED);\n canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);\n}",
+ "width": 256,
+ "height": 128,
+ "hash": "3ce3db36235d80dbac4d39504cf756da",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::operator*=(SkScalar scale)"
+},
+ "SkPoint_normalize": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n const SkPoint lines[][2] = { {{ 30, 110 }, { 190, 30 }},\n {{ 120, 140 }, { 30, 220 }}};\n for (auto line : lines) {\n canvas->drawLine(line[0], line[1], paint);\n SkVector vector = line[1] - line[0];\n if (vector.normalize()) {\n SkVector rotate90 = { -vector.fY, vector.fX };\n rotate90 *= 10.f;\n canvas->drawLine(line[0] - rotate90, line[0] + rotate90, paint);\n canvas->drawLine(line[1] - rotate90, line[1] + rotate90, paint);\n }\n }\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "d84fce292d86c7d9ef37ae2d179c03c7",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::normalize()"
+},
+ "SkPoint_offset": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n SkPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 },\n { 6, 4 }, { 7, 5 }, { 5, 7 },\n { 4, 6 }, { 3, 7 }, { 1, 5 },\n { 2, 4 }, { 1, 3 }, { 3, 1 } };\n canvas->scale(30, 15);\n paint.setStyle(SkPaint::kStroke_Style);\n canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);\n points[1].offset(1, 1);\n paint.setColor(SK_ColorRED);\n canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);\n}",
+ "width": 256,
+ "height": 128,
+ "hash": "02750ceaa874f956e6e6544ef6b858ee",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::offset()"
+},
+ "SkPoint_scale": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n SkPoint point = {40, -15}, scaled;\n SkPoint origin = {30, 110};\n for (auto scale : {1, 2, 3, 5}) {\n paint.setStrokeWidth(scale * 5);\n paint.setARGB(0x7f, 0x9f, 0xbf, 0x33 * scale);\n point.scale(scale, &scaled);\n canvas->drawLine(origin, origin + scaled, paint);\n }\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "972e4e230806281adb928e068bcd8551",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::scale()"
+},
+ "SkPoint_scale_2": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n SkPoint point = {40, -15};\n SkPoint origin = {30, 110};\n for (auto scale : {1, 2, 3, 5}) {\n paint.setStrokeWidth(scale * 5);\n paint.setARGB(0x7f, 0x9f, 0xbf, 0x33 * scale);\n point.scale(scale);\n canvas->drawLine(origin, origin + point, paint);\n }\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "1060a4f27d8ef29519e6ac006ce90f2b",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::scale_2"
+},
+ "SkPoint_setLength": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n const SkPoint points[] = { { 60, -110 }, { 90, 10 }, { 120, -110 }, { 180, -50 } };\n const SkPoint origin = {0, 0};\n canvas->translate(30, 140);\n for (auto point : points) {\n paint.setStrokeWidth(1);\n paint.setColor(SK_ColorBLACK);\n canvas->drawLine(origin, point, paint);\n SkVector normal = point;\n normal.setLength(100);\n paint.setStrokeWidth(10);\n paint.setColor(0x3f45bf12);\n canvas->drawLine(origin, normal, paint);\n }\n}",
+ "width": 256,
+ "height": 160,
+ "hash": "cbe7db206ece825aa3b9b7c3256aeaf0",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::setLength"
+},
+ "SkPoint_setLength_2": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n const SkPoint points[] = { { 60, -110 }, { 90, 10 }, { 120, -110 }, { 180, -50 } };\n const SkPoint origin = {0, 0};\n canvas->translate(30, 140);\n for (auto point : points) {\n paint.setStrokeWidth(1);\n paint.setColor(SK_ColorBLACK);\n canvas->drawLine(origin, point, paint);\n SkVector normal;\n normal.setLength(point.fX, point.fY, 100);\n paint.setStrokeWidth(10);\n paint.setColor(0x3fbf4512);\n canvas->drawLine(origin, normal, paint);\n }\n}",
+ "width": 256,
+ "height": 160,
+ "hash": "3cc0662b6fbbee1fe3442a0acfece22c",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::setLength_2"
+},
+ "SkPoint_setNormalize": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n const SkPoint points[] = { { 60, -110 }, { 90, 10 }, { 120, -110 }, { 180, -50 } };\n const SkPoint origin = {0, 0};\n canvas->translate(30, 140);\n for (auto point : points) {\n paint.setStrokeWidth(1);\n paint.setColor(SK_ColorBLACK);\n canvas->drawLine(origin, point, paint);\n SkVector normal;\n normal.setNormalize(point.fX, point.fY);\n normal *= 100;\n paint.setStrokeWidth(10);\n paint.setColor(0x3f4512bf);\n canvas->drawLine(origin, normal, paint);\n }\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "3e4f147d143a388802484bf0d26534c2",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::setNormalize"
+},
+ "SkPoint_subtract_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n SkPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 },\n { 6, 4 }, { 7, 5 }, { 5, 7 },\n { 4, 6 }, { 3, 7 }, { 1, 5 },\n { 2, 4 }, { 1, 3 }, { 3, 1 } };\n canvas->scale(30, 15);\n paint.setStyle(SkPaint::kStroke_Style);\n canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);\n points[1] += points[0] - points[2];\n points[2] -= points[3] - points[5];\n paint.setColor(SK_ColorRED);\n canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "b6c4943ecd0b2dccf9d220b8944009e0",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::operator-(const SkPoint& a, const SkPoint& b)"
+},
+ "SkPoint_subtractfrom_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n SkPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 },\n { 6, 4 }, { 7, 5 }, { 5, 7 },\n { 4, 6 }, { 3, 7 }, { 1, 5 },\n { 2, 4 }, { 1, 3 }, { 3, 1 } };\n canvas->scale(30, 15);\n paint.setStyle(SkPaint::kStroke_Style);\n canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);\n points[1] -= {1, 1};\n points[2] -= {-1, -1};\n paint.setColor(SK_ColorRED);\n canvas->drawPoints(SkCanvas::kPolygon_PointMode, SK_ARRAY_COUNT(points), points, paint);\n}",
+ "width": 256,
+ "height": 128,
+ "hash": "86c0399704d8dff4091bf87b8d87d40b",
+ "file": "SkPoint_Reference",
+ "name": "SkPoint::operator-=(const SkVector& v)"
+},
+ "SkSurface_BackendHandleAccess": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setTextSize(32);\n GrContext* context = canvas->getGrContext();\n if (!context) {\n canvas->drawString(\"GPU only!\", 20, 40, paint);\n return;\n }\n sk_sp<SkSurface> gpuSurface = SkSurface::MakeRenderTarget(\n context, SkBudgeted::kYes, SkImageInfo::MakeN32Premul(10, 10));\n int y = 20;\n SkString str;\n paint.setTextSize(16);\n for (auto access : { SkSurface::kFlushRead_BackendHandleAccess, \n SkSurface::kFlushWrite_BackendHandleAccess,\n SkSurface::kDiscardWrite_BackendHandleAccess } ) {\n sk_sp<SkImage> image(gpuSurface->makeImageSnapshot());\n str.printf(\"uniqueID=%d\", image->uniqueID());\n canvas->drawString(str, 20, y += 20, paint);\n GrBackendObject backendObject = gpuSurface->getTextureHandle(access);\n str.printf(\"backendObject %c= 0\", backendObject != 0 ? '!' : '=');\n canvas->drawString(str, 20, y += 20, paint);\n }\n sk_sp<SkImage> image(gpuSurface->makeImageSnapshot());\n str.printf(\"final image uniqueID=%d\", image->uniqueID());\n canvas->drawString(str, 20, y += 20, paint);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "260a5ba014b00eeb5a74b3c6b8d31be4",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::BackendHandleAccess"
+},
+ "SkSurface_MakeRenderTarget": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setTextSize(32);\n GrContext* context = canvas->getGrContext();\n if (!context) {\n canvas->drawString(\"GPU only!\", 20, 40, paint);\n return;\n }\n SkImageInfo info = SkImageInfo::MakeN32(256, 64, kOpaque_SkAlphaType);\n for (auto surfaceOrigin : { kTopLeft_GrSurfaceOrigin, kBottomLeft_GrSurfaceOrigin } ) {\n auto gpuSurface(SkSurface::MakeRenderTarget(context, SkBudgeted::kNo, info, 0,\n surfaceOrigin, nullptr));\n auto surfaceCanvas = gpuSurface->getCanvas();\n surfaceCanvas->clear(SK_ColorWHITE);\n surfaceCanvas->drawString(\"GPU rocks!\", 20, 40, paint);\n sk_sp<SkImage> image(gpuSurface->makeImageSnapshot());\n canvas->drawImage(image, 0, 0);\n canvas->translate(0, 128);\n }\n}",
+ "width": 256,
+ "height": 64,
+ "hash": "67b6609471a3f1ed0f4b1657004cdecb",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::MakeRenderTarget"
+},
+ "SkSurface_MakeRenderTarget_2": {
+ "code": "void draw(SkCanvas* canvas) {\n auto test_draw = [](SkCanvas* surfaceCanvas) -> void {\n SkPaint paint;\n paint.setAntiAlias(true);\n paint.setLCDRenderText(true);\n paint.setColor(0xFFBBBBBB);\n surfaceCanvas->drawRect(SkRect::MakeWH(128, 64), paint);\n paint.setColor(SK_ColorWHITE);\n paint.setTextSize(32);\n surfaceCanvas->drawString(\"Pest\", 0, 25, paint);\n };\n GrContext* context = canvas->getGrContext();\n SkImageInfo info = SkImageInfo::MakeN32(128, 64, kOpaque_SkAlphaType);\n SkAutoTMalloc<SkPMColor> storage(info.computeMinByteSize());\n SkBitmap bitmap;\n bitmap.installPixels(info, storage.get(), info.minRowBytes());\n int y = 0;\n for (auto geometry : { kRGB_H_SkPixelGeometry, kBGR_H_SkPixelGeometry,\n kRGB_V_SkPixelGeometry, kBGR_V_SkPixelGeometry } ) {\n SkSurfaceProps props(0, geometry);\n std::unique_ptr<SkCanvas> offscreen = SkCanvas::MakeRasterDirect(info, storage.get(),\n info.minRowBytes(), &props);\n sk_sp<SkSurface> surface = context ? SkSurface::MakeRenderTarget(\n context, SkBudgeted::kNo, info, 0, &props) : SkSurface::MakeRaster(info, &props);\n test_draw(surface->getCanvas());\n surface->draw(canvas, 0, y, nullptr);\n surface->draw(offscreen.get(), 0, 0, nullptr);\n SkAutoCanvasRestore acr(canvas, true);\n canvas->scale(8, 8);\n canvas->drawBitmap(bitmap, 12, y / 8);\n y += 64;\n }\n}\n",
+ "width": 256,
+ "height": 256,
+ "hash": "4473daad1b11784a9869431af72c93e0",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::MakeRenderTarget_2"
+},
+ "SkSurface_MakeRenderTarget_3": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setTextSize(32);\n GrContext* context = canvas->getGrContext();\n if (!context) {\n canvas->drawString(\"GPU only!\", 20, 40, paint);\n return;\n }\n SkImageInfo info = SkImageInfo::MakeN32(256, 64, kOpaque_SkAlphaType);\n auto gpuSurface(SkSurface::MakeRenderTarget(context, SkBudgeted::kNo, info));\n auto surfaceCanvas = gpuSurface->getCanvas();\n surfaceCanvas->clear(SK_ColorWHITE);\n surfaceCanvas->drawString(\"GPU rocks!\", 20, 40, paint);\n sk_sp<SkImage> image(gpuSurface->makeImageSnapshot());\n canvas->drawImage(image, 0, 0);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "5c7629c15e9ac93f098335e72560fa2e",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::MakeRenderTarget_3"
+},
+ "SkSurface_characterize": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setTextSize(32);\n GrContext* context = canvas->getGrContext();\n if (!context) {\n canvas->drawString(\"GPU only!\", 20, 40, paint);\n return;\n }\n sk_sp<SkSurface> gpuSurface = SkSurface::MakeRenderTarget(\n context, SkBudgeted::kYes, SkImageInfo::MakeN32Premul(64, 64));\n SkSurfaceCharacterization characterization;\n if (!gpuSurface->characterize(&characterization)) {\n canvas->drawString(\"characterization unsupported\", 20, 40, paint);\n return;\n }\n // start of threadable work \n SkDeferredDisplayListRecorder recorder(characterization);\n SkCanvas* subCanvas = recorder.getCanvas();\n subCanvas->clear(SK_ColorGREEN);\n std::unique_ptr<SkDeferredDisplayList> displayList = recorder.detach();\n // end of threadable work\n gpuSurface->draw(displayList.get());\n sk_sp<SkImage> img = gpuSurface->makeImageSnapshot();\n canvas->drawImage(std::move(img), 0, 0);\n}",
+ "width": 256,
+ "height": 64,
+ "hash": "3df4e2fc63483a3fa19589b5388080bc",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::characterize()"
+},
+ "SkSurface_draw": {
+ "code": "void draw(SkCanvas* canvas) {\n sk_sp<SkSurface> big(SkSurface::MakeRasterN32Premul(64, 64));\n sk_sp<SkSurface> lil(big->makeSurface(SkImageInfo::MakeN32(32, 32, kPremul_SkAlphaType)));\n big->getCanvas()->clear(SK_ColorRED);\n lil->getCanvas()->clear(SK_ColorBLACK);\n lil->draw(big->getCanvas(), 16, 16, nullptr);\n SkPixmap pixmap;\n if (big->peekPixels(&pixmap)) {\n SkBitmap bigBits;\n bigBits.installPixels(pixmap);\n canvas->drawBitmap(bigBits, 0, 0);\n }\n}",
+ "width": 256,
+ "height": 64,
+ "hash": "0de693f4d8dd898a60be8cfba23952be",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::draw()"
+},
+ "SkSurface_draw_2": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setTextSize(16);\n sk_sp<SkSurface> gpuSurface = SkSurface::MakeRasterN32Premul(64, 64);\n SkSurfaceCharacterization characterization;\n if (!gpuSurface->characterize(&characterization)) {\n canvas->drawString(\"characterization unsupported\", 20, 40, paint);\n return;\n }\n // start of threadable work \n SkDeferredDisplayListRecorder recorder(characterization);\n SkCanvas* subCanvas = recorder.getCanvas();\n subCanvas->clear(SK_ColorGREEN);\n std::unique_ptr<SkDeferredDisplayList> displayList = recorder.detach();\n // end of threadable work\n gpuSurface->draw(displayList.get());\n sk_sp<SkImage> img = gpuSurface->makeImageSnapshot();\n canvas->drawImage(std::move(img), 0, 0);\n}",
+ "width": 256,
+ "height": 64,
+ "hash": "3dfa7496268dfb2c7465cda5da39dfbd",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::draw_2"
+},
+ "SkSurface_getCanvas": {
+ "code": "void draw(SkCanvas* canvas) {\n sk_sp<SkSurface> surface(SkSurface::MakeRasterN32Premul(64, 64));\n SkCanvas* surfaceCanvas = surface->getCanvas();\n surfaceCanvas->clear(SK_ColorBLUE);\n SkPaint paint;\n paint.setTextSize(40);\n surfaceCanvas->drawString(\"\\xF0\\x9F\\x98\\x81\", 12, 45, paint);\n surface->draw(canvas, 0, 0, nullptr);\n}",
+ "width": 256,
+ "height": 64,
+ "hash": "33d0c5ad5a4810e533ae1010e29f8b75",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::getCanvas"
+},
+ "SkSurface_getRenderTargetHandle": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setTextSize(32);\n GrContext* context = canvas->getGrContext();\n if (!context) {\n canvas->drawString(\"GPU only!\", 20, 40, paint);\n return;\n }\n sk_sp<SkSurface> gpuSurface = SkSurface::MakeRenderTarget(\n context, SkBudgeted::kYes, SkImageInfo::MakeN32Premul(10, 10));\n GrBackendObject backendObject;\n if (gpuSurface->getRenderTargetHandle(&backendObject, \n SkSurface::kFlushRead_BackendHandleAccess)) {\n SkString str;\n str.printf(\"backendObject=%d\", backendObject);\n paint.setTextSize(16);\n canvas->drawString(str, 20, 40, paint);\n }\n}",
+ "width": 256,
+ "height": 64,
+ "hash": "16e848a4405ce08f8393bba13cc3b8bf",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::getRenderTargetHandle"
+},
+ "SkSurface_getTextureHandle": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setTextSize(32);\n GrContext* context = canvas->getGrContext();\n if (!context) {\n canvas->drawString(\"GPU only!\", 20, 40, paint);\n return;\n }\n sk_sp<SkSurface> gpuSurface = SkSurface::MakeRenderTarget(\n context, SkBudgeted::kYes, SkImageInfo::MakeN32Premul(10, 10));\n GrBackendObject backendObject = gpuSurface->getTextureHandle(\n SkSurface::kFlushRead_BackendHandleAccess);\n if (backendObject) {\n SkString str;\n str.printf(\"backendObject=%08x\", backendObject);\n paint.setTextSize(16);\n canvas->drawString(str, 20, 40, paint);\n }\n}",
+ "width": 256,
+ "height": 64,
+ "hash": "4b5720038daaf65ba1ba546e678ddd6e",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::getTextureHandle"
+},
+ "SkSurface_makeImageSnapshot": {
+ "code": "void draw(SkCanvas* canvas) {\n sk_sp<SkSurface> big(SkSurface::MakeRasterN32Premul(64, 64));\n sk_sp<SkSurface> lil(big->makeSurface(SkImageInfo::MakeN32(32, 32, kPremul_SkAlphaType)));\n big->getCanvas()->clear(SK_ColorRED);\n lil->getCanvas()->clear(SK_ColorBLACK);\n sk_sp<SkImage> early(big->makeImageSnapshot());\n lil->draw(big->getCanvas(), 16, 16, nullptr);\n sk_sp<SkImage> later(big->makeImageSnapshot());\n canvas->drawImage(early, 0, 0);\n canvas->drawImage(later, 128, 0);\n}",
+ "width": 256,
+ "height": 64,
+ "hash": "46f1fa0d95e590a64bed0140407ce5f7",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::makeImageSnapshot"
+},
+ "SkSurface_makeSurface": {
+ "code": "void draw(SkCanvas* canvas) {\n sk_sp<SkSurface> big(SkSurface::MakeRasterN32Premul(64, 64));\n sk_sp<SkSurface> lil(big->makeSurface(SkImageInfo::MakeN32(32, 32, kPremul_SkAlphaType)));\n big->getCanvas()->clear(SK_ColorRED);\n lil->getCanvas()->clear(SK_ColorBLACK);\n SkPixmap pixmap;\n if (big->peekPixels(&pixmap)) {\n SkBitmap bigBits;\n bigBits.installPixels(pixmap);\n canvas->drawBitmap(bigBits, 0, 0);\n }\n if (lil->peekPixels(&pixmap)) {\n SkBitmap lilBits;\n lilBits.installPixels(pixmap);\n canvas->drawBitmap(lilBits, 64, 64);\n }\n}",
+ "width": 256,
+ "height": 96,
+ "hash": "a9889b519a26896b900da0444e423c61",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::makeSurface"
+},
+ "SkSurface_peekPixels": {
+ "code": "void draw(SkCanvas* canvas) {\n sk_sp<SkSurface> surf(SkSurface::MakeRasterN32Premul(64, 64));\n auto surfCanvas = surf->getCanvas();\n surfCanvas->clear(SK_ColorRED);\n SkPaint paint;\n paint.setTextSize(40);\n surfCanvas->drawString(\"&\", 16, 48, paint);\n SkPixmap pixmap;\n if (surf->peekPixels(&pixmap)) {\n SkBitmap surfBits;\n surfBits.installPixels(pixmap);\n canvas->drawBitmap(surfBits, 0, 0);\n }\n}",
+ "width": 256,
+ "height": 64,
+ "hash": "8c6184f22cfe068f021704cf92a147a1",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::peekPixels"
+},
+ "SkSurface_readPixels": {
+ "code": "void draw(SkCanvas* canvas) {\n sk_sp<SkSurface> surf(SkSurface::MakeRasterN32Premul(64, 64));\n auto surfCanvas = surf->getCanvas();\n surfCanvas->clear(SK_ColorRED);\n SkPaint paint;\n paint.setTextSize(40);\n surfCanvas->drawString(\"&\", 0, 32, paint);\n std::vector<SkPMColor> storage;\n storage.resize(surf->width() * surf->height());\n SkPixmap pixmap(SkImageInfo::MakeN32Premul(32, 32), &storage.front(),\n surf->width() * sizeof(storage[0]));\n if (surf->readPixels(pixmap, 0, 0)) {\n SkBitmap surfBits;\n surfBits.installPixels(pixmap);\n canvas->drawBitmap(surfBits, 0, 0);\n }\n}",
+ "width": 256,
+ "height": 32,
+ "hash": "9f454fb93bca6482598d198b4121f0a6",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::readPixels"
+},
+ "SkSurface_readPixels_2": {
+ "code": "void draw(SkCanvas* canvas) {\n sk_sp<SkSurface> surf(SkSurface::MakeRasterN32Premul(64, 64));\n auto surfCanvas = surf->getCanvas();\n surfCanvas->clear(SK_ColorRED);\n SkPaint paint;\n surfCanvas->drawOval({4, 8, 58, 54}, paint);\n SkImageInfo info = SkImageInfo::Make(64, 64, kBGRA_8888_SkColorType, kPremul_SkAlphaType);\n sk_sp<SkData> data(SkData::MakeUninitialized(info.minRowBytes() * info.height()));\n sk_bzero(data->writable_data(), info.minRowBytes() * info.height());\n for (int x : { 32, -32 } ) {\n for (int y : { 32, -32 } ) {\n surf->readPixels(info, data->writable_data(), info.minRowBytes(), x, y);\n } \n }\n sk_sp<SkImage> image = SkImage::MakeRasterData(info, data, info.minRowBytes());\n canvas->drawImage(image, 0, 0);\n}",
+ "width": 256,
+ "height": 64,
+ "hash": "d141d6c662d201d191fb1eea26d014fd",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::readPixels_2"
+},
+ "SkSurface_readPixels_3": {
+ "code": "void draw(SkCanvas* canvas) {\n sk_sp<SkSurface> surf(SkSurface::MakeRasterN32Premul(64, 64));\n auto surfCanvas = surf->getCanvas();\n surfCanvas->clear(SK_ColorGREEN);\n SkPaint paint;\n surfCanvas->drawOval({2, 10, 58, 54}, paint);\n SkImageInfo info = SkImageInfo::Make(64, 64, kBGRA_8888_SkColorType, kPremul_SkAlphaType);\n SkBitmap bitmap;\n bitmap.setInfo(info);\n bitmap.allocPixels();\n for (int x : { 32, -32 } ) {\n for (int y : { 32, -32 } ) {\n surf->readPixels(bitmap, x, y);\n } \n }\n canvas->drawBitmap(bitmap, 0, 0);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "dcbd4af9151820f63de45a35f3a8d110",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::readPixels_3"
+},
+ "SkSurface_wait": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setTextSize(32);\n GrContext* context = canvas->getGrContext();\n if (!context) {\n canvas->drawString(\"GPU only!\", 20, 40, paint);\n return;\n }\n GrBackendSemaphore semaphore;\n sk_sp<SkSurface> surface = SkSurface::MakeRenderTarget(\n context, SkBudgeted::kYes, SkImageInfo::MakeN32Premul(64, 64));\n surface->flushAndSignalSemaphores(1, &semaphore);\n sk_sp<SkImage> image = surface->makeImageSnapshot();\n GrBackendObject backendImage = image->getTextureHandle(false); // unused\n SkASSERT(backendImage);\n const SkImageInfo childImageInfo = SkImageInfo::Make(64, 64,\n kRGBA_8888_SkColorType, kPremul_SkAlphaType);\n sk_sp<SkSurface> childSurface(SkSurface::MakeRenderTarget(context, SkBudgeted::kNo,\n childImageInfo, 0, kTopLeft_GrSurfaceOrigin, nullptr));\n GrBackendTexture backendTexture;\n sk_sp<SkImage> childImage = SkImage::MakeFromTexture(context,\n backendTexture, // undefined\n kTopLeft_GrSurfaceOrigin, kPremul_SkAlphaType, nullptr);\n SkCanvas* childCanvas = childSurface->getCanvas();\n childCanvas->clear(SK_ColorRED);\n childSurface->wait(1, &semaphore);\n childCanvas->drawImage(childImage, 32, 0);\n childSurface->draw(canvas, 0, 0, nullptr);\n}",
+ "width": 256,
+ "height": 64,
+ "hash": "c9033080af68efc0f270d748f1c0e011",
+ "file": "SkSurface_Reference",
+ "name": "SkSurface::wait()"
}
}
var canvas
diff --git a/site/user/api/undocumented.md b/site/user/api/undocumented.md
index 7ac1e12d33..13c8e10cd2 100644
--- a/site/user/api/undocumented.md
+++ b/site/user/api/undocumented.md
@@ -10,9 +10,8 @@ undocumented
<a name="SkDocument_beginPage"></a>
## beginPage
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-SkCanvas* beginPage(SkScalar width, SkScalar height,
- const SkRect* content = NULL)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkCanvas* beginPage(SkScalar width, SkScalar height, const SkRect* content = NULL)
</pre>
---
@@ -23,14 +22,73 @@ SkCanvas* beginPage(SkScalar width, SkScalar height,
## <a name="Arct"></a> Arct
+# <a name="Deferred_Display_List"></a> Deferred Display List
+
+# <a name="SkDeferredDisplayList"></a> Class SkDeferredDisplayList
+
+## <a name="Recorder"></a> Recorder
+
+# <a name="SkDeferredDisplayListRecorder"></a> Class SkDeferredDisplayListRecorder
+
# <a name="Size"></a> Size
# <a name="SkSize"></a> Struct SkSize
+# <a name="Image_Color_Type"></a> Image Color Type
+
+## <a name="Native_Color_Type"></a> Native Color Type
+
+## <a name="SkColorType"></a> Enum SkColorType
+
+### Constants
+
+<table>
+ <tr>
+ <td><a name="kUnknown_SkColorType"> <code><strong>kUnknown_SkColorType </strong></code> </a></td><td>0</td><td></td>
+ </tr>
+ <tr>
+ <td><a name="kAlpha_8_SkColorType"> <code><strong>kAlpha_8_SkColorType </strong></code> </a></td><td>1</td><td></td>
+ </tr>
+ <tr>
+ <td><a name="kRGB_565_SkColorType"> <code><strong>kRGB_565_SkColorType </strong></code> </a></td><td>2</td><td></td>
+ </tr>
+ <tr>
+ <td><a name="kARGB_4444_SkColorType"> <code><strong>kARGB_4444_SkColorType </strong></code> </a></td><td>3</td><td></td>
+ </tr>
+ <tr>
+ <td><a name="kRGBA_8888_SkColorType"> <code><strong>kRGBA_8888_SkColorType </strong></code> </a></td><td>4</td><td></td>
+ </tr>
+ <tr>
+ <td><a name="kBGRA_8888_SkColorType"> <code><strong>kBGRA_8888_SkColorType </strong></code> </a></td><td>5</td><td></td>
+ </tr>
+ <tr>
+ <td><a name="kIndex_8_SkColorType"> <code><strong>kIndex_8_SkColorType </strong></code> </a></td><td>6</td><td></td>
+ </tr>
+ <tr>
+ <td><a name="kGray_8_SkColorType"> <code><strong>kGray_8_SkColorType </strong></code> </a></td><td>7</td><td></td>
+ </tr>
+ <tr>
+ <td><a name="kRGBA_F16_SkColorType"> <code><strong>kRGBA_F16_SkColorType </strong></code> </a></td><td>8</td><td></td>
+ </tr>
+</table>
+
+### Constants
+
+<table>
+ <tr>
+ <td><a name="kN32_SkColorType"> <code><strong>kN32_SkColorType </strong></code> </a></td><td>4</td><td></td>
+ </tr>
+
+</table>
+
# <a name="Arc"></a> Arc
# <a name="Line"></a> Line
+# <a name="Region"></a> Region
+
+# <a name="SkRegion"></a> Class SkRegion
+
# <a name="Mip_Map"></a> Mip Map
# <a name="Debugging"></a> Debugging
@@ -38,43 +96,20 @@ SkCanvas* beginPage(SkScalar width, SkScalar height,
<a name="SkDebugf"></a>
## SkDebugf
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SK_API void SkDebugf(const char format[], ...)
</pre>
---
-# <a name="Region"></a> Region
-
-# <a name="SkRegion"></a> Class SkRegion
-
# <a name="Device"></a> Device
# <a name="SkBaseDevice"></a> Class SkBaseDevice
-# <a name="Vector"></a> Vector
-
-# <a name="SkVector"></a> Struct SkVector
-
# <a name="Patch"></a> Patch
# <a name="Curve"></a> Curve
-# <a name="Point"></a> Point
-
-# <a name="SkPoint"></a> Struct SkPoint
-
-<a name="SkPoint_equalsWithinTolerance"></a>
-## equalsWithinTolerance
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool equalsWithinTolerance(const SkPoint& p) const
-</pre>
-
----
-
-## <a name="Array"></a> Array
-
# <a name="Typeface"></a> Typeface
# <a name="SkTypeface"></a> Class SkTypeface
@@ -91,10 +126,16 @@ bool equalsWithinTolerance(const SkPoint& p) const
# <a name="SkISize"></a> Struct SkISize
+# <a name="Left_Side_Bearing"></a> Left Side Bearing
+
# <a name="Alias"></a> Alias
# <a name="Anti-alias"></a> Anti-alias
+# <a name="Backend_Semaphore"></a> Backend Semaphore
+
+# <a name="GrBackendSemaphore"></a> Class GrBackendSemaphore
+
# <a name="BBH_Factory"></a> BBH Factory
# <a name="SkBBHFactory"></a> Class SkBBHFactory
@@ -120,6 +161,139 @@ bool equalsWithinTolerance(const SkPoint& p) const
# <a name="Circle"></a> Circle
+# <a name="Image_Info"></a> Image Info
+
+# <a name="SkImageInfo"></a> Struct SkImageInfo
+
+<a name="SkImageInfo_empty_constructor"></a>
+## SkImageInfo
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkImageInfo()
+</pre>
+
+---
+
+<a name="SkImageInfo_MakeN32Premul"></a>
+## MakeN32Premul
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static SkImageInfo MakeN32Premul(int width, int height, sk_sp&lt;SkColorSpace&gt; cs = nullptr)
+</pre>
+
+---
+
+<a name="SkImageInfo_makeColorSpace"></a>
+## makeColorSpace
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkImageInfo makeColorSpace(sk_sp&lt;SkColorSpace&gt; cs) const
+</pre>
+
+---
+
+<a name="SkImageInfo_minRowBytes"></a>
+## minRowBytes
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+size_t minRowBytes() const
+</pre>
+
+---
+
+<a name="SkImageInfo_isOpaque"></a>
+## isOpaque
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool isOpaque() const
+</pre>
+
+---
+
+<a name="SkImageInfo_bytesPerPixel"></a>
+## bytesPerPixel
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+int bytesPerPixel() const
+</pre>
+
+---
+
+<a name="SkImageInfo_height"></a>
+## height
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+int height() const
+</pre>
+
+---
+
+<a name="SkImageInfo_width"></a>
+## width
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+int width() const
+</pre>
+
+---
+
+<a name="SkImageInfo_colorType"></a>
+## colorType
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkColorType colorType() const
+</pre>
+
+---
+
+<a name="SkImageInfo_alphaType"></a>
+## alphaType
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkAlphaType alphaType() const
+</pre>
+
+---
+
+<a name="SkImageInfo_colorSpace"></a>
+## colorSpace
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+SkColorSpace* colorSpace() const
+</pre>
+
+---
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+bool isOpaque() const
+</pre>
+
+---
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+size_t minRowBytes() const
+</pre>
+
+---
+
+<a name="SkImageInfo_computeByteSize"></a>
+## computeByteSize
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+size_t computeByteSize(size_t rowBytes) const
+</pre>
+
+---
+
+<a name="SkImageInfo_validate"></a>
+## validate
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+void validate() const
+</pre>
+
+---
+
# <a name="Clip_Op"></a> Clip Op
## <a name="SkClipOp"></a> Enum SkClipOp
@@ -141,7 +315,7 @@ bool equalsWithinTolerance(const SkPoint& p) const
<a name="SkColorGetA"></a>
## SkColorGetA
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int SkColorGetA(color)
</pre>
@@ -150,7 +324,7 @@ int SkColorGetA(color)
<a name="SkColorGetR"></a>
## SkColorGetR
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int SkColorGetR(color)
</pre>
@@ -159,7 +333,7 @@ int SkColorGetR(color)
<a name="SkColorGetG"></a>
## SkColorGetG
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int SkColorGetG(color)
</pre>
@@ -168,7 +342,7 @@ int SkColorGetG(color)
<a name="SkColorGetB"></a>
## SkColorGetB
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int SkColorGetB(color)
</pre>
@@ -177,7 +351,7 @@ int SkColorGetB(color)
<a name="SkColorSetARGB"></a>
## SkColorSetARGB
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int SkColorSetARGB(a, r, g, b)
</pre>
@@ -226,7 +400,7 @@ int SkColorSetARGB(a, r, g, b)
<a name="SkColorFilter_toString"></a>
## toString
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void toString(SkString* str) const
</pre>
@@ -239,7 +413,7 @@ void toString(SkString* str) const
<a name="SkColorSpace_MakeSRGBLinear"></a>
## MakeSRGBLinear
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static sk_sp&lt;SkColorSpace&gt; MakeSRGBLinear()
</pre>
@@ -264,20 +438,25 @@ static sk_sp&lt;SkColorSpace&gt; MakeSRGBLinear()
<a name="SkCreateColorSpaceXformCanvas"></a>
## SkCreateColorSpaceXformCanvas
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-std::unique_ptr&lt;SkCanvas&gt; SK_API
- SkCreateColorSpaceXformCanvas(SkCanvas* target,
- sk_sp&lt;SkColorSpace&gt; targetCS)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+std::unique_ptr&lt;SkCanvas&gt; SK_API SkCreateColorSpaceXformCanvas(SkCanvas* target,
+ sk_sp&lt;SkColorSpace&gt; targetCS)
</pre>
---
# <a name="Core_Graphics"></a> Core Graphics
+# <a name="Texture"></a> Texture
+
+# <a name="GrBackendTexture"></a> Class GrBackendTexture
+
# <a name="Core_Text"></a> Core Text
# <a name="Data"></a> Data
+# <a name="SkData"></a> Class SkData
+
# <a name="Draw_Filter"></a> Draw Filter
# <a name="SkDrawFilter"></a> Class SkDrawFilter
@@ -295,7 +474,7 @@ std::unique_ptr&lt;SkCanvas&gt; SK_API
<a name="SkDrawable_draw"></a>
## draw
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void draw(SkCanvas*, const SkMatrix* = NULL)
</pre>
@@ -310,11 +489,9 @@ void draw(SkCanvas*, const SkMatrix* = NULL)
<a name="SkRasterHandleAllocator_MakeCanvas"></a>
## MakeCanvas
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-static std::unique_ptr&lt;SkCanvas&gt;
- MakeCanvas(std::unique_ptr&lt;SkRasterHandleAllocator&gt;,
- const SkImageInfo&,
- const Rec* rec = nullptr)
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static std::unique_ptr&lt;SkCanvas&gt; MakeCanvas(std::unique_ptr&lt;SkRasterHandleAllocator&gt;,
+ const SkImageInfo&, const Rec* rec = nullptr)
</pre>
---
@@ -349,8 +526,6 @@ static std::unique_ptr&lt;SkCanvas&gt;
## <a name="BiCubic"></a> BiCubic
-# <a name="Left_Side_Bearing"></a> Left Side Bearing
-
# <a name="Font"></a> Font
## <a name="Advance"></a> Advance
@@ -363,12 +538,14 @@ static std::unique_ptr&lt;SkCanvas&gt;
# <a name="GPU_Context"></a> GPU Context
+## <a name="Resource_Cache_Limits"></a> Resource Cache Limits
+
# <a name="GrContext"></a> Class GrContext
<a name="GrContext_flush"></a>
## flush
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void flush()
</pre>
@@ -376,9 +553,7 @@ void flush()
# <a name="GPU_Surface"></a> GPU Surface
-# <a name="Image"></a> Image
-
-## <a name="Alpha_Type"></a> Alpha Type
+# <a name="Image_Alpha_Type"></a> Image Alpha Type
## <a name="SkAlphaType"></a> Enum SkAlphaType
@@ -400,235 +575,6 @@ void flush()
</table>
-## <a name="Color_Type"></a> Color Type
-
-## <a name="SkColorType"></a> Enum SkColorType
-
-### Constants
-
-<table>
- <tr>
- <td><a name="kUnknown_SkColorType"> <code><strong>kUnknown_SkColorType </strong></code> </a></td><td>0</td><td></td>
- </tr>
- <tr>
- <td><a name="kAlpha_8_SkColorType"> <code><strong>kAlpha_8_SkColorType </strong></code> </a></td><td>1</td><td></td>
- </tr>
- <tr>
- <td><a name="kRGB_565_SkColorType"> <code><strong>kRGB_565_SkColorType </strong></code> </a></td><td>2</td><td></td>
- </tr>
- <tr>
- <td><a name="kARGB_4444_SkColorType"> <code><strong>kARGB_4444_SkColorType </strong></code> </a></td><td>3</td><td></td>
- </tr>
- <tr>
- <td><a name="kRGBA_8888_SkColorType"> <code><strong>kRGBA_8888_SkColorType </strong></code> </a></td><td>4</td><td></td>
- </tr>
- <tr>
- <td><a name="kBGRA_8888_SkColorType"> <code><strong>kBGRA_8888_SkColorType </strong></code> </a></td><td>5</td><td></td>
- </tr>
- <tr>
- <td><a name="kIndex_8_SkColorType"> <code><strong>kIndex_8_SkColorType </strong></code> </a></td><td>6</td><td></td>
- </tr>
- <tr>
- <td><a name="kGray_8_SkColorType"> <code><strong>kGray_8_SkColorType </strong></code> </a></td><td>7</td><td></td>
- </tr>
- <tr>
- <td><a name="kRGBA_F16_SkColorType"> <code><strong>kRGBA_F16_SkColorType </strong></code> </a></td><td>8</td><td></td>
- </tr>
-</table>
-
-### Constants
-
-<table>
- <tr>
- <td><a name="kN32_SkColorType"> <code><strong>kN32_SkColorType </strong></code> </a></td><td>4</td><td></td>
- </tr>
-
-</table>
-
-## <a name="Info"></a> Info
-
-# <a name="SkImageInfo"></a> Struct SkImageInfo
-
-<a name="SkImageInfo_empty_constructor"></a>
-## SkImageInfo
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-SkImageInfo()
-</pre>
-
----
-
-<a name="SkImageInfo_MakeN32Premul"></a>
-## MakeN32Premul
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-static SkImageInfo MakeN32Premul(int width, int height,
- sk_sp&lt;SkColorSpace&gt; cs = nullptr)
-</pre>
-
----
-
-<a name="SkImageInfo_makeColorSpace"></a>
-## makeColorSpace
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-SkImageInfo makeColorSpace(sk_sp&lt;SkColorSpace&gt; cs) const
-</pre>
-
----
-
-<a name="SkImageInfo_minRowBytes"></a>
-## minRowBytes
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-size_t minRowBytes() const
-</pre>
-
----
-
-<a name="SkImageInfo_isOpaque"></a>
-## isOpaque
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool isOpaque() const
-</pre>
-
----
-
-<a name="SkImageInfo_bytesPerPixel"></a>
-## bytesPerPixel
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-int bytesPerPixel() const
-</pre>
-
----
-
-<a name="SkImageInfo_height"></a>
-## height
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-int height() const
-</pre>
-
----
-
-<a name="SkImageInfo_width"></a>
-## width
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-int width() const
-</pre>
-
----
-
-<a name="SkImageInfo_colorType"></a>
-## colorType
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-SkColorType colorType() const
-</pre>
-
----
-
-<a name="SkImageInfo_alphaType"></a>
-## alphaType
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-SkAlphaType alphaType() const
-</pre>
-
----
-
-<a name="SkImageInfo_colorSpace"></a>
-## colorSpace
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-SkColorSpace* colorSpace() const
-</pre>
-
----
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool isOpaque() const
-</pre>
-
----
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-size_t minRowBytes() const
-</pre>
-
----
-
-<a name="SkImageInfo_computeByteSize"></a>
-## computeByteSize
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-size_t computeByteSize(size_t rowBytes) const
-</pre>
-
----
-
-<a name="SkImageInfo_validate"></a>
-## validate
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void validate() const
-</pre>
-
----
-
-# <a name="SkImage"></a> Class SkImage
-
-<a name="SkImage_makeShader"></a>
-## makeShader
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-sk_sp&lt;SkShader&gt; makeShader(SkShader::TileMode, SkShader::TileMode,
- const SkMatrix* localMatrix = nullptr) const
-</pre>
-
----
-
-<a name="SkImage_MakeRasterCopy"></a>
-## MakeRasterCopy
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-static sk_sp&lt;SkImage&gt; MakeRasterCopy(const SkPixmap&)
-</pre>
-
----
-
-<a name="SkImage_readPixels"></a>
-## readPixels
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool readPixels(const SkPixmap& dst, int srcX, int srcY,
- CachingHint = kAllow_CachingHint) const
-</pre>
-
----
-
-<a name="SkImage_scalePixels"></a>
-## scalePixels
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool scalePixels(const SkPixmap& dst, SkFilterQuality,
- CachingHint = kAllow_CachingHint) const
-</pre>
-
----
-
-<a name="SkImage_peekPixels"></a>
-## peekPixels
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool peekPixels(SkPixmap* pixmap) const
-</pre>
-
----
-
# <a name="Image_Filter"></a> Image Filter
## <a name="Scaling"></a> Scaling
@@ -638,7 +584,7 @@ bool peekPixels(SkPixmap* pixmap) const
<a name="SkImageFilter_toString"></a>
## toString
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void toString(SkString* str) const
</pre>
@@ -653,7 +599,7 @@ void toString(SkString* str) const
<a name="SkMallocPixelRef_MakeZeroed"></a>
## MakeZeroed
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static sk_sp&lt;SkPixelRef&gt; MakeZeroed(const SkImageInfo&, size_t rowBytes)
</pre>
@@ -662,7 +608,7 @@ static sk_sp&lt;SkPixelRef&gt; MakeZeroed(const SkImageInfo&, size_t rowBytes)
<a name="SkMallocPixelRef_MakeAllocate"></a>
## MakeAllocate
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static sk_sp&lt;SkPixelRef&gt; MakeAllocate(const SkImageInfo&, size_t rowBytes)
</pre>
@@ -704,9 +650,8 @@ k <tr>
<a name="SkMaskFilter_filterMask"></a>
## filterMask
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&,
- SkIPoint* margin) const
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&, SkIPoint* margin) const
</pre>
---
@@ -714,7 +659,7 @@ virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&,
<a name="SkMaskFilter_toString"></a>
## toString
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void toString(SkString* str) const
</pre>
@@ -725,7 +670,7 @@ void toString(SkString* str) const
<a name="sk_64_isS32"></a>
## sk_64_isS32
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
static inline bool sk_64_isS32(int64_t value)
</pre>
@@ -734,7 +679,7 @@ static inline bool sk_64_isS32(int64_t value)
<a name="SkIntToScalar"></a>
## SkIntToScalar
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkIntToScalar(x)
</pre>
@@ -743,7 +688,7 @@ SkIntToScalar(x)
<a name="SkScalarRoundToInt"></a>
## SkScalarRoundToInt
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalarRoundToInt(x)
</pre>
@@ -752,7 +697,7 @@ SkScalarRoundToInt(x)
<a name="SkScalarFloorToInt"></a>
## SkScalarFloorToInt
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalarFloorToInt(x)
</pre>
@@ -761,7 +706,7 @@ SkScalarFloorToInt(x)
<a name="SkScalarCeilToInt"></a>
## SkScalarCeilToInt
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalarCeilToInt(x)
</pre>
@@ -770,7 +715,7 @@ SkScalarCeilToInt(x)
<a name="SkScalarFloorToScalar"></a>
## SkScalarFloorToScalar
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalarFloorToScalar(x)
</pre>
@@ -779,7 +724,7 @@ SkScalarFloorToScalar(x)
<a name="SkScalarCeilToScalar"></a>
## SkScalarCeilToScalar
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalarCeilToScalar(x)
</pre>
@@ -788,7 +733,7 @@ SkScalarCeilToScalar(x)
<a name="SkScalarIsFinite"></a>
## SkScalarIsFinite
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalarIsFinite(x)
</pre>
@@ -797,7 +742,7 @@ SkScalarIsFinite(x)
<a name="SkScalarIsNaN"></a>
## SkScalarIsNaN
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkScalarIsNaN(x)
</pre>
@@ -806,7 +751,7 @@ SkScalarIsNaN(x)
<a name="SkTFitsIn"></a>
## SkTFitsIn
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
template &lt;typename D, typename S&gt; inline bool SkTFitsIn(S s)
</pre>
@@ -886,7 +831,7 @@ template &lt;typename D, typename S&gt; inline bool SkTFitsIn(S s)
<a name="SkPathEffect_toString"></a>
## toString
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void toString(SkString* str) const
</pre>
@@ -899,7 +844,7 @@ void toString(SkString* str) const
<a name="SkPathMeasure_dump"></a>
## dump
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void dump() const
</pre>
@@ -910,7 +855,7 @@ void dump() const
<a name="Op"></a>
## Op
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool SK_API Op(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result)
</pre>
@@ -923,7 +868,7 @@ bool SK_API Op(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result
<a name="SkPicture_playback"></a>
## playback
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
virtual void playback(SkCanvas*, AbortCallback* = nullptr) const = 0
</pre>
@@ -936,7 +881,7 @@ virtual void playback(SkCanvas*, AbortCallback* = nullptr) const = 0
<a name="SkPictureRecorder_beginRecording"></a>
## beginRecording
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
SkCanvas* beginRecording(const SkRect& bounds, SkBBHFactory* bbhFactory = NULL,
uint32_t recordFlags = 0)
</pre>
@@ -954,7 +899,7 @@ SkCanvas* beginRecording(const SkRect& bounds, SkBBHFactory* bbhFactory = NULL,
<a name="SkPixelRef_width"></a>
## width
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int width() const
</pre>
@@ -963,7 +908,7 @@ int width() const
<a name="SkPixelRef_height"></a>
## height
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
int height() const
</pre>
@@ -972,7 +917,7 @@ int height() const
<a name="SkPixelRef_isImmutable"></a>
## isImmutable
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
bool isImmutable() const
</pre>
@@ -981,12 +926,16 @@ bool isImmutable() const
<a name="SkPixelRef_setImmutable"></a>
## setImmutable
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void setImmutable()
</pre>
---
+# <a name="Pixel_Serializer"></a> Pixel Serializer
+
+# <a name="SkPixelSerializer"></a> Class SkPixelSerializer
+
# <a name="Point3"></a> Point3
# <a name="SkPoint3"></a> Struct SkPoint3
@@ -1009,6 +958,10 @@ void setImmutable()
# <a name="sk_sp"></a> Class sk_sp
+# <a name="Render_Target"></a> Render Target
+
+# <a name="GrRenderTarget"></a> Class GrRenderTarget
+
# <a name="Right_Side_Bearing"></a> Right Side Bearing
# <a name="Round_Rect"></a> Round Rect
@@ -1018,7 +971,7 @@ void setImmutable()
<a name="SkRRect_dump"></a>
## dump
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void dump() const
</pre>
@@ -1027,7 +980,7 @@ void dump() const
<a name="SkRRect_dumpHex"></a>
## dumpHex
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
void dumpHex() const
</pre>
@@ -1055,9 +1008,8 @@ void dumpHex() const
<a name="SkShader_MakeBitmapShader"></a>
## MakeBitmapShader
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-static sk_sp&lt;SkShader&gt; MakeBitmapShader(const SkBitmap& src, TileMode tmx,
- TileMode tmy,
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+static sk_sp&lt;SkShader&gt; MakeBitmapShader(const SkBitmap& src, TileMode tmx, TileMode tmy,
const SkMatrix* localMatrix = nullptr)
</pre>
@@ -1073,103 +1025,84 @@ static sk_sp&lt;SkShader&gt; MakeBitmapShader(const SkBitmap& src, TileMode tmx,
# <a name="Supersampling"></a> Supersampling
-# <a name="Surface"></a> Surface
-
-# <a name="SkSurface"></a> Class SkSurface
+# <a name="Surface_Characterization"></a> Surface Characterization
-<a name="SkSurface_MakeRasterDirect"></a>
-## MakeRasterDirect
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-static sk_sp&lt;SkSurface&gt; MakeRasterDirect(const SkImageInfo&, void* pixels,
- size_t rowBytes,
- const SkSurfaceProps* = nullptr)
-</pre>
-
----
-
-<a name="SkSurface_readPixels"></a>
-## readPixels
-
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool readPixels(const SkPixmap& dst, int srcX, int srcY) ;
-</pre>
+# <a name="SkSurfaceCharacterization"></a> Class SkSurfaceCharacterization
----
+# <a name="Surface_Properties"></a> Surface Properties
-<a name="SkSurface_getCanvas"></a>
-## getCanvas
+# <a name="SkSurfaceProps"></a> Class SkSurfaceProps
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-SkCanvas* getCanvas()
-</pre>
+# <a name="Legacy_Font_Host"></a> Legacy Font Host
----
+## <a name="SkSurfaceProps_InitType"></a> Enum SkSurfaceProps::InitType
-<a name="SkSurface_flush"></a>
-## flush
+### Constants
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void flush()
-</pre>
+<table>
+ <tr>
+ <td><a name="SkSurfaceProps_kLegacyFontHost_InitType"> <code><strong>SkSurfaceProps::kLegacyFontHost_InitType </strong></code> </a></td><td>0</td><td></td>
+ </tr>
----
+</table>
-<a name="SkSurface_prepareForExternalIO"></a>
-## prepareForExternalIO
+# <a name="SVG"></a> SVG
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-void prepareForExternalIO()
-</pre>
+## <a name="Canvas"></a> Canvas
----
+## <a name="Arc"></a> Arc
-<a name="SkSurface_makeSurface"></a>
-## makeSurface
+# <a name="Text"></a> Text
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-sk_sp&lt;SkSurface&gt; makeSurface(const SkImageInfo&)
-</pre>
+# <a name="Text_Blob"></a> Text Blob
----
+# <a name="SkTextBlob"></a> Class SkTextBlob
-<a name="SkSurface_peekPixels"></a>
-## peekPixels
+# <a name="Types"></a> Types
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
-bool peekPixels(SkPixmap*)
-</pre>
+## <a name="GrSurfaceOrigin"></a> Enum GrSurfaceOrigin
----
+### Constants
-## <a name="Properties"></a> Properties
+<table>
+ <tr>
+ <td><a name="kBottomLeft_GrSurfaceOrigin"> <code><strong>kBottomLeft_GrSurfaceOrigin </strong></code> </a></td><td>0 </td><td></td>
+ </tr>
+ <tr>
+ <td><a name="kTopLeft_GrSurfaceOrigin"> <code><strong>kTopLeft_GrSurfaceOrigin </strong></code> </a></td><td>1</td><td></td>
+ </tr>
-# <a name="SkSurfaceProps"></a> Class SkSurfaceProps
+</table>
-# <a name="Legacy_Font_Host"></a> Legacy Font Host
+## <a name="Budgeted"></a> Budgeted
-## <a name="SkSurfaceProps_InitType"></a> Enum SkSurfaceProps::InitType
+## <a name="SkBudgeted"></a> Enum SkBudgeted
### Constants
<table>
<tr>
- <td><a name="SkSurfaceProps_kLegacyFontHost_InitType"> <code><strong>SkSurfaceProps::kLegacyFontHost_InitType </strong></code> </a></td><td>0</td><td></td>
+ <td><a name="SkBudgeted_kNo"> <code><strong>SkBudgeted::kNo </strong></code> </a></td><td>0</td><td></td>
+ </tr>
+ <tr>
+ <td><a name="SkBudgeted_kYes"> <code><strong>SkBudgeted::kYes </strong></code> </a></td><td>1</td><td></td>
</tr>
</table>
-# <a name="SVG"></a> SVG
-
-## <a name="Canvas"></a> Canvas
-
-## <a name="Arc"></a> Arc
+## <a name="GrSemaphoresSubmitted"></a> Enum GrSemaphoresSubmitted
-# <a name="Text"></a> Text
+### Constants
-# <a name="Text_Blob"></a> Text Blob
+<table>
+ <tr>
+ <td><a name="GrSemaphoresSubmitted_kNo"> <code><strong>GrSemaphoresSubmitted::kNo </strong></code> </a></td><td>0</td><td></td>
+ </tr>
+ <tr>
+ <td><a name="GrSemaphoresSubmitted_kYes"> <code><strong>GrSemaphoresSubmitted::kYes </strong></code> </a></td><td>1</td><td></td>
+ </tr>
-# <a name="SkTextBlob"></a> Class SkTextBlob
+</table>
# <a name="Unpremultiply"></a> Unpremultiply
diff --git a/site/user/api/usingBookmaker.md b/site/user/api/usingBookmaker.md
index 96653510ba..c0360ac8a0 100644
--- a/site/user/api/usingBookmaker.md
+++ b/site/user/api/usingBookmaker.md
@@ -8,22 +8,22 @@ Install<a href="usingBookmaker#Go">Go</a>if needed.
Get the fiddle command line interface tool.
By default this will appear in your home directory.
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
$ go get go.skia.org/infra/fiddle/go/fiddlecli</pre>
Build <a href="#Bookmaker">Bookmaker</a>.
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
$ ninja -<a href="undocumented#C">C</a> out/dir bookmaker</pre>
Generate an starter <a href="#Bookmaker">Bookmaker</a> file from an existing include.
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
$ ./out/dir/bookmaker -i include/core/<a href="undocumented#SkXXX.h">SkXXX.h</a> -t docs</pre>
If a method or function has an unnamed parameter, bookmaker generates an error:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
<a href="undocumented#C">C</a>:/puregit/include/core/<a href="SkPixmap_Reference#SkPixmap">SkPixmap</a>.h(208): error: # missing param name
bool erase(const SkColor4f&, const SkIRect* subset = nullptr) const
^
@@ -34,14 +34,14 @@ them. After naming all parameters, check in the include before continuing.
A successful run generates
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
docs/<a href="undocumented#SkXXX_Reference">SkXXX Reference</a>.bmh</pre>
.
Next, use your favorite editor to fill out
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
docs/<a href="undocumented#SkXXX_Reference">SkXXX Reference</a>.bmh</pre>
.
@@ -82,13 +82,13 @@ correct parents.
If you run <a href="#Bookmaker">Bookmaker</a> inside <a href="usingBookmaker#Visual_Studio">Visual Studio</a>, you can click on errors and it
will take you to the source line in question.
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
$ ./out/dir/bookmaker -e fiddle.json -b docs</pre>
Once complete, run fiddlecli to generate the example hashes.
Errors are contained by the output but aren't reported yet.
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
$ $GOPATH/bin/fiddlecli --input fiddle.json --output fiddleout.json</pre>
Generate <a href="usingBookmaker#bmh_SkXXX">bmh SkXXX</a>.md from <a href="usingBookmaker#SkXXX">SkXXX</a>.bmh and fiddleout.json.
@@ -96,19 +96,19 @@ Error checking includes: undefined references, fiddle compiler errors,
missing or mismatched printf output.
Again, you can click on any errors inside <a href="usingBookmaker#Visual_Studio">Visual Studio</a>.
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
$ ./out/dir/bookmaker -r site/user/api -b docs -f fiddleout.json</pre>
The original include may have changed since you started creating the markdown.
Check to see if it is up to date.
This reports if a method no longer exists or its parameters have changed.
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
$ ./out/dir/bookmaker -x -b docs/<a href="usingBookmaker#SkXXX">SkXXX</a>.bmh -i include/core/<a href="usingBookmaker#SkXXX">SkXXX</a>.h</pre>
Generate an updated include header. Run:
-<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
$ ./out/dir/bookmaker -p -b docs -i include/core/<a href="usingBookmaker#SkXXX">SkXXX</a>.h</pre>
to write the updated <a href="undocumented#SkXXX.h">SkXXX.h</a> to the current directory.
diff --git a/tools/bookmaker/bookmaker.cpp b/tools/bookmaker/bookmaker.cpp
index b0b052355b..e048375860 100644
--- a/tools/bookmaker/bookmaker.cpp
+++ b/tools/bookmaker/bookmaker.cpp
@@ -7,9 +7,6 @@
#include "bookmaker.h"
-#include "SkOSFile.h"
-#include "SkOSPath.h"
-
DEFINE_string2(bmh, b, "", "Path to a *.bmh file or a directory.");
DEFINE_bool2(catalog, c, false, "Write example catalog.htm. (Requires -b -f -r)");
DEFINE_string2(examples, e, "", "File of fiddlecli input, usually fiddle.json (For now, disables -r -f -s)");
@@ -20,7 +17,7 @@ DEFINE_bool2(stdout, o, false, "Write file out to standard out.");
DEFINE_bool2(populate, p, false, "Populate include from bmh. (Requires -b -i)");
DEFINE_string2(ref, r, "", "Resolve refs and write bmh_*.md files to path. (Requires -b -f)");
DEFINE_string2(spellcheck, s, "", "Spell-check [once, all, mispelling]. (Requires -b)");
-DEFINE_string2(tokens, t, "", "Directory to write bmh from include. (Requires -i)");
+DEFINE_bool2(tokens, t, false, "Write bmh from include. (Requires -b -i)");
DEFINE_bool2(crosscheck, x, false, "Check bmh against includes. (Requires -b -i)");
DEFINE_bool2(skip, z, false, "Skip degenerate missed in legacy preprocessor.");
@@ -43,853 +40,6 @@ trouble with aliases, plurals
check for summary containing all methods
*/
-static string normalized_name(string name) {
- string normalizedName = name;
- std::replace(normalizedName.begin(), normalizedName.end(), '-', '_');
- do {
- size_t doubleColon = normalizedName.find("::", 0);
- if (string::npos == doubleColon) {
- break;
- }
- normalizedName = normalizedName.substr(0, doubleColon)
- + '_' + normalizedName.substr(doubleColon + 2);
- } while (true);
- return normalizedName;
-}
-
-static size_t count_indent(const string& text, size_t test, size_t end) {
- size_t result = test;
- while (test < end) {
- if (' ' != text[test]) {
- break;
- }
- ++test;
- }
- return test - result;
-}
-
-static void add_code(const string& text, int pos, int end,
- size_t outIndent, size_t textIndent, string& example) {
- do {
- // fix this to move whole paragraph in, out, but preserve doc indent
- int nextIndent = count_indent(text, pos, end);
- size_t len = text.find('\n', pos);
- if (string::npos == len) {
- len = end;
- }
- if ((size_t) (pos + nextIndent) < len) {
- size_t indent = outIndent + nextIndent;
- SkASSERT(indent >= textIndent);
- indent -= textIndent;
- for (size_t index = 0; index < indent; ++index) {
- example += ' ';
- }
- pos += nextIndent;
- while ((size_t) pos < len) {
- example += '"' == text[pos] ? "\\\"" :
- '\\' == text[pos] ? "\\\\" :
- text.substr(pos, 1);
- ++pos;
- }
- example += "\\n";
- } else {
- pos += nextIndent;
- }
- if ('\n' == text[pos]) {
- ++pos;
- }
- } while (pos < end);
-}
-
-// fixme: this will need to be more complicated to handle all of Skia
-// for now, just handle paint -- maybe fiddle will loosen naming restrictions
-void Definition::setCanonicalFiddle() {
- fMethodType = Definition::MethodType::kNone;
- size_t doubleColons = fName.find("::", 0);
- SkASSERT(string::npos != doubleColons);
- string base = fName.substr(0, doubleColons);
- string result = base + "_";
- doubleColons += 2;
- if (string::npos != fName.find('~', doubleColons)) {
- fMethodType = Definition::MethodType::kDestructor;
- result += "destructor";
- } else {
- bool isMove = string::npos != fName.find("&&", doubleColons);
- const char operatorStr[] = "operator";
- size_t opPos = fName.find(operatorStr, doubleColons);
- if (string::npos != opPos) {
- fMethodType = Definition::MethodType::kOperator;
- opPos += sizeof(operatorStr) - 1;
- if ('!' == fName[opPos]) {
- SkASSERT('=' == fName[opPos + 1]);
- result += "not_equal_operator";
- } else if ('=' == fName[opPos]) {
- if ('(' == fName[opPos + 1]) {
- result += isMove ? "move_" : "copy_";
- result += "assignment_operator";
- } else {
- SkASSERT('=' == fName[opPos + 1]);
- result += "equal_operator";
- }
- } else if ('[' == fName[opPos]) {
- result += "subscript_operator";
- const char* end = fContentStart;
- while (end > fStart && ' ' >= end[-1]) {
- --end;
- }
- string constCheck(fStart, end - fStart);
- size_t constPos = constCheck.rfind("const");
- if (constCheck.length() == constPos + 5) {
- result += "_const";
- }
- } else {
- SkASSERT(0); // todo: incomplete
- }
- } else {
- size_t parens = fName.find("()", doubleColons);
- if (string::npos != parens) {
- string methodName = fName.substr(doubleColons, parens - doubleColons);
- do {
- size_t nextDouble = methodName.find("::");
- if (string::npos == nextDouble) {
- break;
- }
- base = methodName.substr(0, nextDouble);
- result += base + '_';
- methodName = methodName.substr(nextDouble + 2);
- doubleColons += nextDouble + 2;
- } while (true);
- if (base == methodName) {
- fMethodType = Definition::MethodType::kConstructor;
- result += "empty_constructor";
- } else {
- result += fName.substr(doubleColons, fName.length() - doubleColons - 2);
- }
- } else {
- size_t openParen = fName.find('(', doubleColons);
- if (string::npos == openParen) {
- result += fName.substr(doubleColons);
- } else {
- size_t comma = fName.find(',', doubleColons);
- if (string::npos == comma) {
- result += isMove ? "move_" : "copy_";
- }
- fMethodType = Definition::MethodType::kConstructor;
- // name them by their param types,
- // e.g. SkCanvas__int_int_const_SkSurfaceProps_star
- // TODO: move forward until parens are balanced and terminator =,)
- TextParser params("", &fName[openParen] + 1, &*fName.end(), 0);
- bool underline = false;
- while (!params.eof()) {
- // SkDEBUGCODE(const char* end = params.anyOf("(),=")); // unused for now
- // SkASSERT(end[0] != '('); // fixme: put off handling nested parentheseses
- if (params.startsWith("const") || params.startsWith("int")
- || params.startsWith("Sk")) {
- const char* wordStart = params.fChar;
- params.skipToNonAlphaNum();
- if (underline) {
- result += '_';
- } else {
- underline = true;
- }
- result += string(wordStart, params.fChar - wordStart);
- } else {
- params.skipToNonAlphaNum();
- }
- if (!params.eof() && '*' == params.peek()) {
- if (underline) {
- result += '_';
- } else {
- underline = true;
- }
- result += "star";
- params.next();
- params.skipSpace();
- }
- params.skipToAlpha();
- }
- }
- }
- }
- }
- fFiddle = normalized_name(result);
-}
-
-bool Definition::exampleToScript(string* result, ExampleOptions exampleOptions) const {
- bool hasFiddle = true;
- const Definition* platform = this->hasChild(MarkType::kPlatform);
- if (platform) {
- TextParser platParse(platform);
- hasFiddle = !platParse.strnstr("!fiddle", platParse.fEnd);
- }
- if (!hasFiddle) {
- *result = "";
- return true;
- }
- string text = this->extractText(Definition::TrimExtract::kNo);
- const char drawWrapper[] = "void draw(SkCanvas* canvas) {";
- const char drawNoCanvas[] = "void draw(SkCanvas* ) {";
- size_t nonSpace = 0;
- while (nonSpace < text.length() && ' ' >= text[nonSpace]) {
- ++nonSpace;
- }
- bool hasFunc = !text.compare(nonSpace, sizeof(drawWrapper) - 1, drawWrapper);
- bool noCanvas = !text.compare(nonSpace, sizeof(drawNoCanvas) - 1, drawNoCanvas);
- bool hasCanvas = string::npos != text.find("SkCanvas canvas");
- SkASSERT(!hasFunc || !noCanvas);
- bool textOut = string::npos != text.find("SkDebugf(")
- || string::npos != text.find("dump(")
- || string::npos != text.find("dumpHex(");
- string heightStr = "256";
- string widthStr = "256";
- bool preprocessor = text[0] == '#';
- string normalizedName(fFiddle);
- string code;
- string imageStr = "0";
- for (auto const& iter : fChildren) {
- switch (iter->fMarkType) {
- case MarkType::kError:
- result->clear();
- return true;
- case MarkType::kHeight:
- heightStr = string(iter->fContentStart, iter->fContentEnd - iter->fContentStart);
- break;
- case MarkType::kWidth:
- widthStr = string(iter->fContentStart, iter->fContentEnd - iter->fContentStart);
- break;
- case MarkType::kDescription:
- // ignore for now
- break;
- case MarkType::kFunction: {
- // emit this, but don't wrap this in draw()
- string funcText(iter->fContentStart, iter->fContentEnd - iter->fContentStart - 1);
- size_t pos = 0;
- while (pos < funcText.length() && ' ' > funcText[pos]) {
- ++pos;
- }
- size_t indent = count_indent(funcText, pos, funcText.length());
- add_code(funcText, pos, funcText.length(), 0, indent, code);
- code += "\\n";
- } break;
- case MarkType::kComment:
- break;
- case MarkType::kImage:
- imageStr = string(iter->fContentStart, iter->fContentEnd - iter->fContentStart);
- break;
- case MarkType::kToDo:
- break;
- case MarkType::kMarkChar:
- case MarkType::kPlatform:
- // ignore for now
- break;
- case MarkType::kStdOut:
- textOut = true;
- break;
- default:
- SkASSERT(0); // more coding to do
- }
- }
- string textOutStr = textOut ? "true" : "false";
- size_t pos = 0;
- while (pos < text.length() && ' ' > text[pos]) {
- ++pos;
- }
- size_t end = text.length();
- size_t outIndent = 0;
- size_t textIndent = count_indent(text, pos, end);
- bool wrapCode = !hasFunc && !noCanvas && !preprocessor;
- if (wrapCode) {
- code += hasCanvas ? drawNoCanvas : drawWrapper;
- code += "\\n";
- outIndent = 4;
- }
- add_code(text, pos, end, outIndent, textIndent, code);
- if (wrapCode) {
- code += "}";
- }
- string example = "\"" + normalizedName + "\": {\n";
-
- string baseFile = [this]() {
- string baseNameExt = fFileName.substr(fFileName.find_last_of("/\\") + 1);
- size_t p = baseNameExt.find_last_of('.');
- return (p > 0 && p != string::npos) ? baseNameExt.substr(0, p) : baseNameExt;
- }();
- if (ExampleOptions::kText == exampleOptions) {
- example += " \"code\": \"" + code + "\",\n";
- example += " \"hash\": \"" + fHash + "\",\n";
- example += " \"file\": \"" + baseFile + "\",\n";
- example += " \"name\": \"" + fName + "\",";
- } else {
- example += " \"code\": \"" + code + "\",\n";
- if (ExampleOptions::kPng == exampleOptions) {
- example += " \"width\": " + widthStr + ",\n";
- example += " \"height\": " + heightStr + ",\n";
- example += " \"hash\": \"" + fHash + "\",\n";
- example += " \"file\": \"" + baseFile + "\",\n";
- example += " \"name\": \"" + fName + "\"\n";
- example += "}";
- } else {
- example += " \"options\": {\n";
- example += " \"width\": " + widthStr + ",\n";
- example += " \"height\": " + heightStr + ",\n";
- example += " \"source\": " + imageStr + ",\n";
- example += " \"srgb\": false,\n";
- example += " \"f16\": false,\n";
- example += " \"textOnly\": " + textOutStr + ",\n";
- example += " \"animated\": false,\n";
- example += " \"duration\": 0\n";
- example += " },\n";
- example += " \"fast\": true";
- }
- }
- *result = example;
- return true;
-}
-
-static void space_pad(string* str) {
- size_t len = str->length();
- if (len == 0) {
- return;
- }
- char last = (*str)[len - 1];
- if ('~' == last || ' ' >= last) {
- return;
- }
- *str += ' ';
-}
-
-//start here;
-// see if it possible to abstract this a little bit so it can
-// additionally be used to find params and return in method prototype that
-// does not have corresponding doxygen comments
-bool Definition::checkMethod() const {
- SkASSERT(MarkType::kMethod == fMarkType);
- // if method returns a value, look for a return child
- // for each parameter, look for a corresponding child
- const char* end = fContentStart;
- while (end > fStart && ' ' >= end[-1]) {
- --end;
- }
- TextParser methodParser(fFileName, fStart, end, fLineCount);
- methodParser.skipWhiteSpace();
- SkASSERT(methodParser.startsWith("#Method"));
- methodParser.skipName("#Method");
- methodParser.skipSpace();
- string name = this->methodName();
- if (MethodType::kNone == fMethodType && name.length() > 2 &&
- "()" == name.substr(name.length() - 2)) {
- name = name.substr(0, name.length() - 2);
- }
- bool expectReturn = this->methodHasReturn(name, &methodParser);
- bool foundReturn = false;
- bool foundException = false;
- for (auto& child : fChildren) {
- foundException |= MarkType::kDeprecated == child->fMarkType
- || MarkType::kExperimental == child->fMarkType;
- if (MarkType::kReturn != child->fMarkType) {
- if (MarkType::kParam == child->fMarkType) {
- child->fVisited = false;
- }
- continue;
- }
- if (!expectReturn) {
- return methodParser.reportError<bool>("no #Return expected");
- }
- if (foundReturn) {
- return methodParser.reportError<bool>("multiple #Return markers");
- }
- foundReturn = true;
- }
- if (expectReturn && !foundReturn && !foundException) {
- return methodParser.reportError<bool>("missing #Return marker");
- }
- const char* paren = methodParser.strnchr('(', methodParser.fEnd);
- if (!paren) {
- return methodParser.reportError<bool>("missing #Method function definition");
- }
- const char* nextEnd = paren;
- do {
- string paramName;
- methodParser.fChar = nextEnd + 1;
- methodParser.skipSpace();
- if (!this->nextMethodParam(&methodParser, &nextEnd, &paramName)) {
- continue;
- }
- bool foundParam = false;
- for (auto& child : fChildren) {
- if (MarkType::kParam != child->fMarkType) {
- continue;
- }
- if (paramName != child->fName) {
- continue;
- }
- if (child->fVisited) {
- return methodParser.reportError<bool>("multiple #Method param with same name");
- }
- child->fVisited = true;
- if (foundParam) {
- TextParser paramError(child);
- return methodParser.reportError<bool>("multiple #Param with same name");
- }
- foundParam = true;
-
- }
- if (!foundParam && !foundException) {
- return methodParser.reportError<bool>("no #Param found");
- }
- if (')' == nextEnd[0]) {
- break;
- }
- } while (')' != nextEnd[0]);
- for (auto& child : fChildren) {
- if (MarkType::kParam != child->fMarkType) {
- continue;
- }
- if (!child->fVisited) {
- TextParser paramError(child);
- return paramError.reportError<bool>("#Param without param in #Method");
- }
- }
- return true;
-}
-
-bool Definition::crossCheck2(const Definition& includeToken) const {
- TextParser parser(fFileName, fStart, fContentStart, fLineCount);
- parser.skipExact("#");
- bool isMethod = parser.skipName("Method");
- const char* contentEnd;
- if (isMethod) {
- contentEnd = fContentStart;
- } else if (parser.skipName("DefinedBy")) {
- contentEnd = fContentEnd;
- while (parser.fChar < contentEnd && ' ' >= contentEnd[-1]) {
- --contentEnd;
- }
- if (parser.fChar < contentEnd - 1 && ')' == contentEnd[-1] && '(' == contentEnd[-2]) {
- contentEnd -= 2;
- }
- } else {
- return parser.reportError<bool>("unexpected crosscheck marktype");
- }
- return crossCheckInside(parser.fChar, contentEnd, includeToken);
-}
-
-bool Definition::crossCheck(const Definition& includeToken) const {
- return crossCheckInside(fContentStart, fContentEnd, includeToken);
-}
-
-bool Definition::crossCheckInside(const char* start, const char* end,
- const Definition& includeToken) const {
- TextParser def(fFileName, start, end, fLineCount);
- TextParser inc("", includeToken.fContentStart, includeToken.fContentEnd, 0);
- if (inc.startsWith("SK_API")) {
- inc.skipWord("SK_API");
- }
- if (inc.startsWith("friend")) {
- inc.skipWord("friend");
- }
- if (inc.startsWith("SK_API")) {
- inc.skipWord("SK_API");
- }
- do {
- bool defEof;
- bool incEof;
- do {
- defEof = def.eof() || !def.skipWhiteSpace();
- incEof = inc.eof() || !inc.skipWhiteSpace();
- if (!incEof && '/' == inc.peek() && (defEof || '/' != def.peek())) {
- inc.next();
- if ('*' == inc.peek()) {
- inc.skipToEndBracket("*/");
- inc.next();
- } else if ('/' == inc.peek()) {
- inc.skipToEndBracket('\n');
- }
- } else if (!incEof && '#' == inc.peek() && (defEof || '#' != def.peek())) {
- inc.next();
- if (inc.startsWith("if")) {
- inc.skipToEndBracket("\n");
- } else if (inc.startsWith("endif")) {
- inc.skipToEndBracket("\n");
- } else {
- SkASSERT(0); // incomplete
- return false;
- }
- } else {
- break;
- }
- inc.next();
- } while (true);
- if (defEof || incEof) {
- if (defEof == incEof || (!defEof && ';' == def.peek())) {
- return true;
- }
- return false; // allow setting breakpoint on failure
- }
- char defCh;
- do {
- defCh = def.next();
- char incCh = inc.next();
- if (' ' >= defCh && ' ' >= incCh) {
- break;
- }
- if (defCh != incCh) {
- return false;
- }
- if (';' == defCh) {
- return true;
- }
- } while (!def.eof() && !inc.eof());
- } while (true);
- return false;
-}
-
-string Definition::formatFunction() const {
- const char* end = fContentStart;
- while (end > fStart && ' ' >= end[-1]) {
- --end;
- }
- TextParser methodParser(fFileName, fStart, end, fLineCount);
- methodParser.skipWhiteSpace();
- SkASSERT(methodParser.startsWith("#Method"));
- methodParser.skipName("#Method");
- methodParser.skipSpace();
- const char* lastStart = methodParser.fChar;
- const int limit = 80; // todo: allow this to be set by caller or in global or something
- string methodStr;
- string name = this->methodName();
- const char* nameInParser = methodParser.strnstr(name.c_str(), methodParser.fEnd);
- methodParser.skipTo(nameInParser);
- const char* lastEnd = methodParser.fChar;
- const char* paren = methodParser.strnchr('(', methodParser.fEnd);
- size_t indent;
- if (paren) {
- indent = (size_t) (paren - lastStart) + 1;
- } else {
- indent = (size_t) (lastEnd - lastStart);
- }
- int written = 0;
- do {
- const char* nextStart = lastEnd;
- SkASSERT(written < limit);
- const char* delimiter = methodParser.anyOf(",)");
- const char* nextEnd = delimiter ? delimiter : methodParser.fEnd;
- if (delimiter) {
- while (nextStart < nextEnd && ' ' >= nextStart[0]) {
- ++nextStart;
- }
- }
- while (nextEnd > nextStart && ' ' >= nextEnd[-1]) {
- --nextEnd;
- }
- if (delimiter) {
- nextEnd += 1;
- delimiter += 1;
- }
- if (lastEnd > lastStart) {
- if (lastStart[0] != ' ') {
- space_pad(&methodStr);
- }
- methodStr += string(lastStart, (size_t) (lastEnd - lastStart));
- written += (size_t) (lastEnd - lastStart);
- }
- if (delimiter) {
- if (nextEnd - nextStart >= (ptrdiff_t) (limit - written)) {
- written = indent;
- methodStr += '\n';
- methodStr += string(indent, ' ');
- }
- methodParser.skipTo(delimiter);
- }
- lastStart = nextStart;
- lastEnd = nextEnd;
- } while (lastStart < lastEnd);
- return methodStr;
-}
-
-string Definition::fiddleName() const {
- string result;
- size_t start = 0;
- string parent;
- const Definition* parentDef = this;
- while ((parentDef = parentDef->fParent)) {
- if (MarkType::kClass == parentDef->fMarkType || MarkType::kStruct == parentDef->fMarkType) {
- parent = parentDef->fFiddle;
- break;
- }
- }
- if (parent.length() && 0 == fFiddle.compare(0, parent.length(), parent)) {
- start = parent.length();
- while (start < fFiddle.length() && '_' == fFiddle[start]) {
- ++start;
- }
- }
- size_t end = fFiddle.find_first_of('(', start);
- return fFiddle.substr(start, end - start);
-}
-
-const Definition* Definition::hasChild(MarkType markType) const {
- for (auto iter : fChildren) {
- if (markType == iter->fMarkType) {
- return iter;
- }
- }
- return nullptr;
-}
-
-const Definition* Definition::hasParam(const string& ref) const {
- SkASSERT(MarkType::kMethod == fMarkType);
- for (auto iter : fChildren) {
- if (MarkType::kParam != iter->fMarkType) {
- continue;
- }
- if (iter->fName == ref) {
- return &*iter;
- }
-
- }
- return nullptr;
-}
-
-bool Definition::methodHasReturn(const string& name, TextParser* methodParser) const {
- if (methodParser->skipExact("static")) {
- methodParser->skipWhiteSpace();
- }
- const char* lastStart = methodParser->fChar;
- const char* nameInParser = methodParser->strnstr(name.c_str(), methodParser->fEnd);
- methodParser->skipTo(nameInParser);
- const char* lastEnd = methodParser->fChar;
- const char* returnEnd = lastEnd;
- while (returnEnd > lastStart && ' ' == returnEnd[-1]) {
- --returnEnd;
- }
- bool expectReturn = 4 != returnEnd - lastStart || strncmp("void", lastStart, 4);
- if (MethodType::kNone != fMethodType && !expectReturn) {
- return methodParser->reportError<bool>("unexpected void");
- }
- switch (fMethodType) {
- case MethodType::kNone:
- case MethodType::kOperator:
- // either is fine
- break;
- case MethodType::kConstructor:
- expectReturn = true;
- break;
- case MethodType::kDestructor:
- expectReturn = false;
- break;
- }
- return expectReturn;
-}
-
-string Definition::methodName() const {
- string result;
- size_t start = 0;
- string parent;
- const Definition* parentDef = this;
- while ((parentDef = parentDef->fParent)) {
- if (MarkType::kClass == parentDef->fMarkType || MarkType::kStruct == parentDef->fMarkType) {
- parent = parentDef->fName;
- break;
- }
- }
- if (parent.length() && 0 == fName.compare(0, parent.length(), parent)) {
- start = parent.length();
- while (start < fName.length() && ':' == fName[start]) {
- ++start;
- }
- }
- if (fClone) {
- int lastUnder = fName.rfind('_');
- return fName.substr(start, (size_t) (lastUnder - start));
- }
- size_t end = fName.find_first_of('(', start);
- if (string::npos == end) {
- return fName.substr(start);
- }
- return fName.substr(start, end - start);
-}
-
-bool Definition::nextMethodParam(TextParser* methodParser, const char** nextEndPtr,
- string* paramName) const {
- int parenCount = 0;
- TextParser::Save saveState(methodParser);
- while (true) {
- if (methodParser->eof()) {
- return methodParser->reportError<bool>("#Method function missing close paren");
- }
- char ch = methodParser->peek();
- if ('(' == ch) {
- ++parenCount;
- }
- if (parenCount == 0 && (')' == ch || ',' == ch)) {
- *nextEndPtr = methodParser->fChar;
- break;
- }
- if (')' == ch) {
- if (0 > --parenCount) {
- return this->reportError<bool>("mismatched parentheses");
- }
- }
- methodParser->next();
- }
- saveState.restore();
- const char* nextEnd = *nextEndPtr;
- const char* paramEnd = nextEnd;
- const char* assign = methodParser->strnstr(" = ", paramEnd);
- if (assign) {
- paramEnd = assign;
- }
- const char* closeBracket = methodParser->strnstr("]", paramEnd);
- if (closeBracket) {
- const char* openBracket = methodParser->strnstr("[", paramEnd);
- if (openBracket && openBracket < closeBracket) {
- while (openBracket < --closeBracket && isdigit(closeBracket[0]))
- ;
- if (openBracket == closeBracket) {
- paramEnd = openBracket;
- }
- }
- }
- const char* function = methodParser->strnstr(")(", paramEnd);
- if (function) {
- paramEnd = function;
- }
- while (paramEnd > methodParser->fChar && ' ' == paramEnd[-1]) {
- --paramEnd;
- }
- const char* paramStart = paramEnd;
- while (paramStart > methodParser->fChar && isalnum(paramStart[-1])) {
- --paramStart;
- }
- if (paramStart > methodParser->fChar && paramStart >= paramEnd) {
- return methodParser->reportError<bool>("#Method missing param name");
- }
- *paramName = string(paramStart, paramEnd - paramStart);
- if (!paramName->length()) {
- if (')' != nextEnd[0]) {
- return methodParser->reportError<bool>("#Method malformed param");
- }
- return false;
- }
- return true;
-}
-
- bool ParserCommon::parseFile(const char* fileOrPath, const char* suffix) {
-// this->reset();
- if (!sk_isdir(fileOrPath)) {
- if (!this->parseFromFile(fileOrPath)) {
- SkDebugf("failed to parse %s\n", fileOrPath);
- return false;
- }
- } else {
- SkOSFile::Iter it(fileOrPath, suffix);
- for (SkString file; it.next(&file); ) {
- SkString p = SkOSPath::Join(fileOrPath, file.c_str());
- const char* hunk = p.c_str();
- if (!SkStrEndsWith(hunk, suffix)) {
- continue;
- }
- if (!this->parseFromFile(hunk)) {
- SkDebugf("failed to parse %s\n", hunk);
- return false;
- }
- }
- }
- return true;
-}
-
-bool Definition::paramsMatch(const string& match, const string& name) const {
- TextParser def(fFileName, fStart, fContentStart, fLineCount);
- const char* dName = def.strnstr(name.c_str(), fContentStart);
- if (!dName) {
- return false;
- }
- def.skipTo(dName);
- TextParser m(fFileName, &match.front(), &match.back() + 1, fLineCount);
- const char* mName = m.strnstr(name.c_str(), m.fEnd);
- if (!mName) {
- return false;
- }
- m.skipTo(mName);
- while (!def.eof() && ')' != def.peek() && !m.eof() && ')' != m.peek()) {
- const char* ds = def.fChar;
- const char* ms = m.fChar;
- const char* de = def.anyOf(") \n");
- const char* me = m.anyOf(") \n");
- def.skipTo(de);
- m.skipTo(me);
- if (def.fChar - ds != m.fChar - ms) {
- return false;
- }
- if (strncmp(ds, ms, (int) (def.fChar - ds))) {
- return false;
- }
- def.skipWhiteSpace();
- m.skipWhiteSpace();
- }
- return !def.eof() && ')' == def.peek() && !m.eof() && ')' == m.peek();
-}
-
-void RootDefinition::clearVisited() {
- fVisited = false;
- for (auto& leaf : fLeaves) {
- leaf.second.fVisited = false;
- }
- for (auto& branch : fBranches) {
- branch.second->clearVisited();
- }
-}
-
-bool RootDefinition::dumpUnVisited() {
- bool allStructElementsFound = true;
- for (auto& leaf : fLeaves) {
- if (!leaf.second.fVisited) {
- // TODO: parse embedded struct in includeParser phase, then remove this condition
- if (FLAGS_skip) {
- const Definition& def = leaf.second;
- if (def.fChildren.size() > 0 &&
- MarkType::kDeprecated == def.fChildren[0]->fMarkType) {
- continue;
- }
- }
- SkDebugf("defined in bmh but missing in include: %s\n", leaf.first.c_str());
- }
- }
- for (auto& branch : fBranches) {
- allStructElementsFound &= branch.second->dumpUnVisited();
- }
- return allStructElementsFound;
-}
-
-const Definition* RootDefinition::find(const string& ref, AllowParens allowParens) const {
- const auto leafIter = fLeaves.find(ref);
- if (leafIter != fLeaves.end()) {
- return &leafIter->second;
- }
- if (AllowParens::kYes == allowParens && string::npos == ref.find("()")) {
- string withParens = ref + "()";
- const auto parensIter = fLeaves.find(withParens);
- if (parensIter != fLeaves.end()) {
- return &parensIter->second;
- }
- }
- const auto branchIter = fBranches.find(ref);
- if (branchIter != fBranches.end()) {
- const RootDefinition* rootDef = branchIter->second;
- return rootDef;
- }
- const Definition* result = nullptr;
- for (const auto& branch : fBranches) {
- const RootDefinition* rootDef = branch.second;
- result = rootDef->find(ref, allowParens);
- if (result) {
- break;
- }
- }
- return result;
-}
-
/*
class contains named struct, enum, enum-member, method, topic, subtopic
everything contained by class is uniquely named
@@ -1008,7 +158,7 @@ bool BmhParser::addDefinition(const char* defStart, bool hasEnd, MarkType markTy
definition->fFiddle = name;
}
} else {
- definition->fFiddle = normalized_name(name);
+ definition->fFiddle = Definition::NormalizedName(name);
}
definition->fMarkType = markType;
definition->fAnonymous = fAnonymous;
@@ -1034,7 +184,7 @@ bool BmhParser::addDefinition(const char* defStart, bool hasEnd, MarkType markTy
parent = parent->fParent;
}
definition->fFiddle = parent ? parent->fFiddle + '_' : "";
- definition->fFiddle += normalized_name(typeNameBuilder[0]);
+ definition->fFiddle += Definition::NormalizedName(typeNameBuilder[0]);
this->setAsParent(definition);
}
{
@@ -1075,7 +225,7 @@ bool BmhParser::addDefinition(const char* defStart, bool hasEnd, MarkType markTy
definition->fStart = defStart;
definition->fContentStart = start;
definition->fName = name;
- definition->fFiddle = normalized_name(name);
+ definition->fFiddle = Definition::NormalizedName(name);
definition->fContentEnd = fChar;
this->skipToEndBracket('\n');
definition->fTerminator = fChar;
@@ -1147,6 +297,7 @@ bool BmhParser::addDefinition(const char* defStart, bool hasEnd, MarkType markTy
return this->reportError<bool>("missing example body");
}
}
+ definition->setWrapper();
}
} else {
fMarkup.emplace_front(markType, defStart, fLineCount, fParent);
@@ -1202,7 +353,7 @@ bool BmhParser::addDefinition(const char* defStart, bool hasEnd, MarkType markTy
fMarkup.emplace_front(markType, defStart, fLineCount, fParent);
definition = &fMarkup.front();
definition->fName = typeNameBuilder[0];
- definition->fFiddle = normalized_name(typeNameBuilder[0]);
+ definition->fFiddle = Definition::NormalizedName(typeNameBuilder[0]);
definition->fContentStart = fChar;
definition->fContentEnd = this->trimmedBracketEnd('\n');
definition->fTerminator = this->lineEnd() - 1;
@@ -1412,7 +563,7 @@ bool BmhParser::collectExternals() {
RootDefinition* definition = &fExternals.front();
definition->fFileName = fFileName;
definition->fName = string(wordStart ,fChar - wordStart);
- definition->fFiddle = normalized_name(definition->fName);
+ definition->fFiddle = Definition::NormalizedName(definition->fName);
}
} while (!this->eof());
return true;
@@ -1631,7 +782,7 @@ bool BmhParser::findDefinitions() {
}
}
if (fParent) {
- return this->reportError<bool>("mismatched end");
+ return fParent->reportError<bool>("mismatched end");
}
return true;
}
@@ -1799,10 +950,20 @@ string BmhParser::methodName() {
}
builder = parent->fName + "::";
}
+ bool addConst = false;
if (isConstructor || expectOperator) {
paren = this->strnchr(')', end) + 1;
+ TextParser::Save saveState(this);
+ this->skipTo(paren);
+ if (this->skipExact("_const")) {
+ addConst = true;
+ }
+ saveState.restore();
}
builder.append(nameStart, paren - nameStart);
+ if (addConst) {
+ builder.append("_const");
+ }
if (!expectOperator && allLower) {
builder.append("()");
}
@@ -1998,7 +1159,6 @@ vector<string> BmhParser::typeName(MarkType markType, bool* checkEnd) {
case MarkType::kEnumClass:
case MarkType::kClass:
case MarkType::kStruct:
- case MarkType::kTypedef:
// expect name
builder = this->className(markType);
break;
@@ -2052,6 +1212,9 @@ vector<string> BmhParser::typeName(MarkType markType, bool* checkEnd) {
case MarkType::kMethod:
builder = this->methodName();
break;
+ case MarkType::kTypedef:
+ builder = this->typedefName();
+ break;
case MarkType::kParam:
// fixme: expect camelCase
builder = this->word("", "");
@@ -2078,6 +1241,82 @@ vector<string> BmhParser::typeName(MarkType markType, bool* checkEnd) {
return result;
}
+string BmhParser::typedefName() {
+ if (this->hasEndToken()) {
+ if (!fParent || !fParent->fName.length()) {
+ return this->reportError<string>("missing parent typedef name");
+ }
+ SkASSERT(fMC == this->peek());
+ this->next();
+ SkASSERT(fMC == this->peek());
+ this->next();
+ SkASSERT(fMC != this->peek());
+ return fParent->fName;
+ }
+ // look for typedef as one of three forms:
+ // typedef return-type (*NAME)(params);
+ // typedef alias NAME;
+ // typedef std::function<alias> NAME;
+ string builder;
+ const char* end = this->doubleLF();
+ if (!end) {
+ end = fEnd;
+ }
+ const char* altEnd = this->strnstr("#Typedef ##", end);
+ if (altEnd) {
+ end = this->strnchr('\n', end);
+ }
+ if (!end) {
+ return this->reportError<string>("missing typedef std::function end bracket >");
+ }
+
+ if (this->startsWith("std::function")) {
+ if (!this->skipToEndBracket('>')) {
+ return this->reportError<string>("missing typedef std::function end bracket >");
+ }
+ this->next();
+ this->skipWhiteSpace();
+ builder = string(fChar, end - fChar);
+ } else {
+ const char* paren = this->strnchr('(', end);
+ if (!paren) {
+ const char* lastWord = nullptr;
+ do {
+ this->skipToWhiteSpace();
+ if (fChar < end && isspace(fChar[0])) {
+ this->skipWhiteSpace();
+ lastWord = fChar;
+ } else {
+ break;
+ }
+ } while (true);
+ if (!lastWord) {
+ return this->reportError<string>("missing typedef name");
+ }
+ builder = string(lastWord, end - lastWord);
+ } else {
+ this->skipTo(paren);
+ this->next();
+ if ('*' != this->next()) {
+ return this->reportError<string>("missing typedef function asterisk");
+ }
+ const char* nameStart = fChar;
+ if (!this->skipToEndBracket(')')) {
+ return this->reportError<string>("missing typedef function )");
+ }
+ builder = string(nameStart, fChar - nameStart);
+ if (!this->skipToEndBracket('(')) {
+ return this->reportError<string>("missing typedef params (");
+ }
+ if (! this->skipToEndBracket(')')) {
+ return this->reportError<string>("missing typedef params )");
+ }
+ this->skipTo(end);
+ }
+ }
+ return uniqueRootName(builder, MarkType::kTypedef);
+}
+
string BmhParser::uniqueName(const string& base, MarkType markType) {
string builder(base);
if (!builder.length()) {
@@ -2109,6 +1348,9 @@ string BmhParser::uniqueRootName(const string& base, MarkType markType) {
return markType == def.fMarkType && def.fName == numBuilder;
};
+ if (string::npos != base.find("SkMatrix::operator")) {
+ SkDebugf("");
+ }
string builder(base);
if (!builder.length()) {
builder = fParent->fName;
@@ -2147,6 +1389,9 @@ tryNext: ;
cloned->fCloned = true;
}
fCloned = true;
+ if (string::npos != builder.find("operator")) {
+ SkDebugf("");
+ }
numBuilder = builder + '_' + to_string(number);
} while (++number);
return numBuilder;
@@ -2232,11 +1477,11 @@ static int count_children(const Definition& def, MarkType markType) {
}
int main(int argc, char** const argv) {
- BmhParser bmhParser;
+ BmhParser bmhParser(FLAGS_skip);
bmhParser.validate();
SkCommandLineFlags::SetUsage(
- "Common Usage: bookmaker -i path/to/include.h -t\n"
+ "Common Usage: bookmaker -b path/to/bmh_files -i path/to/include.h -t\n"
" bookmaker -b path/to/bmh_files -e fiddle.json\n"
" ~/go/bin/fiddlecli --input fiddle.json --output fiddleout.json\n"
" bookmaker -b path/to/bmh_files -f fiddleout.json -r path/to/md_files\n"
@@ -2308,8 +1553,8 @@ int main(int argc, char** const argv) {
SkCommandLineFlags::PrintUsage();
return 1;
}
- if (FLAGS_include.isEmpty() && !FLAGS_tokens.isEmpty()) {
- SkDebugf("-t requires -i\n");
+ if ((FLAGS_include.isEmpty() || FLAGS_bmh.isEmpty()) && FLAGS_tokens) {
+ SkDebugf("-t requires -b -i\n");
SkCommandLineFlags::PrintUsage();
return 1;
}
@@ -2326,15 +1571,15 @@ int main(int argc, char** const argv) {
}
bool done = false;
if (!FLAGS_include.isEmpty()) {
- if (!FLAGS_tokens.isEmpty() || FLAGS_crosscheck) {
+ if (FLAGS_tokens || FLAGS_crosscheck) {
IncludeParser includeParser;
includeParser.validate();
if (!includeParser.parseFile(FLAGS_include[0], ".h")) {
return -1;
}
- if (!FLAGS_tokens.isEmpty()) {
+ if (FLAGS_tokens) {
includeParser.fDebugOut = FLAGS_stdout;
- if (includeParser.dumpTokens(FLAGS_tokens[0])) {
+ if (includeParser.dumpTokens(FLAGS_bmh[0])) {
bmhParser.fWroteOut = true;
}
done = true;
diff --git a/tools/bookmaker/bookmaker.h b/tools/bookmaker/bookmaker.h
index 167fcb24f7..8cd128804c 100644
--- a/tools/bookmaker/bookmaker.h
+++ b/tools/bookmaker/bookmaker.h
@@ -303,6 +303,33 @@ public:
return *loc;
}
+ const char* doubleLF() const {
+ int count = 0;
+ const char* ptr = fChar;
+ const char* doubleStart = nullptr;
+ while (ptr < fEnd) {
+ if ('\n' == ptr[0]) {
+ if (++count == 1) {
+ doubleStart = ptr;
+ } else {
+ return doubleStart;
+ }
+ } else if (' ' < ptr[0]) {
+ count = 0;
+ }
+ ++ptr;
+ }
+ return nullptr;
+ }
+
+ bool endsWith(const char* match) {
+ int matchLen = strlen(match);
+ if (matchLen > fChar - fLine) {
+ return false;
+ }
+ return !strncmp(fChar - matchLen, match, matchLen);
+ }
+
bool eof() const { return fChar >= fEnd; }
const char* lineEnd() const {
@@ -431,7 +458,7 @@ public:
// since a.b can't be found as a named definition
void skipFullName() {
while (fChar < fEnd && (isalnum(fChar[0])
- || '_' == fChar[0] || '-' == fChar[0]
+ || '_' == fChar[0] /* || '-' == fChar[0] */
|| (':' == fChar[0] && fChar +1 < fEnd && ':' == fChar[1]))) {
if (':' == fChar[0] && fChar +1 < fEnd && ':' == fChar[1]) {
fChar++;
@@ -468,6 +495,12 @@ public:
}
}
+ void skipToWhiteSpace() {
+ while (fChar < fEnd && ' ' < fChar[0]) {
+ fChar++;
+ }
+ }
+
bool skipName(const char* word) {
size_t len = strlen(word);
if (len <= (size_t) (fEnd - fChar) && !strncmp(word, fChar, len)) {
@@ -637,10 +670,11 @@ public:
for (int i = 0; i < 4; ++i) {
unicode <<= 4;
SkASSERT((reader[0] >= '0' && reader[0] <= '9') ||
- (reader[0] >= 'A' && reader[0] <= 'F'));
+ (reader[0] >= 'A' && reader[0] <= 'F') ||
+ (reader[0] >= 'a' && reader[0] <= 'f'));
int nibble = *reader++ - '0';
if (nibble > 9) {
- nibble = 'A'- '9' + 1;
+ nibble = (nibble & ~('a' - 'A')) - 'A' + '9' + 1;
}
unicode |= nibble;
}
@@ -695,6 +729,26 @@ public:
kOperator,
};
+ enum class Operator {
+ kUnknown,
+ kAdd,
+ kAddTo,
+ kArray,
+ kCast,
+ kCopy,
+ kDelete,
+ kDereference,
+ kEqual,
+ kMinus,
+ kMove,
+ kMultiply,
+ kMultiplyBy,
+ kNew,
+ kNotEqual,
+ kSubtract,
+ kSubtractFrom,
+ };
+
Definition() {}
Definition(const char* start, const char* end, int line, Definition* parent)
@@ -744,116 +798,19 @@ public:
virtual RootDefinition* asRoot() { SkASSERT(0); return nullptr; }
virtual const RootDefinition* asRoot() const { SkASSERT(0); return nullptr; }
-
- bool boilerplateIfDef(Definition* parent) {
- const Definition& label = fTokens.front();
- if (Type::kWord != label.fType) {
- return false;
- }
- fName = string(label.fContentStart, label.fContentEnd - label.fContentStart);
- return true;
- }
-
- // todo: this is matching #ifndef SkXXX_DEFINED for no particular reason
- // it doesn't do anything useful with arbitrary input, e.g. #ifdef SK_SUPPORT_LEGACY_CANVAS_HELPERS
-// also doesn't know what to do with SK_REQUIRE_LOCAL_VAR()
- bool boilerplateDef(Definition* parent) {
- if (!this->boilerplateIfDef(parent)) {
- return false;
- }
- const char* s = fName.c_str();
- const char* e = strchr(s, '_');
- return true; // fixme: if this is trying to do something useful with define, do it here
- if (!e) {
- return false;
- }
- string prefix(s, e - s);
- const char* inName = strstr(parent->fName.c_str(), prefix.c_str());
- if (!inName) {
- return false;
- }
- if ('/' != inName[-1] && '\\' != inName[-1]) {
- return false;
- }
- if (strcmp(inName + prefix.size(), ".h")) {
- return false;
- }
- return true;
- }
+ bool boilerplateIfDef(Definition* parent);
+ bool boilerplateDef(Definition* parent);
bool boilerplateEndIf() {
return true;
}
bool checkMethod() const;
-
- void setCanonicalFiddle();
bool crossCheck2(const Definition& includeToken) const;
bool crossCheck(const Definition& includeToken) const;
bool crossCheckInside(const char* start, const char* end, const Definition& includeToken) const;
bool exampleToScript(string* result, ExampleOptions ) const;
-
- string extractText(TrimExtract trimExtract) const {
- string result;
- TextParser parser(fFileName, fContentStart, fContentEnd, fLineCount);
- int childIndex = 0;
- char mc = '#';
- while (parser.fChar < parser.fEnd) {
- if (TrimExtract::kYes == trimExtract && !parser.skipWhiteSpace()) {
- break;
- }
- if (parser.next() == mc) {
- if (parser.next() == mc) {
- if (parser.next() == mc) {
- mc = parser.next();
- }
- } else {
- // fixme : more work to do if # style comment is in text
- // if in method definition, could be alternate method name
- --parser.fChar;
- if (' ' < parser.fChar[0]) {
- if (islower(parser.fChar[0])) {
- result += '\n';
- parser.skipLine();
- } else {
- SkASSERT(isupper(parser.fChar[0]));
- parser.skipTo(fChildren[childIndex]->fTerminator);
- if (mc == parser.fChar[0] && mc == parser.fChar[1]) {
- parser.next();
- parser.next();
- }
- childIndex++;
- }
- } else {
- parser.skipLine();
- }
- continue;
- }
- } else {
- --parser.fChar;
- }
- const char* end = parser.fEnd;
- const char* mark = parser.strnchr(mc, end);
- if (mark) {
- end = mark;
- }
- string fragment(parser.fChar, end - parser.fChar);
- trim_end(fragment);
- if (TrimExtract::kYes == trimExtract) {
- trim_start(fragment);
- if (result.length()) {
- result += '\n';
- result += '\n';
- }
- }
- if (TrimExtract::kYes == trimExtract || has_nonwhitespace(fragment)) {
- result += fragment;
- }
- parser.skipTo(end);
- }
- return result;
- }
-
+ string extractText(TrimExtract trimExtract) const;
string fiddleName() const;
string formatFunction() const;
const Definition* hasChild(MarkType markType) const;
@@ -881,7 +838,9 @@ public:
string methodName() const;
bool nextMethodParam(TextParser* methodParser, const char** nextEndPtr,
string* paramName) const;
+ static string NormalizedName(string name);
bool paramsMatch(const string& fullRef, const string& name) const;
+ bool parseOperator(size_t doubleColons, string& result);
string printableName() const {
string result(fName);
@@ -896,11 +855,14 @@ public:
}
virtual RootDefinition* rootParent() { SkASSERT(0); return nullptr; }
+ void setCanonicalFiddle();
void setParentIndex() {
fParentIndex = fParent ? (int) fParent->fTokens.size() : -1;
}
+ void setWrapper();
+
string fText; // if text is constructed instead of in a file, it's put here
const char* fStart = nullptr; // .. in original text file, or the start of fText
const char* fContentStart; // start past optional markup name
@@ -913,6 +875,7 @@ public:
vector<Definition*> fChildren;
string fHash; // generated by fiddle
string fFileName;
+ mutable string fWrapper; // used by Example to wrap into proper function
size_t fLineCount = 0;
int fParentIndex = 0;
MarkType fMarkType = MarkType::kNone;
@@ -920,9 +883,11 @@ public:
Bracket fBracket = Bracket::kNone;
Punctuation fPunctuation = Punctuation::kNone;
MethodType fMethodType = MethodType::kNone;
+ Operator fOperator = Operator::kUnknown;
Type fType = Type::kNone;
bool fClone = false;
bool fCloned = false;
+ bool fOperatorConst = false;
bool fPrivate = false;
bool fShort = false;
bool fMemberStart = false;
@@ -957,7 +922,7 @@ public:
RootDefinition* asRoot() override { return this; }
const RootDefinition* asRoot() const override { return this; }
void clearVisited();
- bool dumpUnVisited();
+ bool dumpUnVisited(bool skip);
const Definition* find(const string& ref, AllowParens ) const;
bool isRoot() const override { return true; }
RootDefinition* rootParent() override { return fRootParent; }
@@ -1190,7 +1155,7 @@ public:
#define E_N Exemplary::kNo
#define E_O Exemplary::kOptional
- BmhParser() : ParserCommon()
+ BmhParser(bool skip) : ParserCommon()
, fMaps {
// names without formal definitions (e.g. Column) aren't included
// fill in other names once they're actually used
@@ -1247,10 +1212,11 @@ public:
, { "ToDo", nullptr, MarkType::kToDo, R_N, E_N, 0 }
, { "Topic", nullptr, MarkType::kTopic, R_Y, E_Y, M_CS | M(Root) | M(Topic) }
, { "Track", nullptr, MarkType::kTrack, R_Y, E_N, M_E | M_ST }
-, { "Typedef", &fTypedefMap, MarkType::kTypedef, R_Y, E_N, M(Subtopic) | M(Topic) }
+, { "Typedef", &fTypedefMap, MarkType::kTypedef, R_Y, E_N, M(Class) | M_ST }
, { "", nullptr, MarkType::kUnion, R_Y, E_N, 0 }
, { "Volatile", nullptr, MarkType::kVolatile, R_N, E_N, M(StdOut) }
, { "Width", nullptr, MarkType::kWidth, R_N, E_N, M(Example) } }
+, fSkip(skip)
{
this->reset();
}
@@ -1325,6 +1291,7 @@ public:
void spellCheck(const char* match, SkCommandLineFlags::StringArray report) const;
vector<string> topicName();
vector<string> typeName(MarkType markType, bool* expectEnd);
+ string typedefName();
string uniqueName(const string& base, MarkType markType);
string uniqueRootName(const string& base, MarkType markType);
void validate() const;
@@ -1366,6 +1333,7 @@ public:
bool fInComment;
bool fInString;
bool fCheckMethods;
+ bool fSkip = false;
bool fWroteOut = false;
private:
typedef ParserCommon INHERITED;
@@ -1707,6 +1675,7 @@ protected:
unordered_map<string, IClassDefinition> fIClassMap;
unordered_map<string, Definition> fIDefineMap;
unordered_map<string, Definition> fIEnumMap;
+ unordered_map<string, Definition> fIFunctionMap;
unordered_map<string, Definition> fIStructMap;
unordered_map<string, Definition> fITemplateMap;
unordered_map<string, Definition> fITypedefMap;
@@ -1988,6 +1957,7 @@ private:
fHasFiddle = false;
fInDescription = false;
fInList = false;
+ fRespectLeadingSpace = false;
}
BmhParser::Resolvable resolvable(const Definition* definition) const {
@@ -2018,6 +1988,7 @@ private:
bool fInDescription; // FIXME: for now, ignore unfound camelCase in description since it may
// be defined in example which at present cannot be linked to
bool fInList;
+ bool fRespectLeadingSpace;
typedef ParserCommon INHERITED;
};
@@ -2054,10 +2025,11 @@ public:
}
}
if (this->startsWith(fClassName.c_str()) || this->startsWith("operator")) {
- const char* ptr = this->anyOf(" (");
+ const char* ptr = this->anyOf("\n (");
if (ptr && '(' == *ptr) {
this->skipToEndBracket(')');
SkAssertResult(')' == this->next());
+ this->skipExact("_const");
return;
}
}
@@ -2066,6 +2038,14 @@ public:
this->skipToNonAlphaNum();
} else {
this->skipFullName();
+ if (this->endsWith("operator")) {
+ const char* ptr = this->anyOf("\n (");
+ if (ptr && '(' == *ptr) {
+ this->skipToEndBracket(')');
+ SkAssertResult(')' == this->next());
+ this->skipExact("_const");
+ }
+ }
}
}
diff --git a/tools/bookmaker/definition.cpp b/tools/bookmaker/definition.cpp
new file mode 100644
index 0000000000..44da2df268
--- /dev/null
+++ b/tools/bookmaker/definition.cpp
@@ -0,0 +1,1274 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "bookmaker.h"
+
+static size_t count_indent(const string& text, size_t test, size_t end) {
+ size_t result = test;
+ while (test < end) {
+ if (' ' != text[test]) {
+ break;
+ }
+ ++test;
+ }
+ return test - result;
+}
+
+static void add_code(const string& text, int pos, int end,
+ size_t outIndent, size_t textIndent, string& example) {
+ do {
+ // fix this to move whole paragraph in, out, but preserve doc indent
+ int nextIndent = count_indent(text, pos, end);
+ size_t len = text.find('\n', pos);
+ if (string::npos == len) {
+ len = end;
+ }
+ if ((size_t) (pos + nextIndent) < len) {
+ size_t indent = outIndent + nextIndent;
+ SkASSERT(indent >= textIndent);
+ indent -= textIndent;
+ for (size_t index = 0; index < indent; ++index) {
+ example += ' ';
+ }
+ pos += nextIndent;
+ while ((size_t) pos < len) {
+ example += '"' == text[pos] ? "\\\"" :
+ '\\' == text[pos] ? "\\\\" :
+ text.substr(pos, 1);
+ ++pos;
+ }
+ example += "\\n";
+ } else {
+ pos += nextIndent;
+ }
+ if ('\n' == text[pos]) {
+ ++pos;
+ }
+ } while (pos < end);
+}
+
+#ifdef CONST
+#undef CONST
+#endif
+
+#ifdef FRIEND
+#undef FRIEND
+#endif
+
+#ifdef BLANK
+#undef BLANK
+#endif
+
+#ifdef ANY
+#undef ANY
+#endif
+
+#ifdef DEFOP
+#undef DEFOP
+#endif
+
+#define CONST 1
+#define STATIC 2
+#define BLANK 0
+#define ANY -1
+#define DEFOP Definition::Operator
+
+enum class OpType : int8_t {
+ kNone,
+ kVoid,
+ kBool,
+ kChar,
+ kFloat,
+ kInt,
+ kScalar,
+ kSizeT,
+ kThis,
+ kAny,
+};
+
+enum class OpMod : int8_t {
+ kNone,
+ kArray,
+ kMove,
+ kPointer,
+ kReference,
+ kAny,
+};
+
+const struct OperatorParser {
+ DEFOP fOperator;
+ const char* fSymbol;
+ const char* fName;
+ int8_t fFriend;
+ OpType fReturnType;
+ OpMod fReturnMod;
+ int8_t fConstMethod;
+ struct Param {
+ int8_t fConst;
+ OpType fType;
+ OpMod fMod;
+ } fParams[2];
+} opData[] = {
+ { DEFOP::kUnknown, "??", "???", BLANK, OpType::kNone, OpMod::kNone, BLANK,
+ { } },
+ { DEFOP::kAdd, "+", "add", BLANK, OpType::kThis, OpMod::kNone, BLANK,
+ {{ CONST, OpType::kThis, OpMod::kReference, },
+ { CONST, OpType::kThis, OpMod::kReference, }}},
+ { DEFOP::kAddTo, "+=", "addto", BLANK, OpType::kVoid, OpMod::kNone, BLANK,
+ {{ CONST, OpType::kThis, OpMod::kReference, }}},
+ { DEFOP::kAddTo, "+=", "addto1", BLANK, OpType::kThis, OpMod::kReference, BLANK,
+ {{ CONST, OpType::kThis, OpMod::kReference, }}},
+ { DEFOP::kAddTo, "+=", "addto2", BLANK, OpType::kThis, OpMod::kReference, BLANK,
+ {{ CONST, OpType::kChar, OpMod::kArray, }}},
+ { DEFOP::kAddTo, "+=", "addto3", BLANK, OpType::kThis, OpMod::kReference, BLANK,
+ {{ CONST, OpType::kChar, OpMod::kNone, }}},
+ { DEFOP::kArray, "[]", "array", BLANK, OpType::kScalar, OpMod::kNone, CONST,
+ {{ BLANK, OpType::kInt, OpMod::kNone, }}},
+ { DEFOP::kArray, "[]", "array1", BLANK, OpType::kScalar, OpMod::kReference, BLANK,
+ {{ BLANK, OpType::kInt, OpMod::kNone, }}},
+ { DEFOP::kArray, "[]", "array2", BLANK, OpType::kChar, OpMod::kNone, CONST,
+ {{ BLANK, OpType::kSizeT, OpMod::kNone, }}},
+ { DEFOP::kArray, "[]", "array3", BLANK, OpType::kChar, OpMod::kReference, BLANK,
+ {{ BLANK, OpType::kSizeT, OpMod::kNone, }}},
+ { DEFOP::kCast, "()", "cast", BLANK, OpType::kAny, OpMod::kAny, ANY,
+ {{ ANY, OpType::kAny, OpMod::kAny, }}},
+ { DEFOP::kCopy, "=", "copy", BLANK, OpType::kThis, OpMod::kReference, BLANK,
+ {{ CONST, OpType::kThis, OpMod::kReference, }}},
+ { DEFOP::kCopy, "=", "copy1", BLANK, OpType::kThis, OpMod::kReference, BLANK,
+ {{ CONST, OpType::kChar, OpMod::kArray, }}},
+ { DEFOP::kDelete, "delete", "delete", BLANK, OpType::kVoid, OpMod::kNone, BLANK,
+ {{ BLANK, OpType::kVoid, OpMod::kPointer, }}},
+ { DEFOP::kDereference, "->", "deref", ANY, OpType::kThis, OpMod::kPointer, CONST,
+ { } },
+ { DEFOP::kDereference, "*", "deref", BLANK, OpType::kThis, OpMod::kReference, CONST,
+ { } },
+ { DEFOP::kEqual, "==", "equal", BLANK, OpType::kBool, OpMod::kNone, BLANK,
+ {{ CONST, OpType::kThis, OpMod::kReference, },
+ { CONST, OpType::kThis, OpMod::kReference, }}},
+ { DEFOP::kEqual, "==", "equal1", BLANK, OpType::kBool, OpMod::kNone, CONST,
+ {{ CONST, OpType::kThis, OpMod::kReference, }}},
+ { DEFOP::kEqual, "==", "equal2", ANY, OpType::kBool, OpMod::kNone, BLANK,
+ {{ CONST, OpType::kThis, OpMod::kReference, },
+ { CONST, OpType::kThis, OpMod::kReference, }}},
+ { DEFOP::kMinus, "-", "minus", BLANK, OpType::kThis, OpMod::kNone, CONST,
+ { } },
+ { DEFOP::kMove, "=", "move", BLANK, OpType::kThis, OpMod::kReference, BLANK,
+ {{ BLANK, OpType::kThis, OpMod::kMove, }}},
+ { DEFOP::kMultiply, "*", "multiply", BLANK, OpType::kThis, OpMod::kNone, CONST,
+ {{ BLANK, OpType::kScalar, OpMod::kNone, }}},
+ { DEFOP::kMultiply, "*", "multiply1", BLANK, OpType::kThis, OpMod::kNone, BLANK,
+ {{ CONST, OpType::kThis, OpMod::kReference, },
+ { CONST, OpType::kThis, OpMod::kReference, }}},
+ { DEFOP::kMultiplyBy, "*=", "multiplyby", BLANK, OpType::kThis, OpMod::kReference, BLANK,
+ {{ BLANK, OpType::kScalar, OpMod::kNone, }}},
+ { DEFOP::kNew, "new", "new", BLANK, OpType::kVoid, OpMod::kPointer, BLANK,
+ {{ BLANK, OpType::kSizeT, OpMod::kNone, }}},
+ { DEFOP::kNotEqual, "!=", "notequal", BLANK, OpType::kBool, OpMod::kNone, BLANK,
+ {{ CONST, OpType::kThis, OpMod::kReference, },
+ { CONST, OpType::kThis, OpMod::kReference, }}},
+ { DEFOP::kNotEqual, "!=", "notequal1", BLANK, OpType::kBool, OpMod::kNone, CONST,
+ {{ CONST, OpType::kThis, OpMod::kReference, }}},
+ { DEFOP::kNotEqual, "!=", "notequal2", ANY, OpType::kBool, OpMod::kNone, BLANK,
+ {{ CONST, OpType::kThis, OpMod::kReference, },
+ { CONST, OpType::kThis, OpMod::kReference, }}},
+ { DEFOP::kSubtract, "-", "subtract", BLANK, OpType::kThis, OpMod::kNone, BLANK,
+ {{ CONST, OpType::kThis, OpMod::kReference, },
+ { CONST, OpType::kThis, OpMod::kReference, }}},
+ { DEFOP::kSubtractFrom, "-=", "subtractfrom", BLANK, OpType::kVoid, OpMod::kNone, BLANK,
+ {{ CONST, OpType::kThis, OpMod::kReference, }}},
+};
+
+OpType lookup_type(const string& typeWord, const string& name) {
+ if (typeWord == name || (typeWord == "SkIVector" && name == "SkIPoint")
+ || (typeWord == "SkVector" && name == "SkPoint")) {
+ return OpType::kThis;
+ }
+ const char* keyWords[] = { "void", "bool", "char", "float", "int", "SkScalar", "size_t" };
+ for (unsigned i = 0; i < SK_ARRAY_COUNT(keyWords); ++i) {
+ if (typeWord == keyWords[i]) {
+ return (OpType) (i + 1);
+ }
+ }
+ return OpType::kNone;
+}
+
+OpMod lookup_mod(TextParser& iParser) {
+ OpMod mod = OpMod::kNone;
+ if ('&' == iParser.peek()) {
+ mod = OpMod::kReference;
+ iParser.next();
+ if ('&' == iParser.peek()) {
+ mod = OpMod::kMove;
+ iParser.next();
+ }
+ } else if ('*' == iParser.peek()) {
+ mod = OpMod::kPointer;
+ iParser.next();
+ }
+ iParser.skipWhiteSpace();
+ return mod;
+}
+
+bool Definition::parseOperator(size_t doubleColons, string& result) {
+ const char operatorStr[] = "operator";
+ size_t opPos = fName.find(operatorStr, doubleColons);
+ if (string::npos == opPos) {
+ return false;
+ }
+ string className(fName, 0, doubleColons - 2);
+ TextParser iParser(fFileName, fStart, fContentStart, fLineCount);
+ SkAssertResult(iParser.skipWord("#Method"));
+ iParser.skipExact("SK_API");
+ iParser.skipWhiteSpace();
+ bool isStatic = iParser.skipExact("static");
+ iParser.skipWhiteSpace();
+ iParser.skipExact("SK_API");
+ iParser.skipWhiteSpace();
+ bool returnsConst = iParser.skipExact("const");
+ if (returnsConst) {
+ SkASSERT(0); // incomplete
+ }
+ SkASSERT(isStatic == false || returnsConst == false);
+ iParser.skipWhiteSpace();
+ const char* returnTypeStart = iParser.fChar;
+ iParser.skipToNonAlphaNum();
+ SkASSERT(iParser.fChar > returnTypeStart);
+ string returnType(returnTypeStart, iParser.fChar - returnTypeStart);
+ OpType returnOpType = lookup_type(returnType, className);
+ iParser.skipWhiteSpace();
+ OpMod returnMod = lookup_mod(iParser);
+ SkAssertResult(iParser.skipExact("operator"));
+ iParser.skipWhiteSpace();
+ fMethodType = Definition::MethodType::kOperator;
+ TextParser::Save save(&iParser);
+ for (auto parser : opData) {
+ save.restore();
+ if (!iParser.skipExact(parser.fSymbol)) {
+ continue;
+ }
+ iParser.skipWhiteSpace();
+ if ('(' != iParser.peek()) {
+ continue;
+ }
+ if (parser.fFriend != ANY && (parser.fFriend == STATIC) != isStatic) {
+ continue;
+ }
+ if (parser.fReturnType != OpType::kAny && parser.fReturnType != returnOpType) {
+ continue;
+ }
+ if (parser.fReturnMod != OpMod::kAny && parser.fReturnMod != returnMod) {
+ continue;
+ }
+ iParser.next(); // skip '('
+ iParser.skipWhiteSpace();
+ int parserCount = (parser.fParams[0].fType != OpType::kNone) +
+ (parser.fParams[1].fType != OpType::kNone);
+ bool countsMatch = true;
+ for (int pIndex = 0; pIndex < 2; ++pIndex) {
+ if (')' == iParser.peek()) {
+ countsMatch = pIndex == parserCount;
+ break;
+ }
+ if (',' == iParser.peek()) {
+ iParser.next();
+ iParser.skipWhiteSpace();
+ }
+ bool paramConst = iParser.skipExact("const");
+ if (parser.fParams[pIndex].fConst != ANY &&
+ paramConst != (parser.fParams[pIndex].fConst == CONST)) {
+ countsMatch = false;
+ break;
+ }
+ iParser.skipWhiteSpace();
+ const char* paramStart = iParser.fChar;
+ iParser.skipToNonAlphaNum();
+ SkASSERT(iParser.fChar > paramStart);
+ string paramType(paramStart, iParser.fChar - paramStart);
+ OpType paramOpType = lookup_type(paramType, className);
+ if (parser.fParams[pIndex].fType != OpType::kAny &&
+ parser.fParams[pIndex].fType != paramOpType) {
+ countsMatch = false;
+ break;
+ }
+ iParser.skipWhiteSpace();
+ OpMod paramMod = lookup_mod(iParser);
+ if (parser.fParams[pIndex].fMod != OpMod::kAny &&
+ parser.fParams[pIndex].fMod != paramMod) {
+ countsMatch = false;
+ break;
+ }
+ iParser.skipToNonAlphaNum();
+ if ('[' == iParser.peek()) {
+ paramMod = OpMod::kArray;
+ SkAssertResult(iParser.skipExact("[]"));
+ }
+ iParser.skipWhiteSpace();
+ }
+ if (!countsMatch) {
+ continue;
+ }
+ if (')' != iParser.peek()) {
+ continue;
+ }
+ iParser.next();
+ bool constMethod = iParser.skipExact("_const");
+ if (parser.fConstMethod != ANY && (parser.fConstMethod == CONST) != constMethod) {
+ continue;
+ }
+ result += parser.fName;
+ result += "_operator";
+ fOperator = parser.fOperator;
+ fOperatorConst = constMethod;
+ return true;
+ }
+ SkASSERT(0); // incomplete
+ return false;
+#if 0
+ if ('!' == fName[opPos]) {
+ SkASSERT('=' == fName[opPos + 1]);
+ result += "not_equal_operator";
+ } else if ('=' == fName[opPos]) {
+ if ('(' == fName[opPos + 1]) {
+ result += isMove ? "move_" : "copy_";
+ result += "assignment_operator";
+ } else {
+ SkASSERT('=' == fName[opPos + 1]);
+ result += "equal_operator";
+ }
+ } else if ('[' == fName[opPos]) {
+ result += "subscript_operator";
+ const char* end = fContentStart;
+ while (end > fStart && ' ' >= end[-1]) {
+ --end;
+ }
+ string constCheck(fStart, end - fStart);
+ size_t constPos = constCheck.rfind("const");
+ if (constCheck.length() == constPos + 5) {
+ result += "_const";
+ }
+ } else if ('*' == fName[opPos]) {
+ result += "multiply_operator";
+ } else if ('-' == fName[opPos]) {
+ result += "subtract_operator";
+ } else if ('+' == fName[opPos]) {
+ result += "add_operator";
+ } else {
+ SkASSERT(0); // todo: incomplete
+ }
+#endif
+ return true;
+}
+
+#undef CONST
+#undef FRIEND
+#undef BLANK
+#undef DEFOP
+
+bool Definition::boilerplateIfDef(Definition* parent) {
+ const Definition& label = fTokens.front();
+ if (Type::kWord != label.fType) {
+ return false;
+ }
+ fName = string(label.fContentStart, label.fContentEnd - label.fContentStart);
+ return true;
+}
+
+// todo: this is matching #ifndef SkXXX_DEFINED for no particular reason
+// it doesn't do anything useful with arbitrary input, e.g. #ifdef SK_SUPPORT_LEGACY_CANVAS_HELPERS
+// also doesn't know what to do with SK_REQUIRE_LOCAL_VAR()
+bool Definition::boilerplateDef(Definition* parent) {
+ if (!this->boilerplateIfDef(parent)) {
+ return false;
+ }
+ const char* s = fName.c_str();
+ const char* e = strchr(s, '_');
+ return true; // fixme: if this is trying to do something useful with define, do it here
+ if (!e) {
+ return false;
+ }
+ string prefix(s, e - s);
+ const char* inName = strstr(parent->fName.c_str(), prefix.c_str());
+ if (!inName) {
+ return false;
+ }
+ if ('/' != inName[-1] && '\\' != inName[-1]) {
+ return false;
+ }
+ if (strcmp(inName + prefix.size(), ".h")) {
+ return false;
+ }
+ return true;
+}
+
+// fixme: this will need to be more complicated to handle all of Skia
+// for now, just handle paint -- maybe fiddle will loosen naming restrictions
+void Definition::setCanonicalFiddle() {
+ fMethodType = Definition::MethodType::kNone;
+ size_t doubleColons = fName.find("::", 0);
+ SkASSERT(string::npos != doubleColons);
+ string base = fName.substr(0, doubleColons);
+ string result = base + "_";
+ doubleColons += 2;
+ if (string::npos != fName.find('~', doubleColons)) {
+ fMethodType = Definition::MethodType::kDestructor;
+ result += "destructor";
+ } else if (!this->parseOperator(doubleColons, result)) {
+ bool isMove = string::npos != fName.find("&&", doubleColons);
+ size_t parens = fName.find("()", doubleColons);
+ if (string::npos != parens) {
+ string methodName = fName.substr(doubleColons, parens - doubleColons);
+ do {
+ size_t nextDouble = methodName.find("::");
+ if (string::npos == nextDouble) {
+ break;
+ }
+ base = methodName.substr(0, nextDouble);
+ result += base + '_';
+ methodName = methodName.substr(nextDouble + 2);
+ doubleColons += nextDouble + 2;
+ } while (true);
+ if (base == methodName) {
+ fMethodType = Definition::MethodType::kConstructor;
+ result += "empty_constructor";
+ } else {
+ result += fName.substr(doubleColons, fName.length() - doubleColons - 2);
+ }
+ } else {
+ size_t openParen = fName.find('(', doubleColons);
+ if (string::npos == openParen) {
+ result += fName.substr(doubleColons);
+ } else {
+ size_t comma = fName.find(',', doubleColons);
+ if (string::npos == comma) {
+ result += isMove ? "move_" : "copy_";
+ }
+ fMethodType = Definition::MethodType::kConstructor;
+ // name them by their param types,
+ // e.g. SkCanvas__int_int_const_SkSurfaceProps_star
+ // TODO: move forward until parens are balanced and terminator =,)
+ TextParser params("", &fName[openParen] + 1, &*fName.end(), 0);
+ bool underline = false;
+ while (!params.eof()) {
+// SkDEBUGCODE(const char* end = params.anyOf("(),=")); // unused for now
+// SkASSERT(end[0] != '('); // fixme: put off handling nested parentheseses
+ if (params.startsWith("const") || params.startsWith("int")
+ || params.startsWith("Sk")) {
+ const char* wordStart = params.fChar;
+ params.skipToNonAlphaNum();
+ if (underline) {
+ result += '_';
+ } else {
+ underline = true;
+ }
+ result += string(wordStart, params.fChar - wordStart);
+ } else {
+ params.skipToNonAlphaNum();
+ }
+ if (!params.eof() && '*' == params.peek()) {
+ if (underline) {
+ result += '_';
+ } else {
+ underline = true;
+ }
+ result += "star";
+ params.next();
+ params.skipSpace();
+ }
+ params.skipToAlpha();
+ }
+ }
+ }
+ }
+ fFiddle = Definition::NormalizedName(result);
+}
+
+void Definition::setWrapper() {
+ const char drawWrapper[] = "void draw(SkCanvas* canvas) {";
+ const char drawNoCanvas[] = "void draw(SkCanvas* ) {";
+ string text = this->extractText(Definition::TrimExtract::kNo);
+ size_t nonSpace = 0;
+ while (nonSpace < text.length() && ' ' >= text[nonSpace]) {
+ ++nonSpace;
+ }
+ bool hasFunc = !text.compare(nonSpace, sizeof(drawWrapper) - 1, drawWrapper);
+ bool noCanvas = !text.compare(nonSpace, sizeof(drawNoCanvas) - 1, drawNoCanvas);
+ bool hasCanvas = string::npos != text.find("SkCanvas canvas");
+ SkASSERT(!hasFunc || !noCanvas);
+ bool preprocessor = text[0] == '#';
+ bool wrapCode = !hasFunc && !noCanvas && !preprocessor;
+ if (wrapCode) {
+ fWrapper = hasCanvas ? string(drawNoCanvas) : string(drawWrapper);
+ }
+}
+
+bool Definition::exampleToScript(string* result, ExampleOptions exampleOptions) const {
+ bool hasFiddle = true;
+ const Definition* platform = this->hasChild(MarkType::kPlatform);
+ if (platform) {
+ TextParser platParse(platform);
+ hasFiddle = !platParse.strnstr("!fiddle", platParse.fEnd);
+ }
+ if (!hasFiddle) {
+ *result = "";
+ return true;
+ }
+ string text = this->extractText(Definition::TrimExtract::kNo);
+ bool textOut = string::npos != text.find("SkDebugf(")
+ || string::npos != text.find("dump(")
+ || string::npos != text.find("dumpHex(");
+ string heightStr = "256";
+ string widthStr = "256";
+ string normalizedName(fFiddle);
+ string code;
+ string imageStr = "0";
+ for (auto const& iter : fChildren) {
+ switch (iter->fMarkType) {
+ case MarkType::kError:
+ result->clear();
+ return true;
+ case MarkType::kHeight:
+ heightStr = string(iter->fContentStart, iter->fContentEnd - iter->fContentStart);
+ break;
+ case MarkType::kWidth:
+ widthStr = string(iter->fContentStart, iter->fContentEnd - iter->fContentStart);
+ break;
+ case MarkType::kDescription:
+ // ignore for now
+ break;
+ case MarkType::kFunction: {
+ // emit this, but don't wrap this in draw()
+ string funcText(iter->fContentStart, iter->fContentEnd - iter->fContentStart - 1);
+ size_t pos = 0;
+ while (pos < funcText.length() && ' ' > funcText[pos]) {
+ ++pos;
+ }
+ size_t indent = count_indent(funcText, pos, funcText.length());
+ add_code(funcText, pos, funcText.length(), 0, indent, code);
+ code += "\\n";
+ } break;
+ case MarkType::kComment:
+ break;
+ case MarkType::kImage:
+ imageStr = string(iter->fContentStart, iter->fContentEnd - iter->fContentStart);
+ break;
+ case MarkType::kToDo:
+ break;
+ case MarkType::kMarkChar:
+ case MarkType::kPlatform:
+ // ignore for now
+ break;
+ case MarkType::kStdOut:
+ textOut = true;
+ break;
+ default:
+ SkASSERT(0); // more coding to do
+ }
+ }
+ string textOutStr = textOut ? "true" : "false";
+ size_t pos = 0;
+ while (pos < text.length() && ' ' > text[pos]) {
+ ++pos;
+ }
+ size_t end = text.length();
+ size_t outIndent = 0;
+ size_t textIndent = count_indent(text, pos, end);
+ if ("MakeFromBackendTexture" == fName) {
+ SkDebugf("");
+ }
+ if (fWrapper.length() > 0) {
+ code += fWrapper;
+ code += "\\n";
+ outIndent = 4;
+ }
+ add_code(text, pos, end, outIndent, textIndent, code);
+ if (fWrapper.length() > 0) {
+ code += "}";
+ }
+ string example = "\"" + normalizedName + "\": {\n";
+ size_t nameStart = fFileName.find("\\", 0);
+ SkASSERT(string::npos != nameStart);
+ string baseFile = fFileName.substr(nameStart + 1, fFileName.length() - nameStart - 5);
+ if (ExampleOptions::kText == exampleOptions) {
+ example += " \"code\": \"" + code + "\",\n";
+ example += " \"hash\": \"" + fHash + "\",\n";
+ example += " \"file\": \"" + baseFile + "\",\n";
+ example += " \"name\": \"" + fName + "\",";
+ } else {
+ example += " \"code\": \"" + code + "\",\n";
+ if (ExampleOptions::kPng == exampleOptions) {
+ example += " \"width\": " + widthStr + ",\n";
+ example += " \"height\": " + heightStr + ",\n";
+ example += " \"hash\": \"" + fHash + "\",\n";
+ example += " \"file\": \"" + baseFile + "\",\n";
+ example += " \"name\": \"" + fName + "\"\n";
+ example += "}";
+ } else {
+ example += " \"options\": {\n";
+ example += " \"width\": " + widthStr + ",\n";
+ example += " \"height\": " + heightStr + ",\n";
+ example += " \"source\": " + imageStr + ",\n";
+ example += " \"srgb\": false,\n";
+ example += " \"f16\": false,\n";
+ example += " \"textOnly\": " + textOutStr + ",\n";
+ example += " \"animated\": false,\n";
+ example += " \"duration\": 0\n";
+ example += " },\n";
+ example += " \"fast\": true";
+ }
+ }
+ *result = example;
+ return true;
+}
+
+string Definition::extractText(TrimExtract trimExtract) const {
+ string result;
+ TextParser parser(fFileName, fContentStart, fContentEnd, fLineCount);
+ int childIndex = 0;
+ char mc = '#';
+ while (parser.fChar < parser.fEnd) {
+ if (TrimExtract::kYes == trimExtract && !parser.skipWhiteSpace()) {
+ break;
+ }
+ if (parser.next() == mc) {
+ if (parser.next() == mc) {
+ if (parser.next() == mc) {
+ mc = parser.next();
+ }
+ } else {
+ // fixme : more work to do if # style comment is in text
+ // if in method definition, could be alternate method name
+ --parser.fChar;
+ if (' ' < parser.fChar[0]) {
+ if (islower(parser.fChar[0])) {
+ result += '\n';
+ parser.skipLine();
+ } else {
+ SkASSERT(isupper(parser.fChar[0]));
+ parser.skipTo(fChildren[childIndex]->fTerminator);
+ if (mc == parser.fChar[0] && mc == parser.fChar[1]) {
+ parser.next();
+ parser.next();
+ }
+ childIndex++;
+ }
+ } else {
+ parser.skipLine();
+ }
+ continue;
+ }
+ } else {
+ --parser.fChar;
+ }
+ const char* end = parser.fEnd;
+ const char* mark = parser.strnchr(mc, end);
+ if (mark) {
+ end = mark;
+ }
+ string fragment(parser.fChar, end - parser.fChar);
+ trim_end(fragment);
+ if (TrimExtract::kYes == trimExtract) {
+ trim_start(fragment);
+ if (result.length()) {
+ result += '\n';
+ result += '\n';
+ }
+ }
+ if (TrimExtract::kYes == trimExtract || has_nonwhitespace(fragment)) {
+ result += fragment;
+ }
+ parser.skipTo(end);
+ }
+ return result;
+}
+
+static void space_pad(string* str) {
+ size_t len = str->length();
+ if (len == 0) {
+ return;
+ }
+ char last = (*str)[len - 1];
+ if ('~' == last || ' ' >= last) {
+ return;
+ }
+ *str += ' ';
+}
+
+//start here;
+// see if it possible to abstract this a little bit so it can
+// additionally be used to find params and return in method prototype that
+// does not have corresponding doxygen comments
+bool Definition::checkMethod() const {
+ SkASSERT(MarkType::kMethod == fMarkType);
+ // if method returns a value, look for a return child
+ // for each parameter, look for a corresponding child
+ const char* end = fContentStart;
+ while (end > fStart && ' ' >= end[-1]) {
+ --end;
+ }
+ TextParser methodParser(fFileName, fStart, end, fLineCount);
+ methodParser.skipWhiteSpace();
+ SkASSERT(methodParser.startsWith("#Method"));
+ methodParser.skipName("#Method");
+ methodParser.skipSpace();
+ string name = this->methodName();
+ if (MethodType::kNone == fMethodType && name.length() > 2 &&
+ "()" == name.substr(name.length() - 2)) {
+ name = name.substr(0, name.length() - 2);
+ }
+ bool expectReturn = this->methodHasReturn(name, &methodParser);
+ bool foundReturn = false;
+ bool foundException = false;
+ for (auto& child : fChildren) {
+ foundException |= MarkType::kDeprecated == child->fMarkType
+ || MarkType::kExperimental == child->fMarkType;
+ if (MarkType::kReturn != child->fMarkType) {
+ if (MarkType::kParam == child->fMarkType) {
+ child->fVisited = false;
+ }
+ continue;
+ }
+ if (!expectReturn) {
+ return methodParser.reportError<bool>("no #Return expected");
+ }
+ if (foundReturn) {
+ return methodParser.reportError<bool>("multiple #Return markers");
+ }
+ foundReturn = true;
+ }
+ if (expectReturn && !foundReturn && !foundException) {
+ return methodParser.reportError<bool>("missing #Return marker");
+ }
+ const char* paren = methodParser.strnchr('(', methodParser.fEnd);
+ if (!paren) {
+ return methodParser.reportError<bool>("missing #Method function definition");
+ }
+ const char* nextEnd = paren;
+ do {
+ string paramName;
+ methodParser.fChar = nextEnd + 1;
+ methodParser.skipSpace();
+ if (!this->nextMethodParam(&methodParser, &nextEnd, &paramName)) {
+ continue;
+ }
+ bool foundParam = false;
+ for (auto& child : fChildren) {
+ if (MarkType::kParam != child->fMarkType) {
+ continue;
+ }
+ if (paramName != child->fName) {
+ continue;
+ }
+ if (child->fVisited) {
+ return methodParser.reportError<bool>("multiple #Method param with same name");
+ }
+ child->fVisited = true;
+ if (foundParam) {
+ TextParser paramError(child);
+ return methodParser.reportError<bool>("multiple #Param with same name");
+ }
+ foundParam = true;
+
+ }
+ if (!foundParam && !foundException) {
+ return methodParser.reportError<bool>("no #Param found");
+ }
+ if (')' == nextEnd[0]) {
+ break;
+ }
+ } while (')' != nextEnd[0]);
+ for (auto& child : fChildren) {
+ if (MarkType::kParam != child->fMarkType) {
+ continue;
+ }
+ if (!child->fVisited) {
+ TextParser paramError(child);
+ return paramError.reportError<bool>("#Param without param in #Method");
+ }
+ }
+ return true;
+}
+
+bool Definition::crossCheck2(const Definition& includeToken) const {
+ TextParser parser(fFileName, fStart, fContentStart, fLineCount);
+ parser.skipExact("#");
+ bool isMethod = parser.skipName("Method");
+ const char* contentEnd;
+ if (isMethod) {
+ contentEnd = fContentStart;
+ } else if (parser.skipName("DefinedBy")) {
+ contentEnd = fContentEnd;
+ while (parser.fChar < contentEnd && ' ' >= contentEnd[-1]) {
+ --contentEnd;
+ }
+ if (parser.fChar < contentEnd - 1 && ')' == contentEnd[-1] && '(' == contentEnd[-2]) {
+ contentEnd -= 2;
+ }
+ } else {
+ return parser.reportError<bool>("unexpected crosscheck marktype");
+ }
+ return crossCheckInside(parser.fChar, contentEnd, includeToken);
+}
+
+bool Definition::crossCheck(const Definition& includeToken) const {
+ return crossCheckInside(fContentStart, fContentEnd, includeToken);
+}
+
+bool Definition::crossCheckInside(const char* start, const char* end,
+ const Definition& includeToken) const {
+ TextParser def(fFileName, start, end, fLineCount);
+ TextParser inc("", includeToken.fContentStart, includeToken.fContentEnd, 0);
+ if (inc.startsWith("SK_API")) {
+ inc.skipWord("SK_API");
+ }
+ if (inc.startsWith("friend")) {
+ inc.skipWord("friend");
+ }
+ if (inc.startsWith("SK_API")) {
+ inc.skipWord("SK_API");
+ }
+ inc.skipExact("SkDEBUGCODE(");
+ do {
+ bool defEof;
+ bool incEof;
+ do {
+ defEof = def.eof() || !def.skipWhiteSpace();
+ incEof = inc.eof() || !inc.skipWhiteSpace();
+ if (!incEof && '/' == inc.peek() && (defEof || '/' != def.peek())) {
+ inc.next();
+ if ('*' == inc.peek()) {
+ inc.skipToEndBracket("*/");
+ inc.next();
+ } else if ('/' == inc.peek()) {
+ inc.skipToEndBracket('\n');
+ }
+ } else if (!incEof && '#' == inc.peek() && (defEof || '#' != def.peek())) {
+ inc.next();
+ if (inc.startsWith("if")) {
+ inc.skipToEndBracket("\n");
+ } else if (inc.startsWith("endif")) {
+ inc.skipToEndBracket("\n");
+ } else {
+ SkASSERT(0); // incomplete
+ return false;
+ }
+ } else {
+ break;
+ }
+ inc.next();
+ } while (true);
+ if (defEof || incEof) {
+ if (defEof == incEof || (!defEof && ';' == def.peek())) {
+ return true;
+ }
+ return false; // allow setting breakpoint on failure
+ }
+ char defCh;
+ do {
+ defCh = def.next();
+ char incCh = inc.next();
+ if (' ' >= defCh && ' ' >= incCh) {
+ break;
+ }
+ if (defCh != incCh) {
+ if ('_' != defCh || ' ' != incCh || !fOperatorConst || !def.startsWith("const")) {
+ return false;
+ }
+ }
+ if (';' == defCh) {
+ return true;
+ }
+ } while (!def.eof() && !inc.eof());
+ } while (true);
+ return false;
+}
+
+string Definition::formatFunction() const {
+ const char* end = fContentStart;
+ while (end > fStart && ' ' >= end[-1]) {
+ --end;
+ }
+ TextParser methodParser(fFileName, fStart, end, fLineCount);
+ methodParser.skipWhiteSpace();
+ SkASSERT(methodParser.startsWith("#Method"));
+ methodParser.skipName("#Method");
+ methodParser.skipSpace();
+ const char* lastStart = methodParser.fChar;
+ const int limit = 100; // todo: allow this to be set by caller or in global or something
+ string name = this->methodName();
+ if ("MakeFromBackendTextureAsRenderTarget" == name) {
+ SkDebugf("");
+ }
+ const char* nameInParser = methodParser.strnstr(name.c_str(), methodParser.fEnd);
+ methodParser.skipTo(nameInParser);
+ const char* lastEnd = methodParser.fChar;
+ const char* paren = methodParser.strnchr('(', methodParser.fEnd);
+ size_t indent;
+ if (paren) {
+ indent = (size_t) (paren - lastStart) + 1;
+ } else {
+ indent = (size_t) (lastEnd - lastStart);
+ }
+ // trim indent so longest line doesn't exceed box width
+ TextParser::Save savePlace(&methodParser);
+ const char* saveStart = lastStart;
+ ptrdiff_t maxLine = 0;
+ do {
+ const char* nextStart = lastEnd;
+ const char* delimiter = methodParser.anyOf(",)");
+ const char* nextEnd = delimiter ? delimiter : methodParser.fEnd;
+ if (delimiter) {
+ while (nextStart < nextEnd && ' ' >= nextStart[0]) {
+ ++nextStart;
+ }
+ }
+ while (nextEnd > nextStart && ' ' >= nextEnd[-1]) {
+ --nextEnd;
+ }
+ if (delimiter) {
+ nextEnd += 1;
+ delimiter += 1;
+ }
+ if (lastEnd > lastStart) {
+ maxLine = SkTMax(maxLine, lastEnd - lastStart);
+ }
+ if (delimiter) {
+ methodParser.skipTo(delimiter);
+ }
+ lastStart = nextStart;
+ lastEnd = nextEnd;
+ } while (lastStart < lastEnd);
+ savePlace.restore();
+ lastStart = saveStart;
+ lastEnd = methodParser.fChar;
+ indent = SkTMin(indent, (size_t) (limit - maxLine));
+ // write string wtih trimmmed indent
+ string methodStr;
+ int written = 0;
+ do {
+ const char* nextStart = lastEnd;
+ SkASSERT(written < limit);
+ const char* delimiter = methodParser.anyOf(",)");
+ const char* nextEnd = delimiter ? delimiter : methodParser.fEnd;
+ if (delimiter) {
+ while (nextStart < nextEnd && ' ' >= nextStart[0]) {
+ ++nextStart;
+ }
+ }
+ while (nextEnd > nextStart && ' ' >= nextEnd[-1]) {
+ --nextEnd;
+ }
+ if (delimiter) {
+ nextEnd += 1;
+ delimiter += 1;
+ }
+ if (lastEnd > lastStart) {
+ if (lastStart[0] != ' ') {
+ space_pad(&methodStr);
+ }
+ methodStr += string(lastStart, (size_t) (lastEnd - lastStart));
+ written += (size_t) (lastEnd - lastStart);
+ }
+ if (delimiter) {
+ if (nextEnd - nextStart >= (ptrdiff_t) (limit - written)) {
+ written = indent;
+ methodStr += '\n';
+ methodStr += string(indent, ' ');
+ }
+ methodParser.skipTo(delimiter);
+ }
+ lastStart = nextStart;
+ lastEnd = nextEnd;
+ } while (lastStart < lastEnd);
+ return methodStr;
+}
+
+string Definition::fiddleName() const {
+ string result;
+ size_t start = 0;
+ string parent;
+ const Definition* parentDef = this;
+ while ((parentDef = parentDef->fParent)) {
+ if (MarkType::kClass == parentDef->fMarkType || MarkType::kStruct == parentDef->fMarkType) {
+ parent = parentDef->fFiddle;
+ break;
+ }
+ }
+ if (parent.length() && 0 == fFiddle.compare(0, parent.length(), parent)) {
+ start = parent.length();
+ while (start < fFiddle.length() && '_' == fFiddle[start]) {
+ ++start;
+ }
+ }
+ size_t end = fFiddle.find_first_of('(', start);
+ return fFiddle.substr(start, end - start);
+}
+
+const Definition* Definition::hasChild(MarkType markType) const {
+ for (auto iter : fChildren) {
+ if (markType == iter->fMarkType) {
+ return iter;
+ }
+ }
+ return nullptr;
+}
+
+const Definition* Definition::hasParam(const string& ref) const {
+ SkASSERT(MarkType::kMethod == fMarkType);
+ for (auto iter : fChildren) {
+ if (MarkType::kParam != iter->fMarkType) {
+ continue;
+ }
+ if (iter->fName == ref) {
+ return &*iter;
+ }
+
+ }
+ return nullptr;
+}
+
+bool Definition::methodHasReturn(const string& name, TextParser* methodParser) const {
+ if (methodParser->skipExact("static")) {
+ methodParser->skipWhiteSpace();
+ }
+ const char* lastStart = methodParser->fChar;
+ const char* nameInParser = methodParser->strnstr(name.c_str(), methodParser->fEnd);
+ methodParser->skipTo(nameInParser);
+ const char* lastEnd = methodParser->fChar;
+ const char* returnEnd = lastEnd;
+ while (returnEnd > lastStart && ' ' == returnEnd[-1]) {
+ --returnEnd;
+ }
+ bool expectReturn = 4 != returnEnd - lastStart || strncmp("void", lastStart, 4);
+ if (MethodType::kNone != fMethodType && MethodType::kOperator != fMethodType && !expectReturn) {
+ return methodParser->reportError<bool>("unexpected void");
+ }
+ switch (fMethodType) {
+ case MethodType::kNone:
+ case MethodType::kOperator:
+ // either is fine
+ break;
+ case MethodType::kConstructor:
+ expectReturn = true;
+ break;
+ case MethodType::kDestructor:
+ expectReturn = false;
+ break;
+ }
+ return expectReturn;
+}
+
+string Definition::methodName() const {
+ string result;
+ size_t start = 0;
+ string parent;
+ const Definition* parentDef = this;
+ while ((parentDef = parentDef->fParent)) {
+ if (MarkType::kClass == parentDef->fMarkType || MarkType::kStruct == parentDef->fMarkType) {
+ parent = parentDef->fName;
+ break;
+ }
+ }
+ if (parent.length() && 0 == fName.compare(0, parent.length(), parent)) {
+ start = parent.length();
+ while (start < fName.length() && ':' == fName[start]) {
+ ++start;
+ }
+ }
+ if (fClone) {
+ int lastUnder = fName.rfind('_');
+ return fName.substr(start, (size_t) (lastUnder - start));
+ }
+ size_t end = fName.find_first_of('(', start);
+ if (string::npos == end) {
+ return fName.substr(start);
+ }
+ return fName.substr(start, end - start);
+}
+
+bool Definition::nextMethodParam(TextParser* methodParser, const char** nextEndPtr,
+ string* paramName) const {
+ int parenCount = 0;
+ TextParser::Save saveState(methodParser);
+ while (true) {
+ if (methodParser->eof()) {
+ return methodParser->reportError<bool>("#Method function missing close paren");
+ }
+ char ch = methodParser->peek();
+ if ('(' == ch) {
+ ++parenCount;
+ }
+ if (parenCount == 0 && (')' == ch || ',' == ch)) {
+ *nextEndPtr = methodParser->fChar;
+ break;
+ }
+ if (')' == ch) {
+ if (0 > --parenCount) {
+ return this->reportError<bool>("mismatched parentheses");
+ }
+ }
+ methodParser->next();
+ }
+ saveState.restore();
+ const char* nextEnd = *nextEndPtr;
+ const char* paramEnd = nextEnd;
+ const char* assign = methodParser->strnstr(" = ", paramEnd);
+ if (assign) {
+ paramEnd = assign;
+ }
+ const char* closeBracket = methodParser->strnstr("]", paramEnd);
+ if (closeBracket) {
+ const char* openBracket = methodParser->strnstr("[", paramEnd);
+ if (openBracket && openBracket < closeBracket) {
+ while (openBracket < --closeBracket && isdigit(closeBracket[0]))
+ ;
+ if (openBracket == closeBracket) {
+ paramEnd = openBracket;
+ }
+ }
+ }
+ const char* function = methodParser->strnstr(")(", paramEnd);
+ if (function) {
+ paramEnd = function;
+ }
+ while (paramEnd > methodParser->fChar && ' ' == paramEnd[-1]) {
+ --paramEnd;
+ }
+ const char* paramStart = paramEnd;
+ while (paramStart > methodParser->fChar && isalnum(paramStart[-1])) {
+ --paramStart;
+ }
+ if (paramStart > methodParser->fChar && paramStart >= paramEnd) {
+ return methodParser->reportError<bool>("#Method missing param name");
+ }
+ *paramName = string(paramStart, paramEnd - paramStart);
+ if (!paramName->length()) {
+ if (')' != nextEnd[0]) {
+ return methodParser->reportError<bool>("#Method malformed param");
+ }
+ return false;
+ }
+ return true;
+}
+
+string Definition::NormalizedName(string name) {
+ string normalizedName = name;
+ std::replace(normalizedName.begin(), normalizedName.end(), '-', '_');
+ do {
+ size_t doubleColon = normalizedName.find("::", 0);
+ if (string::npos == doubleColon) {
+ break;
+ }
+ normalizedName = normalizedName.substr(0, doubleColon)
+ + '_' + normalizedName.substr(doubleColon + 2);
+ } while (true);
+ return normalizedName;
+}
+
+bool Definition::paramsMatch(const string& match, const string& name) const {
+ TextParser def(fFileName, fStart, fContentStart, fLineCount);
+ const char* dName = def.strnstr(name.c_str(), fContentStart);
+ if (!dName) {
+ return false;
+ }
+ def.skipTo(dName);
+ TextParser m(fFileName, &match.front(), &match.back() + 1, fLineCount);
+ const char* mName = m.strnstr(name.c_str(), m.fEnd);
+ if (!mName) {
+ return false;
+ }
+ m.skipTo(mName);
+ while (!def.eof() && ')' != def.peek() && !m.eof() && ')' != m.peek()) {
+ const char* ds = def.fChar;
+ const char* ms = m.fChar;
+ const char* de = def.anyOf(") \n");
+ const char* me = m.anyOf(") \n");
+ def.skipTo(de);
+ m.skipTo(me);
+ if (def.fChar - ds != m.fChar - ms) {
+ return false;
+ }
+ if (strncmp(ds, ms, (int) (def.fChar - ds))) {
+ return false;
+ }
+ def.skipWhiteSpace();
+ m.skipWhiteSpace();
+ }
+ return !def.eof() && ')' == def.peek() && !m.eof() && ')' == m.peek();
+}
+
+void RootDefinition::clearVisited() {
+ fVisited = false;
+ for (auto& leaf : fLeaves) {
+ leaf.second.fVisited = false;
+ }
+ for (auto& branch : fBranches) {
+ branch.second->clearVisited();
+ }
+}
+
+bool RootDefinition::dumpUnVisited(bool skip) {
+ bool allStructElementsFound = true;
+ for (auto& leaf : fLeaves) {
+ if (!leaf.second.fVisited) {
+ // TODO: parse embedded struct in includeParser phase, then remove this condition
+ if (skip) {
+ const Definition& def = leaf.second;
+ if (def.fChildren.size() > 0 &&
+ MarkType::kDeprecated == def.fChildren[0]->fMarkType) {
+ continue;
+ }
+ }
+ // FIXME: bugs requiring long tail fixes, suppressed here:
+ // SkBitmap::validate() is wrapped in SkDEBUGCODE in .h and not parsed
+ if ("SkBitmap::validate()" == leaf.first) {
+ continue;
+ }
+ // typedef uint32_t SaveLayerFlags not seen in SkCanvas.h, don't know why
+ if ("SaveLayerFlags" == leaf.first) {
+ continue;
+ }
+ // SkPath::pathRefIsValid in #ifdef ; prefer to remove chrome dependency to fix
+ if ("SkPath::pathRefIsValid" == leaf.first) {
+ continue;
+ }
+ // FIXME: end of long tail bugs
+ SkDebugf("defined in bmh but missing in include: %s\n", leaf.first.c_str());
+ }
+ }
+ for (auto& branch : fBranches) {
+ allStructElementsFound &= branch.second->dumpUnVisited(skip);
+ }
+ return allStructElementsFound;
+}
+
+const Definition* RootDefinition::find(const string& ref, AllowParens allowParens) const {
+ const auto leafIter = fLeaves.find(ref);
+ if (leafIter != fLeaves.end()) {
+ return &leafIter->second;
+ }
+ if (AllowParens::kYes == allowParens && string::npos == ref.find("()")) {
+ string withParens = ref + "()";
+ const auto parensIter = fLeaves.find(withParens);
+ if (parensIter != fLeaves.end()) {
+ return &parensIter->second;
+ }
+ }
+ const auto branchIter = fBranches.find(ref);
+ if (branchIter != fBranches.end()) {
+ const RootDefinition* rootDef = branchIter->second;
+ return rootDef;
+ }
+ const Definition* result = nullptr;
+ for (const auto& branch : fBranches) {
+ const RootDefinition* rootDef = branch.second;
+ result = rootDef->find(ref, allowParens);
+ if (result) {
+ break;
+ }
+ }
+ return result;
+}
diff --git a/tools/bookmaker/includeParser.cpp b/tools/bookmaker/includeParser.cpp
index c4ee8e7217..955e6ef724 100644
--- a/tools/bookmaker/includeParser.cpp
+++ b/tools/bookmaker/includeParser.cpp
@@ -439,7 +439,7 @@ bool IncludeParser::crossCheck(BmhParser& bmhParser) {
continue;
}
RootDefinition* root = &finder->second;
- if (!root->dumpUnVisited()) {
+ if (!root->dumpUnVisited(bmhParser.fSkip)) {
SkDebugf("some struct elements not found; struct finding in includeParser is missing\n");
}
SkDebugf("cross-checked %s\n", className.c_str());
@@ -495,6 +495,7 @@ void IncludeParser::dumpClassTokens(IClassDefinition& classDef) {
}
switch (token.fMarkType) {
case MarkType::kEnum:
+ case MarkType::kEnumClass:
this->dumpEnum(token);
break;
case MarkType::kMethod:
@@ -518,7 +519,21 @@ void IncludeParser::dumpClassTokens(IClassDefinition& classDef) {
this->writeSpace();
this->writeString("incomplete");
this->lf(2);
- this->writeEndTag("Method");
+ switch (token.fMarkType) {
+ case MarkType::kEnum:
+ case MarkType::kEnumClass:
+ this->writeEndTag("Enum");
+ break;
+ case MarkType::kMethod:
+ this->writeEndTag("Method");
+ break;
+ case MarkType::kMember:
+ this->writeEndTag("Member");
+ continue;
+ break;
+ default:
+ SkASSERT(0);
+ }
this->lf(2);
}
}
@@ -540,6 +555,7 @@ void IncludeParser::dumpComment(const Definition& token) {
methodName.fName = string(token.fContentStart,
(int) (token.fContentEnd - token.fContentStart));
methodHasReturn = !methodParser.startsWith("void ")
+ && !methodParser.startsWith("static void ")
&& !methodParser.strnchr('~', methodParser.fEnd);
const char* paren = methodParser.strnchr('(', methodParser.fEnd);
const char* nextEnd = paren;
@@ -835,7 +851,8 @@ bool IncludeParser::dumpTokens(const string& dir, const string& skClassName) {
this->writeTag("Alias", topicName + "_Reference");
this->lf(2);
auto& classMap = fIClassMap[skClassName];
- const char* containerType = kKeyWords[(int) classMap.fKeyWord].fName;
+ SkASSERT(KeyWord::kClass == classMap.fKeyWord || KeyWord::kStruct == classMap.fKeyWord);
+ const char* containerType = KeyWord::kClass == classMap.fKeyWord ? "Class" : "Struct";
this->writeTag(containerType, skClassName);
this->lf(2);
auto& tokens = classMap.fTokens;
@@ -957,7 +974,9 @@ bool IncludeParser::dumpTokens(const string& dir, const string& skClassName) {
this->writeString(
"# ------------------------------------------------------------------------------");
this->lf(2);
- const char* containerType = kKeyWords[(int) oneClass.second.fKeyWord].fName;
+ KeyWord keyword = oneClass.second.fKeyWord;
+ SkASSERT(KeyWord::kClass == keyword || KeyWord::kStruct == keyword);
+ const char* containerType = KeyWord::kClass == keyword ? "Class" : "Struct";
this->writeTag(containerType, innerName);
this->lf(2);
this->writeTag("Code");
@@ -1396,23 +1415,26 @@ bool IncludeParser::parseMethod(Definition* child, Definition* markupDef) {
std::advance(tokenIter, child->fParentIndex);
tokenIter = std::prev(tokenIter);
const char* nameEnd = tokenIter->fContentEnd;
- bool add2 = false;
- if ('[' == tokenIter->fStart[0]) {
+ bool addConst = false;
+ auto operatorCheck = tokenIter;
+ if ('[' == tokenIter->fStart[0] || '*' == tokenIter->fStart[0]) {
+ operatorCheck = std::prev(tokenIter);
+ }
+ if (KeyWord::kOperator == operatorCheck->fKeyWord) {
auto closeParen = std::next(tokenIter);
SkASSERT(Definition::Type::kBracket == closeParen->fType &&
'(' == closeParen->fContentStart[0]);
nameEnd = closeParen->fContentEnd + 1;
closeParen = std::next(closeParen);
- add2 = true;
if (Definition::Type::kKeyWord == closeParen->fType &&
KeyWord::kConst == closeParen->fKeyWord) {
- add2 = false;
+ addConst = true;
}
- tokenIter = std::prev(tokenIter);
+ tokenIter = operatorCheck;
}
string nameStr(tokenIter->fStart, nameEnd - tokenIter->fStart);
- if (add2) {
- nameStr += "_2";
+ if (addConst) {
+ nameStr += "_const";
}
while (tokenIter != child->fParent->fTokens.begin()) {
auto testIter = std::prev(tokenIter);
@@ -1452,6 +1474,9 @@ bool IncludeParser::parseMethod(Definition* child, Definition* markupDef) {
break;
}
tokenIter->fName = nameStr;
+ if ("operator" == nameStr) {
+ SkDebugf("");
+ }
tokenIter->fMarkType = MarkType::kMethod;
tokenIter->fPrivate = string::npos != nameStr.find("::");
auto testIter = child->fParent->fTokens.begin();
@@ -1500,11 +1525,27 @@ bool IncludeParser::parseMethod(Definition* child, Definition* markupDef) {
SkASSERT(child->fParentIndex > 0);
std::advance(parentIter, child->fParentIndex - 1);
Definition* methodName = &*parentIter;
- TextParser name(methodName);
- if (name.skipToEndBracket(':') && name.startsWith("::")) {
+ TextParser nameParser(methodName);
+ if (nameParser.skipToEndBracket(':') && nameParser.startsWith("::")) {
return true; // expect this is inline class definition outside of class
}
- SkASSERT(0); // code incomplete
+ string name(nameParser.fLine, nameParser.lineLength());
+ auto finder = fIFunctionMap.find(name);
+ if (fIFunctionMap.end() != finder) {
+ // create unique name
+ SkASSERT(0); // incomplete
+ }
+ auto globalFunction = &fIFunctionMap[name];
+ globalFunction->fContentStart = start;
+ globalFunction->fName = name;
+ if ("operator+" == name) {
+ SkDebugf("");
+ }
+ globalFunction->fFiddle = name;
+ globalFunction->fContentEnd = end;
+ globalFunction->fMarkType = MarkType::kMethod;
+ globalFunction->fLineCount = tokenIter->fLineCount;
+ return true;
}
markupDef->fTokens.emplace_back(MarkType::kMethod, start, end, tokenIter->fLineCount,
markupDef);
@@ -1514,6 +1555,9 @@ bool IncludeParser::parseMethod(Definition* child, Definition* markupDef) {
SkASSERT(classDef.fStart);
string uniqueName = this->uniqueName(classDef.fMethods, nameStr);
markupChild->fName = uniqueName;
+ if ("operator+" == uniqueName) {
+ SkDebugf("");
+ }
if (!this->findComments(*child, markupChild)) {
return false;
}
@@ -1605,6 +1649,7 @@ bool IncludeParser::parseObject(Definition* child, Definition* markupDef) {
case Bracket::kPound:
// special-case the #xxx xxx_DEFINED entries
switch (child->fKeyWord) {
+ case KeyWord::kIf:
case KeyWord::kIfndef:
case KeyWord::kIfdef:
if (child->boilerplateIfDef(fParent)) {
@@ -1736,8 +1781,10 @@ bool IncludeParser::parseChar() {
return reportError<bool>("malformed closing comment");
}
if (Bracket::kSlashStar == this->topBracket()) {
- this->next(); // include close in bracket -- FIXME? will this skip stuff?
+ TextParser::Save save(this);
+ this->next(); // include close in bracket
this->popBracket();
+ save.restore(); // put things back so nothing is skipped
}
break;
}
@@ -1898,6 +1945,9 @@ bool IncludeParser::parseChar() {
if (fInEnum) {
break;
}
+ if (Bracket::kPound == this->topBracket()) {
+ break;
+ }
if (Bracket::kAngle == this->topBracket()) {
this->popBracket();
} else {
@@ -1915,6 +1965,10 @@ bool IncludeParser::parseChar() {
case '&':
case ',':
case ' ':
+ case '+':
+ case '=':
+ case '-':
+ case '!':
if (fInCharCommentString || fInBrace) {
break;
}
diff --git a/tools/bookmaker/includeWriter.cpp b/tools/bookmaker/includeWriter.cpp
index 399fd4688b..c462826f48 100644
--- a/tools/bookmaker/includeWriter.cpp
+++ b/tools/bookmaker/includeWriter.cpp
@@ -8,6 +8,9 @@
#include "bookmaker.h"
void IncludeWriter::descriptionOut(const Definition* def) {
+ if ("SkPoint_length" == def->fFiddle) {
+ SkDebugf("");
+ }
const char* commentStart = def->fContentStart;
int commentLen = (int) (def->fContentEnd - commentStart);
bool breakOut = false;
@@ -1024,6 +1027,9 @@ bool IncludeWriter::populate(Definition* def, ParentPair* prevPair, RootDefiniti
--continueEnd;
}
methodName += string(fContinuation, continueEnd - fContinuation);
+ if ("SkIPoint::operator+" == methodName) {
+ SkDebugf("");
+ }
method = root->find(methodName, RootDefinition::AllowParens::kNo);
if (!method) {
fLineCount = child.fLineCount;
@@ -1080,6 +1086,9 @@ bool IncludeWriter::populate(Definition* def, ParentPair* prevPair, RootDefiniti
startDef = &child;
fStart = child.fContentStart;
methodName = root->fName + "::" + child.fName;
+ if ("SkIPoint::operator+" == methodName) {
+ SkDebugf("");
+ }
inConstructor = root->fName == child.fName;
fContinuation = child.fContentEnd;
method = root->find(methodName, RootDefinition::AllowParens::kNo);
@@ -1103,7 +1112,6 @@ bool IncludeWriter::populate(Definition* def, ParentPair* prevPair, RootDefiniti
}
if (Definition::Type::kKeyWord == child.fType) {
if (fIndentNext) {
- SkDebugf("");
// too soon
#if 0 // makes struct Lattice indent when it oughtn't
if (KeyWord::kEnum == child.fKeyWord) {
@@ -1701,6 +1709,7 @@ IncludeWriter::Wrote IncludeWriter::rewriteBlock(int size, const char* data, Phr
if (lastPrintable >= lastWrite) {
if (' ' == data[lastWrite]) {
this->writeSpace();
+ lastWrite++;
}
this->writeBlock(lastPrintable - lastWrite + 1, &data[lastWrite]);
}
diff --git a/tools/bookmaker/mdOut.cpp b/tools/bookmaker/mdOut.cpp
index ed3cd2bcaf..6b082ad1de 100644
--- a/tools/bookmaker/mdOut.cpp
+++ b/tools/bookmaker/mdOut.cpp
@@ -62,7 +62,10 @@ string MdOut::addReferences(const char* refStart, const char* refEnd,
lineStart = false;
} else {
leadingSpaces = string(base, wordStart - base);
- }
+ }
+ if (!strncmp("SkPoint::operator-()", start, 20)) {
+ SkDebugf("");
+ }
t.skipToMethodEnd();
if (base == t.fChar) {
break;
@@ -74,6 +77,9 @@ string MdOut::addReferences(const char* refStart, const char* refEnd,
continue;
}
ref = string(start, t.fChar - start);
+ if (412 == t.fLineCount) {
+ SkDebugf("");
+ }
if (const Definition* def = this->isDefined(t, ref,
BmhParser::Resolvable::kOut != resolvable)) {
SkASSERT(def->fFiddle.length());
@@ -105,7 +111,8 @@ string MdOut::addReferences(const char* refStart, const char* refEnd,
return result;
}
if (!foundMatch) {
- if (!(def = this->isDefined(t, fullRef, true))) {
+ if (!(def = this->isDefined(t, fullRef,
+ BmhParser::Resolvable::kOut != resolvable))) {
if (!result.size()) {
t.reportError("missing method");
}
@@ -640,7 +647,7 @@ void MdOut::markTypeOut(Definition* def) {
case MarkType::kCode:
this->lfAlways(2);
fprintf(fOut, "<pre style=\"padding: 1em 1em 1em 1em;"
- "width: 50em; background-color: #f0f0f0\">");
+ "width: 62.5em; background-color: #f0f0f0\">");
this->lf(1);
break;
case MarkType::kColumn:
@@ -705,17 +712,34 @@ void MdOut::markTypeOut(Definition* def) {
fprintf(fOut, "Example\n"
"\n");
fHasFiddle = true;
+ bool showGpu = false;
+ bool gpuAndCpu = false;
const Definition* platform = def->hasChild(MarkType::kPlatform);
if (platform) {
TextParser platParse(platform);
fHasFiddle = !platParse.strnstr("!fiddle", platParse.fEnd);
+ showGpu = platParse.strnstr("gpu", platParse.fEnd);
+ if (showGpu) {
+ gpuAndCpu = platParse.strnstr("cpu", platParse.fEnd);
+ }
}
if (fHasFiddle) {
- fprintf(fOut, "<div><fiddle-embed name=\"%s\">", def->fHash.c_str());
+ fprintf(fOut, "<div><fiddle-embed name=\"%s\"", def->fHash.c_str());
+ if (showGpu) {
+ fprintf(fOut, "gpu=\"true\"");
+ if (gpuAndCpu) {
+ fprintf(fOut, "cpu=\"true\"");
+ }
+ }
+ fprintf(fOut, ">");
} else {
- fprintf(fOut, "<pre style=\"padding: 1em 1em 1em 1em;"
- "width: 50em; background-color: #f0f0f0\">");
- this->lf(1);
+ fprintf(fOut, "<pre style=\"padding: 1em 1em 1em 1em; font-size: 13px"
+ " width: 62.5em; background-color: #f0f0f0\">");
+ this->lfAlways(1);
+ if (def->fWrapper.length() > 0) {
+ fprintf(fOut, "%s", def->fWrapper.c_str());
+ }
+ fRespectLeadingSpace = true;
}
} break;
case MarkType::kExperimental:
@@ -774,7 +798,7 @@ void MdOut::markTypeOut(Definition* def) {
this->writePending();
string preformattedStr = preformat(formattedStr);
fprintf(fOut, "<pre style=\"padding: 1em 1em 1em 1em;"
- "width: 50em; background-color: #f0f0f0\">\n"
+ "width: 62.5em; background-color: #f0f0f0\">\n"
"%s\n"
"</pre>", preformattedStr.c_str());
this->lf(2);
@@ -936,9 +960,15 @@ void MdOut::markTypeOut(Definition* def) {
if (fHasFiddle) {
fprintf(fOut, "</fiddle-embed></div>");
} else {
+ this->lfAlways(1);
+ if (def->fWrapper.length() > 0) {
+ fprintf(fOut, "}");
+ this->lfAlways(1);
+ }
fprintf(fOut, "</pre>");
}
this->lf(2);
+ fRespectLeadingSpace = false;
break;
case MarkType::kList:
fInList = false;
@@ -1008,7 +1038,7 @@ void MdOut::mdHeaderOutLF(int depth, int lf) {
}
void MdOut::resolveOut(const char* start, const char* end, BmhParser::Resolvable resolvable) {
- if (BmhParser::Resolvable::kLiteral == resolvable && end > start) {
+ if ((BmhParser::Resolvable::kLiteral == resolvable || fRespectLeadingSpace) && end > start) {
while ('\n' == *start) {
++start;
}
@@ -1017,7 +1047,7 @@ void MdOut::resolveOut(const char* start, const char* end, BmhParser::Resolvable
++start;
}
if (start > spaceStart) {
- fIndent = start - spaceStart;
+ fIndent = start - spaceStart;
}
this->writeBlockTrim(end - start, start);
if ('\n' == end[-1]) {
diff --git a/tools/bookmaker/parserCommon.cpp b/tools/bookmaker/parserCommon.cpp
index 7a6f71f7ed..79503a66b3 100644
--- a/tools/bookmaker/parserCommon.cpp
+++ b/tools/bookmaker/parserCommon.cpp
@@ -7,11 +7,39 @@
#include "bookmaker.h"
+#include "SkOSFile.h"
+#include "SkOSPath.h"
+
static void debug_out(int len, const char* data) {
// convenient place to intercept arbitrary output
SkDebugf("%.*s", len, data);
}
+bool ParserCommon::parseFile(const char* fileOrPath, const char* suffix) {
+// this->reset();
+ if (!sk_isdir(fileOrPath)) {
+ if (!this->parseFromFile(fileOrPath)) {
+ SkDebugf("failed to parse %s\n", fileOrPath);
+ return false;
+ }
+ } else {
+ SkOSFile::Iter it(fileOrPath, suffix);
+ for (SkString file; it.next(&file); ) {
+ SkString p = SkOSPath::Join(fileOrPath, file.c_str());
+ const char* hunk = p.c_str();
+ if (!SkStrEndsWith(hunk, suffix)) {
+ continue;
+ }
+ if (!this->parseFromFile(hunk)) {
+ SkDebugf("failed to parse %s\n", hunk);
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+
bool ParserCommon::parseSetup(const char* path) {
// this->reset();
sk_sp<SkData> data = SkData::MakeFromFileName(path);
diff --git a/tools/bookmaker/spellCheck.cpp b/tools/bookmaker/spellCheck.cpp
index e2c4286e18..6f50cb3bb5 100644
--- a/tools/bookmaker/spellCheck.cpp
+++ b/tools/bookmaker/spellCheck.cpp
@@ -214,7 +214,7 @@ bool SpellCheck::check(Definition* def) {
method_name += "()";
}
string formattedStr = def->formatFunction();
- if (!def->isClone()) {
+ if (!def->isClone() && Definition::MethodType::kOperator != def->fMethodType) {
this->wordCheck(method_name);
}
fTableState = TableState::kNone;
@@ -613,7 +613,9 @@ void SpellCheck::wordCheck(const string& str) {
std::istringstream ss(str);
string token;
while (std::getline(ss, token, '_')) {
- this->wordCheck(token);
+ if (token.length()) {
+ this->wordCheck(token);
+ }
}
return;
}