aboutsummaryrefslogtreecommitdiffhomepage
path: root/site
diff options
context:
space:
mode:
authorGravatar Cary Clark <caryclark@skia.org>2018-06-27 11:00:21 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-06-27 15:47:45 +0000
commit224c700a1fb0b7f6abd85a9729d29cbbdf5872dd (patch)
tree7d480bf6340a28bf71c89a8b837c9f022f75ca3f /site
parenta1ac841b1a367c6b319b90ec04911e7e4cd9ad93 (diff)
sync docs up with tip of tree
Also check in work in progress for blend modes, round rects, and a placeholder for pictures. One minor include change to add a parameter name for SkBlendMode function. TBR=reed@google.com R=caryclark@google.com Docs-Preview: https://skia.org/?cl=134200 Bug: skia:6898 Change-Id: I5d2a9221d61edb32d9c7edbb3193401605b2b513 Reviewed-on: https://skia-review.googlesource.com/134200 Reviewed-by: Cary Clark <caryclark@google.com> Reviewed-by: Cary Clark <caryclark@skia.org> Commit-Queue: Cary Clark <caryclark@skia.org> Auto-Submit: Cary Clark <caryclark@skia.org>
Diffstat (limited to 'site')
-rw-r--r--site/user/api/SkAutoCanvasRestore_Reference.md2
-rw-r--r--site/user/api/SkBitmap_Reference.md18
-rw-r--r--site/user/api/SkBlendMode_Reference.md1050
-rw-r--r--site/user/api/SkCanvas_Reference.md367
-rw-r--r--site/user/api/SkColor4f_Reference.md8
-rw-r--r--site/user/api/SkColor_Reference.md4
-rw-r--r--site/user/api/SkIPoint_Reference.md8
-rw-r--r--site/user/api/SkIRect_Reference.md15
-rw-r--r--site/user/api/SkImageInfo_Reference.md98
-rw-r--r--site/user/api/SkImage_Reference.md40
-rw-r--r--site/user/api/SkMatrix_Reference.md9
-rw-r--r--site/user/api/SkPaint_Reference.md73
-rw-r--r--site/user/api/SkPath_Reference.md178
-rw-r--r--site/user/api/SkPicture_Reference.md516
-rw-r--r--site/user/api/SkPixmap_Reference.md4
-rw-r--r--site/user/api/SkPoint_Reference.md9
-rw-r--r--site/user/api/SkRRect_Reference.md1674
-rw-r--r--site/user/api/SkRect_Reference.md22
-rw-r--r--site/user/api/SkSurface_Reference.md14
-rw-r--r--site/user/api/catalog.htm832
-rw-r--r--site/user/api/undocumented.md95
21 files changed, 4453 insertions, 583 deletions
diff --git a/site/user/api/SkAutoCanvasRestore_Reference.md b/site/user/api/SkAutoCanvasRestore_Reference.md
index 1deec31d38..a31368d342 100644
--- a/site/user/api/SkAutoCanvasRestore_Reference.md
+++ b/site/user/api/SkAutoCanvasRestore_Reference.md
@@ -41,7 +41,6 @@ SkAutoCanvasRestore can be constructed or initialized by these functions, includ
</tr>
</table>
-
## <a name='Member_Function'>Member Function</a>
@@ -55,7 +54,6 @@ SkAutoCanvasRestore member functions read and modify the structure properties.
</tr>
</table>
-
<a name='SkAutoCanvasRestore_SkCanvas_star'></a>
## SkAutoCanvasRestore
diff --git a/site/user/api/SkBitmap_Reference.md b/site/user/api/SkBitmap_Reference.md
index 1385892ea3..61550cbed9 100644
--- a/site/user/api/SkBitmap_Reference.md
+++ b/site/user/api/SkBitmap_Reference.md
@@ -101,7 +101,6 @@ SkBitmap global, <code>struct</code>, and <code>class</code> related member func
</tr>
</table>
-
## <a name='Constant'>Constant</a>
@@ -119,7 +118,6 @@ SkBitmap related constants are defined by <code>enum</code>, <code>enum class</c
</tr>
</table>
-
## <a name='Class'>Class</a>
@@ -137,7 +135,6 @@ SkBitmap uses C++ classes to declare the public data structures and interfaces.
</tr>
</table>
-
## <a name='Constructor'>Constructor</a>
@@ -187,7 +184,6 @@ SkBitmap can be constructed or initialized by these functions, including C++ cla
</tr>
</table>
-
## <a name='Operator'>Operator</a>
@@ -205,7 +201,6 @@ SkBitmap operators inline class member functions with arithmetic equivalents.
</tr>
</table>
-
## <a name='Member_Function'>Member Function</a>
@@ -459,7 +454,6 @@ SkBitmap member functions read and modify the structure properties.
</tr>
</table>
-
# <a name='SkBitmap_Allocator'>Class SkBitmap::Allocator</a>
## <a name='Member_Function'>Member_Function</a>
@@ -471,7 +465,6 @@ SkBitmap member functions read and modify the structure properties.
<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
</table>
-
<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:
@@ -520,7 +513,6 @@ SkBitmap member functions read and modify the structure properties.
<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
</table>
-
<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:
@@ -967,7 +959,6 @@ two width:1 height:1 colorType:kRGBA_8888_SkColorType alphaType:kOpaque_SkAlphaT
</tr>
</table>
-
<a name='SkBitmap_pixmap'></a>
## pixmap
@@ -2200,7 +2191,6 @@ Instructs <a href='#SkBitmap_tryAllocPixelsFlags'>tryAllocPixelsFlags</a> and <a
</tr>
</table>
-
<a name='SkBitmap_tryAllocPixelsFlags'></a>
## tryAllocPixelsFlags
@@ -2762,7 +2752,6 @@ soon
</tr>
</table>
-
<a name='SkBitmap_setPixels'></a>
## setPixels
@@ -3014,7 +3003,6 @@ subset origin: 32, 64
</tr>
</table>
-
<a name='SkBitmap_setPixelRef'></a>
## setPixelRef
@@ -3156,7 +3144,6 @@ Marks that pixels in <a href='undocumented#Pixel_Ref'>Pixel Ref</a> have changed
</tr>
</table>
-
<a name='SkBitmap_eraseColor'></a>
## eraseColor
@@ -4065,7 +4052,7 @@ true if <a href='#SkBitmap_writePixels_3_src'>src</a> pixels are copied to <a hr
bool <a href='#SkBitmap_hasHardwareMipMap'>hasHardwareMipMap</a>() const
</pre>
-Android framework only.
+For use by Android framework only.
### Return Value
@@ -4084,7 +4071,7 @@ true if <a href='#SkBitmap_setHasHardwareMipMap'>setHasHardwareMipMap</a> has be
void <a href='#SkBitmap_setHasHardwareMipMap'>setHasHardwareMipMap</a>(bool <a href='#SkBitmap_hasHardwareMipMap'>hasHardwareMipMap</a>)
</pre>
-Android framework only.
+For use by Android framework only.
### Parameters
@@ -4302,7 +4289,6 @@ x---x-
</tr>
</table>
-
<a name='SkBitmap_validate'></a>
## validate
diff --git a/site/user/api/SkBlendMode_Reference.md b/site/user/api/SkBlendMode_Reference.md
new file mode 100644
index 0000000000..d1bb465851
--- /dev/null
+++ b/site/user/api/SkBlendMode_Reference.md
@@ -0,0 +1,1050 @@
+SkBlendMode Reference
+===
+
+# <a name='Blend_Mode'>Blend Mode</a>
+
+## Overview
+
+<table style='border-collapse: collapse; width: 62.5em'>
+ <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
+<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Constant'>Constants</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>enum and enum class, and their const values</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Member_Function'>Functions</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>global and class member functions</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Related_Function'>Related Functions</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>similar member functions grouped together</td>
+ </tr>
+</table>
+
+
+## <a name='Member_Function'>Member Function</a>
+
+
+SkBlendMode member functions read and modify the structure properties.
+<table style='border-collapse: collapse; width: 62.5em'>
+ <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
+<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_Name'>SkBlendMode Name</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns mode as C string</td>
+ </tr>
+</table>
+
+## <a name='Constant'>Constant</a>
+
+
+SkBlendMode related constants are defined by <code>enum</code>, <code>enum class</code>, <code>#define</code>, <code>const</code>, and <code>constexpr</code>.
+<table style='border-collapse: collapse; width: 62.5em'>
+ <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
+<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode'>SkBlendMode</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>algorithm combining source and destination pixels</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kClear'>SkBlendMode::kClear</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>replaces destination with zero: fully transparent</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kColor'>SkBlendMode::kColor</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>hue and saturation of source with luminosity of destination</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kColorBurn'>SkBlendMode::kColorBurn</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>darken destination to reflect source</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kColorDodge'>SkBlendMode::kColorDodge</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>brighten destination to reflect source</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kDarken'>SkBlendMode::kDarken</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>darker of source and destination</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kDifference'>SkBlendMode::kDifference</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>subtract darker from lighter with higher contrast</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kDst'>SkBlendMode::kDst</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>preserves destination</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kDstATop'>SkBlendMode::kDstATop</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>destination inside source blended with source</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kDstIn'>SkBlendMode::kDstIn</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>destination trimmed by source</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kDstOut'>SkBlendMode::kDstOut</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>destination trimmed outside source</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kDstOver'>SkBlendMode::kDstOver</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>destination over source</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kExclusion'>SkBlendMode::kExclusion</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>subtract darker from lighter with lower contrast</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kHardLight'>SkBlendMode::kHardLight</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>multiply or screen, depending on source</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kHue'>SkBlendMode::kHue</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>hue of source with saturation and luminosity of destination</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kLastCoeffMode'>SkBlendMode::kLastCoeffMode</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>last <a href='#Porter_Duff'>Porter Duff</a> blend mode</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kLastMode'>SkBlendMode::kLastMode</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>last valid value</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kLastSeparableMode'>SkBlendMode::kLastSeparableMode</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>last blend mode operating separately on components</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kLighten'>SkBlendMode::kLighten</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>lighter of source and destination</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kLuminosity'>SkBlendMode::kLuminosity</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>luminosity of source with hue and saturation of destination</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kModulate'>SkBlendMode::kModulate</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>product of <a href='undocumented#Premultiply'>Premultiplied</a> colors; darkens destination</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kMultiply'>SkBlendMode::kMultiply</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>multiply source with destination, darkening image</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kOverlay'>SkBlendMode::kOverlay</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>multiply or screen, depending on destination</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kPlus'>SkBlendMode::kPlus</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sum of colors</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kSaturation'>SkBlendMode::kSaturation</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>saturation of source with hue and luminosity of destination</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kScreen'>SkBlendMode::kScreen</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>multiply inverse of pixels, inverting result; brightens destination</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kSoftLight'>SkBlendMode::kSoftLight</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>lighten or darken, depending on source</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kSrc'>SkBlendMode::kSrc</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>replaces destination</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kSrcATop'>SkBlendMode::kSrcATop</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>source inside destination blended with destination</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kSrcIn'>SkBlendMode::kSrcIn</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>source trimmed inside destination</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kSrcOut'>SkBlendMode::kSrcOut</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>source trimmed outside destination</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>source over destination</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkBlendMode_kXor'>SkBlendMode::kXor</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>each of source and destination trimmed outside the other</td>
+ </tr>
+</table>
+
+Describes how destination pixel is replaced with a combination of itself and
+source pixel. <a href='#Blend_Mode'>Blend Mode</a> may use source, destination, or both. <a href='#Blend_Mode'>Blend Mode</a> may
+operate on each <a href='#Color'>Color</a> component independently, or may allow all source pixel
+components to contribute to one destination pixel component.
+
+<a href='#Blend_Mode'>Blend Mode</a> does not use adjacent pixels to determine the outcome.
+
+<a href='#Blend_Mode'>Blend Mode</a> uses source and read destination <a href='SkColor_Reference#Alpha'>Alpha</a> to determine written
+destination <a href='SkColor_Reference#Alpha'>Alpha</a>; both source and destination <a href='SkColor_Reference#Alpha'>Alpha</a> may also affect written
+destination <a href='#Color'>Color</a> components.
+
+Regardless of how <a href='SkColor_Reference#Alpha'>Alpha</a> is encoded in source and destination pixel, nearly all
+<a href='SkImageInfo_Reference#Color_Type'>Color Types</a> treat it as ranging from zero to one. And, nearly all <a href='#Blend_Mode'>Blend Mode</a>
+algorithms limit the output so that all results are also zero to one.
+
+Two exceptions are <a href='#SkBlendMode_kPlus'>SkBlendMode::kPlus</a> and <a href='SkImageInfo_Reference#kRGBA_F16_SkColorType'>kRGBA_F16_SkColorType</a>.
+
+<a href='#SkBlendMode_kPlus'>SkBlendMode::kPlus</a> permits computing <a href='SkColor_Reference#Alpha'>Alpha</a> and <a href='#Color'>Color</a> component values larger
+than one. For <a href='SkImageInfo_Reference#Color_Type'>Color Types</a> other than <a href='SkImageInfo_Reference#kRGBA_F16_SkColorType'>kRGBA_F16_SkColorType</a>, resulting <a href='SkColor_Reference#Alpha'>Alpha</a>
+and component values are clamped to one.
+
+<a href='SkImageInfo_Reference#kRGBA_F16_SkColorType'>kRGBA_F16_SkColorType</a> permits values outside the zero to one range. It is up
+to the client to ensure that the result is within the range of zero to one,
+and therefore well-defined.
+
+## <a name='Porter_Duff'>Porter Duff</a>
+
+<a href='https://graphics.pixar.com/library/Compositing/paper.pdf'>Compositing Digital Images</a></a> describes <a href='#Porter_Duff'>Porter Duff</a> modes <a href='#SkBlendMode_kClear'>SkBlendMode::kClear</a> through <a href='#SkBlendMode_kXor'>SkBlendMode::kXor</a>.
+
+Drawing a bitmap with transparency using <a href='#Porter_Duff'>Porter Duff</a> compositing is free to clear
+the destination.
+
+![Porter_Duff](https://fiddle.skia.org/i/8c27fb2a58f63505cffa74c1c79e16ba_raster.png "")
+
+Draw geometry with transparency using <a href='#Porter_Duff'>Porter Duff</a> compositing does not combine
+transparent source pixels, leaving the destination outside the geometry untouched.
+
+![Porter_Duff](https://fiddle.skia.org/i/50ebbb0162bbf60524a196236d66c915_raster.png "")
+
+## <a name='Lighten_Darken'>Lighten Darken</a>
+
+Modes <a href='#SkBlendMode_kPlus'>SkBlendMode::kPlus</a> and <a href='#SkBlendMode_kScreen'>SkBlendMode::kScreen</a> use
+simple arithmetic to lighten or darken the destination. Modes
+<a href='#SkBlendMode_kOverlay'>SkBlendMode::kOverlay</a> through <a href='#SkBlendMode_kMultiply'>SkBlendMode::kMultiply</a> use more complicated
+algorithms to lighten or darken; sometimes one mode does both, as described by <a href='https://en.wikipedia.org/wiki/Blend_modes'>Blend Modes</a></a> .
+
+![Lighten_Darken](https://fiddle.skia.org/i/8e04f89252632da0fffe713f07f2296f_raster.png "")
+
+## <a name='Modulate_Blend'>Modulate Blend</a>
+
+<a href='#SkBlendMode_kModulate'>SkBlendMode::kModulate</a> is a mashup of <a href='#SkBlendMode_kSrcATop'>SkBlendMode::kSrcATop</a> and <a href='#SkBlendMode_kMultiply'>SkBlendMode::kMultiply</a>.
+It multiplies all components, including <a href='SkColor_Reference#Alpha'>Alpha</a>; unlike <a href='#SkBlendMode_kMultiply'>SkBlendMode::kMultiply</a>, if either
+source or destination is transparent, result is transparent. <a href='#SkBlendMode_kModulate'>SkBlendMode::kModulate</a>
+uses <a href='undocumented#Premultiply'>Premultiplied</a> values to compute the product; <a href='#SkBlendMode_kMultiply'>SkBlendMode::kMultiply</a> uses <a href='undocumented#Unpremultiply'>Unpremultiplied</a>
+values to compute the product.
+
+![Modulate_Blend](https://fiddle.skia.org/i/d8abdd8fb56f9e69342d745d425c4a17_raster.png "")
+
+## <a name='Color_Blends'>Color Blends</a>
+
+Modes <a href='#SkBlendMode_kHue'>SkBlendMode::kHue</a>, <a href='#SkBlendMode_kSaturation'>SkBlendMode::kSaturation</a>, <a href='#SkBlendMode_kColor'>SkBlendMode::kColor</a>, and
+<a href='#SkBlendMode_kLuminosity'>SkBlendMode::kLuminosity</a> convert source and destination pixels using all
+components color information, using <a href='https://www.w3.org/TR/compositing-1/#blendingnonseparable'>non-separable blend modes</a></a> .
+
+![Color_Blends](https://fiddle.skia.org/i/03710c1770728da885fa4ac24a19d5d1_raster.png "")
+
+## <a name='SkBlendMode'>Enum SkBlendMode</a>
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+ enum class <a href='#SkBlendMode'>SkBlendMode</a> {
+ <a href='#SkBlendMode_kClear'>kClear</a>,
+ <a href='#SkBlendMode_kSrc'>kSrc</a>,
+ <a href='#SkBlendMode_kDst'>kDst</a>,
+ <a href='#SkBlendMode_kSrcOver'>kSrcOver</a>,
+ <a href='#SkBlendMode_kDstOver'>kDstOver</a>,
+ <a href='#SkBlendMode_kSrcIn'>kSrcIn</a>,
+ <a href='#SkBlendMode_kDstIn'>kDstIn</a>,
+ <a href='#SkBlendMode_kSrcOut'>kSrcOut</a>,
+ <a href='#SkBlendMode_kDstOut'>kDstOut</a>,
+ <a href='#SkBlendMode_kSrcATop'>kSrcATop</a>,
+ <a href='#SkBlendMode_kDstATop'>kDstATop</a>,
+ <a href='#SkBlendMode_kXor'>kXor</a>,
+ <a href='#SkBlendMode_kPlus'>kPlus</a>,
+ <a href='#SkBlendMode_kModulate'>kModulate</a>,
+ <a href='#SkBlendMode_kScreen'>kScreen</a>,
+ <a href='#SkBlendMode_kLastCoeffMode'>kLastCoeffMode</a> = <a href='#SkBlendMode_kScreen'>kScreen</a>,
+ <a href='#SkBlendMode_kOverlay'>kOverlay</a>,
+ <a href='#SkBlendMode_kDarken'>kDarken</a>,
+ <a href='#SkBlendMode_kLighten'>kLighten</a>,
+ <a href='#SkBlendMode_kColorDodge'>kColorDodge</a>,
+ <a href='#SkBlendMode_kColorBurn'>kColorBurn</a>,
+ <a href='#SkBlendMode_kHardLight'>kHardLight</a>,
+ <a href='#SkBlendMode_kSoftLight'>kSoftLight</a>,
+ <a href='#SkBlendMode_kDifference'>kDifference</a>,
+ <a href='#SkBlendMode_kExclusion'>kExclusion</a>,
+ <a href='#SkBlendMode_kMultiply'>kMultiply</a>,
+ <a href='#SkBlendMode_kLastSeparableMode'>kLastSeparableMode</a> = <a href='#SkBlendMode_kMultiply'>kMultiply</a>,
+ <a href='#SkBlendMode_kHue'>kHue</a>,
+ <a href='#SkBlendMode_kSaturation'>kSaturation</a>,
+ <a href='#SkBlendMode_kColor'>kColor</a>,
+ <a href='#SkBlendMode_kLuminosity'>kLuminosity</a>,
+ <a href='#SkBlendMode_kLastMode'>kLastMode</a> = <a href='#SkBlendMode_kLuminosity'>kLuminosity</a>,
+ };
+</pre>
+
+### Constants
+
+<table style='border-collapse: collapse; width: 62.5em'>
+ <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
+<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
+<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Details</th>
+<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kClear'><code>SkBlendMode::kClear</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Clear'>Blend&nbsp;Mode&nbsp;Clear</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Replaces destination with <a href='SkColor_Reference#Alpha'>Alpha</a> and <a href='#Color'>Color</a> components set to zero;
+a fully transparent pixel.
+</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kSrc'><code>SkBlendMode::kSrc</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Src'>Blend&nbsp;Mode&nbsp;Src</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Replaces destination with source. Destination alpha and color component values
+are ignored.
+</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kDst'><code>SkBlendMode::kDst</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Dst'>Blend&nbsp;Mode&nbsp;Dst</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Preserves destination, ignoring source. Drawing with <a href='SkPaint_Reference#Paint'>Paint</a> set to <a href='#SkBlendMode_kDst'>kDst</a> has
+no effect.
+</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kSrcOver'><code>SkBlendMode::kSrcOver</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Src_Over'>Blend&nbsp;Mode&nbsp;Src&nbsp;Over</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Replaces destination with source blended with destination. If source is opaque,
+replaces destination with source. Used as the default <a href='#Blend_Mode'>Blend Mode</a> for <a href='SkPaint_Reference#SkPaint'>SkPaint</a>.
+</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kDstOver'><code>SkBlendMode::kDstOver</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>4</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Dst_Over'>Blend&nbsp;Mode&nbsp;Dst&nbsp;Over</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Replaces destination with destination blended with source. If destination is opaque,
+has no effect.
+</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kSrcIn'><code>SkBlendMode::kSrcIn</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>5</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Src_In'>Blend&nbsp;Mode&nbsp;Src&nbsp;In</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Replaces destination with source using destination opacity.
+</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kDstIn'><code>SkBlendMode::kDstIn</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>6</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Dst_In'>Blend&nbsp;Mode&nbsp;Dst&nbsp;In</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Scales destination opacity by source opacity.
+</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kSrcOut'><code>SkBlendMode::kSrcOut</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>7</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Src_Out'>Blend&nbsp;Mode&nbsp;Src&nbsp;Out</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Replaces destination with source using the inverse of destination opacity,
+drawing source fully where destination opacity is zero.
+</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kDstOut'><code>SkBlendMode::kDstOut</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>8</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Dst_Out'>Blend&nbsp;Mode&nbsp;Dst&nbsp;Out</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Replaces destination opacity with inverse of source opacity. If source is
+transparent, has no effect.
+</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kSrcATop'><code>SkBlendMode::kSrcATop</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>9</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Src_Atop'>Blend&nbsp;Mode&nbsp;Src&nbsp;Atop</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Blends destination with source using read destination opacity.
+</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kDstATop'><code>SkBlendMode::kDstATop</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>10</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Dst_Atop'>Blend&nbsp;Mode&nbsp;Dst&nbsp;Atop</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Blends destination with source using source opacity.
+</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kXor'><code>SkBlendMode::kXor</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>11</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Xor'>Blend&nbsp;Mode&nbsp;Xor</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Blends destination by exchanging transparency of the source and destination.
+</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kPlus'><code>SkBlendMode::kPlus</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>12</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Plus'>Blend&nbsp;Mode&nbsp;Plus</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Replaces destination with source and destination added together.
+</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kModulate'><code>SkBlendMode::kModulate</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>13</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Modulate'>Blend&nbsp;Mode&nbsp;Modulate</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Replaces destination with source and destination multiplied together.
+</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kScreen'><code>SkBlendMode::kScreen</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>14</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Screen'>Blend&nbsp;Mode&nbsp;Screen</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Replaces destination with inverted source and destination multiplied together.
+</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kLastCoeffMode'><code>SkBlendMode::kLastCoeffMode</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>14</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+last Porter_Duff blend mode</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kOverlay'><code>SkBlendMode::kOverlay</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>15</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Overlay'>Blend&nbsp;Mode&nbsp;Overlay</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Replaces destination with multiply or screen, depending on destination.
+</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kDarken'><code>SkBlendMode::kDarken</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>16</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Darken'>Blend&nbsp;Mode&nbsp;Darken</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Replaces destination with darker of source and destination.
+</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kLighten'><code>SkBlendMode::kLighten</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>17</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Lighten'>Blend&nbsp;Mode&nbsp;Lighten</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Replaces destination with lighter of source and destination.
+</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kColorDodge'><code>SkBlendMode::kColorDodge</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>18</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Color_Dodge'>Blend&nbsp;Mode&nbsp;Color&nbsp;Dodge</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Makes destination brighter to reflect source.
+</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kColorBurn'><code>SkBlendMode::kColorBurn</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>19</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Color_Burn'>Blend&nbsp;Mode&nbsp;Color&nbsp;Burn</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Makes destination darker to reflect source.
+</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kHardLight'><code>SkBlendMode::kHardLight</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>20</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Hard_Light'>Blend&nbsp;Mode&nbsp;Hard&nbsp;Light</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Makes destination lighter or darker, depending on source.
+</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kSoftLight'><code>SkBlendMode::kSoftLight</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>21</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Soft_Light'>Blend&nbsp;Mode&nbsp;Soft&nbsp;Light</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Makes destination lighter or darker, depending on source.
+</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kDifference'><code>SkBlendMode::kDifference</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>22</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Difference'>Blend&nbsp;Mode&nbsp;Difference</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Subtracts darker from lighter with higher contrast.
+</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kExclusion'><code>SkBlendMode::kExclusion</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>23</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Exclusion'>Blend&nbsp;Mode&nbsp;Exclusion</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Subtracts darker from lighter with lower contrast.
+</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kMultiply'><code>SkBlendMode::kMultiply</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>24</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Multiply'>Blend&nbsp;Mode&nbsp;Multiply</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Multiplies source with destination, darkening image.
+</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kLastSeparableMode'><code>SkBlendMode::kLastSeparableMode</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>24</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Last blend mode operating separately on components.
+</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kHue'><code>SkBlendMode::kHue</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>25</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Hue'>Blend&nbsp;Mode&nbsp;Hue</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Replaces hue of destination with hue of source, leaving saturation and luminosity
+unchanged.
+</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kSaturation'><code>SkBlendMode::kSaturation</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>26</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Saturation'>Blend&nbsp;Mode&nbsp;Saturation</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Replaces saturation of destination saturation hue of source, leaving hue and
+luminosity unchanged.
+</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kColor'><code>SkBlendMode::kColor</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>27</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Color'>Blend&nbsp;Mode&nbsp;Color</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Replaces hue and saturation of destination with hue and saturation of source,
+leaving luminosity unchanged.
+</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kLuminosity'><code>SkBlendMode::kLuminosity</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>28</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Luminosity'>Blend&nbsp;Mode&nbsp;Luminosity</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Replaces luminosity of destination with luminosity of source, leaving hue and
+saturation unchanged.
+</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kLastMode'><code>SkBlendMode::kLastMode</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>28</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Used by tests to iterate through all valid values.
+</td>
+ </tr>
+</table>
+
+### See Also
+
+<a href='SkCanvas_Reference#SkCanvas_drawColor'>SkCanvas::drawColor</a> <a href='SkCanvas_Reference#SkCanvas_drawVertices'>SkCanvas::drawVertices</a><sup><a href='SkCanvas_Reference#SkCanvas_drawVertices_2'>[2]</a></sup> <a href='SkPaint_Reference#SkPaint'>SkPaint</a> <a href='undocumented#SkShader_MakeCompose'>SkShader::MakeCompose</a> <a href='undocumented#SkXfermodeImageFilter'>SkXfermodeImageFilter</a>
+
+## <a name='Clear'>Clear</a>
+
+<a href='#SkBlendMode_kClear'>SkBlendMode::kClear</a> sets destination to:
+[0, 0]
+.
+Use <a href='#SkBlendMode_kClear'>SkBlendMode::kClear</a> to initialize a buffer to fully transparent pixels when
+creating a mask with irregular edges.
+
+### Example
+
+<div><fiddle-embed name="a9b56a26ca469bab9ab10e16f62fb2e2"><div><a href='SkColor_Reference#SK_ColorYELLOW'>SK ColorYELLOW</a> is ignored because <a href='#SkBlendMode_kClear'>SkBlendMode::kClear</a> ignores the source pixel
+value and the destination pixel value, always setting the destination to zero.
+</div></fiddle-embed></div>
+
+### See Also
+
+<a href='SkCanvas_Reference#SkCanvas_clear'>SkCanvas::clear</a>
+
+## <a name='Src'>Src</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kSrc'>SkBlendMode::kSrc</a> sets destination to:
+[Sa, Sc]
+.
+Use <a href='#SkBlendMode_kSrc'>SkBlendMode::kSrc</a> to copy one buffer to another. All pixels are copied,
+regardless of source and destination <a href='SkColor_Reference#Alpha'>Alpha</a> values. As a parameter to
+<a href='SkCanvas_Reference#SkCanvas_drawAtlas'>SkCanvas::drawAtlas</a>, selects sprites and ignores colors.
+
+### Example
+
+<div><fiddle-embed name="0fc85dd916cc1a5896d36c80b9847391"><div><a href='#SkBlendMode_kSrc'>SkBlendMode::kSrc</a> does not blend transparent pixels with existing background;
+it punches a transparent hole in the existing image.
+</div></fiddle-embed></div>
+
+### See Also
+
+<a href='SkSurface_Reference#SkSurface_draw'>SkSurface::draw</a><sup><a href='SkSurface_Reference#SkSurface_draw_2'>[2]</a></sup> <a href='SkSurface_Reference#SkSurface_readPixels'>SkSurface::readPixels</a><sup><a href='SkSurface_Reference#SkSurface_readPixels_2'>[2]</a></sup><sup><a href='SkSurface_Reference#SkSurface_readPixels_3'>[3]</a></sup>
+
+## <a name='Dst'>Dst</a>
+
+Given:
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kDst'>SkBlendMode::kDst</a> preserves destination set to:
+[Da, Dc]
+.
+Setting <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#Blend_Mode'>Blend Mode</a> to <a href='#SkBlendMode_kDst'>SkBlendMode::kDst</a> causes drawing with
+<a href='SkPaint_Reference#Paint'>Paint</a> to have no effect. As a parameter to <a href='SkCanvas_Reference#SkCanvas_drawAtlas'>SkCanvas::drawAtlas</a>,
+selects colors and ignores sprites.
+
+### Example
+
+<div><fiddle-embed name="35915a2273be1076f00f2e47998ce808"></fiddle-embed></div>
+
+## <a name='Src_Over'>Src Over</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a> replaces destination with:
+[Sa + Da * (1 - Sa), Sc + Dc * (1 - Sa)]
+,
+drawing source over destination. <a href='#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a> is the default for <a href='SkPaint_Reference#Paint'>Paint</a>.
+
+<a href='#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a> cannot make destination more transparent; the result will
+be at least as opaque as the less transparent of source and original destination.
+
+### Example
+
+<div><fiddle-embed name="2ea9c149964a06cdb4929158cb4f15f8"></fiddle-embed></div>
+
+## <a name='Dst_Over'>Dst Over</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kDstOver'>SkBlendMode::kDstOver</a> replaces destination with:
+[Da + Sa * (1 - Da), Dc + Sc * (1 - Da)]
+,
+drawing destination over source. Has no effect destination if is opaque.
+
+### Example
+
+<div><fiddle-embed name="10dbb4d97902956ef5f5f8562f65119e"></fiddle-embed></div>
+
+## <a name='Src_In'>Src In</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component, Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>;
+<a href='#SkBlendMode_kSrcIn'>SkBlendMode::kSrcIn</a> replaces destination with:
+[Sa * Da, Sc * Da]
+,
+drawing source with destination opacity.
+
+### Example
+
+<div><fiddle-embed name="b0833c18fe8b0eeaab9bd6d2160d272f"></fiddle-embed></div>
+
+## <a name='Dst_In'>Dst In</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kDstIn'>SkBlendMode::kDstIn</a> replaces destination with:
+[Da * Sa, Dc * Sa]
+,
+scaling destination <a href='SkColor_Reference#Alpha'>Alpha</a> by source <a href='SkColor_Reference#Alpha'>Alpha</a>. Resulting
+destination is visible where source is visible.
+
+### Example
+
+<div><fiddle-embed name="a5eeba05ccf6097a5d110a9d64f97c25"></fiddle-embed></div>
+
+## <a name='Src_Out'>Src Out</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component, Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>;
+<a href='#SkBlendMode_kSrcOut'>SkBlendMode::kSrcOut</a> replaces destination with:
+[Sa * (1 - Da), Sc * (1 - Da)]
+,
+drawing source fully where destination <a href='SkColor_Reference#Alpha'>Alpha</a> is zero. Is destination
+is opaque, has no effect.
+
+### Example
+
+<div><fiddle-embed name="ccc1e74226e0c9eacbc21f1eed017b84"></fiddle-embed></div>
+
+## <a name='Dst_Out'>Dst Out</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kDstOut'>SkBlendMode::kDstOut</a> replaces destination with:
+[Da * (1 - Sa), Dc * (1 - Sa)]
+,
+scaling destination <a href='SkColor_Reference#Alpha'>Alpha</a> by source transparency. Resulting
+destination is visible where source is transparent. If source is transparent,
+has no effect.
+
+### Example
+
+<div><fiddle-embed name="b9a894c9accfc5d94081bbd77d5d790a"></fiddle-embed></div>
+
+## <a name='Src_Atop'>Src Atop</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kSrcATop'>SkBlendMode::kSrcATop</a> replaces destination with:
+[Da, Sc * Da + Dc * (1 - Sa)]
+,
+replacing opaque destination with opaque source. If source or destination
+is transparent, has no effect.
+
+### Example
+
+<div><fiddle-embed name="a13148977bfc985934a92752c83a2041"></fiddle-embed></div>
+
+## <a name='Dst_Atop'>Dst Atop</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kDstATop'>SkBlendMode::kDstATop</a> replaces destination with:
+[Sa, Dc * Sa + Sc * (1 - Da)]
+,
+making destination transparent where source is transparent.
+
+### Example
+
+<div><fiddle-embed name="1955856d45773a4fd914fcc1f813222f"></fiddle-embed></div>
+
+## <a name='Xor'>Xor</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kXor'>SkBlendMode::kXor</a> replaces destination with:
+[Sa + Da - 2 * Sa * Da, Sc * (1 - Da) + Dc * (1 - Sa)]
+,
+exchanging the transparency of the source and destination.
+
+### Example
+
+<div><fiddle-embed name="29db2c7493d9098b8a086ddbe30dd6d6"></fiddle-embed></div>
+
+## <a name='Plus'>Plus</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kPlus'>SkBlendMode::kPlus</a> replaces destination with:
+[Sa + Da, Sc + Dc]
+,
+summing the <a href='SkColor_Reference#Alpha'>Alpha</a> and <a href='#Color'>Color</a> components.
+
+### Example
+
+<div><fiddle-embed name="05383441e510d54008402e128fc8ad2b"></fiddle-embed></div>
+
+## <a name='Modulate'>Modulate</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kModulate'>SkBlendMode::kModulate</a> replaces destination with:
+[Sa * Da, Sc * Dc]
+,
+scaling <a href='SkColor_Reference#Alpha'>Alpha</a> and <a href='#Color'>Color</a> components by the lesser of the values.
+<a href='#SkBlendMode_kModulate'>SkBlendMode::kModulate</a> differs from <a href='#SkBlendMode_kMultiply'>SkBlendMode::kMultiply</a> in two ways.
+<a href='#SkBlendMode_kModulate'>SkBlendMode::kModulate</a> like <a href='#SkBlendMode_kSrcATop'>SkBlendMode::kSrcATop</a> alters the destination inside
+the destination area, as if the destination <a href='SkColor_Reference#Alpha'>Alpha</a> defined the boudaries of a
+soft clip. <a href='#SkBlendMode_kMultiply'>SkBlendMode::kMultiply</a> like <a href='#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a> can alter the
+destination where the destination is transparent.
+<a href='#SkBlendMode_kModulate'>SkBlendMode::kModulate</a> computes the product of the source and destination using
+<a href='undocumented#Premultiply'>Premultiplied</a> component values. <a href='#SkBlendMode_kMultiply'>SkBlendMode::kMultiply</a> the product of the source
+and destination using <a href='undocumented#Unpremultiply'>Unpremultiplied</a> component values.
+
+### Example
+
+<div><fiddle-embed name="3fdac2b2f48bd227d2e74234c260bc8e"><div>If source and destination are opaque, <a href='#SkBlendMode_kModulate'>SkBlendMode::kModulate</a> and
+<a href='#SkBlendMode_kMultiply'>SkBlendMode::kMultiply</a> produce the same results.
+</div></fiddle-embed></div>
+
+## <a name='Screen'>Screen</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kScreen'>SkBlendMode::kScreen</a> replaces destination with:
+[Sa + Da - Sa * Da, Sc + Dc - Sc * Dc]
+.
+
+### Example
+
+<div><fiddle-embed name="b7b42965927788d853f449f08ddf46de"></fiddle-embed></div>
+
+## <a name='Overlay'>Overlay</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kOverlay'>SkBlendMode::kOverlay</a> replaces destination with:
+[Sa + Da - Sa * Da, Sc * (1 - Da) + Dc * (1 - Sa) +
+(2 * Dc <= Da ? 2 * Sc * Dc : Sa * Da - 2 * (Da - Dc) * (Sa - Sc))]
+.
+
+### Example
+
+<div><fiddle-embed name="03bf042201de02d6d131938ccd3172eb"></fiddle-embed></div>
+
+## <a name='Darken'>Darken</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kDarken'>SkBlendMode::kDarken</a> replaces destination with:
+[Sa + Da - Sa * Da, Sc + Dc - max(Sc * Da, Dc * Sa)]
+.
+<a href='#SkBlendMode_kDarken'>SkBlendMode::kDarken</a> does not make an image darker; it replaces the destination
+component with source if source is darker.
+
+### Example
+
+<div><fiddle-embed name="8c5065ba642f815602000f6b53cefc48"></fiddle-embed></div>
+
+## <a name='Lighten'>Lighten</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kLighten'>SkBlendMode::kLighten</a> replaces destination with:
+[Sa + Da - Sa * Da, Sc + Dc - min(Sc * Da, Dc * Sa)]
+.
+<a href='#SkBlendMode_kDarken'>SkBlendMode::kDarken</a> does not make an image lighter; it replaces the destination
+component with source if source is lighter.
+
+### Example
+
+<div><fiddle-embed name="bbbe1a7b2587e76f9b2c7996b188a054"></fiddle-embed></div>
+
+## <a name='Color_Dodge'>Color Dodge</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kColorDodge'>SkBlendMode::kColorDodge</a> replaces destination with:
+[Sa + Da - Sa * Da, Dc == 0 ? Sc * (1 - Da) : Sc == Sa ? Sc + Da * (1 - Sa) :
+Sa * min(Da, Dc * Sa / (Sa - Sc)) + Sc * (1 - Da) + Da * (1 - Sa)]
+,
+making destination brighter to reflect source.
+
+### Example
+
+<div><fiddle-embed name="280ad6267a7d2d77b6d2c4531c6fc0bf"></fiddle-embed></div>
+
+## <a name='Color_Burn'>Color Burn</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kColorBurn'>SkBlendMode::kColorBurn</a> replaces destination with:
+[Sa + Da - Sa * Da, Dc == Da ? Dc + Sc * (1 - Da) : Sc == 0 ? Da * (1 - Sa) :
+Sa * (Da - min(Da, (Da - Dc) * Sa / Sc)) + Sc * (1 - Da) + Da * (1 - Sa)]
+,
+making destination darker to reflect source.
+
+### Example
+
+<div><fiddle-embed name="3eeef529375d8083ae0d615789d55e89"></fiddle-embed></div>
+
+## <a name='Hard_Light'>Hard Light</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kHardLight'>SkBlendMode::kHardLight</a> replaces destination with:
+[Sa + Da - Sa * Da, Sc * (1 - Da) + Dc * (1 - Sa) +
+2 * Sc <= Sa ? 2 * Sc * Dc : Sa * Da - 2 * (Da - Dc) * (Sa - Sc)]
+,
+making destination lighter or darker, depending on source.
+
+### Example
+
+<div><fiddle-embed name="ac2fe555e2196e15863ea4ce74db3d54"></fiddle-embed></div>
+
+## <a name='Soft_Light'>Soft Light</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component
+where m = Da > 0 ? Dc / Da : 0;
+<a href='#SkBlendMode_kSoftLight'>SkBlendMode::kSoftLight</a> replaces destination with:
+[Sa + Da - Sa * Da, Sc / Da + Dc / Sa +
+(2 * Sc <= Sa ? Dc * (Sa + (2 * Sc - Sa) * (1 - m)) : Dc * Sa + Da * (2 * Sc - Sa) *
+(4 * Dc <= Da ? (16 * m * m + 4 * m) * (m - 1) + 7 * m : sqrt(m) - m))]\
+,
+making destination lighter or darker, depending on source.
+
+### Example
+
+<div><fiddle-embed name="ac93f30dff13f8a8bb31398de370863b"></fiddle-embed></div>
+
+## <a name='Difference'>Difference</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kDifference'>SkBlendMode::kDifference</a> replaces destination with:
+[Sa + Da - Sa * Da, Sc + Dc - 2 * min(Sc * Da, Dc * Sa)]
+,
+replacing destination with lighter less darker.
+
+### Example
+
+<div><fiddle-embed name="52d2c8d1b9b428de4477b4caa1543a3d"></fiddle-embed></div>
+
+## <a name='Exclusion'>Exclusion</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a>,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kExclusion'>SkBlendMode::kExclusion</a> replaces destination with:
+[Sa + Da - Sa * Da, Sc + Dc - 2 * Sc * Dc]
+,
+replacing destination with lighter less darker, ignoring <a href='SkColor_Reference#Alpha'>Alpha</a>.
+
+### Example
+
+<div><fiddle-embed name="a544ee1c67c7c557a9e54d5e99f94bb6"></fiddle-embed></div>
+
+## <a name='Multiply'>Multiply</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, Sc as source <a href='#Color'>Color</a> component,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, Dc as destination <a href='#Color'>Color</a> component;
+<a href='#SkBlendMode_kMultiply'>SkBlendMode::kMultiply</a> replaces destination with:
+[Sa + Da - Sa * Da, Sc * (1 - Da) + Dc * (1 - Sa) + Sc * Dc]
+,
+the product of <a href='undocumented#Unpremultiply'>Unpremultiplied</a> source and destination.
+<a href='#SkBlendMode_kMultiply'>SkBlendMode::kMultiply</a> makes the image darker.
+
+### Example
+
+<div><fiddle-embed name="145418271d58afc4070e7df42095c750"></fiddle-embed></div>
+
+## <a name='Hue'>Hue</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, S as source <a href='#Color'>Color</a>,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, D as destination <a href='#Color'>Color</a>;
+<a href='#SkBlendMode_kHue'>SkBlendMode::kHue</a> replaces destination with:
+[Sa + Da - Sa * Da, SetLuminosity(SetSaturation(S, Saturation(D)), <a href='#Luminosity'>Luminosity(D)</a>)]
+,
+source hue, leaving destination luminosity and saturation unchanged.
+
+### Example
+
+<div><fiddle-embed name="ade7ea4d06775cb252a1d15c7a8112d3"></fiddle-embed></div>
+
+## <a name='Saturation'>Saturation</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, S as source <a href='#Color'>Color</a>,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, D as destination <a href='#Color'>Color</a>;
+<a href='#SkBlendMode_kHue'>SkBlendMode::kHue</a> replaces destination with:
+[Sa + Da - Sa * Da, SetLuminosity(SetSaturation(D, Saturation(S)), <a href='#Luminosity'>Luminosity(D)</a>)]
+,
+source hue, leaving destination luminosity and saturation unchanged.
+
+### Example
+
+<div><fiddle-embed name="4a99f5f6738b18afd92a4cb2bd762bf0"></fiddle-embed></div>
+
+## <a name='Color'>Color</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, S as source <a href='#Color'>Color</a>,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, D as destination <a href='#Color'>Color</a>;
+<a href='#SkBlendMode_kColor'>SkBlendMode::kColor</a> replaces destination with:
+[Sa + Da - Sa * Da, SetLuminosity(S, Luminosity(D))]
+,
+source hue and saturation, leaving destination luminosity unchanged.
+
+### Example
+
+<div><fiddle-embed name="953eb53ac00e22d098c1a1290379282e"></fiddle-embed></div>
+
+## <a name='Luminosity'>Luminosity</a>
+
+Given:
+Sa as source <a href='SkColor_Reference#Alpha'>Alpha</a>, S as source <a href='#Color'>Color</a>,
+Da as destination <a href='SkColor_Reference#Alpha'>Alpha</a>, D as destination <a href='#Color'>Color</a>;
+<a href='#SkBlendMode_kLuminosity'>SkBlendMode::kLuminosity</a> replaces destination with:
+[Sa + Da - Sa * Da, SetLuminosity(D, Luminosity(S))]
+,
+source luminosity, leaving destination hue and saturation unchanged.
+
+### Example
+
+<div><fiddle-embed name="7161fa58aa064ee229ae346cb2e165c4"></fiddle-embed></div>
+
+<a name='SkBlendMode_Name'></a>
+## SkBlendMode_Name
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+SK_API const char* <a href='#SkBlendMode_Name'>SkBlendMode Name</a>(<a href='#SkBlendMode'>SkBlendMode</a> blendMode)
+</pre>
+
+Returns name of <a href='#SkBlendMode_Name_blendMode'>blendMode</a> as null-terminated C string.
+
+### Parameters
+
+<table> <tr> <td><a name='SkBlendMode_Name_blendMode'><code><strong>blendMode</strong></code></a></td>
+ <td>one of: <a href='#SkBlendMode_kClear'>SkBlendMode::kClear</a>, <a href='#SkBlendMode_kSrc'>SkBlendMode::kSrc</a>, <a href='#SkBlendMode_kDst'>SkBlendMode::kDst</a>, <a href='#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>,
+<a href='#SkBlendMode_kDstOver'>SkBlendMode::kDstOver</a>, <a href='#SkBlendMode_kSrcIn'>SkBlendMode::kSrcIn</a>, <a href='#SkBlendMode_kDstIn'>SkBlendMode::kDstIn</a>,
+<a href='#SkBlendMode_kSrcOut'>SkBlendMode::kSrcOut</a>, <a href='#SkBlendMode_kDstOut'>SkBlendMode::kDstOut</a>, <a href='#SkBlendMode_kSrcATop'>SkBlendMode::kSrcATop</a>,
+<a href='#SkBlendMode_kDstATop'>SkBlendMode::kDstATop</a>, <a href='#SkBlendMode_kXor'>SkBlendMode::kXor</a>, <a href='#SkBlendMode_kPlus'>SkBlendMode::kPlus</a>,
+<a href='#SkBlendMode_kModulate'>SkBlendMode::kModulate</a>, <a href='#SkBlendMode_kScreen'>SkBlendMode::kScreen</a>, <a href='#SkBlendMode_kOverlay'>SkBlendMode::kOverlay</a>,
+<a href='#SkBlendMode_kDarken'>SkBlendMode::kDarken</a>, <a href='#SkBlendMode_kLighten'>SkBlendMode::kLighten</a>, <a href='#SkBlendMode_kColorDodge'>SkBlendMode::kColorDodge</a>,
+<a href='#SkBlendMode_kColorBurn'>SkBlendMode::kColorBurn</a>, <a href='#SkBlendMode_kHardLight'>SkBlendMode::kHardLight</a>, <a href='#SkBlendMode_kSoftLight'>SkBlendMode::kSoftLight</a>,
+<a href='#SkBlendMode_kDifference'>SkBlendMode::kDifference</a>, <a href='#SkBlendMode_kExclusion'>SkBlendMode::kExclusion</a>, <a href='#SkBlendMode_kMultiply'>SkBlendMode::kMultiply</a>,
+<a href='#SkBlendMode_kHue'>SkBlendMode::kHue</a>, <a href='#SkBlendMode_kSaturation'>SkBlendMode::kSaturation</a>, <a href='#SkBlendMode_kColor'>SkBlendMode::kColor</a>,
+<a href='#SkBlendMode_kLuminosity'>SkBlendMode::kLuminosity</a> </td>
+ </tr>
+</table>
+
+### Return Value
+
+C string
+
+### Example
+
+<div><fiddle-embed name="3996f4994bf4e90b4cd86524c1f9f1a6">
+
+#### Example Output
+
+~~~~
+default blend: SkBlendMode::kSrcOver
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href='#SkBlendMode'>SkBlendMode</a>
+
+---
+
diff --git a/site/user/api/SkCanvas_Reference.md b/site/user/api/SkCanvas_Reference.md
index 5c391e0245..3239e20199 100644
--- a/site/user/api/SkCanvas_Reference.md
+++ b/site/user/api/SkCanvas_Reference.md
@@ -18,7 +18,7 @@ Request <a href='#Canvas'>Canvas</a> from <a href='SkSurface_Reference#Surface'>
<a href='#Canvas'>Canvas</a> generated by <a href='undocumented#Raster_Surface'>Raster Surface</a> draws to memory visible to the CPU.
<a href='#Canvas'>Canvas</a> generated by <a href='undocumented#GPU_Surface'>GPU Surface</a> uses Vulkan or OpenGL to draw to the GPU.
-To draw to a document, obtain <a href='#Canvas'>Canvas</a> from <a href='undocumented#Canvas'>SVG Canvas</a>, <a href='undocumented#PDF'>Document PDF</a>, or <a href='undocumented#Recorder'>Picture Recorder</a>.
+To draw to a document, obtain <a href='#Canvas'>Canvas</a> from <a href='undocumented#Canvas'>SVG Canvas</a>, <a href='undocumented#PDF'>Document PDF</a>, or <a href='undocumented#Picture_Recorder'>Picture Recorder</a>.
<a href='undocumented#Document'>Document</a> based <a href='#Canvas'>Canvas</a> and other <a href='#Canvas'>Canvas</a> <a href='undocumented#Subclasses'>Subclasses</a> reference <a href='undocumented#Device'>Device</a> describing the
destination.
@@ -114,7 +114,6 @@ SkCanvas global, <code>struct</code>, and <code>class</code> related member func
</tr>
</table>
-
## <a name='Constant'>Constant</a>
@@ -123,33 +122,33 @@ SkCanvas related constants are defined by <code>enum</code>, <code>enum class</c
<tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
<tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_ColorBehavior_kLegacy'>ColorBehavior::kLegacy</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>placeholder</td>
+ </tr>
+ <tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_ColorBehavior'>ColorBehavior</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>exists for Android framework only</td>
</tr>
- <tr>
+ <tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_PointMode'>PointMode</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkCanvas_drawPoints'>drawPoints</a> options</td>
</tr>
- <tr style='background-color: #f0f0f0; '>
+ <tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_SaveLayerFlagsSet'>SaveLayerFlagsSet</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkCanvas_SaveLayerRec'>SaveLayerRec</a> options</td>
</tr>
- <tr>
+ <tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_SrcRectConstraint'>SrcRectConstraint</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkCanvas_drawImageRect'>drawImageRect</a> options</td>
</tr>
- <tr style='background-color: #f0f0f0; '>
+ <tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_kFast_SrcRectConstraint'>kFast SrcRectConstraint</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sample outside bounds; faster</td>
</tr>
- <tr>
+ <tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_kInitWithPrevious_SaveLayerFlag'>kInitWithPrevious SaveLayerFlag</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>initializes with previous contents</td>
</tr>
- <tr style='background-color: #f0f0f0; '>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_ColorBehavior_kLegacy'>ColorBehavior::kLegacy</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>placeholder</td>
- </tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_kLines_PointMode'>kLines PointMode</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>draw each pair of points as a line segment</td>
@@ -172,7 +171,6 @@ SkCanvas related constants are defined by <code>enum</code>, <code>enum class</c
</tr>
</table>
-
## <a name='Struct'>Struct</a>
@@ -190,7 +188,6 @@ SkCanvas uses C++ structs to declare the public data structures and interfaces.
</tr>
</table>
-
## <a name='Typedef'>Typedef</a>
@@ -204,7 +201,6 @@ SkCanvas <code>typedef</code> define a data type.
</tr>
</table>
-
## <a name='Constructor'>Constructor</a>
Create the desired type of <a href='SkSurface_Reference#Surface'>Surface</a> to obtain its <a href='#Canvas'>Canvas</a> when possible. Useful
@@ -253,7 +249,6 @@ SkCanvas can be constructed or initialized by these functions, including C++ cla
</tr>
</table>
-
## <a name='Member_Function'>Member Function</a>
@@ -291,7 +286,7 @@ SkCanvas member functions read and modify the structure properties.
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_clipRRect'>clipRRect</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>combines <a href='#Clip'>Clip</a> with <a href='undocumented#Round_Rect'>Round Rect</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>combines <a href='#Clip'>Clip</a> with <a href='SkRRect_Reference#RRect'>Round Rect</a></td>
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_clipRect'>clipRect</a></td>
@@ -343,11 +338,11 @@ SkCanvas member functions read and modify the structure properties.
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_drawColor'>drawColor</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>fills <a href='#Clip'>Clip</a> with <a href='SkColor_Reference#Color'>Color</a> and <a href='undocumented#Blend_Mode'>Blend Mode</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>fills <a href='#Clip'>Clip</a> with <a href='SkColor_Reference#Color'>Color</a> and <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a></td>
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_drawDRRect'>drawDRRect</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>draws double <a href='undocumented#Round_Rect'>Round Rect</a> stroked or filled</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>draws double <a href='SkRRect_Reference#RRect'>Round Rect</a> stroked or filled</td>
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_drawDrawable'>drawDrawable</a></td>
@@ -395,7 +390,7 @@ SkCanvas member functions read and modify the structure properties.
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_drawPicture'>drawPicture</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>draws <a href='undocumented#Picture'>Picture</a> using <a href='#Clip'>Clip</a> and <a href='#Matrix'>Matrix</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>draws <a href='SkPicture_Reference#Picture'>Picture</a> using <a href='#Clip'>Clip</a> and <a href='#Matrix'>Matrix</a></td>
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_drawPoint'>drawPoint</a></td>
@@ -415,7 +410,7 @@ SkCanvas member functions read and modify the structure properties.
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_drawRRect'>drawRRect</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>draws <a href='undocumented#Round_Rect'>Round Rect</a> using <a href='#Clip'>Clip</a>, <a href='#Matrix'>Matrix</a>, and <a href='SkPaint_Reference#Paint'>Paint</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>draws <a href='SkRRect_Reference#RRect'>Round Rect</a> using <a href='#Clip'>Clip</a>, <a href='#Matrix'>Matrix</a>, and <a href='SkPaint_Reference#Paint'>Paint</a></td>
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_drawRect'>drawRect</a></td>
@@ -427,7 +422,7 @@ SkCanvas member functions read and modify the structure properties.
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_drawRoundRect'>drawRoundRect</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>draws <a href='undocumented#Round_Rect'>Round Rect</a> using <a href='#Clip'>Clip</a>, <a href='#Matrix'>Matrix</a>, and <a href='SkPaint_Reference#Paint'>Paint</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>draws <a href='SkRRect_Reference#RRect'>Round Rect</a> using <a href='#Clip'>Clip</a>, <a href='#Matrix'>Matrix</a>, and <a href='SkPaint_Reference#Paint'>Paint</a></td>
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_drawString'>drawString</a></td>
@@ -575,7 +570,6 @@ SkCanvas member functions read and modify the structure properties.
</tr>
</table>
-
<a name='SkCanvas_MakeRasterDirect'></a>
## MakeRasterDirect
@@ -873,8 +867,6 @@ storage of <a href='undocumented#Raster_Surface'>Raster Surface</a></td>
## <a name='SkCanvas_ColorBehavior'>Enum SkCanvas::ColorBehavior</a>
-Android framework only.
-
<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>,
@@ -1039,7 +1031,6 @@ transparent letters.
</tr>
</table>
-
<a name='SkCanvas_getMetaData'></a>
## getMetaData
@@ -1171,7 +1162,6 @@ isRGB:1
</tr>
</table>
-
<a name='SkCanvas_flush'></a>
## flush
@@ -1421,7 +1411,6 @@ context = skia
</tr>
</table>
-
<a name='SkCanvas_peekPixels'></a>
## peekPixels
@@ -2058,7 +2047,7 @@ is restored, the <a href='SkBitmap_Reference#Bitmap'>Bitmap</a> is drawn into th
<a href='#Layer'>Layer</a> may be initialized with the contents of the previous <a href='#Layer'>Layer</a>. When <a href='#Layer'>Layer</a> is
restored, its <a href='SkBitmap_Reference#Bitmap'>Bitmap</a> can be modified by <a href='SkPaint_Reference#Paint'>Paint</a> passed to <a href='#Layer'>Layer</a> to apply
-<a href='SkColor_Reference#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='SkColor_Reference#Alpha'>Color Alpha</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, and <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
<a name='SkCanvas_saveLayer'></a>
## saveLayer
@@ -2080,7 +2069,7 @@ and draws the <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>.
a specific rectangle, use <a href='#SkCanvas_clipRect'>clipRect</a>.
Optional <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_saveLayer_paint'>paint</a> applies <a href='SkColor_Reference#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> when <a href='#SkCanvas_restore'>restore</a> is called.
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> when <a href='#SkCanvas_restore'>restore</a> is called.
Call <a href='#SkCanvas_restoreToCount'>restoreToCount</a> with returned value to restore this and subsequent saves.
@@ -2129,7 +2118,7 @@ and draws the <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>.
a specific rectangle, use <a href='#SkCanvas_clipRect'>clipRect</a>.
Optional <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_saveLayer_2_paint'>paint</a> applies <a href='SkColor_Reference#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> when <a href='#SkCanvas_restore'>restore</a> is called.
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> when <a href='#SkCanvas_restore'>restore</a> is called.
Call <a href='#SkCanvas_restoreToCount'>restoreToCount</a> with returned value to restore this and subsequent saves.
@@ -2182,7 +2171,7 @@ and draws <a href='#Layer'>Layer</a>.
a specific rectangle, use <a href='#SkCanvas_clipRect'>clipRect</a>.
Optional <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_saveLayerPreserveLCDTextRequests_paint'>paint</a> applies <a href='SkColor_Reference#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> when <a href='#SkCanvas_restore'>restore</a> is called.
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> when <a href='#SkCanvas_restore'>restore</a> is called.
Call <a href='#SkCanvas_restoreToCount'>restoreToCount</a> with returned value to restore this and subsequent saves.
@@ -2334,8 +2323,8 @@ scalePaint blends <a href='#Layer'>Layer</a> back with transparency.
# <a name='SkCanvas_SaveLayerRec'>Struct SkCanvas::SaveLayerRec</a>
<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>*(...
+ struct <a href='#SkCanvas_SaveLayerRec_empty_constructor'>SaveLayerRec</a> {
+ <a href='#SkCanvas_SaveLayerRec_empty_constructor'>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>;
@@ -2344,7 +2333,7 @@ scalePaint blends <a href='#Layer'>Layer</a> back with transparency.
};
</pre>
-<a href='#SkCanvas_SaveLayerRec_SaveLayerRec'>SaveLayerRec</a> contains the state used to create the <a href='#Layer'>Layer</a>.
+<a href='#SkCanvas_SaveLayerRec_empty_constructor'>SaveLayerRec</a> contains the state used to create the <a href='#Layer'>Layer</a>.
## <a name='Layer_SaveLayerRec_Overview'>Layer SaveLayerRec Overview</a>
@@ -2370,7 +2359,6 @@ scalePaint blends <a href='#Layer'>Layer</a> back with transparency.
<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
</table>
-
### Members
<table style='border-collapse: collapse; width: 62.5em'>
@@ -2391,7 +2379,7 @@ a specific rectangle, use <a href='#SkCanvas_clipRect'>clipRect</a>.
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkCanvas_SaveLayerRec_fPaint'><code>fPaint</code></a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
<a href='#SkCanvas_SaveLayerRec_fPaint'>fPaint</a> modifies how <a href='#Layer'>Layer</a> overlays the prior <a href='#Layer'>Layer</a>; may be nullptr.
-<a href='SkColor_Reference#Alpha'>Color Alpha</a>, <a href='undocumented#Blend_Mode'>Blend Mode</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Draw_Looper'>Draw Looper</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, and
+<a href='SkColor_Reference#Alpha'>Color Alpha</a>, <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Draw_Looper'>Draw Looper</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, and
<a href='undocumented#Mask_Filter'>Mask Filter</a> affect <a href='#Layer'>Layer</a> draw.
</td>
</tr>
@@ -2447,19 +2435,18 @@ transferred to the main canvas.
<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
</table>
-
-<a name='SkCanvas_SaveLayerRec_SaveLayerRec'></a>
+<a name='SkCanvas_SaveLayerRec_empty_constructor'></a>
## SaveLayerRec
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-<a href='#SkCanvas_SaveLayerRec_SaveLayerRec'>SaveLayerRec</a>()
+<a href='#SkCanvas_SaveLayerRec_empty_constructor'>SaveLayerRec</a>()
</pre>
Sets <a href='#SkCanvas_SaveLayerRec_fBounds'>fBounds</a>, <a href='#SkCanvas_SaveLayerRec_fPaint'>fPaint</a>, and <a href='#SkCanvas_SaveLayerRec_fBackdrop'>fBackdrop</a> to nullptr. Clears <a href='#SkCanvas_SaveLayerRec_fSaveLayerFlags'>fSaveLayerFlags</a>.
### Return Value
-empty <a href='#SkCanvas_SaveLayerRec_SaveLayerRec'>SaveLayerRec</a>
+empty <a href='#SkCanvas_SaveLayerRec_empty_constructor'>SaveLayerRec</a>
### Example
@@ -2479,30 +2466,31 @@ rec1 == rec2
---
-<a name='SkCanvas_SaveLayerRec_SaveLayerRec_2'></a>
+<a name='SkCanvas_const_SkRect_star_const_SkPaint_star'></a>
+## SaveLayerRec
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-<a href='#SkCanvas_SaveLayerRec_SaveLayerRec'>SaveLayerRec</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>* bounds, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>* paint, <a href='#SkCanvas_SaveLayerFlags'>SaveLayerFlags</a> saveLayerFlags = 0)
+<a href='#SkCanvas_SaveLayerRec_empty_constructor'>SaveLayerRec</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>* bounds, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>* paint, <a href='#SkCanvas_SaveLayerFlags'>SaveLayerFlags</a> 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.
### Parameters
-<table> <tr> <td><a name='SkCanvas_SaveLayerRec_SaveLayerRec_2_bounds'><code><strong>bounds</strong></code></a></td>
+<table> <tr> <td><a name='SkCanvas_const_SkRect_star_const_SkPaint_star_bounds'><code><strong>bounds</strong></code></a></td>
<td><a href='#Layer'>Layer</a> dimensions; may be nullptr</td>
</tr>
- <tr> <td><a name='SkCanvas_SaveLayerRec_SaveLayerRec_2_paint'><code><strong>paint</strong></code></a></td>
+ <tr> <td><a name='SkCanvas_const_SkRect_star_const_SkPaint_star_paint'><code><strong>paint</strong></code></a></td>
<td>applied to <a href='#Layer'>Layer</a> when overlaying prior <a href='#Layer'>Layer</a>; may be nullptr</td>
</tr>
- <tr> <td><a name='SkCanvas_SaveLayerRec_SaveLayerRec_2_saveLayerFlags'><code><strong>saveLayerFlags</strong></code></a></td>
- <td><a href='#SkCanvas_SaveLayerRec_SaveLayerRec'>SaveLayerRec</a> options to modify <a href='#Layer'>Layer</a></td>
+ <tr> <td><a name='SkCanvas_const_SkRect_star_const_SkPaint_star_saveLayerFlags'><code><strong>saveLayerFlags</strong></code></a></td>
+ <td><a href='#SkCanvas_SaveLayerRec_empty_constructor'>SaveLayerRec</a> options to modify <a href='#Layer'>Layer</a></td>
</tr>
</table>
### Return Value
-<a href='#SkCanvas_SaveLayerRec_SaveLayerRec'>SaveLayerRec</a> with empty backdrop
+<a href='#SkCanvas_SaveLayerRec_empty_constructor'>SaveLayerRec</a> with empty backdrop
### Example
@@ -2522,10 +2510,11 @@ rec1 == rec2
---
-<a name='SkCanvas_SaveLayerRec_SaveLayerRec_3'></a>
+<a name='SkCanvas_const_SkRect_star_const_SkPaint_star_const_SkImageFilter_star'></a>
+## SaveLayerRec
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-<a href='#SkCanvas_SaveLayerRec_SaveLayerRec'>SaveLayerRec</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>* bounds, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>* paint, const <a href='undocumented#SkImageFilter'>SkImageFilter</a>* backdrop,
+<a href='#SkCanvas_SaveLayerRec_empty_constructor'>SaveLayerRec</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>* bounds, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>* paint, const <a href='undocumented#SkImageFilter'>SkImageFilter</a>* backdrop,
<a href='#SkCanvas_SaveLayerFlags'>SaveLayerFlags</a> saveLayerFlags)
</pre>
@@ -2533,24 +2522,24 @@ Sets <a href='#SkCanvas_SaveLayerRec_fBounds'>fBounds</a>, <a href='#SkCanvas_Sa
### Parameters
-<table> <tr> <td><a name='SkCanvas_SaveLayerRec_SaveLayerRec_3_bounds'><code><strong>bounds</strong></code></a></td>
+<table> <tr> <td><a name='SkCanvas_const_SkRect_star_const_SkPaint_star_const_SkImageFilter_star_bounds'><code><strong>bounds</strong></code></a></td>
<td><a href='#Layer'>Layer</a> dimensions; may be nullptr</td>
</tr>
- <tr> <td><a name='SkCanvas_SaveLayerRec_SaveLayerRec_3_paint'><code><strong>paint</strong></code></a></td>
+ <tr> <td><a name='SkCanvas_const_SkRect_star_const_SkPaint_star_const_SkImageFilter_star_paint'><code><strong>paint</strong></code></a></td>
<td>applied to <a href='#Layer'>Layer</a> when overlaying prior <a href='#Layer'>Layer</a>;
may be nullptr</td>
</tr>
- <tr> <td><a name='SkCanvas_SaveLayerRec_SaveLayerRec_3_backdrop'><code><strong>backdrop</strong></code></a></td>
+ <tr> <td><a name='SkCanvas_const_SkRect_star_const_SkPaint_star_const_SkImageFilter_star_backdrop'><code><strong>backdrop</strong></code></a></td>
<td>prior <a href='#Layer'>Layer</a> copied with <a href='undocumented#Image_Filter'>Image Filter</a>; may be nullptr</td>
</tr>
- <tr> <td><a name='SkCanvas_SaveLayerRec_SaveLayerRec_3_saveLayerFlags'><code><strong>saveLayerFlags</strong></code></a></td>
- <td><a href='#SkCanvas_SaveLayerRec_SaveLayerRec'>SaveLayerRec</a> options to modify <a href='#Layer'>Layer</a></td>
+ <tr> <td><a name='SkCanvas_const_SkRect_star_const_SkPaint_star_const_SkImageFilter_star_saveLayerFlags'><code><strong>saveLayerFlags</strong></code></a></td>
+ <td><a href='#SkCanvas_SaveLayerRec_empty_constructor'>SaveLayerRec</a> options to modify <a href='#Layer'>Layer</a></td>
</tr>
</table>
### Return Value
-<a href='#SkCanvas_SaveLayerRec_SaveLayerRec'>SaveLayerRec</a> fully specified
+<a href='#SkCanvas_SaveLayerRec_empty_constructor'>SaveLayerRec</a> fully specified
### Example
@@ -2570,49 +2559,50 @@ rec1 == rec2
---
-<a name='SkCanvas_SaveLayerRec_SaveLayerRec_4'></a>
+<a name='SkCanvas_const_SkRect_star_const_SkPaint_star_const_SkImageFilter_star_const_SkImage_star_const_SkMatrix_star'></a>
+## SaveLayerRec
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-<a href='#SkCanvas_SaveLayerRec_SaveLayerRec'>SaveLayerRec</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>* bounds, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>* paint, const <a href='undocumented#SkImageFilter'>SkImageFilter</a>* backdrop,
+<a href='#SkCanvas_SaveLayerRec_empty_constructor'>SaveLayerRec</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>* bounds, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>* paint, const <a href='undocumented#SkImageFilter'>SkImageFilter</a>* backdrop,
const <a href='SkImage_Reference#SkImage'>SkImage</a>* clipMask, const <a href='SkMatrix_Reference#SkMatrix'>SkMatrix</a>* clipMatrix, <a href='#SkCanvas_SaveLayerFlags'>SaveLayerFlags</a> saveLayerFlags)
</pre>
Experimental.
not readySets <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='SkColor_Reference#Alpha'>Color Alpha</a> channel of image, transformed by <a href='#SkCanvas_SaveLayerRec_SaveLayerRec_4_clipMatrix'>clipMatrix</a>, to clip
+<a href='#SkCanvas_const_SkRect_star_const_SkPaint_star_const_SkImageFilter_star_const_SkImage_star_const_SkMatrix_star_clipMatrix'>clipMatrix</a> uses <a href='SkColor_Reference#Alpha'>Color Alpha</a> channel of image, transformed by <a href='#SkCanvas_const_SkRect_star_const_SkPaint_star_const_SkImageFilter_star_const_SkImage_star_const_SkMatrix_star_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 GPU-backed.
### Parameters
-<table> <tr> <td><a name='SkCanvas_SaveLayerRec_SaveLayerRec_4_bounds'><code><strong>bounds</strong></code></a></td>
+<table> <tr> <td><a name='SkCanvas_const_SkRect_star_const_SkPaint_star_const_SkImageFilter_star_const_SkImage_star_const_SkMatrix_star_bounds'><code><strong>bounds</strong></code></a></td>
<td><a href='#Layer'>Layer</a> dimensions; may be nullptr</td>
</tr>
- <tr> <td><a name='SkCanvas_SaveLayerRec_SaveLayerRec_4_paint'><code><strong>paint</strong></code></a></td>
+ <tr> <td><a name='SkCanvas_const_SkRect_star_const_SkPaint_star_const_SkImageFilter_star_const_SkImage_star_const_SkMatrix_star_paint'><code><strong>paint</strong></code></a></td>
<td>graphics state applied to <a href='#Layer'>Layer</a> when overlaying prior
<a href='#Layer'>Layer</a>; may be nullptr</td>
</tr>
- <tr> <td><a name='SkCanvas_SaveLayerRec_SaveLayerRec_4_backdrop'><code><strong>backdrop</strong></code></a></td>
+ <tr> <td><a name='SkCanvas_const_SkRect_star_const_SkPaint_star_const_SkImageFilter_star_const_SkImage_star_const_SkMatrix_star_backdrop'><code><strong>backdrop</strong></code></a></td>
<td>prior <a href='#Layer'>Layer</a> copied with <a href='undocumented#Image_Filter'>Image Filter</a>;
may be nullptr</td>
</tr>
- <tr> <td><a name='SkCanvas_SaveLayerRec_SaveLayerRec_4_clipMask'><code><strong>clipMask</strong></code></a></td>
+ <tr> <td><a name='SkCanvas_const_SkRect_star_const_SkPaint_star_const_SkImageFilter_star_const_SkImage_star_const_SkMatrix_star_clipMask'><code><strong>clipMask</strong></code></a></td>
<td>clip applied to <a href='#Layer'>Layer</a>; may be nullptr</td>
</tr>
- <tr> <td><a name='SkCanvas_SaveLayerRec_SaveLayerRec_4_clipMatrix'><code><strong>clipMatrix</strong></code></a></td>
- <td>matrix applied to <a href='#SkCanvas_SaveLayerRec_SaveLayerRec_4_clipMask'>clipMask</a>; may be nullptr to use
+ <tr> <td><a name='SkCanvas_const_SkRect_star_const_SkPaint_star_const_SkImageFilter_star_const_SkImage_star_const_SkMatrix_star_clipMatrix'><code><strong>clipMatrix</strong></code></a></td>
+ <td>matrix applied to <a href='#SkCanvas_const_SkRect_star_const_SkPaint_star_const_SkImageFilter_star_const_SkImage_star_const_SkMatrix_star_clipMask'>clipMask</a>; may be nullptr to use
identity matrix</td>
</tr>
- <tr> <td><a name='SkCanvas_SaveLayerRec_SaveLayerRec_4_saveLayerFlags'><code><strong>saveLayerFlags</strong></code></a></td>
- <td><a href='#SkCanvas_SaveLayerRec_SaveLayerRec'>SaveLayerRec</a> options to modify <a href='#Layer'>Layer</a></td>
+ <tr> <td><a name='SkCanvas_const_SkRect_star_const_SkPaint_star_const_SkImageFilter_star_const_SkImage_star_const_SkMatrix_star_saveLayerFlags'><code><strong>saveLayerFlags</strong></code></a></td>
+ <td><a href='#SkCanvas_SaveLayerRec_empty_constructor'>SaveLayerRec</a> options to modify <a href='#Layer'>Layer</a></td>
</tr>
</table>
### Return Value
-<a href='#SkCanvas_SaveLayerRec_SaveLayerRec'>SaveLayerRec</a> fully specified
+<a href='#SkCanvas_SaveLayerRec_empty_constructor'>SaveLayerRec</a> fully specified
### See Also
@@ -2654,7 +2644,7 @@ depth of save state stack
### Example
<div><fiddle-embed name="7d3751e82d1b6ec328ffa3d6f48ca831"><div>The example draws an image, and saves it into a <a href='#Layer'>Layer</a> with <a href='#SkCanvas_kInitWithPrevious_SaveLayerFlag'>kInitWithPrevious SaveLayerFlag</a>.
-Next it punches a hole in <a href='#Layer'>Layer</a> and restore with <a href='undocumented#SkBlendMode_kPlus'>SkBlendMode::kPlus</a>.
+Next it punches a hole in <a href='#Layer'>Layer</a> and restore with <a href='SkBlendMode_Reference#SkBlendMode_kPlus'>SkBlendMode::kPlus</a>.
Where <a href='#Layer'>Layer</a> was cleared, the original image will draw unchanged.
Outside of the circle the mandrill is brightened.
</div></fiddle-embed></div>
@@ -2989,7 +2979,7 @@ If clipping <a href='SkPath_Reference#Path'>Path</a> has <a href='SkPaint_Refere
that drawing blend partially with the destination along the edge. A rotated
rectangular <a href='SkPaint_Reference#Anti_Alias'>Anti Aliased</a> 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='#Clip'>Clip</a> can combine with <a href='SkRect_Reference#Rect'>Rect</a> and <a href='SkRRect_Reference#RRect'>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>.
<a href='#Clip'>Clip</a> can combine with <a href='undocumented#Region'>Region</a>. <a href='undocumented#Region'>Region</a> is assumed to be in <a href='undocumented#Device'>Device</a> coordinates
@@ -3115,8 +3105,6 @@ The clip restriction is not recorded in pictures.
Pass an empty <a href='#SkCanvas_androidFramework_setDeviceClipRestriction_rect'>rect</a> to disable maximum clip.
-This private API is for use by Android framework only.
-
### Parameters
<table> <tr> <td><a name='SkCanvas_androidFramework_setDeviceClipRestriction_rect'><code><strong>rect</strong></code></a></td>
@@ -3130,7 +3118,7 @@ This private API is for use by Android framework only.
## clipRRect
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-void <a href='#SkCanvas_clipRRect'>clipRRect</a>(const <a href='undocumented#SkRRect'>SkRRect</a>& rrect, <a href='undocumented#SkClipOp'>SkClipOp</a> op, bool doAntiAlias)
+void <a href='#SkCanvas_clipRRect'>clipRRect</a>(const <a href='SkRRect_Reference#SkRRect'>SkRRect</a>& rrect, <a href='undocumented#SkClipOp'>SkClipOp</a> 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>,
@@ -3141,7 +3129,7 @@ before it is combined with <a href='#Clip'>Clip</a>.
### Parameters
<table> <tr> <td><a name='SkCanvas_clipRRect_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>
+ <td><a href='SkRRect_Reference#RRect'>Round Rect</a> to combine with <a href='#Clip'>Clip</a></td>
</tr>
<tr> <td><a name='SkCanvas_clipRRect_op'><code><strong>op</strong></code></a></td>
<td><a href='undocumented#Clip_Op'>Clip Op</a> to apply to <a href='#Clip'>Clip</a></td>
@@ -3164,7 +3152,7 @@ before it is combined with <a href='#Clip'>Clip</a>.
<a name='SkCanvas_clipRRect_2'></a>
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-void <a href='#SkCanvas_clipRRect'>clipRRect</a>(const <a href='undocumented#SkRRect'>SkRRect</a>& rrect, <a href='undocumented#SkClipOp'>SkClipOp</a> op)
+void <a href='#SkCanvas_clipRRect'>clipRRect</a>(const <a href='SkRRect_Reference#SkRRect'>SkRRect</a>& rrect, <a href='undocumented#SkClipOp'>SkClipOp</a> op)
</pre>
Replace <a href='#Clip'>Clip</a> with the intersection or difference of <a href='#Clip'>Clip</a> and <a href='#SkCanvas_clipRRect_2_rrect'>rrect</a>.
@@ -3174,7 +3162,7 @@ Resulting <a href='#Clip'>Clip</a> is <a href='undocumented#Alias'>Aliased</a>;
### Parameters
<table> <tr> <td><a name='SkCanvas_clipRRect_2_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>
+ <td><a href='SkRRect_Reference#RRect'>Round Rect</a> to combine with <a href='#Clip'>Clip</a></td>
</tr>
<tr> <td><a name='SkCanvas_clipRRect_2_op'><code><strong>op</strong></code></a></td>
<td><a href='undocumented#Clip_Op'>Clip Op</a> to apply to <a href='#Clip'>Clip</a></td>
@@ -3194,7 +3182,7 @@ Resulting <a href='#Clip'>Clip</a> is <a href='undocumented#Alias'>Aliased</a>;
<a name='SkCanvas_clipRRect_3'></a>
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-void <a href='#SkCanvas_clipRRect'>clipRRect</a>(const <a href='undocumented#SkRRect'>SkRRect</a>& rrect, bool doAntiAlias = false)
+void <a href='#SkCanvas_clipRRect'>clipRRect</a>(const <a href='SkRRect_Reference#SkRRect'>SkRRect</a>& 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>,
@@ -3204,7 +3192,7 @@ with an <a href='undocumented#Alias'>Aliased</a> or <a href='SkPaint_Reference#A
### Parameters
<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>
+ <td><a href='SkRRect_Reference#RRect'>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='SkPaint_Reference#Anti_Alias'>Anti Aliased</a></td>
@@ -3689,11 +3677,11 @@ device bounds empty = true
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_drawColor'>drawColor</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>fills <a href='#Clip'>Clip</a> with <a href='SkColor_Reference#Color'>Color</a> and <a href='undocumented#Blend_Mode'>Blend Mode</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>fills <a href='#Clip'>Clip</a> with <a href='SkColor_Reference#Color'>Color</a> and <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a></td>
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_drawDRRect'>drawDRRect</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>draws double <a href='undocumented#Round_Rect'>Round Rect</a> stroked or filled</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>draws double <a href='SkRRect_Reference#RRect'>Round Rect</a> stroked or filled</td>
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_drawDrawable'>drawDrawable</a></td>
@@ -3749,7 +3737,7 @@ device bounds empty = true
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_drawPicture'>drawPicture</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>draws <a href='undocumented#Picture'>Picture</a> using <a href='#Clip'>Clip</a> and <a href='#Matrix'>Matrix</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>draws <a href='SkPicture_Reference#Picture'>Picture</a> using <a href='#Clip'>Clip</a> and <a href='#Matrix'>Matrix</a></td>
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '></td>
@@ -3785,7 +3773,7 @@ device bounds empty = true
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_drawRRect'>drawRRect</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>draws <a href='undocumented#Round_Rect'>Round Rect</a> using <a href='#Clip'>Clip</a>, <a href='#Matrix'>Matrix</a>, and <a href='SkPaint_Reference#Paint'>Paint</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>draws <a href='SkRRect_Reference#RRect'>Round Rect</a> using <a href='#Clip'>Clip</a>, <a href='#Matrix'>Matrix</a>, and <a href='SkPaint_Reference#Paint'>Paint</a></td>
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_drawRect'>drawRect</a></td>
@@ -3797,7 +3785,7 @@ device bounds empty = true
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_drawRoundRect'>drawRoundRect</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>draws <a href='undocumented#Round_Rect'>Round Rect</a> using <a href='#Clip'>Clip</a>, <a href='#Matrix'>Matrix</a>, and <a href='SkPaint_Reference#Paint'>Paint</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>draws <a href='SkRRect_Reference#RRect'>Round Rect</a> using <a href='#Clip'>Clip</a>, <a href='#Matrix'>Matrix</a>, and <a href='SkPaint_Reference#Paint'>Paint</a></td>
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkCanvas_drawVertices'>drawVertices</a></td>
@@ -3813,12 +3801,11 @@ device bounds empty = true
</tr>
</table>
-
<a name='SkCanvas_drawColor'></a>
## drawColor
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-void <a href='#SkCanvas_drawColor'>drawColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> color, <a href='undocumented#SkBlendMode'>SkBlendMode</a> mode = <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>)
+void <a href='#SkCanvas_drawColor'>drawColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> color, <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode = <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>)
</pre>
Fill <a href='#Clip'>Clip</a> with <a href='SkColor_Reference#Color'>Color</a> <a href='#SkCanvas_drawColor_color'>color</a>.
@@ -3830,7 +3817,7 @@ Fill <a href='#Clip'>Clip</a> with <a href='SkColor_Reference#Color'>Color</a> <
<td><a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB</td>
</tr>
<tr> <td><a name='SkCanvas_drawColor_mode'><code><strong>mode</strong></code></a></td>
- <td><a href='undocumented#SkBlendMode'>SkBlendMode</a> used to combine source <a href='#SkCanvas_drawColor_color'>color</a> and destination</td>
+ <td><a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> used to combine source <a href='#SkCanvas_drawColor_color'>color</a> and destination</td>
</tr>
</table>
@@ -3851,7 +3838,7 @@ Fill <a href='#Clip'>Clip</a> with <a href='SkColor_Reference#Color'>Color</a> <
void <a href='#SkCanvas_clear'>clear</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> color)
</pre>
-Fill <a href='#Clip'>Clip</a> with <a href='SkColor_Reference#Color'>Color</a> <a href='#SkCanvas_clear_color'>color</a> using <a href='undocumented#SkBlendMode_kSrc'>SkBlendMode::kSrc</a>.
+Fill <a href='#Clip'>Clip</a> with <a href='SkColor_Reference#Color'>Color</a> <a href='#SkCanvas_clear_color'>color</a> using <a href='SkBlendMode_Reference#SkBlendMode_kSrc'>SkBlendMode::kSrc</a>.
This has the effect of replacing all pixels contained by <a href='#Clip'>Clip</a> with <a href='#SkCanvas_clear_color'>color</a>.
### Parameters
@@ -3879,7 +3866,7 @@ void <a href='#SkCanvas_discard'>discard</a>()
</pre>
Make <a href='#Canvas'>Canvas</a> contents undefined. Subsequent calls that read <a href='#Canvas'>Canvas</a> pixels,
-such as drawing with <a href='undocumented#SkBlendMode'>SkBlendMode</a>, return undefined results. <a href='#SkCanvas_discard'>discard</a> does
+such as drawing with <a href='SkBlendMode_Reference#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='SkSurface_Reference#Surface'>Surface</a> or <a href='undocumented#Device'>Device</a>
@@ -3904,7 +3891,7 @@ void <a href='#SkCanvas_drawPaint'>drawPaint</a>(const <a href='SkPaint_Referenc
</pre>
Fill <a href='#Clip'>Clip</a> with <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_drawPaint_paint'>paint</a>. <a href='SkPaint_Reference#Paint'>Paint</a> components <a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Shader'>Shader</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> affect drawing;
+<a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, and <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> affect drawing;
<a href='undocumented#Path_Effect'>Path Effect</a> in <a href='#SkCanvas_drawPaint_paint'>paint</a> is ignored.
### Parameters
@@ -4331,10 +4318,10 @@ if stroked, <a href='SkPaint_Reference#Stroke_Width'>Paint Stroke Width</a> desc
## drawRRect
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-void <a href='#SkCanvas_drawRRect'>drawRRect</a>(const <a href='undocumented#SkRRect'>SkRRect</a>& rrect, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& paint)
+void <a href='#SkCanvas_drawRRect'>drawRRect</a>(const <a href='SkRRect_Reference#SkRRect'>SkRRect</a>& rrect, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& paint)
</pre>
-<a href='#Draw'>Draw</a> <a href='undocumented#Round_Rect'>Round Rect</a> <a href='#SkCanvas_drawRRect_rrect'>rrect</a> using <a href='#Clip'>Clip</a>, <a href='#Matrix'>Matrix</a>, and <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_drawRRect_paint'>paint</a>.
+<a href='#Draw'>Draw</a> <a href='SkRRect_Reference#RRect'>Round Rect</a> <a href='#SkCanvas_drawRRect_rrect'>rrect</a> using <a href='#Clip'>Clip</a>, <a href='#Matrix'>Matrix</a>, and <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_drawRRect_paint'>paint</a>.
In <a href='#SkCanvas_drawRRect_paint'>paint</a>: <a href='SkPaint_Reference#Style'>Paint Style</a> determines if <a href='#SkCanvas_drawRRect_rrect'>rrect</a> is stroked or filled;
if stroked, <a href='SkPaint_Reference#Stroke_Width'>Paint Stroke Width</a> describes the line thickness.
@@ -4344,7 +4331,7 @@ may have any combination of positive non-square radii for the four corners.
### Parameters
<table> <tr> <td><a name='SkCanvas_drawRRect_rrect'><code><strong>rrect</strong></code></a></td>
- <td><a href='undocumented#Round_Rect'>Round Rect</a> with up to eight corner radii to draw</td>
+ <td><a href='SkRRect_Reference#RRect'>Round Rect</a> with up to eight corner radii to draw</td>
</tr>
<tr> <td><a name='SkCanvas_drawRRect_paint'><code><strong>paint</strong></code></a></td>
<td><a href='SkPaint_Reference#Paint'>Paint</a> stroke or fill, blend, color, and so on, used to draw</td>
@@ -4365,15 +4352,15 @@ may have any combination of positive non-square radii for the four corners.
## drawDRRect
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-void <a href='#SkCanvas_drawDRRect'>drawDRRect</a>(const <a href='undocumented#SkRRect'>SkRRect</a>& outer, const <a href='undocumented#SkRRect'>SkRRect</a>& inner, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& paint)
+void <a href='#SkCanvas_drawDRRect'>drawDRRect</a>(const <a href='SkRRect_Reference#SkRRect'>SkRRect</a>& outer, const <a href='SkRRect_Reference#SkRRect'>SkRRect</a>& inner, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& paint)
</pre>
-<a href='#Draw'>Draw</a> <a href='undocumented#Round_Rect'>Round Rect</a> <a href='#SkCanvas_drawDRRect_outer'>outer</a> and <a href='#SkCanvas_drawDRRect_inner'>inner</a>
+<a href='#Draw'>Draw</a> <a href='SkRRect_Reference#RRect'>Round Rect</a> <a href='#SkCanvas_drawDRRect_outer'>outer</a> and <a href='#SkCanvas_drawDRRect_inner'>inner</a>
using <a href='#Clip'>Clip</a>, <a href='#Matrix'>Matrix</a>, and <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_drawDRRect_paint'>paint</a>.
<a href='#SkCanvas_drawDRRect_outer'>outer</a> must contain <a href='#SkCanvas_drawDRRect_inner'>inner</a> or the drawing is undefined.
-In <a href='#SkCanvas_drawDRRect_paint'>paint</a>: <a href='SkPaint_Reference#Style'>Paint Style</a> determines if <a href='undocumented#Round_Rect'>Round Rect</a> is stroked or filled;
+In <a href='#SkCanvas_drawDRRect_paint'>paint</a>: <a href='SkPaint_Reference#Style'>Paint Style</a> determines if <a href='SkRRect_Reference#RRect'>Round Rect</a> is stroked or filled;
if stroked, <a href='SkPaint_Reference#Stroke_Width'>Paint Stroke Width</a> describes the line thickness.
-If stroked and <a href='undocumented#Round_Rect'>Round Rect</a> corner has zero length radii, <a href='SkPaint_Reference#Stroke_Join'>Paint Stroke Join</a> can
+If stroked and <a href='SkRRect_Reference#RRect'>Round Rect</a> corner has zero length radii, <a href='SkPaint_Reference#Stroke_Join'>Paint Stroke Join</a> can
draw corners rounded or square.
GPU-backed platforms optimize drawing when both <a href='#SkCanvas_drawDRRect_outer'>outer</a> and <a href='#SkCanvas_drawDRRect_inner'>inner</a> are
@@ -4383,10 +4370,10 @@ concave and <a href='#SkCanvas_drawDRRect_outer'>outer</a> contains <a href='#Sk
### Parameters
<table> <tr> <td><a name='SkCanvas_drawDRRect_outer'><code><strong>outer</strong></code></a></td>
- <td><a href='undocumented#Round_Rect'>Round Rect</a> <a href='#SkCanvas_drawDRRect_outer'>outer</a> bounds to draw</td>
+ <td><a href='SkRRect_Reference#RRect'>Round Rect</a> <a href='#SkCanvas_drawDRRect_outer'>outer</a> bounds to draw</td>
</tr>
<tr> <td><a name='SkCanvas_drawDRRect_inner'><code><strong>inner</strong></code></a></td>
- <td><a href='undocumented#Round_Rect'>Round Rect</a> <a href='#SkCanvas_drawDRRect_inner'>inner</a> bounds to draw</td>
+ <td><a href='SkRRect_Reference#RRect'>Round Rect</a> <a href='#SkCanvas_drawDRRect_inner'>inner</a> bounds to draw</td>
</tr>
<tr> <td><a name='SkCanvas_drawDRRect_paint'><code><strong>paint</strong></code></a></td>
<td><a href='SkPaint_Reference#Paint'>Paint</a> stroke or fill, blend, color, and so on, used to draw</td>
@@ -4400,8 +4387,8 @@ concave and <a href='#SkCanvas_drawDRRect_outer'>outer</a> contains <a href='#Sk
### Example
<div><fiddle-embed name="30823cb4edf884d330285ea161664931"><div>Outer <a href='SkRect_Reference#Rect'>Rect</a> has no corner radii, but stroke join is rounded.
-Inner <a href='undocumented#Round_Rect'>Round Rect</a> has corner radii; outset stroke increases radii of corners.
-Stroke join does not affect <a href='#SkCanvas_drawDRRect_inner'>inner</a> <a href='undocumented#Round_Rect'>Round Rect</a> since it has no sharp corners.
+Inner <a href='SkRRect_Reference#RRect'>Round Rect</a> has corner radii; outset stroke increases radii of corners.
+Stroke join does not affect <a href='#SkCanvas_drawDRRect_inner'>inner</a> <a href='SkRRect_Reference#RRect'>Round Rect</a> since it has no sharp corners.
</div></fiddle-embed></div>
### See Also
@@ -4544,20 +4531,20 @@ If <a href='SkRect_Reference#Rect'>Rect</a> <a href='#SkCanvas_drawArc_oval'>ova
void <a href='#SkCanvas_drawRoundRect'>drawRoundRect</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& rect, <a href='undocumented#SkScalar'>SkScalar</a> rx, <a href='undocumented#SkScalar'>SkScalar</a> ry, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& paint)
</pre>
-<a href='#Draw'>Draw</a> <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>,
+<a href='#Draw'>Draw</a> <a href='SkRRect_Reference#RRect'>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>,
<a href='#Matrix'>Matrix</a>, and <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_drawRoundRect_paint'>paint</a>.
-In <a href='#SkCanvas_drawRoundRect_paint'>paint</a>: <a href='SkPaint_Reference#Style'>Paint Style</a> determines if <a href='undocumented#Round_Rect'>Round Rect</a> is stroked or filled;
+In <a href='#SkCanvas_drawRoundRect_paint'>paint</a>: <a href='SkPaint_Reference#Style'>Paint Style</a> determines if <a href='SkRRect_Reference#RRect'>Round Rect</a> is stroked or filled;
if stroked, <a href='SkPaint_Reference#Stroke_Width'>Paint Stroke Width</a> describes the line thickness.
If <a href='#SkCanvas_drawRoundRect_rx'>rx</a> or <a href='#SkCanvas_drawRoundRect_ry'>ry</a> are less than zero, they are treated as if they are zero.
If <a href='#SkCanvas_drawRoundRect_rx'>rx</a> plus <a href='#SkCanvas_drawRoundRect_ry'>ry</a> exceeds <a href='#SkCanvas_drawRoundRect_rect'>rect</a> width or <a href='#SkCanvas_drawRoundRect_rect'>rect</a> height, radii are scaled down to fit.
-If <a href='#SkCanvas_drawRoundRect_rx'>rx</a> and <a href='#SkCanvas_drawRoundRect_ry'>ry</a> are zero, <a href='undocumented#Round_Rect'>Round Rect</a> is drawn as <a href='SkRect_Reference#Rect'>Rect</a> and if stroked is affected by
+If <a href='#SkCanvas_drawRoundRect_rx'>rx</a> and <a href='#SkCanvas_drawRoundRect_ry'>ry</a> are zero, <a href='SkRRect_Reference#RRect'>Round Rect</a> is drawn as <a href='SkRect_Reference#Rect'>Rect</a> and if stroked is affected by
<a href='SkPaint_Reference#Stroke_Join'>Paint Stroke Join</a>.
### Parameters
<table> <tr> <td><a name='SkCanvas_drawRoundRect_rect'><code><strong>rect</strong></code></a></td>
- <td><a href='SkRect_Reference#Rect'>Rect</a> bounds of <a href='undocumented#Round_Rect'>Round Rect</a> to draw</td>
+ <td><a href='SkRect_Reference#Rect'>Rect</a> bounds of <a href='SkRRect_Reference#RRect'>Round Rect</a> to draw</td>
</tr>
<tr> <td><a name='SkCanvas_drawRoundRect_rx'><code><strong>rx</strong></code></a></td>
<td>axis length on x-axis of oval describing rounded corners</td>
@@ -4594,7 +4581,7 @@ void <a href='#SkCanvas_drawPath'>drawPath</a>(const <a href='SkPath_Reference#S
<a href='#Draw'>Draw</a> <a href='SkPath_Reference#Path'>Path</a> <a href='#SkCanvas_drawPath_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_drawPath_paint'>paint</a>.
<a href='SkPath_Reference#Path'>Path</a> contains an array of <a href='SkPath_Reference#Contour'>Path Contour</a>, each of which may be open or closed.
-In <a href='#SkCanvas_drawPath_paint'>paint</a>: <a href='SkPaint_Reference#Style'>Paint Style</a> determines if <a href='undocumented#Round_Rect'>Round Rect</a> is stroked or filled:
+In <a href='#SkCanvas_drawPath_paint'>paint</a>: <a href='SkPaint_Reference#Style'>Paint Style</a> determines if <a href='SkRRect_Reference#RRect'>Round Rect</a> is stroked or filled:
if filled, <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a> determines whether <a href='SkPath_Reference#Contour'>Path Contour</a> describes inside or
outside of fill; if stroked, <a href='SkPaint_Reference#Stroke_Width'>Paint Stroke Width</a> describes the line thickness,
<a href='SkPaint_Reference#Stroke_Cap'>Paint Stroke Cap</a> describes line ends, and <a href='SkPaint_Reference#Stroke_Join'>Paint Stroke Join</a> describes how
@@ -4641,7 +4628,7 @@ void <a href='#SkCanvas_drawImage'>drawImage</a>(const <a href='SkImage_Referenc
<a href='#Draw'>Draw</a> <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='SkColor_Reference#Alpha'>Color Alpha</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, <a href='undocumented#Blend_Mode'>Blend Mode</a>,
+If <a href='#SkCanvas_drawImage_paint'>paint</a> is supplied, apply <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='SkColor_Reference#Alpha'>Color Alpha</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>,
and <a href='undocumented#Draw_Looper'>Draw Looper</a>. If <a href='#SkCanvas_drawImage_image'>image</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
If <a href='#SkCanvas_drawImage_paint'>paint</a> contains <a href='undocumented#Mask_Filter'>Mask Filter</a>, generate mask from <a href='#SkCanvas_drawImage_image'>image</a> bounds. If generated
mask extends beyond <a href='#SkCanvas_drawImage_image'>image</a> bounds, replicate <a href='#SkCanvas_drawImage_image'>image</a> edge colors, just as <a href='undocumented#Shader'>Shader</a>
@@ -4660,7 +4647,7 @@ made from <a href='SkImage_Reference#SkImage_makeShader'>SkImage::makeShader</a>
<td><a href='#SkCanvas_drawImage_top'>top</a> side of <a href='#SkCanvas_drawImage_image'>image</a></td>
</tr>
<tr> <td><a name='SkCanvas_drawImage_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>,
+ <td><a href='SkPaint_Reference#Paint'>Paint</a> containing <a href='SkBlendMode_Reference#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>
@@ -4686,7 +4673,7 @@ void <a href='#SkCanvas_drawImage'>drawImage</a>(const <a href='undocumented#sk_
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='SkColor_Reference#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_drawImage_2_image'>image</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and <a href='undocumented#Draw_Looper'>Draw Looper</a>. If <a href='#SkCanvas_drawImage_2_image'>image</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
If <a href='#SkCanvas_drawImage_2_paint'>paint</a> contains <a href='undocumented#Mask_Filter'>Mask Filter</a>, generate mask from <a href='#SkCanvas_drawImage_2_image'>image</a> bounds. If generated
mask extends beyond <a href='#SkCanvas_drawImage_2_image'>image</a> bounds, replicate <a href='#SkCanvas_drawImage_2_image'>image</a> edge colors, just as <a href='undocumented#Shader'>Shader</a>
made from <a href='SkImage_Reference#SkImage_makeShader'>SkImage::makeShader</a> with <a href='undocumented#SkShader_kClamp_TileMode'>SkShader::kClamp TileMode</a> set replicates the
@@ -4704,7 +4691,7 @@ made from <a href='SkImage_Reference#SkImage_makeShader'>SkImage::makeShader</a>
<td>pop side of <a href='#SkCanvas_drawImage_2_image'>image</a></td>
</tr>
<tr> <td><a name='SkCanvas_drawImage_2_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>,
+ <td><a href='SkPaint_Reference#Paint'>Paint</a> containing <a href='SkBlendMode_Reference#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>
@@ -4787,7 +4774,7 @@ void <a href='#SkCanvas_drawImageRect'>drawImageRect</a>(const <a href='SkImage_
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='SkColor_Reference#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_drawImageRect_image'>image</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and <a href='undocumented#Draw_Looper'>Draw Looper</a>. If <a href='#SkCanvas_drawImageRect_image'>image</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
If <a href='#SkCanvas_drawImageRect_paint'>paint</a> contains <a href='undocumented#Mask_Filter'>Mask Filter</a>, generate mask from <a href='#SkCanvas_drawImageRect_image'>image</a> bounds.
If generated mask extends beyond <a href='#SkCanvas_drawImageRect_image'>image</a> bounds, replicate <a href='#SkCanvas_drawImageRect_image'>image</a> edge colors, just
@@ -4810,7 +4797,7 @@ improve performance.
<td>destination <a href='SkRect_Reference#Rect'>Rect</a> of <a href='#SkCanvas_drawImageRect_image'>image</a> to draw to</td>
</tr>
<tr> <td><a name='SkCanvas_drawImageRect_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>,
+ <td><a href='SkPaint_Reference#Paint'>Paint</a> containing <a href='SkBlendMode_Reference#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>
<tr> <td><a name='SkCanvas_drawImageRect_constraint'><code><strong>constraint</strong></code></a></td>
@@ -4846,7 +4833,7 @@ boundaries. Additionally transform draw using <a href='#Clip'>Clip</a>, <a href=
<a href='#SkCanvas_drawImageRect_2_paint'>paint</a>.
If <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_drawImageRect_2_paint'>paint</a> is supplied, apply <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='SkColor_Reference#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_drawImageRect_2_image'>image</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and <a href='undocumented#Draw_Looper'>Draw Looper</a>. If <a href='#SkCanvas_drawImageRect_2_image'>image</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
If <a href='#SkCanvas_drawImageRect_2_paint'>paint</a> contains <a href='undocumented#Mask_Filter'>Mask Filter</a>, generate mask from <a href='#SkCanvas_drawImageRect_2_image'>image</a> bounds.
If generated mask extends beyond <a href='#SkCanvas_drawImageRect_2_image'>image</a> bounds, replicate <a href='#SkCanvas_drawImageRect_2_image'>image</a> edge colors, just
@@ -4869,7 +4856,7 @@ improve performance.
<td>destination <a href='SkRect_Reference#Rect'>Rect</a> of <a href='#SkCanvas_drawImageRect_2_image'>image</a> to draw to</td>
</tr>
<tr> <td><a name='SkCanvas_drawImageRect_2_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>,
+ <td><a href='SkPaint_Reference#Paint'>Paint</a> containing <a href='SkBlendMode_Reference#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>
<tr> <td><a name='SkCanvas_drawImageRect_2_constraint'><code><strong>constraint</strong></code></a></td>
@@ -4898,7 +4885,7 @@ void <a href='#SkCanvas_drawImageRect'>drawImageRect</a>(const <a href='SkImage_
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='SkColor_Reference#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_drawImageRect_3_image'>image</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and <a href='undocumented#Draw_Looper'>Draw Looper</a>. If <a href='#SkCanvas_drawImageRect_3_image'>image</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
If <a href='#SkCanvas_drawImageRect_3_paint'>paint</a> contains <a href='undocumented#Mask_Filter'>Mask Filter</a>, generate mask from <a href='#SkCanvas_drawImageRect_3_image'>image</a> bounds.
If generated mask extends beyond <a href='#SkCanvas_drawImageRect_3_image'>image</a> bounds, replicate <a href='#SkCanvas_drawImageRect_3_image'>image</a> edge colors, just
@@ -4918,7 +4905,7 @@ improve performance.
<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><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>,
+ <td><a href='SkPaint_Reference#Paint'>Paint</a> containing <a href='SkBlendMode_Reference#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>
<tr> <td><a name='SkCanvas_drawImageRect_3_constraint'><code><strong>constraint</strong></code></a></td>
@@ -4947,7 +4934,7 @@ void <a href='#SkCanvas_drawImageRect'>drawImageRect</a>(const <a href='undocume
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='SkColor_Reference#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_drawImageRect_4_image'>image</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and <a href='undocumented#Draw_Looper'>Draw Looper</a>. If <a href='#SkCanvas_drawImageRect_4_image'>image</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
If <a href='#SkCanvas_drawImageRect_4_paint'>paint</a> contains <a href='undocumented#Mask_Filter'>Mask Filter</a>, generate mask from <a href='#SkCanvas_drawImageRect_4_image'>image</a> bounds.
If generated mask extends beyond <a href='#SkCanvas_drawImageRect_4_image'>image</a> bounds, replicate <a href='#SkCanvas_drawImageRect_4_image'>image</a> edge colors, just
@@ -4970,7 +4957,7 @@ improve performance.
<td>destination <a href='SkRect_Reference#Rect'>Rect</a> of <a href='#SkCanvas_drawImageRect_4_image'>image</a> to draw to</td>
</tr>
<tr> <td><a name='SkCanvas_drawImageRect_4_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>,
+ <td><a href='SkPaint_Reference#Paint'>Paint</a> containing <a href='SkBlendMode_Reference#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>
<tr> <td><a name='SkCanvas_drawImageRect_4_constraint'><code><strong>constraint</strong></code></a></td>
@@ -5002,7 +4989,7 @@ void <a href='#SkCanvas_drawImageRect'>drawImageRect</a>(const <a href='undocume
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>.
If <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_drawImageRect_5_paint'>paint</a> is supplied, apply <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='SkColor_Reference#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_drawImageRect_5_image'>image</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and <a href='undocumented#Draw_Looper'>Draw Looper</a>. If <a href='#SkCanvas_drawImageRect_5_image'>image</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
If <a href='#SkCanvas_drawImageRect_5_paint'>paint</a> contains <a href='undocumented#Mask_Filter'>Mask Filter</a>, generate mask from <a href='#SkCanvas_drawImageRect_5_image'>image</a> bounds.
If generated mask extends beyond <a href='#SkCanvas_drawImageRect_5_image'>image</a> bounds, replicate <a href='#SkCanvas_drawImageRect_5_image'>image</a> edge colors, just
@@ -5025,7 +5012,7 @@ improve performance.
<td>destination <a href='SkRect_Reference#Rect'>Rect</a> of <a href='#SkCanvas_drawImageRect_5_image'>image</a> to draw to</td>
</tr>
<tr> <td><a name='SkCanvas_drawImageRect_5_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>,
+ <td><a href='SkPaint_Reference#Paint'>Paint</a> containing <a href='SkBlendMode_Reference#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>
<tr> <td><a name='SkCanvas_drawImageRect_5_constraint'><code><strong>constraint</strong></code></a></td>
@@ -5054,7 +5041,7 @@ void <a href='#SkCanvas_drawImageRect'>drawImageRect</a>(const <a href='undocume
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='SkColor_Reference#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_drawImageRect_6_image'>image</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and <a href='undocumented#Draw_Looper'>Draw Looper</a>. If <a href='#SkCanvas_drawImageRect_6_image'>image</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
If <a href='#SkCanvas_drawImageRect_6_paint'>paint</a> contains <a href='undocumented#Mask_Filter'>Mask Filter</a>, generate mask from <a href='#SkCanvas_drawImageRect_6_image'>image</a> bounds.
If generated mask extends beyond <a href='#SkCanvas_drawImageRect_6_image'>image</a> bounds, replicate <a href='#SkCanvas_drawImageRect_6_image'>image</a> edge colors, just
@@ -5074,7 +5061,7 @@ improve performance.
<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><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>,
+ <td><a href='SkPaint_Reference#Paint'>Paint</a> containing <a href='SkBlendMode_Reference#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>
<tr> <td><a name='SkCanvas_drawImageRect_6_constraint'><code><strong>constraint</strong></code></a></td>
@@ -5107,7 +5094,7 @@ are larger than <a href='#SkCanvas_drawImageNine_dst'>dst</a>; <a href='#SkCanva
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_drawImageNine_paint'>paint</a>.
If <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_drawImageNine_paint'>paint</a> is supplied, apply <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='SkColor_Reference#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 image is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and <a href='undocumented#Draw_Looper'>Draw Looper</a>. If image is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
If <a href='#SkCanvas_drawImageNine_paint'>paint</a> contains <a href='undocumented#Mask_Filter'>Mask Filter</a>, generate mask from image bounds. If <a href='#SkCanvas_drawImageNine_paint'>paint</a>
<a href='undocumented#Filter_Quality'>Filter Quality</a> set to <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, disable pixel filtering. For all
other values of <a href='#SkCanvas_drawImageNine_paint'>paint</a> <a href='undocumented#Filter_Quality'>Filter Quality</a>, use <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a> to filter pixels.
@@ -5128,7 +5115,7 @@ replicates the <a href='#SkCanvas_drawImageNine_image'>image</a> edge color when
<td>destination <a href='SkRect_Reference#Rect'>Rect</a> of <a href='#SkCanvas_drawImageNine_image'>image</a> to draw to</td>
</tr>
<tr> <td><a name='SkCanvas_drawImageNine_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>,
+ <td><a href='SkPaint_Reference#Paint'>Paint</a> containing <a href='SkBlendMode_Reference#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>
@@ -5161,7 +5148,7 @@ are larger than <a href='#SkCanvas_drawImageNine_2_dst'>dst</a>; <a href='#SkCan
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_drawImageNine_2_paint'>paint</a>.
If <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_drawImageNine_2_paint'>paint</a> is supplied, apply <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='SkColor_Reference#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 image is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and <a href='undocumented#Draw_Looper'>Draw Looper</a>. If image is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
If <a href='#SkCanvas_drawImageNine_2_paint'>paint</a> contains <a href='undocumented#Mask_Filter'>Mask Filter</a>, generate mask from image bounds. If <a href='#SkCanvas_drawImageNine_2_paint'>paint</a>
<a href='undocumented#Filter_Quality'>Filter Quality</a> set to <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, disable pixel filtering. For all
other values of <a href='#SkCanvas_drawImageNine_2_paint'>paint</a> <a href='undocumented#Filter_Quality'>Filter Quality</a>, use <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a> to filter pixels.
@@ -5182,7 +5169,7 @@ replicates the <a href='#SkCanvas_drawImageNine_2_image'>image</a> edge color wh
<td>destination <a href='SkRect_Reference#Rect'>Rect</a> of <a href='#SkCanvas_drawImageNine_2_image'>image</a> to draw to</td>
</tr>
<tr> <td><a name='SkCanvas_drawImageNine_2_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>,
+ <td><a href='SkPaint_Reference#Paint'>Paint</a> containing <a href='SkBlendMode_Reference#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>
@@ -5214,7 +5201,7 @@ void <a href='#SkCanvas_drawBitmap'>drawBitmap</a>(const <a href='SkBitmap_Refer
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 not nullptr, apply <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='SkColor_Reference#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='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
+<a href='SkBlendMode_Reference#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='SkImageInfo_Reference#kAlpha_8_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.
If generated mask extends beyond <a href='#SkCanvas_drawBitmap_bitmap'>bitmap</a> bounds, replicate <a href='#SkCanvas_drawBitmap_bitmap'>bitmap</a> edge colors,
@@ -5234,7 +5221,7 @@ outside of its bounds.
<td><a href='#SkCanvas_drawBitmap_top'>top</a> side of <a href='#SkCanvas_drawBitmap_bitmap'>bitmap</a></td>
</tr>
<tr> <td><a name='SkCanvas_drawBitmap_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>,
+ <td><a href='SkPaint_Reference#Paint'>Paint</a> containing <a href='SkBlendMode_Reference#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>
@@ -5261,7 +5248,7 @@ void <a href='#SkCanvas_drawBitmapRect'>drawBitmapRect</a>(const <a href='SkBitm
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_drawBitmapRect_paint'>paint</a>.
If <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_drawBitmapRect_paint'>paint</a> is supplied, apply <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='SkColor_Reference#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_drawBitmapRect_bitmap'>bitmap</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and <a href='undocumented#Draw_Looper'>Draw Looper</a>. If <a href='#SkCanvas_drawBitmapRect_bitmap'>bitmap</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
If <a href='#SkCanvas_drawBitmapRect_paint'>paint</a> contains <a href='undocumented#Mask_Filter'>Mask Filter</a>, generate mask from <a href='#SkCanvas_drawBitmapRect_bitmap'>bitmap</a> bounds.
If generated mask extends beyond <a href='#SkCanvas_drawBitmapRect_bitmap'>bitmap</a> bounds, replicate <a href='#SkCanvas_drawBitmapRect_bitmap'>bitmap</a> edge colors,
@@ -5285,7 +5272,7 @@ improve performance.
<td>destination <a href='SkRect_Reference#Rect'>Rect</a> of image to draw to</td>
</tr>
<tr> <td><a name='SkCanvas_drawBitmapRect_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>,
+ <td><a href='SkPaint_Reference#Paint'>Paint</a> containing <a href='SkBlendMode_Reference#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>
<tr> <td><a name='SkCanvas_drawBitmapRect_constraint'><code><strong>constraint</strong></code></a></td>
@@ -5315,7 +5302,7 @@ void <a href='#SkCanvas_drawBitmapRect'>drawBitmapRect</a>(const <a href='SkBitm
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_drawBitmapRect_2_paint'>paint</a>.
If <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_drawBitmapRect_2_paint'>paint</a> is supplied, apply <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='SkColor_Reference#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_drawBitmapRect_2_bitmap'>bitmap</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and <a href='undocumented#Draw_Looper'>Draw Looper</a>. If <a href='#SkCanvas_drawBitmapRect_2_bitmap'>bitmap</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
If <a href='#SkCanvas_drawBitmapRect_2_paint'>paint</a> contains <a href='undocumented#Mask_Filter'>Mask Filter</a>, generate mask from <a href='#SkCanvas_drawBitmapRect_2_bitmap'>bitmap</a> bounds.
If generated mask extends beyond <a href='#SkCanvas_drawBitmapRect_2_bitmap'>bitmap</a> bounds, replicate <a href='#SkCanvas_drawBitmapRect_2_bitmap'>bitmap</a> edge colors,
@@ -5339,7 +5326,7 @@ improve performance.
<td>destination <a href='SkRect_Reference#Rect'>Rect</a> of image to draw to</td>
</tr>
<tr> <td><a name='SkCanvas_drawBitmapRect_2_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>,
+ <td><a href='SkPaint_Reference#Paint'>Paint</a> containing <a href='SkBlendMode_Reference#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>
<tr> <td><a name='SkCanvas_drawBitmapRect_2_constraint'><code><strong>constraint</strong></code></a></td>
@@ -5369,7 +5356,7 @@ void <a href='#SkCanvas_drawBitmapRect'>drawBitmapRect</a>(const <a href='SkBitm
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_drawBitmapRect_3_paint'>paint</a>.
If <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_drawBitmapRect_3_paint'>paint</a> is supplied, apply <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='SkColor_Reference#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_drawBitmapRect_3_bitmap'>bitmap</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and <a href='undocumented#Draw_Looper'>Draw Looper</a>. If <a href='#SkCanvas_drawBitmapRect_3_bitmap'>bitmap</a> is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
If <a href='#SkCanvas_drawBitmapRect_3_paint'>paint</a> contains <a href='undocumented#Mask_Filter'>Mask Filter</a>, generate mask from <a href='#SkCanvas_drawBitmapRect_3_bitmap'>bitmap</a> bounds.
If generated mask extends beyond <a href='#SkCanvas_drawBitmapRect_3_bitmap'>bitmap</a> bounds, replicate <a href='#SkCanvas_drawBitmapRect_3_bitmap'>bitmap</a> edge colors,
@@ -5390,7 +5377,7 @@ improve performance.
<td>destination <a href='SkRect_Reference#Rect'>Rect</a> of image to draw to</td>
</tr>
<tr> <td><a name='SkCanvas_drawBitmapRect_3_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>,
+ <td><a href='SkPaint_Reference#Paint'>Paint</a> containing <a href='SkBlendMode_Reference#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>
<tr> <td><a name='SkCanvas_drawBitmapRect_3_constraint'><code><strong>constraint</strong></code></a></td>
@@ -5424,7 +5411,7 @@ space, if any.
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_drawBitmapNine_paint'>paint</a>.
If <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_drawBitmapNine_paint'>paint</a> is supplied, apply <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='SkColor_Reference#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 bitmap is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and <a href='undocumented#Draw_Looper'>Draw Looper</a>. If bitmap is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
If <a href='#SkCanvas_drawBitmapNine_paint'>paint</a> contains <a href='undocumented#Mask_Filter'>Mask Filter</a>, generate mask from bitmap bounds. If <a href='#SkCanvas_drawBitmapNine_paint'>paint</a>
<a href='undocumented#Filter_Quality'>Filter Quality</a> set to <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, disable pixel filtering. For all
other values of <a href='#SkCanvas_drawBitmapNine_paint'>paint</a> <a href='undocumented#Filter_Quality'>Filter Quality</a>, use <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a> to filter pixels.
@@ -5446,7 +5433,7 @@ outside of its bounds.
<td>destination <a href='SkRect_Reference#Rect'>Rect</a> of image to draw to</td>
</tr>
<tr> <td><a name='SkCanvas_drawBitmapNine_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>,
+ <td><a href='SkPaint_Reference#Paint'>Paint</a> containing <a href='SkBlendMode_Reference#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>
@@ -5517,7 +5504,6 @@ remaining space, if any.
<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
</table>
-
## <a name='SkCanvas_Lattice_RectType'>Enum SkCanvas::Lattice::RectType</a>
<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
@@ -5565,7 +5551,6 @@ draws one of fColors into lattice rectangle</td>
<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
</table>
-
### Members
<table style='border-collapse: collapse; width: 62.5em'>
@@ -5664,7 +5649,7 @@ dimension. All other grid elements scale to fill the available space, if any.
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_drawBitmapLattice_paint'>paint</a>.
If <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_drawBitmapLattice_paint'>paint</a> is supplied, apply <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='SkColor_Reference#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 bitmap is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and <a href='undocumented#Draw_Looper'>Draw Looper</a>. If bitmap is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
If <a href='#SkCanvas_drawBitmapLattice_paint'>paint</a> contains <a href='undocumented#Mask_Filter'>Mask Filter</a>, generate mask from bitmap bounds. If <a href='#SkCanvas_drawBitmapLattice_paint'>paint</a>
<a href='undocumented#Filter_Quality'>Filter Quality</a> set to <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, disable pixel filtering. For all
other values of <a href='#SkCanvas_drawBitmapLattice_paint'>paint</a> <a href='undocumented#Filter_Quality'>Filter Quality</a>, use <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a> to filter pixels.
@@ -5686,7 +5671,7 @@ outside of its bounds.
<td>destination <a href='SkRect_Reference#Rect'>Rect</a> of image to draw to</td>
</tr>
<tr> <td><a name='SkCanvas_drawBitmapLattice_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>,
+ <td><a href='SkPaint_Reference#Paint'>Paint</a> containing <a href='SkBlendMode_Reference#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>
@@ -5725,7 +5710,7 @@ dimension. All other grid elements scale to fill the available space, if any.
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_drawImageLattice_paint'>paint</a>.
If <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_drawImageLattice_paint'>paint</a> is supplied, apply <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='SkColor_Reference#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 image is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and <a href='undocumented#Draw_Looper'>Draw Looper</a>. If image is <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <a href='undocumented#Shader'>Shader</a>.
If <a href='#SkCanvas_drawImageLattice_paint'>paint</a> contains <a href='undocumented#Mask_Filter'>Mask Filter</a>, generate mask from image bounds. If <a href='#SkCanvas_drawImageLattice_paint'>paint</a>
<a href='undocumented#Filter_Quality'>Filter Quality</a> set to <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, disable pixel filtering. For all
other values of <a href='#SkCanvas_drawImageLattice_paint'>paint</a> <a href='undocumented#Filter_Quality'>Filter Quality</a>, use <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a> to filter pixels.
@@ -5747,7 +5732,7 @@ outside of its bounds.
<td>destination <a href='SkRect_Reference#Rect'>Rect</a> of <a href='#SkCanvas_drawImageLattice_image'>image</a> to draw to</td>
</tr>
<tr> <td><a name='SkCanvas_drawImageLattice_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>,
+ <td><a href='SkPaint_Reference#Paint'>Paint</a> containing <a href='SkBlendMode_Reference#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>
@@ -5822,7 +5807,6 @@ are scaled if needed to take up the remaining space; the center is transparent.
</tr>
</table>
-
<a name='SkCanvas_drawText'></a>
## drawText
@@ -6337,14 +6321,14 @@ Elements of <a href='#SkCanvas_drawTextBlob_2_paint'>paint</a>: <a href='undocum
## drawPicture
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-void <a href='#SkCanvas_drawPicture'>drawPicture</a>(const <a href='undocumented#SkPicture'>SkPicture</a>* picture)
+void <a href='#SkCanvas_drawPicture'>drawPicture</a>(const <a href='SkPicture_Reference#SkPicture'>SkPicture</a>* picture)
</pre>
-<a href='#Draw'>Draw</a> <a href='undocumented#Picture'>Picture</a> <a href='#SkCanvas_drawPicture_picture'>picture</a>, using <a href='#Clip'>Clip</a> and <a href='#Matrix'>Matrix</a>.
+<a href='#Draw'>Draw</a> <a href='SkPicture_Reference#Picture'>Picture</a> <a href='#SkCanvas_drawPicture_picture'>picture</a>, using <a href='#Clip'>Clip</a> and <a href='#Matrix'>Matrix</a>.
<a href='#Clip'>Clip</a> and <a href='#Matrix'>Matrix</a> are unchanged by <a href='#SkCanvas_drawPicture_picture'>picture</a> contents, as if
<a href='#SkCanvas_save'>save</a> was called before and <a href='#SkCanvas_restore'>restore</a> was called after <a href='#SkCanvas_drawPicture'>drawPicture</a>.
-<a href='undocumented#Picture'>Picture</a> records a series of draw commands for later playback.
+<a href='SkPicture_Reference#Picture'>Picture</a> records a series of draw commands for later playback.
### Parameters
@@ -6359,21 +6343,21 @@ void <a href='#SkCanvas_drawPicture'>drawPicture</a>(const <a href='undocumented
### See Also
-<a href='#SkCanvas_drawDrawable'>drawDrawable</a><sup><a href='#SkCanvas_drawDrawable_2'>[2]</a></sup> <a href='undocumented#SkPicture'>SkPicture</a> <a href='undocumented#SkPicture_playback'>SkPicture::playback</a>
+<a href='#SkCanvas_drawDrawable'>drawDrawable</a><sup><a href='#SkCanvas_drawDrawable_2'>[2]</a></sup> <a href='SkPicture_Reference#SkPicture'>SkPicture</a> <a href='SkPicture_Reference#SkPicture_playback'>SkPicture::playback</a>
---
<a name='SkCanvas_drawPicture_2'></a>
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-void <a href='#SkCanvas_drawPicture'>drawPicture</a>(const <a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='undocumented#SkPicture'>SkPicture</a>&gt;& picture)
+void <a href='#SkCanvas_drawPicture'>drawPicture</a>(const <a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='SkPicture_Reference#SkPicture'>SkPicture</a>&gt;& picture)
</pre>
-<a href='#Draw'>Draw</a> <a href='undocumented#Picture'>Picture</a> <a href='#SkCanvas_drawPicture_2_picture'>picture</a>, using <a href='#Clip'>Clip</a> and <a href='#Matrix'>Matrix</a>.
+<a href='#Draw'>Draw</a> <a href='SkPicture_Reference#Picture'>Picture</a> <a href='#SkCanvas_drawPicture_2_picture'>picture</a>, using <a href='#Clip'>Clip</a> and <a href='#Matrix'>Matrix</a>.
<a href='#Clip'>Clip</a> and <a href='#Matrix'>Matrix</a> are unchanged by <a href='#SkCanvas_drawPicture_2_picture'>picture</a> contents, as if
<a href='#SkCanvas_save'>save</a> was called before and <a href='#SkCanvas_restore'>restore</a> was called after <a href='#SkCanvas_drawPicture'>drawPicture</a>.
-<a href='undocumented#Picture'>Picture</a> records a series of draw commands for later playback.
+<a href='SkPicture_Reference#Picture'>Picture</a> records a series of draw commands for later playback.
### Parameters
@@ -6388,19 +6372,19 @@ void <a href='#SkCanvas_drawPicture'>drawPicture</a>(const <a href='undocumented
### See Also
-<a href='#SkCanvas_drawDrawable'>drawDrawable</a><sup><a href='#SkCanvas_drawDrawable_2'>[2]</a></sup> <a href='undocumented#SkPicture'>SkPicture</a> <a href='undocumented#SkPicture_playback'>SkPicture::playback</a>
+<a href='#SkCanvas_drawDrawable'>drawDrawable</a><sup><a href='#SkCanvas_drawDrawable_2'>[2]</a></sup> <a href='SkPicture_Reference#SkPicture'>SkPicture</a> <a href='SkPicture_Reference#SkPicture_playback'>SkPicture::playback</a>
---
<a name='SkCanvas_drawPicture_3'></a>
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-void <a href='#SkCanvas_drawPicture'>drawPicture</a>(const <a href='undocumented#SkPicture'>SkPicture</a>* picture, const <a href='SkMatrix_Reference#SkMatrix'>SkMatrix</a>* matrix, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>* paint)
+void <a href='#SkCanvas_drawPicture'>drawPicture</a>(const <a href='SkPicture_Reference#SkPicture'>SkPicture</a>* picture, const <a href='SkMatrix_Reference#SkMatrix'>SkMatrix</a>* matrix, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>* paint)
</pre>
-<a href='#Draw'>Draw</a> <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
+<a href='#Draw'>Draw</a> <a href='SkPicture_Reference#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
<a href='#Matrix'>Matrix</a> <a href='#SkCanvas_drawPicture_3_matrix'>matrix</a>, if provided; and use <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_drawPicture_3_paint'>paint</a> <a href='SkColor_Reference#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>, if provided.
+<a href='undocumented#Image_Filter'>Image Filter</a>, and <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, if provided.
<a href='#SkCanvas_drawPicture_3_matrix'>matrix</a> transformation is equivalent to: <a href='#SkCanvas_save'>save</a>, <a href='#SkCanvas_concat'>concat</a>, <a href='#SkCanvas_drawPicture'>drawPicture</a>, <a href='#SkCanvas_restore'>restore</a>.
<a href='#SkCanvas_drawPicture_3_paint'>paint</a> use is equivalent to: <a href='#SkCanvas_saveLayer'>saveLayer</a>, <a href='#SkCanvas_drawPicture'>drawPicture</a>, <a href='#SkCanvas_restore'>restore</a>.
@@ -6424,19 +6408,19 @@ void <a href='#SkCanvas_drawPicture'>drawPicture</a>(const <a href='undocumented
### See Also
-<a href='#SkCanvas_drawDrawable'>drawDrawable</a><sup><a href='#SkCanvas_drawDrawable_2'>[2]</a></sup> <a href='undocumented#SkPicture'>SkPicture</a> <a href='undocumented#SkPicture_playback'>SkPicture::playback</a>
+<a href='#SkCanvas_drawDrawable'>drawDrawable</a><sup><a href='#SkCanvas_drawDrawable_2'>[2]</a></sup> <a href='SkPicture_Reference#SkPicture'>SkPicture</a> <a href='SkPicture_Reference#SkPicture_playback'>SkPicture::playback</a>
---
<a name='SkCanvas_drawPicture_4'></a>
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-void <a href='#SkCanvas_drawPicture'>drawPicture</a>(const <a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='undocumented#SkPicture'>SkPicture</a>&gt;& picture, const <a href='SkMatrix_Reference#SkMatrix'>SkMatrix</a>* matrix, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>* paint)
+void <a href='#SkCanvas_drawPicture'>drawPicture</a>(const <a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='SkPicture_Reference#SkPicture'>SkPicture</a>&gt;& picture, const <a href='SkMatrix_Reference#SkMatrix'>SkMatrix</a>* matrix, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>* paint)
</pre>
-<a href='#Draw'>Draw</a> <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
+<a href='#Draw'>Draw</a> <a href='SkPicture_Reference#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
<a href='#Matrix'>Matrix</a> <a href='#SkCanvas_drawPicture_4_matrix'>matrix</a>, if provided; and use <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_drawPicture_4_paint'>paint</a> <a href='SkColor_Reference#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>, if provided.
+<a href='undocumented#Image_Filter'>Image Filter</a>, and <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, if provided.
<a href='#SkCanvas_drawPicture_4_matrix'>matrix</a> transformation is equivalent to: <a href='#SkCanvas_save'>save</a>, <a href='#SkCanvas_concat'>concat</a>, <a href='#SkCanvas_drawPicture'>drawPicture</a>, <a href='#SkCanvas_restore'>restore</a>.
<a href='#SkCanvas_drawPicture_4_paint'>paint</a> use is equivalent to: <a href='#SkCanvas_saveLayer'>saveLayer</a>, <a href='#SkCanvas_drawPicture'>drawPicture</a>, <a href='#SkCanvas_restore'>restore</a>.
@@ -6460,7 +6444,7 @@ void <a href='#SkCanvas_drawPicture'>drawPicture</a>(const <a href='undocumented
### See Also
-<a href='#SkCanvas_drawDrawable'>drawDrawable</a><sup><a href='#SkCanvas_drawDrawable_2'>[2]</a></sup> <a href='undocumented#SkPicture'>SkPicture</a> <a href='undocumented#SkPicture_playback'>SkPicture::playback</a>
+<a href='#SkCanvas_drawDrawable'>drawDrawable</a><sup><a href='#SkCanvas_drawDrawable_2'>[2]</a></sup> <a href='SkPicture_Reference#SkPicture'>SkPicture</a> <a href='SkPicture_Reference#SkPicture_playback'>SkPicture::playback</a>
---
@@ -6468,12 +6452,12 @@ void <a href='#SkCanvas_drawPicture'>drawPicture</a>(const <a href='undocumented
## drawVertices
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-void <a href='#SkCanvas_drawVertices'>drawVertices</a>(const <a href='undocumented#SkVertices'>SkVertices</a>* vertices, <a href='undocumented#SkBlendMode'>SkBlendMode</a> mode, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& paint)
+void <a href='#SkCanvas_drawVertices'>drawVertices</a>(const <a href='undocumented#SkVertices'>SkVertices</a>* vertices, <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& paint)
</pre>
<a href='#Draw'>Draw</a> <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>.
If <a href='undocumented#Texs'>Vertices Texs</a> and <a href='undocumented#Colors'>Vertices Colors</a> are defined in <a href='#SkCanvas_drawVertices_vertices'>vertices</a>, and <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_drawVertices_paint'>paint</a>
-contains <a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Blend_Mode'>Blend Mode</a> <a href='#SkCanvas_drawVertices_mode'>mode</a> combines <a href='undocumented#Colors'>Vertices Colors</a> with <a href='undocumented#Shader'>Shader</a>.
+contains <a href='undocumented#Shader'>Shader</a>, <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> <a href='#SkCanvas_drawVertices_mode'>mode</a> combines <a href='undocumented#Colors'>Vertices Colors</a> with <a href='undocumented#Shader'>Shader</a>.
### Parameters
@@ -6501,12 +6485,12 @@ contains <a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Blend_M
<a name='SkCanvas_drawVertices_2'></a>
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-void <a href='#SkCanvas_drawVertices'>drawVertices</a>(const <a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='undocumented#SkVertices'>SkVertices</a>&gt;& vertices, <a href='undocumented#SkBlendMode'>SkBlendMode</a> mode, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& paint)
+void <a href='#SkCanvas_drawVertices'>drawVertices</a>(const <a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='undocumented#SkVertices'>SkVertices</a>&gt;& vertices, <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& paint)
</pre>
<a href='#Draw'>Draw</a> <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>.
If <a href='undocumented#Texs'>Vertices Texs</a> and <a href='undocumented#Colors'>Vertices Colors</a> are defined in <a href='#SkCanvas_drawVertices_2_vertices'>vertices</a>, and <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkCanvas_drawVertices_2_paint'>paint</a>
-contains <a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Blend_Mode'>Blend Mode</a> <a href='#SkCanvas_drawVertices_2_mode'>mode</a> combines <a href='undocumented#Colors'>Vertices Colors</a> with <a href='undocumented#Shader'>Shader</a>.
+contains <a href='undocumented#Shader'>Shader</a>, <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> <a href='#SkCanvas_drawVertices_2_mode'>mode</a> combines <a href='undocumented#Colors'>Vertices Colors</a> with <a href='undocumented#Shader'>Shader</a>.
### Parameters
@@ -6536,15 +6520,15 @@ contains <a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Blend_M
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
void <a href='#SkCanvas_drawPatch'>drawPatch</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> cubics[12], const <a href='SkColor_Reference#SkColor'>SkColor</a> colors[4], const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> texCoords[4],
- <a href='undocumented#SkBlendMode'>SkBlendMode</a> mode, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& paint)
+ <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& paint)
</pre>
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 <a href='SkPoint_Reference#Point'>Point</a>, with each corner.
<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='SkColor_Reference#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 <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='SkColor_Reference#Color'>Color</a> <a href='#SkCanvas_drawPatch_colors'>colors</a> and <a href='undocumented#Shader'>Shader</a> if
+<a href='SkColor_Reference#Alpha'>Color Alpha</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, and <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>. If <a href='undocumented#Shader'>Shader</a> is provided it is treated
+as <a href='undocumented#Coons_Patch'>Coons Patch</a> texture; <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> <a href='#SkCanvas_drawPatch_mode'>mode</a> combines <a href='SkColor_Reference#Color'>Color</a> <a href='#SkCanvas_drawPatch_colors'>colors</a> and <a href='undocumented#Shader'>Shader</a> if
both are provided.
<a href='SkPoint_Reference#Point'>Point</a> array <a href='#SkCanvas_drawPatch_cubics'>cubics</a> specifies four <a href='SkPath_Reference#Cubic'>Cubics</a> starting at the top-left corner,
@@ -6570,10 +6554,10 @@ corners in top-left, top-right, bottom-right, bottom-left order.
may be nullptr</td>
</tr>
# <tr> <td><a name='SkCanvas_drawPatch_mode'><code><strong>mode</strong></code></a></td>
- <td><a href='undocumented#Blend_Mode'>Blend Mode</a> for <a href='#SkCanvas_drawPatch_colors'>colors</a>, and for <a href='undocumented#Shader'>Shader</a> if <a href='#SkCanvas_drawPatch_paint'>paint</a> has one</td>
+ <td><a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> for <a href='#SkCanvas_drawPatch_colors'>colors</a>, and for <a href='undocumented#Shader'>Shader</a> if <a href='#SkCanvas_drawPatch_paint'>paint</a> has one</td>
</tr>
<tr> <td><a name='SkCanvas_drawPatch_paint'><code><strong>paint</strong></code></a></td>
- <td><a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Blend_Mode'>Blend Mode</a>, used to draw</td>
+ <td><a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, used to draw</td>
</tr>
</table>
@@ -6598,8 +6582,8 @@ Draws <a href='SkPath_Reference#Cubic'>Cubic</a> <a href='undocumented#Coons_Pat
associating a color, and optionally a texture <a href='SkPoint_Reference#Point'>Point</a>, with each corner.
<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='SkColor_Reference#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 <a href='undocumented#Coons_Patch'>Coons Patch</a> texture; <a href='undocumented#Blend_Mode'>Blend Mode</a> mode combines <a href='SkColor_Reference#Color'>Color</a> <a href='#SkCanvas_drawPatch_2_colors'>colors</a> and <a href='undocumented#Shader'>Shader</a> if
+<a href='SkColor_Reference#Alpha'>Color Alpha</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, and <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>. If <a href='undocumented#Shader'>Shader</a> is provided it is treated
+as <a href='undocumented#Coons_Patch'>Coons Patch</a> texture; <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> mode combines <a href='SkColor_Reference#Color'>Color</a> <a href='#SkCanvas_drawPatch_2_colors'>colors</a> and <a href='undocumented#Shader'>Shader</a> if
both are provided.
<a href='SkPoint_Reference#Point'>Point</a> array <a href='#SkCanvas_drawPatch_2_cubics'>cubics</a> specifies four <a href='SkPath_Reference#Cubic'>Cubics</a> starting at the top-left corner,
@@ -6625,7 +6609,7 @@ corners in top-left, top-right, bottom-right, bottom-left order.
may be nullptr</td>
</tr>
# <tr> <td><a name='SkCanvas_drawPatch_2_paint'><code><strong>paint</strong></code></a></td>
- <td><a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Blend_Mode'>Blend Mode</a>, used to draw</td>
+ <td><a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, used to draw</td>
</tr>
</table>
@@ -6648,17 +6632,18 @@ SeeAlso <a href='#SkCanvas_drawVertices'>drawVertices</a><sup><a href='#SkCanvas
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
void <a href='#SkCanvas_drawAtlas'>drawAtlas</a>(const <a href='SkImage_Reference#SkImage'>SkImage</a>* atlas, const <a href='undocumented#SkRSXform'>SkRSXform</a> xform[], const <a href='SkRect_Reference#SkRect'>SkRect</a> tex[],
- const <a href='SkColor_Reference#SkColor'>SkColor</a> colors[], int count, <a href='undocumented#SkBlendMode'>SkBlendMode</a> mode, const <a href='SkRect_Reference#SkRect'>SkRect</a>* cullRect,
+ const <a href='SkColor_Reference#SkColor'>SkColor</a> colors[], int count, <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode, const <a href='SkRect_Reference#SkRect'>SkRect</a>* cullRect,
const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>* paint)
</pre>
<a href='#Draw'>Draw</a> 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='SkColor_Reference#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 <a href='SkPaint_Reference#Anti_Alias'>Anti Alias</a>, <a href='SkColor_Reference#Alpha'>Color Alpha</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, and <a href='SkBlendMode_Reference#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.
<a href='#SkCanvas_drawAtlas_xform'>xform</a>, text, and <a href='#SkCanvas_drawAtlas_colors'>colors</a> if present, must contain <a href='#SkCanvas_drawAtlas_count'>count</a> entries.
-Optional <a href='#SkCanvas_drawAtlas_colors'>colors</a> are applied for each sprite using <a href='undocumented#Blend_Mode'>Blend Mode</a>.
+Optional <a href='#SkCanvas_drawAtlas_colors'>colors</a> are applied for each sprite using <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> <a href='#SkCanvas_drawAtlas_mode'>mode</a>, treating
+sprite as source and <a href='#SkCanvas_drawAtlas_colors'>colors</a> as destination.
Optional <a href='#SkCanvas_drawAtlas_cullRect'>cullRect</a> is a conservative bounds of all transformed sprites.
If <a href='#SkCanvas_drawAtlas_cullRect'>cullRect</a> is outside of <a href='#Clip'>Clip</a>, canvas can skip drawing.
@@ -6674,19 +6659,19 @@ If <a href='#SkCanvas_drawAtlas_cullRect'>cullRect</a> is outside of <a href='#C
<td><a href='SkRect_Reference#Rect'>Rect</a> locations of sprites in <a href='#SkCanvas_drawAtlas_atlas'>atlas</a></td>
</tr>
<tr> <td><a name='SkCanvas_drawAtlas_colors'><code><strong>colors</strong></code></a></td>
- <td>one per sprite, blended with sprite using <a href='undocumented#Blend_Mode'>Blend Mode</a>; may be nullptr</td>
+ <td>one per sprite, blended with sprite using <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>; may be nullptr</td>
</tr>
<tr> <td><a name='SkCanvas_drawAtlas_count'><code><strong>count</strong></code></a></td>
<td>number of sprites to draw</td>
</tr>
<tr> <td><a name='SkCanvas_drawAtlas_mode'><code><strong>mode</strong></code></a></td>
- <td><a href='undocumented#Blend_Mode'>Blend Mode</a> combining <a href='#SkCanvas_drawAtlas_colors'>colors</a> and sprites</td>
+ <td><a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> combining <a href='#SkCanvas_drawAtlas_colors'>colors</a> and sprites</td>
</tr>
<tr> <td><a name='SkCanvas_drawAtlas_cullRect'><code><strong>cullRect</strong></code></a></td>
<td>bounds of transformed sprites for efficient clipping; may be nullptr</td>
</tr>
<tr> <td><a name='SkCanvas_drawAtlas_paint'><code><strong>paint</strong></code></a></td>
- <td><a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, <a href='undocumented#Blend_Mode'>Blend Mode</a>, and so on; may be nullptr</td>
+ <td><a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and so on; may be nullptr</td>
</tr>
</table>
@@ -6704,17 +6689,17 @@ If <a href='#SkCanvas_drawAtlas_cullRect'>cullRect</a> is outside of <a href='#C
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
void <a href='#SkCanvas_drawAtlas'>drawAtlas</a>(const <a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='SkImage_Reference#SkImage'>SkImage</a>&gt;& atlas, const <a href='undocumented#SkRSXform'>SkRSXform</a> xform[], const <a href='SkRect_Reference#SkRect'>SkRect</a> tex[],
- const <a href='SkColor_Reference#SkColor'>SkColor</a> colors[], int count, <a href='undocumented#SkBlendMode'>SkBlendMode</a> mode, const <a href='SkRect_Reference#SkRect'>SkRect</a>* cullRect,
+ const <a href='SkColor_Reference#SkColor'>SkColor</a> colors[], int count, <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode, const <a href='SkRect_Reference#SkRect'>SkRect</a>* cullRect,
const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>* paint)
</pre>
<a href='#Draw'>Draw</a> 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='SkColor_Reference#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 <a href='SkPaint_Reference#Anti_Alias'>Anti Alias</a>, <a href='SkColor_Reference#Alpha'>Color Alpha</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, and <a href='SkBlendMode_Reference#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.
<a href='#SkCanvas_drawAtlas_2_xform'>xform</a>, text, and <a href='#SkCanvas_drawAtlas_2_colors'>colors</a> if present, must contain <a href='#SkCanvas_drawAtlas_2_count'>count</a> entries.
-Optional <a href='#SkCanvas_drawAtlas_2_colors'>colors</a> is applied for each sprite using <a href='undocumented#Blend_Mode'>Blend Mode</a>.
+Optional <a href='#SkCanvas_drawAtlas_2_colors'>colors</a> is applied for each sprite using <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
Optional <a href='#SkCanvas_drawAtlas_2_cullRect'>cullRect</a> is a conservative bounds of all transformed sprites.
If <a href='#SkCanvas_drawAtlas_2_cullRect'>cullRect</a> is outside of <a href='#Clip'>Clip</a>, canvas can skip drawing.
@@ -6730,19 +6715,19 @@ If <a href='#SkCanvas_drawAtlas_2_cullRect'>cullRect</a> is outside of <a href='
<td><a href='SkRect_Reference#Rect'>Rect</a> locations of sprites in <a href='#SkCanvas_drawAtlas_2_atlas'>atlas</a></td>
</tr>
<tr> <td><a name='SkCanvas_drawAtlas_2_colors'><code><strong>colors</strong></code></a></td>
- <td>one per sprite, blended with sprite using <a href='undocumented#Blend_Mode'>Blend Mode</a>; may be nullptr</td>
+ <td>one per sprite, blended with sprite using <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>; may be nullptr</td>
</tr>
<tr> <td><a name='SkCanvas_drawAtlas_2_count'><code><strong>count</strong></code></a></td>
<td>number of sprites to draw</td>
</tr>
<tr> <td><a name='SkCanvas_drawAtlas_2_mode'><code><strong>mode</strong></code></a></td>
- <td><a href='undocumented#Blend_Mode'>Blend Mode</a> combining <a href='#SkCanvas_drawAtlas_2_colors'>colors</a> and sprites</td>
+ <td><a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> combining <a href='#SkCanvas_drawAtlas_2_colors'>colors</a> and sprites</td>
</tr>
<tr> <td><a name='SkCanvas_drawAtlas_2_cullRect'><code><strong>cullRect</strong></code></a></td>
<td>bounds of transformed sprites for efficient clipping; may be nullptr</td>
</tr>
<tr> <td><a name='SkCanvas_drawAtlas_2_paint'><code><strong>paint</strong></code></a></td>
- <td><a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, <a href='undocumented#Blend_Mode'>Blend Mode</a>, and so on; may be nullptr</td>
+ <td><a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and so on; may be nullptr</td>
</tr>
</table>
@@ -6764,7 +6749,7 @@ void <a href='#SkCanvas_drawAtlas'>drawAtlas</a>(const <a href='SkImage_Referenc
</pre>
<a href='#Draw'>Draw</a> 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='SkColor_Reference#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 <a href='SkPaint_Reference#Anti_Alias'>Anti Alias</a>, <a href='SkColor_Reference#Alpha'>Color Alpha</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, and <a href='SkBlendMode_Reference#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.
@@ -6790,7 +6775,7 @@ If <a href='#SkCanvas_drawAtlas_3_cullRect'>cullRect</a> is outside of <a href='
<td>bounds of transformed sprites for efficient clipping; may be nullptr</td>
</tr>
<tr> <td><a name='SkCanvas_drawAtlas_3_paint'><code><strong>paint</strong></code></a></td>
- <td><a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, <a href='undocumented#Blend_Mode'>Blend Mode</a>, and so on; may be nullptr</td>
+ <td><a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and so on; may be nullptr</td>
</tr>
</table>
@@ -6812,7 +6797,7 @@ void <a href='#SkCanvas_drawAtlas'>drawAtlas</a>(const <a href='undocumented#sk_
</pre>
<a href='#Draw'>Draw</a> 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='SkColor_Reference#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 <a href='SkPaint_Reference#Anti_Alias'>Anti Alias</a>, <a href='SkColor_Reference#Alpha'>Color Alpha</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, and <a href='SkBlendMode_Reference#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.
@@ -6838,7 +6823,7 @@ If <a href='#SkCanvas_drawAtlas_4_cullRect'>cullRect</a> is outside of <a href='
<td>bounds of transformed sprites for efficient clipping; may be nullptr</td>
</tr>
<tr> <td><a name='SkCanvas_drawAtlas_4_paint'><code><strong>paint</strong></code></a></td>
- <td><a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, <a href='undocumented#Blend_Mode'>Blend Mode</a>, and so on; may be nullptr</td>
+ <td><a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Image_Filter'>Image Filter</a>, <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and so on; may be nullptr</td>
</tr>
</table>
@@ -6863,7 +6848,7 @@ void <a href='#SkCanvas_drawDrawable'>drawDrawable</a>(<a href='undocumented#SkD
optional <a href='#SkCanvas_drawDrawable_matrix'>matrix</a>.
If <a href='#Canvas'>Canvas</a> has an asynchronous implementation, as is the case
-when it is recording into <a href='undocumented#Picture'>Picture</a>, then <a href='#SkCanvas_drawDrawable_drawable'>drawable</a> will be referenced,
+when it is recording into <a href='SkPicture_Reference#Picture'>Picture</a>, then <a href='#SkCanvas_drawDrawable_drawable'>drawable</a> will be referenced,
so that <a href='undocumented#SkDrawable_draw'>SkDrawable::draw()</a> can be called when the operation is finalized. To force
immediate drawing, call <a href='undocumented#SkDrawable_draw'>SkDrawable::draw()</a> instead.
@@ -6896,7 +6881,7 @@ void <a href='#SkCanvas_drawDrawable'>drawDrawable</a>(<a href='undocumented#SkD
<a href='#Draw'>Draw</a> <a href='undocumented#Drawable'>Drawable</a> <a href='#SkCanvas_drawDrawable_2_drawable'>drawable</a> using <a href='#Clip'>Clip</a> and <a href='#Matrix'>Matrix</a>, offset by (<a href='#SkCanvas_drawDrawable_2_x'>x</a>, <a href='#SkCanvas_drawDrawable_2_y'>y</a>).
If <a href='#Canvas'>Canvas</a> has an asynchronous implementation, as is the case
-when it is recording into <a href='undocumented#Picture'>Picture</a>, then <a href='#SkCanvas_drawDrawable_2_drawable'>drawable</a> will be referenced,
+when it is recording into <a href='SkPicture_Reference#Picture'>Picture</a>, then <a href='#SkCanvas_drawDrawable_2_drawable'>drawable</a> will be referenced,
so that <a href='undocumented#SkDrawable_draw'>SkDrawable::draw()</a> can be called when the operation is finalized. To force
immediate drawing, call <a href='undocumented#SkDrawable_draw'>SkDrawable::draw()</a> instead.
@@ -6933,7 +6918,7 @@ void <a href='#SkCanvas_drawAnnotation'>drawAnnotation</a>(const <a href='SkRect
Associate <a href='SkRect_Reference#Rect'>Rect</a> on <a href='#Canvas'>Canvas</a> with 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
+Only some canvas implementations, such as recording to <a href='SkPicture_Reference#Picture'>Picture</a>, or drawing to
<a href='undocumented#PDF'>Document PDF</a>, use annotations.
### Parameters
@@ -6955,7 +6940,7 @@ Only some canvas implementations, such as recording to <a href='undocumented#Pic
### See Also
-<a href='undocumented#SkPicture'>SkPicture</a> <a href='undocumented#SkDocument'>SkDocument</a>
+<a href='SkPicture_Reference#SkPicture'>SkPicture</a> <a href='undocumented#SkDocument'>SkDocument</a>
---
@@ -6968,7 +6953,7 @@ void <a href='#SkCanvas_drawAnnotation'>drawAnnotation</a>(const <a href='SkRect
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
+Only some canvas implementations, such as recording to <a href='SkPicture_Reference#Picture'>Picture</a>, or drawing to
<a href='undocumented#PDF'>Document PDF</a>, use annotations.
### Parameters
@@ -6990,7 +6975,7 @@ Only some canvas implementations, such as recording to <a href='undocumented#Pic
### See Also
-<a href='undocumented#SkPicture'>SkPicture</a> <a href='undocumented#SkDocument'>SkDocument</a>
+<a href='SkPicture_Reference#SkPicture'>SkPicture</a> <a href='undocumented#SkDocument'>SkDocument</a>
---
diff --git a/site/user/api/SkColor4f_Reference.md b/site/user/api/SkColor4f_Reference.md
index 574681d50a..569236ad27 100644
--- a/site/user/api/SkColor4f_Reference.md
+++ b/site/user/api/SkColor4f_Reference.md
@@ -29,6 +29,7 @@ SkColor4f members may be read and written directly without using a member functi
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>red component</td>
</tr>
</table>
+
Each component is stored as a 32-bit single precision floating point float value.
All values are allowed, but only the range from zero to one is meaningful.
@@ -36,7 +37,7 @@ Each component is independent of the others; <a href='#SkColor4f_fA'>fA</a> <a h
with <a href='#SkColor4f_fG'>fG</a> green, <a href='#SkColor4f_fB'>fB</a> blue, or <a href='#SkColor4f_fR'>fR</a> red.
Values smaller than zero or larger than one are allowed. Values out of range
-may be used with <a href='undocumented#Blend_Mode'>Blend Mode</a> so that the final component is in range.
+may be used with <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> so that the final component is in range.
## Overview
@@ -75,7 +76,6 @@ SkColor4f operators inline class member functions with arithmetic equivalents.
</tr>
</table>
-
## <a name='Member_Function'>Member Function</a>
@@ -109,7 +109,6 @@ SkColor4f member functions read and modify the structure properties.
</tr>
</table>
-
### Members
<table style='border-collapse: collapse; width: 62.5em'>
@@ -426,8 +425,6 @@ Returns <a href='#Color4f'>Color4f</a> with all components in the range from zer
<a href='#SkPM4f'>SkPM4f</a> <a href='#SkColor4f_premul'>premul</a>() const
</pre>
-Internal use only.
-
### Return Value
<a href='undocumented#Premultiply'>Premultiplied</a> color
@@ -435,4 +432,3 @@ Internal use only.
---
# <a name='SkPM4f'>Struct SkPM4f</a>
-Internal use only.
diff --git a/site/user/api/SkColor_Reference.md b/site/user/api/SkColor_Reference.md
index 3dbbea58a3..11920e670c 100644
--- a/site/user/api/SkColor_Reference.md
+++ b/site/user/api/SkColor_Reference.md
@@ -56,6 +56,7 @@ SkColor uses preprocessor definitions to inline code and constants, and to abstr
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns opaque <a href='#Color'>Color</a></td>
</tr>
</table>
+
<a href='#Color'>Color</a> constants can be helpful to write code, documenting the meaning of values
the represent transparency and color values. The use of <a href='#Color'>Color</a> constants is not
required.
@@ -125,7 +126,6 @@ SkColor related constants are defined by <code>enum</code>, <code>enum class</co
</tr>
</table>
-
## <a name='Function'>Function</a>
@@ -166,7 +166,6 @@ SkColor related constants are defined by <code>enum</code>, <code>enum class</co
</tr>
</table>
-
## <a name='Typedef'>Typedef</a>
@@ -188,7 +187,6 @@ SkColor <code>typedef</code> define a data type.
</tr>
</table>
-
## <a name='Alpha'>Alpha</a>
<a href='#Alpha'>Alpha</a> represents the transparency of <a href='#Color'>Color</a>. <a href='#Color'>Color</a> with <a href='#Alpha'>Alpha</a> of zero is fully
diff --git a/site/user/api/SkIPoint_Reference.md b/site/user/api/SkIPoint_Reference.md
index a5f149b6d6..f3e43231f4 100644
--- a/site/user/api/SkIPoint_Reference.md
+++ b/site/user/api/SkIPoint_Reference.md
@@ -13,6 +13,7 @@ SkIPoint <code>typedef</code> define a data type.
<tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
</table>
+
<a href='#SkIPoint'>SkIPoint</a> holds two 32-bit integer coordinates.
## Overview
@@ -64,7 +65,6 @@ SkIPoint global, <code>struct</code>, and <code>class</code> related member func
</tr>
</table>
-
## <a name='Member_Function'>Member Function</a>
@@ -98,7 +98,6 @@ SkIPoint member functions read and modify the structure properties.
</tr>
</table>
-
## <a name='Member'>Member</a>
@@ -136,7 +135,6 @@ SkIPoint members may be read and written directly without using a member functio
</tr>
</table>
-
### Members
<table style='border-collapse: collapse; width: 62.5em'>
@@ -172,7 +170,6 @@ SkIPoint can be constructed or initialized by these functions, including C++ cla
</tr>
</table>
-
<a name='SkIPoint_Make'></a>
## Make
@@ -234,7 +231,6 @@ pt1 == pt2
</tr>
</table>
-
<a name='SkIPoint_x'></a>
## x
@@ -340,7 +336,6 @@ pt.isZero() == true
</tr>
</table>
-
<a name='SkIPoint_set'></a>
## set
@@ -419,7 +414,6 @@ SkIPoint operators inline class member functions with arithmetic equivalents.
</tr>
</table>
-
<a name='SkIPoint_minus_operator'></a>
## operator-
diff --git a/site/user/api/SkIRect_Reference.md b/site/user/api/SkIRect_Reference.md
index 8f8014767f..06e581f015 100644
--- a/site/user/api/SkIRect_Reference.md
+++ b/site/user/api/SkIRect_Reference.md
@@ -71,7 +71,6 @@ SkIRect global, <code>struct</code>, and <code>class</code> related member funct
</tr>
</table>
-
## <a name='Member_Function'>Member Function</a>
@@ -241,7 +240,6 @@ SkIRect member functions read and modify the structure properties.
</tr>
</table>
-
## <a name='Member'>Member</a>
@@ -297,7 +295,6 @@ SkIRect members may be read and written directly without using a member function
</tr>
</table>
-
### Members
<table style='border-collapse: collapse; width: 62.5em'>
@@ -387,7 +384,6 @@ SkIRect can be constructed or initialized by these functions, including C++ clas
</tr>
</table>
-
<a name='SkIRect_MakeEmpty'></a>
## MakeEmpty
@@ -668,7 +664,6 @@ rect: -10, 35, 5, 60 isEmpty: false
</tr>
</table>
-
<a name='SkIRect_left'></a>
## left
@@ -1120,7 +1115,6 @@ SkIRect operators inline class member functions with arithmetic equivalents.
</tr>
</table>
-
<a name='SkIRect_equal_operator'></a>
## operator==
@@ -1229,7 +1223,6 @@ test != sorted
</tr>
</table>
-
<a name='SkIRect_setEmpty'></a>
## setEmpty
@@ -1434,7 +1427,6 @@ rect: -10, 35, 5, 60 isEmpty: false
</tr>
</table>
-
<a name='SkIRect_makeOffset'></a>
## makeOffset
@@ -1785,8 +1777,8 @@ rect: 5, 1, 55, 86
must describe area; <a href='#SkIRect_fLeft'>fLeft</a> is less than <a href='#SkIRect_fRight'>fRight</a>, and <a href='#SkIRect_fTop'>fTop</a> is less than <a href='#SkIRect_fBottom'>fBottom</a>;
empty() returns false. The intersection of <a href='#IRect'>IRect</a> pair can be described by:
-(max(a.fLeft, b.fLeft), max(a.fTop, b.fTop),
-min(a.fRight, b.fRight), min(a.fBottom, b.fBottom))
+(max(a.<a href='#SkIRect_fLeft'>fLeft</a>, b.<a href='#SkIRect_fLeft'>fLeft</a>), max(a.<a href='#SkIRect_fTop'>fTop</a>, b.<a href='#SkIRect_fTop'>fTop</a>),
+min(a.<a href='#SkIRect_fRight'>fRight</a>, b.<a href='#SkIRect_fRight'>fRight</a>), min(a.<a href='#SkIRect_fBottom'>fBottom</a>, b.<a href='#SkIRect_fBottom'>fBottom</a>))
.
The intersection is only meaningful if the resulting <a href='#IRect'>IRect</a> is not empty and
@@ -1834,7 +1826,6 @@ describes an area: <a href='#SkIRect_fLeft'>fLeft</a> is less than <a href='#SkI
</tr>
</table>
-
<a name='SkIRect_adjust'></a>
## adjust
@@ -2461,7 +2452,6 @@ intersection
</tr>
</table>
-
<a name='SkIRect_join'></a>
## join
@@ -2558,7 +2548,6 @@ join: 10, 20, 55, 65
</tr>
</table>
-
<a name='SkIRect_sort'></a>
## sort
diff --git a/site/user/api/SkImageInfo_Reference.md b/site/user/api/SkImageInfo_Reference.md
index 611ae68d5d..743907ff54 100644
--- a/site/user/api/SkImageInfo_Reference.md
+++ b/site/user/api/SkImageInfo_Reference.md
@@ -112,40 +112,43 @@ SkImageInfo related constants are defined by <code>enum</code>, <code>enum class
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>pixel with half floats for red, green, blue, alpha; in 64-bit word</td>
</tr>
<tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#kRGBA_F32_SkColorType'>kRGBA_F32_SkColorType</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>pixel using C float for red, green, blue, alpha; in 128-bit word</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#kRGB_101010x_SkColorType'>kRGB_101010x_SkColorType</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>pixel with 10 bits each for red, green, blue; in 32-bit word</td>
</tr>
- <tr style='background-color: #f0f0f0; '>
+ <tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#kRGB_565_SkColorType'>kRGB_565_SkColorType</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>pixel with 5 bits red, 6 bits green, 5 bits blue, in 16-bit word</td>
</tr>
- <tr>
+ <tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#kRGB_888x_SkColorType'>kRGB_888x_SkColorType</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>pixel with 8 bits each for red, green, blue; in 32-bit word</td>
</tr>
- <tr style='background-color: #f0f0f0; '>
+ <tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#kRec601_SkYUVColorSpace'>kRec601_SkYUVColorSpace</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>describes SDTV range</td>
</tr>
- <tr>
+ <tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#kRec709_SkYUVColorSpace'>kRec709_SkYUVColorSpace</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>describes HDTV range</td>
</tr>
- <tr style='background-color: #f0f0f0; '>
+ <tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#kUnknown_SkAlphaType'>kUnknown_SkAlphaType</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uninitialized</td>
</tr>
- <tr>
+ <tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#kUnknown_SkColorType'>kUnknown_SkColorType</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uninitialized</td>
</tr>
- <tr style='background-color: #f0f0f0; '>
+ <tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#kUnpremul_SkAlphaType'>kUnpremul_SkAlphaType</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>pixel components are independent of <a href='SkColor_Reference#Alpha'>Alpha</a></td>
</tr>
</table>
-
## <a name='Alpha_Type'>Alpha Type</a>
## <a name='SkAlphaType'>Enum SkAlphaType</a>
@@ -333,8 +336,8 @@ true if <a href='#SkAlphaTypeIsOpaque_at'>at</a> equals <a href='#kOpaque_SkAlph
<a href='#kRGB_101010x_SkColorType'>kRGB_101010x_SkColorType</a>,
<a href='#kGray_8_SkColorType'>kGray_8_SkColorType</a>,
<a href='#kRGBA_F16_SkColorType'>kRGBA_F16_SkColorType</a>,
-
- <a href='#kLastEnum_SkColorType'>kLastEnum_SkColorType</a> = <a href='#kRGBA_F16_SkColorType'>kRGBA_F16_SkColorType</a>,
+ <a href='#kRGBA_F32_SkColorType'>kRGBA_F32_SkColorType</a>,
+ <a href='#kLastEnum_SkColorType'>kLastEnum_SkColorType</a> = <a href='#kRGBA_F32_SkColorType'>kRGBA_F32_SkColorType</a>,
#if SK_PMCOLOR_BYTE_ORDER(B,G,R,A)
<a href='#kN32_SkColorType'>kN32_SkColorType</a> = <a href='#kBGRA_8888_SkColorType'>kBGRA_8888_SkColorType</a>,
#elif SK_PMCOLOR_BYTE_ORDER(R,G,B,A)
@@ -456,18 +459,29 @@ blue, and green, representing colors from black to white.
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Color_Type_RGBA_F16'>Color&nbsp;Type&nbsp;RGBA&nbsp;F16</a>&nbsp;</td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Stores 64-bit word pixel encoding that contains 16 bits of blue,
-16 bits of green, 16 bits of red, and 16 bits of alpha.
+16 bits of green, 16 bits of red, and 16 bits of alpha. Each component
+is encoded as a half float.
</td>
</tr>
<tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='kRGBA_F32_SkColorType'><code>kRGBA_F32_SkColorType</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>11</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Color_Type_RGBA_F32'>Color&nbsp;Type&nbsp;RGBA&nbsp;F32</a>&nbsp;</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+Stores 128-bit word pixel encoding that contains 32 bits of blue,
+32 bits of green, 32 bits of red, and 32 bits of alpha. Each component
+is encoded as a single precision float.
+</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='kLastEnum_SkColorType'><code>kLastEnum_SkColorType</code></a></td>
- <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>10</td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>11</td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Used by tests to iterate through all valid values.
</td>
</tr>
- <tr style='background-color: #f0f0f0; '>
+ <tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='kN32_SkColorType'><code>kN32_SkColorType</code></a></td>
<td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>4 or 6</td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '></td>
@@ -701,7 +715,7 @@ opaque as if its <a href='SkColor_Reference#Alpha'>Color Alpha</a> was set to on
## <a name='Color_Type_RGBA_F16'>Color Type RGBA F16</a>
<a href='#kRGBA_F16_SkColorType'>kRGBA_F16_SkColorType</a> encodes ARGB into a 64-bit word. Each component:
-blue, green, red, and alpha; use 16 bits, describing a floating point value.
+blue, green, red, and alpha; use 16 bits, describing a floating point value,
from -65500 to 65000 with 3.31 decimal digits of precision.
At present, <a href='SkColor_Reference#Color'>Color</a> in <a href='SkPaint_Reference#Paint'>Paint</a> does not provide enough precision or range to
@@ -723,11 +737,42 @@ pixels.
If paired with <a href='#kOpaque_SkAlphaType'>kOpaque_SkAlphaType</a>: all alpha component values are at the maximum;
blue, green, and red components are fully opaque. If any alpha component is
-less than 255, the drawn result is undefined.
+less than one, the drawn result is undefined.
### Example
-<div><fiddle-embed name="788ac33198103a14a5076dc3e03f2f4b"></fiddle-embed></div>
+<div><fiddle-embed name="dd81527bbdf5eaae7dd21ac04ab84f9e"></fiddle-embed></div>
+
+### See Also
+
+<a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a>
+
+## <a name='Color_Type_RGBA_F32'>Color Type RGBA F32</a>
+
+<a href='#kRGBA_F32_SkColorType'>kRGBA_F32_SkColorType</a> encodes ARGB into a 128-bit word. Each component:
+blue, green, red, and alpha; use 32 bits, describing a floating point value,
+from -3.402823e+38 to 3.402823e+38 with 7.225 decimal digits of precision.
+
+At present, <a href='SkColor_Reference#Color'>Color</a> in <a href='SkPaint_Reference#Paint'>Paint</a> does not provide enough precision or range to
+draw all colors possible to a <a href='#kRGBA_F32_SkColorType'>kRGBA_F32_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a>.
+
+Each component encodes a floating point value using <a href='https://en.wikipedia.org/wiki/Single-precision_floating-point_format'>single-precision floats</a></a> .
+Meaningful colors are represented by the range 0.0 to 1.0, although smaller
+and larger values may be useful when used in combination with <a href='undocumented#Transfer_Mode'>Transfer Mode</a>.
+
+![Color_Type_RGBA_F32](https://fiddle.skia.org/i/b26119f9312d5f5d4011bf2dac94fafe_raster.png "")
+
+If paired with <a href='#kPremul_SkAlphaType'>kPremul_SkAlphaType</a>: blue, green, and red components are
+<a href='undocumented#Premultiply'>Premultiplied</a> by the alpha value. If blue, green, or red is greater than alpha,
+the drawn result is undefined.
+
+If paired with <a href='#kUnpremul_SkAlphaType'>kUnpremul_SkAlphaType</a>: blue, green, red, and alpha components
+may have any value. There may be a performance penalty with <a href='undocumented#Unpremultiply'>Unpremultiplied</a>
+pixels.
+
+If paired with <a href='#kOpaque_SkAlphaType'>kOpaque_SkAlphaType</a>: all alpha component values are at the maximum;
+blue, green, and red components are fully opaque. If any alpha component is
+less than one, the drawn result is undefined.
### See Also
@@ -942,6 +987,7 @@ SkImageInfo related constants are defined by <code>enum</code>, <code>enum class
<tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
</table>
+
Describes pixel dimensions and encoding. <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, <a href='SkImage_Reference#Image'>Image</a>, PixMap, and <a href='SkSurface_Reference#Surface'>Surface</a>
can be created from <a href='#Image_Info'>Image Info</a>. <a href='#Image_Info'>Image Info</a> can be retrieved from <a href='SkBitmap_Reference#Bitmap'>Bitmap</a> and
<a href='SkPixmap_Reference#Pixmap'>Pixmap</a>, but not from <a href='SkImage_Reference#Image'>Image</a> and <a href='SkSurface_Reference#Surface'>Surface</a>. For example, <a href='SkImage_Reference#Image'>Image</a> and <a href='SkSurface_Reference#Surface'>Surface</a>
@@ -1104,7 +1150,6 @@ SkImageInfo member functions read and modify the structure properties.
</tr>
</table>
-
## <a name='Related_Function'>Related Function</a>
@@ -1161,32 +1206,35 @@ SkImageInfo global, <code>struct</code>, and <code>class</code> related member f
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>encodes ARGB as half floats</td>
</tr>
<tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Color_Type_RGBA_F32'>Color Type RGBA F32</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>encodes ARGB as single precision floats</td>
+ </tr>
+ <tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Color_Type_RGB_101010'>Color Type RGB 101010</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>encodes RGB ten bits per color component</td>
</tr>
- <tr>
+ <tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Color_Type_RGB_565'>Color Type RGB 565</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>encodes RGB in 16 bits</td>
</tr>
- <tr style='background-color: #f0f0f0; '>
+ <tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Color_Type_RGB_888'>Color Type RGB 888</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>encodes RGB in 32 bits</td>
</tr>
- <tr>
+ <tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Property'>Property</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>metrics and attributes</td>
</tr>
- <tr style='background-color: #f0f0f0; '>
+ <tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Utility'>Utility</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>rarely called management functions</td>
</tr>
- <tr>
+ <tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#YUV_ColorSpace'>YUV ColorSpace</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>color range of YUV pixels</td>
</tr>
</table>
-
## <a name='Constructor'>Constructor</a>
@@ -1260,7 +1308,6 @@ SkImageInfo can be constructed or initialized by these functions, including C++
</tr>
</table>
-
<a name='SkImageInfo_empty_constructor'></a>
## SkImageInfo
@@ -1695,7 +1742,6 @@ created <a href='#Image_Info'>Image Info</a>
</tr>
</table>
-
<a name='SkImageInfo_width'></a>
## width
@@ -2382,7 +2428,6 @@ SkImageInfo operators inline class member functions with arithmetic equivalents.
</tr>
</table>
-
<a name='SkImageInfo_equal1_operator'></a>
## operator==
@@ -2673,7 +2718,6 @@ SkImageInfo() == reset copy
</tr>
</table>
-
<a name='SkImageInfo_validate'></a>
## validate
diff --git a/site/user/api/SkImage_Reference.md b/site/user/api/SkImage_Reference.md
index e53eef618c..eec6966d98 100644
--- a/site/user/api/SkImage_Reference.md
+++ b/site/user/api/SkImage_Reference.md
@@ -13,6 +13,14 @@ SkImage related constants are defined by <code>enum</code>, <code>enum class</co
<tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
<tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkImage_BitDepth_kF16'>BitDepth::kF16</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses 16-bit float per <a href='SkColor_Reference#Color'>Color</a> component</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkImage_BitDepth_kU8'>BitDepth::kU8</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses 8-bit unsigned int per <a href='SkColor_Reference#Color'>Color</a> component</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkImage_BitDepth'>BitDepth</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>options for <a href='#SkImage_MakeFromPicture'>MakeFromPicture</a></td>
</tr>
@@ -29,20 +37,11 @@ SkImage related constants are defined by <code>enum</code>, <code>enum class</co
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>disallows internally caching decoded and copied pixels</td>
</tr>
<tr style='background-color: #f0f0f0; '>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkImage_BitDepth_kF16'>BitDepth::kF16</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses 16-bit float per <a href='SkColor_Reference#Color'>Color</a> component</td>
- </tr>
- <tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkImage_kRO_LegacyBitmapMode'>kRO LegacyBitmapMode</a></td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returned bitmap is read-only and immutable</td>
</tr>
- <tr style='background-color: #f0f0f0; '>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkImage_BitDepth_kU8'>BitDepth::kU8</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses 8-bit unsigned int per <a href='SkColor_Reference#Color'>Color</a> component</td>
- </tr>
</table>
-
## <a name='Typedef'>Typedef</a>
@@ -67,8 +66,9 @@ SkImage <code>typedef</code> define a data type.
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>parameter type for <a href='#SkImage_MakeFromTexture'>MakeFromTexture</a></td>
</tr>
</table>
+
<a href='#Image'>Image</a> describes a two dimensional array of pixels to draw. The pixels may be
-decoded in a <a href='undocumented#Raster_Bitmap'>Raster Bitmap</a>, encoded in a <a href='undocumented#Picture'>Picture</a> or compressed data stream,
+decoded in a <a href='undocumented#Raster_Bitmap'>Raster Bitmap</a>, encoded in a <a href='SkPicture_Reference#Picture'>Picture</a> or compressed data stream,
or located in GPU memory as a <a href='undocumented#GPU_Texture'>GPU Texture</a>.
<a href='#Image'>Image</a> cannot be modified after it is created. <a href='#Image'>Image</a> may allocate additional
@@ -77,7 +77,7 @@ storage as needed; for instance, an encoded <a href='#Image'>Image</a> may decod
<a href='#Image'>Image</a> width and height are greater than zero. Creating an <a href='#Image'>Image</a> with zero width
or height returns <a href='#Image'>Image</a> equal to nullptr.
-<a href='#Image'>Image</a> may be created from <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, <a href='SkPixmap_Reference#Pixmap'>Pixmap</a>, <a href='SkSurface_Reference#Surface'>Surface</a>, <a href='undocumented#Picture'>Picture</a>, encoded streams,
+<a href='#Image'>Image</a> may be created from <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, <a href='SkPixmap_Reference#Pixmap'>Pixmap</a>, <a href='SkSurface_Reference#Surface'>Surface</a>, <a href='SkPicture_Reference#Picture'>Picture</a>, encoded streams,
<a href='undocumented#GPU_Texture'>GPU Texture</a>, <a href='SkImageInfo_Reference#YUV_ColorSpace'>YUV ColorSpace</a> data, or hardware buffer. Encoded streams supported
include BMP, GIF, HEIF, ICO, JPEG, PNG, WBMP, WebP. Supported encoding details
vary with platform.
@@ -162,7 +162,6 @@ SkImage global, <code>struct</code>, and <code>class</code> related member funct
</tr>
</table>
-
## <a name='Constructor'>Constructor</a>
@@ -208,7 +207,7 @@ SkImage can be constructed or initialized by these functions, including C++ clas
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkImage_MakeFromPicture'>MakeFromPicture</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>creates <a href='#Image'>Image</a> from <a href='undocumented#Picture'>Picture</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>creates <a href='#Image'>Image</a> from <a href='SkPicture_Reference#Picture'>Picture</a></td>
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkImage_MakeFromRaster'>MakeFromRaster</a></td>
@@ -280,7 +279,6 @@ SkImage can be constructed or initialized by these functions, including C++ clas
</tr>
</table>
-
## <a name='Member_Function'>Member Function</a>
@@ -326,7 +324,7 @@ SkImage member functions read and modify the structure properties.
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkImage_MakeFromPicture'>MakeFromPicture</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>creates <a href='#Image'>Image</a> from <a href='undocumented#Picture'>Picture</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>creates <a href='#Image'>Image</a> from <a href='SkPicture_Reference#Picture'>Picture</a></td>
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkImage_MakeFromRaster'>MakeFromRaster</a></td>
@@ -462,7 +460,6 @@ SkImage member functions read and modify the structure properties.
</tr>
</table>
-
<a name='SkImage_MakeRasterCopy'></a>
## MakeRasterCopy
@@ -691,7 +688,7 @@ otherwise, <a href='#SkImage_MakeFromGenerator_subset'>subset</a> must be contai
<a href='#Image'>Image</a> is returned if generator data is valid. Valid data parameters vary by type of data
and platform.
-<a href='#SkImage_MakeFromGenerator_imageGenerator'>imageGenerator</a> may wrap <a href='undocumented#Picture'>Picture</a> data, codec data, or custom data.
+<a href='#SkImage_MakeFromGenerator_imageGenerator'>imageGenerator</a> may wrap <a href='SkPicture_Reference#Picture'>Picture</a> data, codec data, or custom data.
### Parameters
@@ -709,7 +706,7 @@ created <a href='#Image'>Image</a>, or nullptr
### Example
-<div><fiddle-embed name="c2fec0746f88ca34d7dce59dd9bdef9e"><div>The generator returning <a href='undocumented#Picture'>Picture</a> cannot be shared; std::move transfers ownership to generated <a href='#Image'>Image</a>.
+<div><fiddle-embed name="c2fec0746f88ca34d7dce59dd9bdef9e"><div>The generator returning <a href='SkPicture_Reference#Picture'>Picture</a> cannot be shared; std::move transfers ownership to generated <a href='#Image'>Image</a>.
</div></fiddle-embed></div>
### See Also
@@ -1194,7 +1191,7 @@ Use 16 bits per ARGB component using half-precision floating point format.
## MakeFromPicture
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-static <a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='#SkImage'>SkImage</a>&gt; <a href='#SkImage_MakeFromPicture'>MakeFromPicture</a>(<a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='undocumented#SkPicture'>SkPicture</a>&gt; picture, const <a href='undocumented#SkISize'>SkISize</a>& dimensions,
+static <a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='#SkImage'>SkImage</a>&gt; <a href='#SkImage_MakeFromPicture'>MakeFromPicture</a>(<a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='SkPicture_Reference#SkPicture'>SkPicture</a>&gt; picture, const <a href='undocumented#SkISize'>SkISize</a>& dimensions,
const <a href='SkMatrix_Reference#SkMatrix'>SkMatrix</a>* matrix, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>* paint,
<a href='#SkImage_BitDepth'>BitDepth</a> bitDepth, <a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='undocumented#SkColorSpace'>SkColorSpace</a>&gt; <a href='#SkImage_colorSpace'>colorSpace</a>)
</pre>
@@ -1347,7 +1344,6 @@ created <a href='#Image'>Image</a>, or nullptr
</tr>
</table>
-
<a name='SkImage_width'></a>
## width
@@ -1747,7 +1743,6 @@ transforming <a href='#Image'>Image</a> before <a href='SkCanvas_Reference#Matri
</tr>
</table>
-
<a name='SkImage_peekPixels'></a>
## peekPixels
@@ -2279,7 +2274,6 @@ encoded <a href='#Image'>Image</a>, or nullptr
</tr>
</table>
-
<a name='SkImage_makeSubset'></a>
## makeSubset
@@ -2306,7 +2300,7 @@ partial or full <a href='#Image'>Image</a>, or nullptr
### Example
-<div><fiddle-embed name="cedd6233848198e1fca4d1e14816baaf"></fiddle-embed></div>
+<div><fiddle-embed name="93669037c9eb9d142e7776b9f936fa96"></fiddle-embed></div>
### See Also
diff --git a/site/user/api/SkMatrix_Reference.md b/site/user/api/SkMatrix_Reference.md
index d2ffdd14ad..4c891add50 100644
--- a/site/user/api/SkMatrix_Reference.md
+++ b/site/user/api/SkMatrix_Reference.md
@@ -117,6 +117,7 @@ SkMatrix related constants are defined by <code>enum</code>, <code>enum class</c
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>translation <a href='#Matrix'>Matrix</a></td>
</tr>
</table>
+
<a href='#Matrix'>Matrix</a> holds a 3x3 matrix for transforming coordinates. This allows mapping
<a href='SkPoint_Reference#Point'>Points</a> and <a href='SkPoint_Reference#Vector'>Vectors</a> with translation, scaling, skewing, rotation, and
perspective.
@@ -498,7 +499,6 @@ SkMatrix member functions read and modify the structure properties.
</tr>
</table>
-
## <a name='Related_Function'>Related Function</a>
@@ -532,7 +532,6 @@ SkMatrix global, <code>struct</code>, and <code>class</code> related member func
</tr>
</table>
-
## <a name='Constructor'>Constructor</a>
@@ -666,7 +665,6 @@ SkMatrix can be constructed or initialized by these functions, including C++ cla
</tr>
</table>
-
<a name='SkMatrix_MakeScale'></a>
## MakeScale
@@ -1027,7 +1025,6 @@ after setPolyToPoly: kTranslate_Mask kScale_Mask kAffine_Mask kPerspective_Mask
</tr>
</table>
-
<a name='SkMatrix_getType'></a>
## getType
@@ -1688,7 +1685,6 @@ SkMatrix operators inline class member functions with arithmetic equivalents.
</tr>
</table>
-
<a name='SkMatrix_array_operator'></a>
## operator[]
@@ -2209,7 +2205,6 @@ after dirty cache: x = 66
</tr>
</table>
-
<a name='SkMatrix_set'></a>
## set
@@ -4443,7 +4438,6 @@ ScaleX: 2 SkewY: 5 SkewX: 3 ScaleY: 6 TransX: 4 TransY: 7
</tr>
</table>
-
<a name='SkMatrix_mapPoints'></a>
## mapPoints
@@ -5339,7 +5333,6 @@ true if <a href='#Matrix'>Matrix</a> <a href='#SkMatrix_notequal_operator_a'>a</
</tr>
</table>
-
<a name='SkMatrix_dump'></a>
## dump
diff --git a/site/user/api/SkPaint_Reference.md b/site/user/api/SkPaint_Reference.md
index 3821dc3d87..1bff17da88 100644
--- a/site/user/api/SkPaint_Reference.md
+++ b/site/user/api/SkPaint_Reference.md
@@ -83,7 +83,7 @@ SkPaint global, <code>struct</code>, and <code>class</code> related member funct
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Methods'>Blend Mode Methods</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Blend_Mode'>Blend Mode</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a></td>
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Color_Filter_Methods'>Color Filter Methods</a></td>
@@ -255,7 +255,6 @@ SkPaint global, <code>struct</code>, and <code>class</code> related member funct
</tr>
</table>
-
## <a name='Constant'>Constant</a>
@@ -445,7 +444,6 @@ SkPaint related constants are defined by <code>enum</code>, <code>enum class</co
</tr>
</table>
-
## <a name='Struct'>Struct</a>
@@ -459,7 +457,6 @@ SkPaint uses C++ structs to declare the public data structures and interfaces.
</tr>
</table>
-
## <a name='Constructor'>Constructor</a>
@@ -485,7 +482,6 @@ SkPaint can be constructed or initialized by these functions, including C++ clas
</tr>
</table>
-
## <a name='Operator'>Operator</a>
@@ -511,7 +507,6 @@ SkPaint operators inline class member functions with arithmetic equivalents.
</tr>
</table>
-
## <a name='Member_Function'>Member Function</a>
@@ -553,7 +548,7 @@ SkPaint member functions read and modify the structure properties.
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getBlendMode'>getBlendMode</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Blend_Mode'>Blend Mode</a>, how colors combine with <a href='undocumented#Device'>Device</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, how colors combine with <a href='undocumented#Device'>Device</a></td>
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getColor'>getColor</a></td>
@@ -721,7 +716,7 @@ SkPaint member functions read and modify the structure properties.
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isSrcOver'>isSrcOver</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='undocumented#Blend_Mode'>Blend Mode</a> is <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> is <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a></td>
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isSubpixelText'>isSubpixelText</a></td>
@@ -789,7 +784,7 @@ SkPaint member functions read and modify the structure properties.
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setBlendMode'>setBlendMode</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Blend_Mode'>Blend Mode</a>, how colors combine with destination</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, how colors combine with destination</td>
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setColor'>setColor</a></td>
@@ -909,7 +904,6 @@ SkPaint member functions read and modify the structure properties.
</tr>
</table>
-
## <a name='Initializers'>Initializers</a>
<a name='SkPaint_empty_constructor'></a>
@@ -924,7 +918,7 @@ Constructs <a href='#Paint'>Paint</a> with default values.
| attribute | default value |
| --- | --- |
| <a href='#Anti_Alias'>Anti Alias</a> | false |
-| <a href='undocumented#Blend_Mode'>Blend Mode</a> | <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a> |
+| <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> | <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a> |
| <a href='SkColor_Reference#Color'>Color</a> | <a href='SkColor_Reference#SK_ColorBLACK'>SK ColorBLACK</a> |
| <a href='SkColor_Reference#Alpha'>Color Alpha</a> | 255 |
| <a href='undocumented#Color_Filter'>Color Filter</a> | nullptr |
@@ -1752,7 +1746,7 @@ alternating nearby colors from pixel to pixel.
### Example
<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
-Drawing the gradient repeatedly with <a href='undocumented#SkBlendMode_kPlus'>SkBlendMode::kPlus</a> exaggerates the
+Drawing the gradient repeatedly with <a href='SkBlendMode_Reference#SkBlendMode_kPlus'>SkBlendMode::kPlus</a> exaggerates the
dither, making it easier to see.
</div></fiddle-embed></div>
@@ -2807,7 +2801,7 @@ a fill draw.
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFill_Style'><code>SkPaint::kFill_Style</code></a></td>
<td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
-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='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
+Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Region'>Region</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#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='SkImage_Reference#Image'>Image</a>, <a href='undocumented#Patch'>Patches</a>, <a href='undocumented#Region'>Region</a>, <a href='undocumented#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='SkPath_Reference#Fill_Type'>Path Fill Type</a> specifies additional rules to fill the area outside the path edge,
@@ -2819,7 +2813,7 @@ and to create an unfilled hole inside the shape.
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStroke_Style'><code>SkPaint::kStroke_Style</code></a></td>
<td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
-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='undocumented#Arc'>Arcs</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
+Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Region'>Region</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a>, <a href='undocumented#Arc'>Arcs</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
<a href='undocumented#Arc'>Arcs</a>, <a href='undocumented#Line'>Lines</a>, and points, are always drawn as if <a href='#SkPaint_kStroke_Style'>kStroke Style</a> is set,
and ignore the set <a href='#SkPaint_Style'>Style</a>.
The stroke construction is unaffected by the <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a>.
@@ -2829,7 +2823,7 @@ The stroke construction is unaffected by the <a href='SkPath_Reference#Fill_Type
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrokeAndFill_Style'><code>SkPaint::kStrokeAndFill_Style</code></a></td>
<td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
-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='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
+Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Region'>Region</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
<a href='SkPath_Reference#Path'>Path</a> is treated as if it is set to <a href='SkPath_Reference#SkPath_kWinding_FillType'>SkPath::kWinding FillType</a>,
and the set <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a> is ignored.
</td>
@@ -3625,7 +3619,7 @@ Increments <a href='#SkPaint_setShader_shader'>shader</a> <a href='undocumented#
## <a name='Color_Filter_Methods'>Color Filter Methods</a>
<a href='undocumented#Color_Filter'>Color Filter</a> alters the color used when drawing a shape.
-<a href='undocumented#Color_Filter'>Color Filter</a> may apply <a href='undocumented#Blend_Mode'>Blend Mode</a>, transform the color through a matrix, or composite multiple filters.
+<a href='undocumented#Color_Filter'>Color Filter</a> may apply <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, transform the color through a matrix, or composite multiple filters.
If <a href='#Paint'>Paint</a> has no <a href='undocumented#Color_Filter'>Color Filter</a>, the color is unaltered.
The drawn transparency can be modified without altering <a href='undocumented#Color_Filter'>Color Filter</a>, by changing <a href='SkColor_Reference#Alpha'>Color Alpha</a>.
@@ -3719,8 +3713,8 @@ Increments filter <a href='undocumented#Reference_Count'>Reference Count</a> by
## <a name='Blend_Mode_Methods'>Blend Mode Methods</a>
-<a href='undocumented#Blend_Mode'>Blend Mode</a> describes how <a href='SkColor_Reference#Color'>Color</a> combines with the destination color.
-The default setting, <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, draws the source color
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> describes how <a href='SkColor_Reference#Color'>Color</a> combines with the destination color.
+The default setting, <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, draws the source color
over the destination color.
### Example
@@ -3729,17 +3723,17 @@ over the destination color.
### See Also
-<a href='undocumented#Blend_Mode'>Blend Mode</a>
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>
<a name='SkPaint_getBlendMode'></a>
## getBlendMode
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-<a href='undocumented#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const
+<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const
</pre>
-Returns <a href='undocumented#Blend_Mode'>Blend Mode</a>.
-By default, returns <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>.
+Returns <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
+By default, returns <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>.
### Return Value
@@ -3767,11 +3761,11 @@ kSrcOver != getBlendMode
bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>() const
</pre>
-Returns true if <a href='undocumented#Blend_Mode'>Blend Mode</a> is <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, the default.
+Returns true if <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> is <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, the default.
### Return Value
-true if <a href='undocumented#Blend_Mode'>Blend Mode</a> is <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>
+true if <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> is <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>
### Example
@@ -3792,16 +3786,16 @@ isSrcOver != true
## setBlendMode
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='undocumented#SkBlendMode'>SkBlendMode</a> mode)
+void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode)
</pre>
-Sets <a href='undocumented#Blend_Mode'>Blend Mode</a> to <a href='#SkPaint_setBlendMode_mode'>mode</a>.
+Sets <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> to <a href='#SkPaint_setBlendMode_mode'>mode</a>.
Does not check for valid input.
### Parameters
<table> <tr> <td><a name='SkPaint_setBlendMode_mode'><code><strong>mode</strong></code></a></td>
- <td><a href='undocumented#SkBlendMode'>SkBlendMode</a> used to combine source color and destination</td>
+ <td><a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> used to combine source color and destination</td>
</tr>
</table>
@@ -4110,8 +4104,8 @@ Pass nullptr to clear <a href='undocumented#Typeface'>Typeface</a> and use the d
## <a name='Image_Filter_Methods'>Image Filter Methods</a>
<a href='undocumented#Image_Filter'>Image Filter</a> operates on the pixel representation of the shape, as modified by <a href='#Paint'>Paint</a>
-with <a href='undocumented#Blend_Mode'>Blend Mode</a> set to <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>. <a href='undocumented#Image_Filter'>Image Filter</a> creates a new bitmap,
-which is drawn to the device using the set <a href='undocumented#Blend_Mode'>Blend Mode</a>.
+with <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> set to <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>. <a href='undocumented#Image_Filter'>Image Filter</a> creates a new bitmap,
+which is drawn to the device using the set <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
<a href='undocumented#Image_Filter'>Image Filter</a> is higher level than <a href='undocumented#Mask_Filter'>Mask Filter</a>; for instance, an <a href='undocumented#Image_Filter'>Image Filter</a>
can operate on all channels of <a href='SkColor_Reference#Color'>Color</a>, while <a href='undocumented#Mask_Filter'>Mask Filter</a> generates <a href='SkColor_Reference#Alpha'>Alpha</a> only.
@@ -4802,7 +4796,6 @@ SkPaint related constants are defined by <code>enum</code>, <code>enum class</co
</tr>
</table>
-
## <a name='Font_Metrics_Member_Function'>Member_Function</a>
@@ -4828,7 +4821,6 @@ SkPaint member functions read and modify the structure properties.
</tr>
</table>
-
## <a name='Font_Metrics_Member'>Member</a>
@@ -4902,7 +4894,6 @@ SkPaint members may be read and written directly without using a member function
</tr>
</table>
-
<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> {
@@ -5997,7 +5988,7 @@ bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const
Returns true if <a href='#Paint'>Paint</a> prevents all drawing;
otherwise, the <a href='#Paint'>Paint</a> may or may not allow drawing.
-Returns true if, for example, <a href='undocumented#Blend_Mode'>Blend Mode</a> combined with <a href='SkColor_Reference#Alpha'>Color Alpha</a> computes a
+Returns true if, for example, <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> combined with <a href='SkColor_Reference#Alpha'>Color Alpha</a> computes a
new <a href='SkColor_Reference#Alpha'>Alpha</a> of zero.
### Return Value
@@ -6023,7 +6014,6 @@ alpha 0 nothing to draw: true
## <a name='Fast_Bounds'>Fast Bounds</a>
-To be made private.
<a href='#Fast_Bounds'>Fast Bounds</a> functions conservatively outset a drawing bounds by additional area
<a href='#Paint'>Paint</a> may draw to.
@@ -6034,7 +6024,6 @@ To be made private.
bool <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>() const
</pre>
-( to be made private)
Returns true if <a href='#Paint'>Paint</a> does not include elements requiring extensive computation
to compute <a href='undocumented#Device'>Device</a> bounds of drawn geometry. For instance, <a href='#Paint'>Paint</a> with <a href='undocumented#Path_Effect'>Path Effect</a>
always returns false.
@@ -6052,7 +6041,6 @@ true if <a href='#Paint'>Paint</a> allows for fast computation of bounds
const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_computeFastBounds'>computeFastBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage) const
</pre>
-( to be made private)
Only call this if <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a> returned true. This takes a
raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
effects in the paint (e.g. stroking). If needed, it uses the <a href='#SkPaint_computeFastBounds_storage'>storage</a>
@@ -6064,15 +6052,6 @@ should not rely on <a href='#SkPaint_computeFastBounds_storage'>storage</a> bein
use the returned value. It is legal for <a href='#SkPaint_computeFastBounds_orig'>orig</a> and <a href='#SkPaint_computeFastBounds_storage'>storage</a> to be the same
<a href='SkRect_Reference#Rect'>Rect</a>.
-For example:
-if (!path.isInverseFillType() && paint.<a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>) {
-<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_computeFastBounds_storage'>storage</a>;
-if (canvas->quickReject(paint.computeFastBounds(path.getBounds(), &<a href='#SkPaint_computeFastBounds_storage'>storage</a>))) {
-return; // do not draw the path
-}
-}
-// draw the path
-
### Parameters
<table> <tr> <td><a name='SkPaint_computeFastBounds_orig'><code><strong>orig</strong></code></a></td>
@@ -6096,8 +6075,6 @@ fast computed bounds
const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_computeFastStrokeBounds'>computeFastStrokeBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage) const
</pre>
-( to be made private)
-
### Parameters
<table> <tr> <td><a name='SkPaint_computeFastStrokeBounds_orig'><code><strong>orig</strong></code></a></td>
@@ -6121,7 +6098,6 @@ fast computed bounds
const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_doComputeFastBounds'>doComputeFastBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage, <a href='#SkPaint_Style'>Style</a> style) const
</pre>
-( to be made private)
Computes the bounds, overriding the <a href='#Paint'>Paint</a> <a href='#SkPaint_Style'>Style</a>. This can be used to
account for additional width required by stroking <a href='#SkPaint_doComputeFastBounds_orig'>orig</a>, without
altering <a href='#SkPaint_Style'>Style</a> set to fill.
@@ -6172,3 +6148,4 @@ fast computed bounds
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts text into glyph indices</td>
</tr>
</table>
+
diff --git a/site/user/api/SkPath_Reference.md b/site/user/api/SkPath_Reference.md
index 8134c5f805..f213448922 100644
--- a/site/user/api/SkPath_Reference.md
+++ b/site/user/api/SkPath_Reference.md
@@ -13,11 +13,11 @@ containing two connected <a href='undocumented#Line'>Lines</a> are described the
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>.
-<a href='#Path'>Path</a> components <a href='#Arc'>Arc</a>, <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Round_Rect'>Round Rect</a>, <a href='undocumented#Circle'>Circle</a>, and <a href='undocumented#Oval'>Oval</a> are composed of
+<a href='#Path'>Path</a> components <a href='#Arc'>Arc</a>, <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a>, <a href='undocumented#Circle'>Circle</a>, and <a href='undocumented#Oval'>Oval</a> are composed of
<a href='undocumented#Line'>Lines</a> and <a href='undocumented#Curve'>Curves</a> with as many <a href='#Verb'>Verbs</a> and <a href='SkPoint_Reference#Point'>Points</a> required
for an exact description. Once added to <a href='#Path'>Path</a>, these components may lose their
identity; although <a href='#Path'>Path</a> can be inspected to determine if it describes a single
-<a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Oval'>Oval</a>, <a href='undocumented#Round_Rect'>Round Rect</a>, and so on.
+<a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Oval'>Oval</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a>, and so on.
### Example
@@ -219,7 +219,6 @@ SkPath global, <code>struct</code>, and <code>class</code> related member functi
</tr>
</table>
-
## <a name='Constant'>Constant</a>
@@ -353,7 +352,6 @@ SkPath related constants are defined by <code>enum</code>, <code>enum class</cod
</tr>
</table>
-
## <a name='Class'>Class</a>
@@ -371,7 +369,6 @@ SkPath uses C++ classes to declare the public data structures and interfaces.
</tr>
</table>
-
## <a name='Constructor'>Constructor</a>
@@ -401,7 +398,6 @@ SkPath can be constructed or initialized by these functions, including C++ class
</tr>
</table>
-
## <a name='Operator'>Operator</a>
@@ -427,7 +423,6 @@ SkPath operators inline class member functions with arithmetic equivalents.
</tr>
</table>
-
## <a name='Member_Function'>Member Function</a>
@@ -481,7 +476,7 @@ SkPath member functions read and modify the structure properties.
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPath_addRRect'>addRRect</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds one <a href='#Contour'>Contour</a> containing <a href='undocumented#Round_Rect'>Round Rect</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds one <a href='#Contour'>Contour</a> containing <a href='SkRRect_Reference#RRect'>Round Rect</a></td>
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPath_addRect'>addRect</a></td>
@@ -489,7 +484,7 @@ SkPath member functions read and modify the structure properties.
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPath_addRoundRect'>addRoundRect</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds one <a href='#Contour'>Contour</a> containing <a href='undocumented#Round_Rect'>Round Rect</a> with common corner radii</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds one <a href='#Contour'>Contour</a> containing <a href='SkRRect_Reference#RRect'>Round Rect</a> with common corner radii</td>
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPath_arcTo'>arcTo</a></td>
@@ -621,7 +616,7 @@ SkPath member functions read and modify the structure properties.
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPath_isRRect'>isRRect</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns if describes <a href='undocumented#Round_Rect'>Round Rect</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns if describes <a href='SkRRect_Reference#RRect'>Round Rect</a></td>
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPath_isRect'>isRect</a></td>
@@ -733,7 +728,6 @@ SkPath member functions read and modify the structure properties.
</tr>
</table>
-
## <a name='Verb'>Verb</a>
## <a name='SkPath_Verb'>Enum SkPath::Verb</a>
@@ -873,7 +867,7 @@ When <a href='#Path'>Path</a> contains multiple overlapping <a href='#Contour'>C
measures along <a href='#Path'>Path</a> to determine where to start and stop stroke; <a href='#SkPath_Direction'>Direction</a>
will change dashed results as it steps clockwise or counterclockwise.
-Closed <a href='#Contour'>Contours</a> like <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Round_Rect'>Round Rect</a>, <a href='undocumented#Circle'>Circle</a>, and <a href='undocumented#Oval'>Oval</a> added with
+Closed <a href='#Contour'>Contours</a> like <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a>, <a href='undocumented#Circle'>Circle</a>, and <a href='undocumented#Oval'>Oval</a> added with
<a href='#SkPath_kCW_Direction'>kCW Direction</a> travel clockwise; the same added with <a href='#SkPath_kCCW_Direction'>kCCW Direction</a>
travel counterclockwise.
@@ -1209,7 +1203,7 @@ convexity !=
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPath_isRRect'>isRRect</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns if describes <a href='undocumented#Round_Rect'>Round Rect</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns if describes <a href='SkRRect_Reference#RRect'>Round Rect</a></td>
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPath_isRect'>isRect</a></td>
@@ -1225,7 +1219,6 @@ convexity !=
</tr>
</table>
-
<a name='SkPath_isInterpolatable'></a>
## isInterpolatable
@@ -1281,7 +1274,6 @@ paths are interpolatable
</tr>
</table>
-
<a name='SkPath_interpolate'></a>
## interpolate
@@ -1743,25 +1735,25 @@ true if <a href='#Path'>Path</a> is recognized as an oval or circle
## isRRect
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-bool <a href='#SkPath_isRRect'>isRRect</a>(<a href='undocumented#SkRRect'>SkRRect</a>* rrect) const
+bool <a href='#SkPath_isRRect'>isRRect</a>(<a href='SkRRect_Reference#SkRRect'>SkRRect</a>* rrect) const
</pre>
-Returns true if this path is recognized as a <a href='undocumented#SkRRect'>SkRRect</a> (but not an oval/circle or rect).
+Returns true if this path is recognized as a <a href='SkRRect_Reference#SkRRect'>SkRRect</a> (but not an oval/circle or rect).
-<a href='#SkPath_isRRect_rrect'>rrect</a> receives bounds of <a href='undocumented#Round_Rect'>Round Rect</a>.
+<a href='#SkPath_isRRect_rrect'>rrect</a> receives bounds of <a href='SkRRect_Reference#RRect'>Round Rect</a>.
-<a href='#SkPath_isRRect_rrect'>rrect</a> is unmodified if <a href='undocumented#Round_Rect'>Round Rect</a> is not found.
+<a href='#SkPath_isRRect_rrect'>rrect</a> is unmodified if <a href='SkRRect_Reference#RRect'>Round Rect</a> is not found.
### Parameters
<table> <tr> <td><a name='SkPath_isRRect_rrect'><code><strong>rrect</strong></code></a></td>
- <td>storage for bounding <a href='SkRect_Reference#Rect'>Rect</a> of <a href='undocumented#Round_Rect'>Round Rect</a>; may be nullptr</td>
+ <td>storage for bounding <a href='SkRect_Reference#Rect'>Rect</a> of <a href='SkRRect_Reference#RRect'>Round Rect</a>; may be nullptr</td>
</tr>
</table>
### Return Value
-true if <a href='#Path'>Path</a> contains only <a href='undocumented#Round_Rect'>Round Rect</a>
+true if <a href='#Path'>Path</a> contains only <a href='SkRRect_Reference#RRect'>Round Rect</a>
### Example
@@ -1770,7 +1762,7 @@ true if <a href='#Path'>Path</a> contains only <a href='undocumented#Round_Rect'
### See Also
-<a href='undocumented#Round_Rect'>Round Rect</a> <a href='#SkPath_addRoundRect'>addRoundRect</a><sup><a href='#SkPath_addRoundRect_2'>[2]</a></sup> <a href='#SkPath_addRRect'>addRRect</a><sup><a href='#SkPath_addRRect_2'>[2]</a></sup>
+<a href='SkRRect_Reference#RRect'>Round Rect</a> <a href='#SkPath_addRoundRect'>addRoundRect</a><sup><a href='#SkPath_addRoundRect_2'>[2]</a></sup> <a href='#SkPath_addRRect'>addRRect</a><sup><a href='#SkPath_addRRect_2'>[2]</a></sup>
---
@@ -1975,7 +1967,6 @@ volatile by default is false
</tr>
</table>
-
<a name='SkPath_setIsVolatile'></a>
## setIsVolatile
@@ -2233,9 +2224,9 @@ one <a href='SkPoint_Reference#Point'>Point</a> for move, one <a href='SkPoint_R
int <a href='#SkPath_getPoints'>getPoints</a>(<a href='SkPoint_Reference#SkPoint'>SkPoint</a> points[], int max) const
</pre>
-Returns number of <a href='#SkPath_getPoints_points'>points</a> in <a href='#Path'>Path</a>. Up to <a href='#SkPath_getPoints_max'>max</a> <a href='#SkPath_getPoints_points'>points</a> are copied.
-<a href='#SkPath_getPoints_points'>points</a> may be nullptr; then, <a href='#SkPath_getPoints_max'>max</a> must be zero.
-If <a href='#SkPath_getPoints_max'>max</a> is greater than number of <a href='#SkPath_getPoints_points'>points</a>, excess <a href='#SkPath_getPoints_points'>points</a> storage is unaltered.
+Returns number of <a href='#SkPath_getPoints_points'>points</a> in <a href='#Path'>Path</a>. Up to max <a href='#SkPath_getPoints_points'>points</a> are copied.
+<a href='#SkPath_getPoints_points'>points</a> may be nullptr; then, max must be zero.
+If max is greater than number of <a href='#SkPath_getPoints_points'>points</a>, excess <a href='#SkPath_getPoints_points'>points</a> storage is unaltered.
### Parameters
@@ -2399,7 +2390,7 @@ round rect verb count: 10
int <a href='#SkPath_getVerbs'>getVerbs</a>(uint8_t verbs[], int max) const
</pre>
-Returns the number of <a href='#SkPath_getVerbs_verbs'>verbs</a> in the path. Up to <a href='#SkPath_getVerbs_max'>max</a> <a href='#SkPath_getVerbs_verbs'>verbs</a> are copied. The
+Returns the number of <a href='#SkPath_getVerbs_verbs'>verbs</a> in the path. Up to max <a href='#SkPath_getVerbs_verbs'>verbs</a> are copied. The
<a href='#SkPath_getVerbs_verbs'>verbs</a> are copied as one byte per verb.
### Parameters
@@ -2582,7 +2573,6 @@ rotated circle bounds = 14.6447, 9.64466, 85.3553, 80.3553
</tr>
</table>
-
<a name='SkPath_updateBoundsCache'></a>
## updateBoundsCache
@@ -2775,7 +2765,7 @@ reducing the number and size of allocations when creating <a href='#Path'>Path</
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPath_addRRect'>addRRect</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds one <a href='#Contour'>Contour</a> containing <a href='undocumented#Round_Rect'>Round Rect</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds one <a href='#Contour'>Contour</a> containing <a href='SkRRect_Reference#RRect'>Round Rect</a></td>
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '></td>
@@ -2803,7 +2793,7 @@ reducing the number and size of allocations when creating <a href='#Path'>Path</
</tr>
<tr>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPath_addRoundRect'>addRoundRect</a></td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds one <a href='#Contour'>Contour</a> containing <a href='undocumented#Round_Rect'>Round Rect</a> with common corner radii</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds one <a href='#Contour'>Contour</a> containing <a href='SkRRect_Reference#RRect'>Round Rect</a> with common corner radii</td>
</tr>
<tr style='background-color: #f0f0f0; '>
<td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '></td>
@@ -2887,7 +2877,6 @@ reducing the number and size of allocations when creating <a href='#Path'>Path</
</tr>
</table>
-
<a name='SkPath_moveTo'></a>
## moveTo
@@ -4595,10 +4584,10 @@ and <a href='#SkPath_addArc_startAngle'>startAngle</a> modulo 90 is not zero.
void <a href='#SkPath_addRoundRect'>addRoundRect</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& rect, <a href='undocumented#SkScalar'>SkScalar</a> rx, <a href='undocumented#SkScalar'>SkScalar</a> ry, <a href='#SkPath_Direction'>Direction</a> dir = <a href='#SkPath_kCW_Direction'>kCW Direction</a>)
</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
+Append <a href='SkRRect_Reference#RRect'>Round Rect</a> to <a href='#Path'>Path</a>, creating a new closed <a href='#Contour'>Contour</a>. <a href='SkRRect_Reference#RRect'>Round Rect</a> has bounds
equal to <a href='#SkPath_addRoundRect_rect'>rect</a>; each corner is 90 degrees of an ellipse with radii (<a href='#SkPath_addRoundRect_rx'>rx</a>, <a href='#SkPath_addRoundRect_ry'>ry</a>). If
-<a href='#SkPath_addRoundRect_dir'>dir</a> is <a href='#SkPath_kCW_Direction'>kCW Direction</a>, <a href='undocumented#Round_Rect'>Round Rect</a> starts at top-left of the lower-left corner and
-winds clockwise. If <a href='#SkPath_addRoundRect_dir'>dir</a> is <a href='#SkPath_kCCW_Direction'>kCCW Direction</a>, <a href='undocumented#Round_Rect'>Round Rect</a> starts at the bottom-left
+<a href='#SkPath_addRoundRect_dir'>dir</a> is <a href='#SkPath_kCW_Direction'>kCW Direction</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a> starts at top-left of the lower-left corner and
+winds clockwise. If <a href='#SkPath_addRoundRect_dir'>dir</a> is <a href='#SkPath_kCCW_Direction'>kCCW Direction</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a> starts at the bottom-left
of the upper-left corner and winds counterclockwise.
If either <a href='#SkPath_addRoundRect_rx'>rx</a> or <a href='#SkPath_addRoundRect_ry'>ry</a> is too large, <a href='#SkPath_addRoundRect_rx'>rx</a> and <a href='#SkPath_addRoundRect_ry'>ry</a> are scaled uniformly until the
@@ -4610,16 +4599,16 @@ After appending, <a href='#Path'>Path</a> may be empty, or may contain: <a href=
### Parameters
<table> <tr> <td><a name='SkPath_addRoundRect_rect'><code><strong>rect</strong></code></a></td>
- <td>bounds of <a href='undocumented#Round_Rect'>Round Rect</a></td>
+ <td>bounds of <a href='SkRRect_Reference#RRect'>Round Rect</a></td>
</tr>
<tr> <td><a name='SkPath_addRoundRect_rx'><code><strong>rx</strong></code></a></td>
- <td>x-axis radius of rounded corners on the <a href='undocumented#Round_Rect'>Round Rect</a></td>
+ <td>x-axis radius of rounded corners on the <a href='SkRRect_Reference#RRect'>Round Rect</a></td>
</tr>
<tr> <td><a name='SkPath_addRoundRect_ry'><code><strong>ry</strong></code></a></td>
- <td>y-axis radius of rounded corners on the <a href='undocumented#Round_Rect'>Round Rect</a></td>
+ <td>y-axis radius of rounded corners on the <a href='SkRRect_Reference#RRect'>Round Rect</a></td>
</tr>
<tr> <td><a name='SkPath_addRoundRect_dir'><code><strong>dir</strong></code></a></td>
- <td><a href='#SkPath_Direction'>Direction</a> to wind <a href='undocumented#Round_Rect'>Round Rect</a></td>
+ <td><a href='#SkPath_Direction'>Direction</a> to wind <a href='SkRRect_Reference#RRect'>Round Rect</a></td>
</tr>
</table>
@@ -4644,7 +4633,7 @@ drawn in green.
void <a href='#SkPath_addRoundRect'>addRoundRect</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& rect, const <a href='undocumented#SkScalar'>SkScalar</a> radii[], <a href='#SkPath_Direction'>Direction</a> dir = <a href='#SkPath_kCW_Direction'>kCW Direction</a>)
</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
+Append <a href='SkRRect_Reference#RRect'>Round Rect</a> to <a href='#Path'>Path</a>, creating a new closed <a href='#Contour'>Contour</a>. <a href='SkRRect_Reference#RRect'>Round Rect</a> has bounds
equal to <a href='#SkPath_addRoundRect_2_rect'>rect</a>; each corner is 90 degrees of an ellipse with <a href='#SkPath_addRoundRect_2_radii'>radii</a> from the
array.
@@ -4659,8 +4648,8 @@ array.
| 6 | x-axis radius of bottom-left corner |
| 7 | y-axis radius of bottom-left corner |
-If <a href='#SkPath_addRoundRect_2_dir'>dir</a> is <a href='#SkPath_kCW_Direction'>kCW Direction</a>, <a href='undocumented#Round_Rect'>Round Rect</a> starts at top-left of the lower-left corner
-and winds clockwise. If <a href='#SkPath_addRoundRect_2_dir'>dir</a> is <a href='#SkPath_kCCW_Direction'>kCCW Direction</a>, <a href='undocumented#Round_Rect'>Round Rect</a> starts at the
+If <a href='#SkPath_addRoundRect_2_dir'>dir</a> is <a href='#SkPath_kCW_Direction'>kCW Direction</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a> starts at top-left of the lower-left corner
+and winds clockwise. If <a href='#SkPath_addRoundRect_2_dir'>dir</a> is <a href='#SkPath_kCCW_Direction'>kCCW Direction</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a> starts at the
bottom-left of the upper-left corner and winds counterclockwise.
If both <a href='#SkPath_addRoundRect_2_radii'>radii</a> on any side of <a href='#SkPath_addRoundRect_2_rect'>rect</a> exceed its length, all <a href='#SkPath_addRoundRect_2_radii'>radii</a> are scaled
@@ -4672,13 +4661,13 @@ After appending, <a href='#Path'>Path</a> may be empty, or may contain: <a href=
### Parameters
<table> <tr> <td><a name='SkPath_addRoundRect_2_rect'><code><strong>rect</strong></code></a></td>
- <td>bounds of <a href='undocumented#Round_Rect'>Round Rect</a></td>
+ <td>bounds of <a href='SkRRect_Reference#RRect'>Round Rect</a></td>
</tr>
<tr> <td><a name='SkPath_addRoundRect_2_radii'><code><strong>radii</strong></code></a></td>
<td>array of 8 <a href='undocumented#SkScalar'>SkScalar</a> values, a radius pair for each corner</td>
</tr>
<tr> <td><a name='SkPath_addRoundRect_2_dir'><code><strong>dir</strong></code></a></td>
- <td><a href='#SkPath_Direction'>Direction</a> to wind <a href='undocumented#Round_Rect'>Round Rect</a></td>
+ <td><a href='#SkPath_Direction'>Direction</a> to wind <a href='SkRRect_Reference#RRect'>Round Rect</a></td>
</tr>
</table>
@@ -4696,7 +4685,7 @@ After appending, <a href='#Path'>Path</a> may be empty, or may contain: <a href=
## addRRect
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-void <a href='#SkPath_addRRect'>addRRect</a>(const <a href='undocumented#SkRRect'>SkRRect</a>& rrect, <a href='#SkPath_Direction'>Direction</a> dir = <a href='#SkPath_kCW_Direction'>kCW Direction</a>)
+void <a href='#SkPath_addRRect'>addRRect</a>(const <a href='SkRRect_Reference#SkRRect'>SkRRect</a>& rrect, <a href='#SkPath_Direction'>Direction</a> dir = <a href='#SkPath_kCW_Direction'>kCW Direction</a>)
</pre>
Add <a href='#SkPath_addRRect_rrect'>rrect</a> to <a href='#Path'>Path</a>, creating a new closed <a href='#Contour'>Contour</a>. If
@@ -4704,7 +4693,7 @@ Add <a href='#SkPath_addRRect_rrect'>rrect</a> to <a href='#Path'>Path</a>, crea
winds clockwise. If <a href='#SkPath_addRRect_dir'>dir</a> is <a href='#SkPath_kCCW_Direction'>kCCW Direction</a>, <a href='#SkPath_addRRect_rrect'>rrect</a> starts at the bottom-left
of the upper-left corner and winds counterclockwise.
-After appending, <a href='#Path'>Path</a> may be empty, or may contain: <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Oval'>Oval</a>, or <a href='undocumented#Round_Rect'>Round Rect</a>.
+After appending, <a href='#Path'>Path</a> may be empty, or may contain: <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Oval'>Oval</a>, or <a href='SkRRect_Reference#RRect'>Round Rect</a>.
### Parameters
@@ -4712,7 +4701,7 @@ After appending, <a href='#Path'>Path</a> may be empty, or may contain: <a href=
<td>bounds and radii of rounded rectangle</td>
</tr>
<tr> <td><a name='SkPath_addRRect_dir'><code><strong>dir</strong></code></a></td>
- <td><a href='#SkPath_Direction'>Direction</a> to wind <a href='undocumented#Round_Rect'>Round Rect</a></td>
+ <td><a href='#SkPath_Direction'>Direction</a> to wind <a href='SkRRect_Reference#RRect'>Round Rect</a></td>
</tr>
</table>
@@ -4729,7 +4718,7 @@ After appending, <a href='#Path'>Path</a> may be empty, or may contain: <a href=
<a name='SkPath_addRRect_2'></a>
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-void <a href='#SkPath_addRRect'>addRRect</a>(const <a href='undocumented#SkRRect'>SkRRect</a>& rrect, <a href='#SkPath_Direction'>Direction</a> dir, unsigned start)
+void <a href='#SkPath_addRRect'>addRRect</a>(const <a href='SkRRect_Reference#SkRRect'>SkRRect</a>& rrect, <a href='#SkPath_Direction'>Direction</a> dir, unsigned start)
</pre>
Add <a href='#SkPath_addRRect_2_rrect'>rrect</a> to <a href='#Path'>Path</a>, creating a new closed <a href='#Contour'>Contour</a>. If <a href='#SkPath_addRRect_2_dir'>dir</a> is <a href='#SkPath_kCW_Direction'>kCW Direction</a>, <a href='#SkPath_addRRect_2_rrect'>rrect</a>
@@ -4747,7 +4736,7 @@ winds clockwise; if <a href='#SkPath_addRRect_2_dir'>dir</a> is <a href='#SkPath
| 6 | top of bottom-left corner |
| 7 | bottom of top-left corner |
-After appending, <a href='#Path'>Path</a> may be empty, or may contain: <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Oval'>Oval</a>, or <a href='undocumented#Round_Rect'>Round Rect</a>.
+After appending, <a href='#Path'>Path</a> may be empty, or may contain: <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Oval'>Oval</a>, or <a href='SkRRect_Reference#RRect'>Round Rect</a>.
### Parameters
@@ -4755,10 +4744,10 @@ After appending, <a href='#Path'>Path</a> may be empty, or may contain: <a href=
<td>bounds and radii of rounded rectangle</td>
</tr>
<tr> <td><a name='SkPath_addRRect_2_dir'><code><strong>dir</strong></code></a></td>
- <td><a href='#SkPath_Direction'>Direction</a> to wind <a href='undocumented#Round_Rect'>Round Rect</a></td>
+ <td><a href='#SkPath_Direction'>Direction</a> to wind <a href='SkRRect_Reference#RRect'>Round Rect</a></td>
</tr>
<tr> <td><a name='SkPath_addRRect_2_start'><code><strong>start</strong></code></a></td>
- <td>index of initial point of <a href='undocumented#Round_Rect'>Round Rect</a></td>
+ <td>index of initial point of <a href='SkRRect_Reference#RRect'>Round Rect</a></td>
</tr>
</table>
@@ -5058,7 +5047,6 @@ If <a href='#SkPath_offset_dst'>dst</a> is nullptr, <a href='#Path'>Path</a> is
</tr>
</table>
-
<a name='SkPath_offset_2'></a>
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
@@ -5406,7 +5394,7 @@ of floating point numbers used in <a href='#Point_Array'>Point Array</a> and <a
### Parameters
<table> <tr> <td><a name='SkPath_dump_stream'><code><strong>stream</strong></code></a></td>
- <td>writable <a href='undocumented#Stream'>Stream</a> receiving <a href='#Path'>Path</a> text representation; may be nullptr</td>
+ <td>writable <a href='undocumented#WStream'>WStream</a> receiving <a href='#Path'>Path</a> text representation; may be nullptr</td>
</tr>
<tr> <td><a name='SkPath_dump_forceClose'><code><strong>forceClose</strong></code></a></td>
<td>true if missing <a href='#SkPath_kClose_Verb'>kClose Verb</a> is output</td>
@@ -5445,7 +5433,7 @@ path.close();
### See Also
-<a href='SkRect_Reference#SkRect_dump'>SkRect::dump()</a><sup><a href='SkRect_Reference#SkRect_dump_2'>[2]</a></sup> <a href='undocumented#SkRRect_dump'>SkRRect::dump()</a> <a href='undocumented#SkPathMeasure_dump'>SkPathMeasure::dump()</a>
+<a href='SkRect_Reference#SkRect_dump'>SkRect::dump()</a><sup><a href='SkRect_Reference#SkRect_dump_2'>[2]</a></sup> <a href='SkRRect_Reference#SkRRect_dump'>SkRRect::dump()</a><sup><a href='SkRRect_Reference#SkRRect_dump_2'>[2]</a></sup> <a href='undocumented#SkPathMeasure_dump'>SkPathMeasure::dump()</a>
---
@@ -5477,7 +5465,7 @@ path is not equal to copy
### See Also
-<a href='#SkPath_dumpHex'>dumpHex</a> <a href='SkRect_Reference#SkRect_dump'>SkRect::dump()</a><sup><a href='SkRect_Reference#SkRect_dump_2'>[2]</a></sup> <a href='undocumented#SkRRect_dump'>SkRRect::dump()</a> <a href='undocumented#SkPathMeasure_dump'>SkPathMeasure::dump()</a> <a href='#SkPath_writeToMemory'>writeToMemory</a>
+<a href='#SkPath_dumpHex'>dumpHex</a> <a href='SkRect_Reference#SkRect_dump'>SkRect::dump()</a><sup><a href='SkRect_Reference#SkRect_dump_2'>[2]</a></sup> <a href='SkRRect_Reference#SkRRect_dump'>SkRRect::dump()</a><sup><a href='SkRRect_Reference#SkRRect_dump_2'>[2]</a></sup> <a href='undocumented#SkPathMeasure_dump'>SkPathMeasure::dump()</a> <a href='#SkPath_writeToMemory'>writeToMemory</a>
---
@@ -5512,7 +5500,7 @@ path is equal to copy
### See Also
-<a href='#SkPath_dump'>dump</a><sup><a href='#SkPath_dump_2'>[2]</a></sup> <a href='SkRect_Reference#SkRect_dumpHex'>SkRect::dumpHex</a> <a href='undocumented#SkRRect_dumpHex'>SkRRect::dumpHex</a> <a href='#SkPath_writeToMemory'>writeToMemory</a>
+<a href='#SkPath_dump'>dump</a><sup><a href='#SkPath_dump_2'>[2]</a></sup> <a href='SkRect_Reference#SkRect_dumpHex'>SkRect::dumpHex</a> <a href='SkRRect_Reference#SkRRect_dumpHex'>SkRRect::dumpHex</a> <a href='#SkPath_writeToMemory'>writeToMemory</a>
---
@@ -5737,7 +5725,6 @@ SkPath can be constructed or initialized by these functions, including C++ class
<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
</table>
-
## <a name='Member_Function'>Member_Function</a>
@@ -5747,12 +5734,11 @@ SkPath member functions read and modify the structure properties.
<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
</table>
-
<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
-class <a href='#SkPath_Iter_Iter'>Iter</a> {
+class <a href='#SkPath_Iter_empty_constructor'>Iter</a> {
public:
- <a href='#SkPath_Iter_Iter'>Iter()</a>;
- <a href='#SkPath_Iter_Iter_2'>Iter(const SkPath& path, bool forceClose)</a>;
+ <a href='#SkPath_Iter_empty_constructor'>Iter()</a>;
+ <a href='#SkPath_const_SkPath'>Iter(const SkPath& path, bool forceClose)</a>;
void <a href='#SkPath_Iter_setPath'>setPath(const SkPath& path, bool forceClose)</a>;
<a href='#SkPath_Verb'>Verb</a> <a href='#SkPath_Iter_next'>next(SkPoint pts[4], bool doConsumeDegenerates = true, bool exact = false)</a>;
<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPath_Iter_conicWeight'>conicWeight</a> const;
@@ -5775,19 +5761,19 @@ path of the glyph.
<a href='#SkPath_RawIter'>RawIter</a>
-<a name='SkPath_Iter_Iter'></a>
+<a name='SkPath_Iter_empty_constructor'></a>
## Iter
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-<a href='#SkPath_Iter_Iter'>Iter</a>()
+<a href='#SkPath_Iter_empty_constructor'>Iter</a>()
</pre>
-Initializes <a href='#SkPath_Iter_Iter'>Iter</a> with an empty <a href='#Path'>Path</a>. <a href='#SkPath_Iter_next'>next</a> on <a href='#SkPath_Iter_Iter'>Iter</a> returns <a href='#SkPath_kDone_Verb'>kDone Verb</a>.
-Call <a href='#SkPath_Iter_setPath'>setPath</a> to initialize <a href='#SkPath_Iter_Iter'>Iter</a> at a later time.
+Initializes <a href='#SkPath_Iter_empty_constructor'>Iter</a> with an empty <a href='#Path'>Path</a>. <a href='#SkPath_Iter_next'>next</a> on <a href='#SkPath_Iter_empty_constructor'>Iter</a> returns <a href='#SkPath_kDone_Verb'>kDone Verb</a>.
+Call <a href='#SkPath_Iter_setPath'>setPath</a> to initialize <a href='#SkPath_Iter_empty_constructor'>Iter</a> at a later time.
### Return Value
-<a href='#SkPath_Iter_Iter'>Iter</a> of empty <a href='#Path'>Path</a>
+<a href='#SkPath_Iter_empty_constructor'>Iter</a> of empty <a href='#Path'>Path</a>
### Example
@@ -5808,29 +5794,30 @@ iter is done
---
-<a name='SkPath_Iter_Iter_2'></a>
+<a name='SkPath_const_SkPath'></a>
+## Iter
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-<a href='#SkPath_Iter_Iter'>Iter</a>(const <a href='#SkPath'>SkPath</a>& path, bool forceClose)
+<a href='#SkPath_Iter_empty_constructor'>Iter</a>(const <a href='#SkPath'>SkPath</a>& path, bool forceClose)
</pre>
-Sets <a href='#SkPath_Iter_Iter'>Iter</a> to return elements of <a href='#Verb_Array'>Verb Array</a>, <a href='#Point_Array'>Point Array</a>, and <a href='#Conic_Weight'>Conic Weight</a> in <a href='#SkPath_Iter_Iter_2_path'>path</a>.
-If <a href='#SkPath_Iter_Iter_2_forceClose'>forceClose</a> is true, <a href='#SkPath_Iter_Iter'>Iter</a> will add <a href='#SkPath_kLine_Verb'>kLine Verb</a> and <a href='#SkPath_kClose_Verb'>kClose Verb</a> after each
-open <a href='#Contour'>Contour</a>. <a href='#SkPath_Iter_Iter_2_path'>path</a> is not altered.
+Sets <a href='#SkPath_Iter_empty_constructor'>Iter</a> to return elements of <a href='#Verb_Array'>Verb Array</a>, <a href='#Point_Array'>Point Array</a>, and <a href='#Conic_Weight'>Conic Weight</a> in <a href='#SkPath_const_SkPath_path'>path</a>.
+If <a href='#SkPath_const_SkPath_forceClose'>forceClose</a> is true, <a href='#SkPath_Iter_empty_constructor'>Iter</a> will add <a href='#SkPath_kLine_Verb'>kLine Verb</a> and <a href='#SkPath_kClose_Verb'>kClose Verb</a> after each
+open <a href='#Contour'>Contour</a>. <a href='#SkPath_const_SkPath_path'>path</a> is not altered.
### Parameters
-<table> <tr> <td><a name='SkPath_Iter_Iter_2_path'><code><strong>path</strong></code></a></td>
+<table> <tr> <td><a name='SkPath_const_SkPath_path'><code><strong>path</strong></code></a></td>
<td><a href='#Path'>Path</a> to iterate</td>
</tr>
- <tr> <td><a name='SkPath_Iter_Iter_2_forceClose'><code><strong>forceClose</strong></code></a></td>
+ <tr> <td><a name='SkPath_const_SkPath_forceClose'><code><strong>forceClose</strong></code></a></td>
<td>true if open <a href='#Contour'>Contours</a> generate <a href='#SkPath_kClose_Verb'>kClose Verb</a></td>
</tr>
</table>
### Return Value
-<a href='#SkPath_Iter_Iter'>Iter</a> of <a href='#SkPath_Iter_Iter_2_path'>path</a>
+<a href='#SkPath_Iter_empty_constructor'>Iter</a> of <a href='#SkPath_const_SkPath_path'>path</a>
### Example
@@ -5866,8 +5853,8 @@ kDone_Verb
void <a href='#SkPath_Iter_setPath'>setPath</a>(const <a href='#SkPath'>SkPath</a>& path, bool forceClose)
</pre>
-Sets <a href='#SkPath_Iter_Iter'>Iter</a> to return elements of <a href='#Verb_Array'>Verb Array</a>, <a href='#Point_Array'>Point Array</a>, and <a href='#Conic_Weight'>Conic Weight</a> in <a href='#SkPath_Iter_setPath_path'>path</a>.
-If <a href='#SkPath_Iter_setPath_forceClose'>forceClose</a> is true, <a href='#SkPath_Iter_Iter'>Iter</a> will add <a href='#SkPath_kLine_Verb'>kLine Verb</a> and <a href='#SkPath_kClose_Verb'>kClose Verb</a> after each
+Sets <a href='#SkPath_Iter_empty_constructor'>Iter</a> to return elements of <a href='#Verb_Array'>Verb Array</a>, <a href='#Point_Array'>Point Array</a>, and <a href='#Conic_Weight'>Conic Weight</a> in <a href='#SkPath_Iter_setPath_path'>path</a>.
+If <a href='#SkPath_Iter_setPath_forceClose'>forceClose</a> is true, <a href='#SkPath_Iter_empty_constructor'>Iter</a> will add <a href='#SkPath_kLine_Verb'>kLine Verb</a> and <a href='#SkPath_kClose_Verb'>kClose Verb</a> after each
open <a href='#Contour'>Contour</a>. <a href='#SkPath_Iter_setPath_path'>path</a> is not altered.
### Parameters
@@ -5903,7 +5890,7 @@ kDone_Verb
### See Also
-<a href='#SkPath_Iter_Iter_2'>Iter(const SkPath& path, bool forceClose)</a>
+<a href='#SkPath_const_SkPath'>Iter(const SkPath& path, bool forceClose)</a>
---
@@ -5914,7 +5901,7 @@ kDone_Verb
<a href='#SkPath_Verb'>Verb</a> <a href='#SkPath_Iter_next'>next</a>(<a href='SkPoint_Reference#SkPoint'>SkPoint</a> pts[4], bool doConsumeDegenerates = true, bool exact = false)
</pre>
-Returns next <a href='#SkPath_Verb'>Verb</a> in <a href='#Verb_Array'>Verb Array</a>, and advances <a href='#SkPath_Iter_Iter'>Iter</a>.
+Returns next <a href='#SkPath_Verb'>Verb</a> in <a href='#Verb_Array'>Verb Array</a>, and advances <a href='#SkPath_Iter_empty_constructor'>Iter</a>.
When <a href='#Verb_Array'>Verb Array</a> is exhausted, returns <a href='#SkPath_kDone_Verb'>kDone Verb</a>.
Zero to four <a href='SkPoint_Reference#Point'>Points</a> are stored in <a href='#SkPath_Iter_next_pts'>pts</a>, depending on the returned <a href='#SkPath_Verb'>Verb</a>.
@@ -6074,8 +6061,8 @@ bool <a href='#SkPath_Iter_isClosedContour'>isClosedContour</a>() const
</pre>
Returns true if subsequent calls to <a href='#SkPath_Iter_next'>next</a> return <a href='#SkPath_kClose_Verb'>kClose Verb</a> before returning
-<a href='#SkPath_kMove_Verb'>kMove Verb</a>. if true, <a href='#Contour'>Contour</a> <a href='#SkPath_Iter_Iter'>Iter</a> is processing may end with <a href='#SkPath_kClose_Verb'>kClose Verb</a>, or
-<a href='#SkPath_Iter_Iter'>Iter</a> may have been initialized with force close set to true.
+<a href='#SkPath_kMove_Verb'>kMove Verb</a>. if true, <a href='#Contour'>Contour</a> <a href='#SkPath_Iter_empty_constructor'>Iter</a> is processing may end with <a href='#SkPath_kClose_Verb'>kClose Verb</a>, or
+<a href='#SkPath_Iter_empty_constructor'>Iter</a> may have been initialized with force close set to true.
### Return Value
@@ -6098,7 +6085,7 @@ with close(), forceClose is true : isClosedContour returns true
### See Also
-<a href='#SkPath_Iter_Iter_2'>Iter(const SkPath& path, bool forceClose)</a>
+<a href='#SkPath_const_SkPath'>Iter(const SkPath& path, bool forceClose)</a>
---
@@ -6113,7 +6100,6 @@ SkPath can be constructed or initialized by these functions, including C++ class
<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
</table>
-
## <a name='Member_Function'>Member_Function</a>
@@ -6123,12 +6109,11 @@ SkPath member functions read and modify the structure properties.
<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
</table>
-
<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
- class <a href='#SkPath_RawIter_RawIter'>RawIter</a> {
+ class <a href='#SkPath_RawIter_empty_constructor'>RawIter</a> {
public:
- <a href='#SkPath_RawIter_RawIter'>RawIter()</a>;
- <a href='#SkPath_RawIter_RawIter_2'>RawIter(const SkPath& path)</a>;
+ <a href='#SkPath_RawIter_empty_constructor'>RawIter()</a>;
+ <a href='#SkPath_copy_const_SkPath'>RawIter(const SkPath& path)</a>;
void <a href='#SkPath_RawIter_setPath'>setPath(const SkPath& path)</a>;
<a href='#SkPath_Verb'>Verb</a> <a href='#SkPath_RawIter_next'>next(SkPoint pts[4])</a>;
<a href='#SkPath_Verb'>Verb</a> <a href='#SkPath_RawIter_peek'>peek</a> const;
@@ -6139,40 +6124,41 @@ SkPath member functions read and modify the structure properties.
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.
-<a name='SkPath_RawIter_RawIter'></a>
+<a name='SkPath_RawIter_empty_constructor'></a>
## RawIter
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-<a href='#SkPath_RawIter_RawIter'>RawIter</a>()
+<a href='#SkPath_RawIter_empty_constructor'>RawIter</a>()
</pre>
-Initializes <a href='#SkPath_RawIter_RawIter'>RawIter</a> with an empty <a href='#Path'>Path</a>. <a href='#SkPath_RawIter_next'>next</a> on <a href='#SkPath_RawIter_RawIter'>RawIter</a> returns <a href='#SkPath_kDone_Verb'>kDone Verb</a>.
+Initializes <a href='#SkPath_RawIter_empty_constructor'>RawIter</a> with an empty <a href='#Path'>Path</a>. <a href='#SkPath_RawIter_next'>next</a> on <a href='#SkPath_RawIter_empty_constructor'>RawIter</a> returns <a href='#SkPath_kDone_Verb'>kDone Verb</a>.
Call <a href='#SkPath_RawIter_setPath'>setPath</a> to initialize <a href='#SkPath_Iter'>SkPath::Iter</a> at a later time.
### Return Value
-<a href='#SkPath_RawIter_RawIter'>RawIter</a> of empty <a href='#Path'>Path</a>
+<a href='#SkPath_RawIter_empty_constructor'>RawIter</a> of empty <a href='#Path'>Path</a>
---
-<a name='SkPath_RawIter_RawIter_2'></a>
+<a name='SkPath_copy_const_SkPath'></a>
+## RawIter
<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-<a href='#SkPath_RawIter_RawIter'>RawIter</a>(const <a href='#SkPath'>SkPath</a>& path)
+<a href='#SkPath_RawIter_empty_constructor'>RawIter</a>(const <a href='#SkPath'>SkPath</a>& path)
</pre>
-Sets <a href='#SkPath_RawIter_RawIter'>RawIter</a> to return elements of <a href='#Verb_Array'>Verb Array</a>, <a href='#Point_Array'>Point Array</a>, and <a href='#Conic_Weight'>Conic Weight</a> in <a href='#SkPath_RawIter_RawIter_2_path'>path</a>.
+Sets <a href='#SkPath_RawIter_empty_constructor'>RawIter</a> to return elements of <a href='#Verb_Array'>Verb Array</a>, <a href='#Point_Array'>Point Array</a>, and <a href='#Conic_Weight'>Conic Weight</a> in <a href='#SkPath_copy_const_SkPath_path'>path</a>.
### Parameters
-<table> <tr> <td><a name='SkPath_RawIter_RawIter_2_path'><code><strong>path</strong></code></a></td>
+<table> <tr> <td><a name='SkPath_copy_const_SkPath_path'><code><strong>path</strong></code></a></td>
<td><a href='#Path'>Path</a> to iterate</td>
</tr>
</table>
### Return Value
-<a href='#SkPath_RawIter_RawIter'>RawIter</a> of <a href='#SkPath_RawIter_RawIter_2_path'>path</a>
+<a href='#SkPath_RawIter_empty_constructor'>RawIter</a> of <a href='#SkPath_copy_const_SkPath_path'>path</a>
---
@@ -6201,7 +6187,7 @@ Sets <a href='#SkPath_Iter'>SkPath::Iter</a> to return elements of <a href='#Ver
<a href='#SkPath_Verb'>Verb</a> <a href='#SkPath_RawIter_next'>next</a>(<a href='SkPoint_Reference#SkPoint'>SkPoint</a> pts[4])
</pre>
-Returns next <a href='#SkPath_Verb'>Verb</a> in <a href='#Verb_Array'>Verb Array</a>, and advances <a href='#SkPath_RawIter_RawIter'>RawIter</a>.
+Returns next <a href='#SkPath_Verb'>Verb</a> in <a href='#Verb_Array'>Verb Array</a>, and advances <a href='#SkPath_RawIter_empty_constructor'>RawIter</a>.
When <a href='#Verb_Array'>Verb Array</a> is exhausted, returns <a href='#SkPath_kDone_Verb'>kDone Verb</a>.
Zero to four <a href='SkPoint_Reference#Point'>Points</a> are stored in <a href='#SkPath_RawIter_next_pts'>pts</a>, depending on the returned <a href='#SkPath_Verb'>Verb</a>.
@@ -6248,7 +6234,7 @@ kDone_Verb
<a href='#SkPath_Verb'>Verb</a> <a href='#SkPath_RawIter_peek'>peek</a>() const
</pre>
-Returns next <a href='#SkPath_Verb'>Verb</a>, but does not advance <a href='#SkPath_RawIter_RawIter'>RawIter</a>.
+Returns next <a href='#SkPath_Verb'>Verb</a>, but does not advance <a href='#SkPath_RawIter_empty_constructor'>RawIter</a>.
### Return Value
diff --git a/site/user/api/SkPicture_Reference.md b/site/user/api/SkPicture_Reference.md
new file mode 100644
index 0000000000..c904aedb18
--- /dev/null
+++ b/site/user/api/SkPicture_Reference.md
@@ -0,0 +1,516 @@
+SkPicture Reference
+===
+
+# <a name='Picture'>Picture</a>
+
+# <a name='SkPicture'>Class SkPicture</a>
+
+## <a name='Constructor'>Constructor</a>
+
+
+SkPicture can be constructed or initialized by these functions, including C++ class constructors.
+<table style='border-collapse: collapse; width: 62.5em'>
+ <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
+<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPicture_MakeFromData'>MakeFromData</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPicture_MakeFromStream'>MakeFromStream</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPicture_MakePlaceholder'>MakePlaceholder</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+</table>
+
+An <a href='#SkPicture'>SkPicture</a> records drawing commands made to a canvas to be played back at a later time.
+This base class handles serialization and a few other miscellany.
+
+## Overview
+
+<table style='border-collapse: collapse; width: 62.5em'>
+ <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
+<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Class'>Class Declarations</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>embedded class members</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Constructor'>Constructors</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>functions that construct <a href='#SkPicture'>SkPicture</a></td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Member_Function'>Functions</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>global and class member functions</td>
+ </tr>
+</table>
+
+
+## <a name='Class'>Class</a>
+
+
+SkPicture uses C++ classes to declare the public data structures and interfaces.
+<table style='border-collapse: collapse; width: 62.5em'>
+ <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
+<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPicture_AbortCallback'>AbortCallback</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+</table>
+
+## <a name='Member_Function'>Member Function</a>
+
+
+SkPicture member functions read and modify the structure properties.
+<table style='border-collapse: collapse; width: 62.5em'>
+ <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
+<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPicture_MakeFromData'>MakeFromData</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPicture_MakeFromStream'>MakeFromStream</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPicture_MakePlaceholder'>MakePlaceholder</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPicture_approximateBytesUsed'>approximateBytesUsed</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPicture_approximateOpCount'>approximateOpCount</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPicture_cullRect'>cullRect</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPicture_playback'>playback</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPicture_serialize'>serialize</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPicture_uniqueID'>uniqueID</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+</table>
+
+# <a name='SkPicture_AbortCallback'>Class SkPicture::AbortCallback</a>
+
+## <a name='Constructor'>Constructor</a>
+
+
+SkPicture can be constructed or initialized by these functions, including C++ class constructors.
+<table style='border-collapse: collapse; width: 62.5em'>
+ <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
+<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
+</table>
+
+## <a name='Member_Function'>Member_Function</a>
+
+
+SkPicture member functions read and modify the structure properties.
+<table style='border-collapse: collapse; width: 62.5em'>
+ <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
+<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
+</table>
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+</pre>
+
+<a href='undocumented#Subclasses'>Subclasses</a> of this can be passed to <a href='#SkPicture_playback'>playback</a>. During the playback
+of the picture, this callback will periodically be invoked. If its
+<a href='#SkPicture_AbortCallback_abort'>abort</a> returns true, then picture playback will be interrupted.
+The resulting drawing is undefined, as there is no guarantee how often the
+callback will be invoked. If the abort happens inside some level of nested
+calls to save(), restore will automatically be called to return the state
+to the same level it was before the playback call was made.
+
+<a name='SkPicture_AbortCallback_empty_constructor'></a>
+## AbortCallback
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+<a href='#SkPicture_AbortCallback_empty_constructor'>AbortCallback</a>()
+</pre>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkPicture_destructor'></a>
+## ~AbortCallback
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+virtual
+</pre>
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkPicture_AbortCallback_abort'></a>
+## abort
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+virtual bool <a href='#SkPicture_AbortCallback_abort'>abort</a>() = 0
+</pre>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkPicture_MakeFromStream'></a>
+## MakeFromStream
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+static <a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='#SkPicture'>SkPicture</a>&gt; <a href='#SkPicture_MakeFromStream'>MakeFromStream</a>(<a href='undocumented#SkStream'>SkStream</a>* stream, const <a href='undocumented#SkDeserialProcs'>SkDeserialProcs</a>* procs = nullptr)
+</pre>
+
+Recreate a picture that was serialized into a <a href='#SkPicture_MakeFromStream_stream'>stream</a> or data.
+
+### Parameters
+
+<table> <tr> <td><a name='SkPicture_MakeFromStream_stream'><code><strong>stream</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkPicture_MakeFromStream_procs'><code><strong>procs</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='SkPicture_MakeFromData'></a>
+## MakeFromData
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+static <a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='#SkPicture'>SkPicture</a>&gt; <a href='#SkPicture_MakeFromData'>MakeFromData</a>(const <a href='undocumented#SkData'>SkData</a>* data, const <a href='undocumented#SkDeserialProcs'>SkDeserialProcs</a>* procs = nullptr)
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name='SkPicture_MakeFromData_data'><code><strong>data</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkPicture_MakeFromData_procs'><code><strong>procs</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='SkPicture_MakeFromData_2'></a>
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+static <a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='#SkPicture'>SkPicture</a>&gt; <a href='#SkPicture_MakeFromData'>MakeFromData</a>(const void* data, size_t size,
+ const <a href='undocumented#SkDeserialProcs'>SkDeserialProcs</a>* procs = nullptr)
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name='SkPicture_MakeFromData_2_data'><code><strong>data</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkPicture_MakeFromData_2_size'><code><strong>size</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkPicture_MakeFromData_2_procs'><code><strong>procs</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='SkPicture_playback'></a>
+## playback
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+virtual void <a href='#SkPicture_playback'>playback</a>(<a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>* canvas, <a href='#SkPicture_AbortCallback'>AbortCallback</a>* callback = nullptr) const = 0
+</pre>
+
+Replays the drawing commands on the specified <a href='#SkPicture_playback_canvas'>canvas</a>. Note that
+this has the effect of unfurling this picture into the destination
+<a href='#SkPicture_playback_canvas'>canvas</a>. Using the <a href='SkCanvas_Reference#SkCanvas_drawPicture'>SkCanvas::drawPicture</a> entry point gives the destination
+<a href='#SkPicture_playback_canvas'>canvas</a> the option of just taking a ref.
+
+### Parameters
+
+<table> <tr> <td><a name='SkPicture_playback_canvas'><code><strong>canvas</strong></code></a></td>
+ <td>the <a href='#SkPicture_playback_canvas'>canvas</a> receiving the drawing commands.
+</td>
+ </tr>
+ <tr> <td><a name='SkPicture_playback_callback'><code><strong>callback</strong></code></a></td>
+ <td>a <a href='#SkPicture_playback_callback'>callback</a> that allows interruption of playback</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkPicture_cullRect'></a>
+## cullRect
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+virtual <a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPicture_cullRect'>cullRect</a>() const = 0
+</pre>
+
+Return a cull rect for this picture.
+Ops recorded into this picture that attempt to draw outside the cull might not be drawn.
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkPicture_uniqueID'></a>
+## uniqueID
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+uint32_t <a href='#SkPicture_uniqueID'>uniqueID</a>() const
+</pre>
+
+Returns a non-zero value unique among all pictures.
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkPicture_serialize'></a>
+## serialize
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+<a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='undocumented#SkData'>SkData</a>&gt; <a href='#SkPicture_serialize'>serialize</a>(const <a href='undocumented#SkSerialProcs'>SkSerialProcs</a>* procs = nullptr) const
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name='SkPicture_serialize_procs'><code><strong>procs</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='SkPicture_serialize_2'></a>
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+void <a href='#SkPicture_serialize'>serialize</a>(<a href='undocumented#SkWStream'>SkWStream</a>* stream, const <a href='undocumented#SkSerialProcs'>SkSerialProcs</a>* procs = nullptr) const
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name='SkPicture_serialize_2_stream'><code><strong>stream</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkPicture_serialize_2_procs'><code><strong>procs</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkPicture_MakePlaceholder'></a>
+## MakePlaceholder
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+static <a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='#SkPicture'>SkPicture</a>&gt; <a href='#SkPicture_MakePlaceholder'>MakePlaceholder</a>(<a href='SkRect_Reference#SkRect'>SkRect</a> cull)
+</pre>
+
+Return a placeholder <a href='#SkPicture'>SkPicture</a>.
+This placeholder does not draw anything itself. It has a distinct <a href='#SkPicture_uniqueID'>uniqueID</a>
+(just like all <a href='#Picture'>Pictures</a>) and will always be visible to <a href='undocumented#SkSerialProcs'>SkSerialProcs</a>.
+
+### Parameters
+
+<table> <tr> <td><a name='SkPicture_MakePlaceholder_cull'><code><strong>cull</strong></code></a></td>
+ <td>the placeholder's dimensions</td>
+ </tr>
+</table>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkPicture_approximateOpCount'></a>
+## approximateOpCount
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+virtual int <a href='#SkPicture_approximateOpCount'>approximateOpCount</a>() const = 0
+</pre>
+
+Return the approximate number of operations in this picture. This
+number may be greater or less than the number of <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a> calls
+recorded: some calls may be recorded as more than one operation, or some
+calls may be optimized away.
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkPicture_approximateBytesUsed'></a>
+## approximateBytesUsed
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+virtual size_t <a href='#SkPicture_approximateBytesUsed'>approximateBytesUsed</a>() const = 0
+</pre>
+
+Returns the approximate byte size of this picture, not including large ref'd objects.
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
diff --git a/site/user/api/SkPixmap_Reference.md b/site/user/api/SkPixmap_Reference.md
index 9fb64e9e0a..4a5ba1f941 100644
--- a/site/user/api/SkPixmap_Reference.md
+++ b/site/user/api/SkPixmap_Reference.md
@@ -68,7 +68,6 @@ SkPixmap global, <code>struct</code>, and <code>class</code> related member func
</tr>
</table>
-
## <a name='Constructor'>Constructor</a>
@@ -86,7 +85,6 @@ SkPixmap can be constructed or initialized by these functions, including C++ cla
</tr>
</table>
-
## <a name='Member_Function'>Member Function</a>
@@ -224,7 +222,6 @@ SkPixmap member functions read and modify the structure properties.
</tr>
</table>
-
## <a name='Initialization'>Initialization</a>
<a name='SkPixmap_empty_constructor'></a>
@@ -1828,7 +1825,6 @@ is drawn after overwriting bottom half float color with top half float color.
</tr>
</table>
-
<a name='SkPixmap_readPixels'></a>
## readPixels
diff --git a/site/user/api/SkPoint_Reference.md b/site/user/api/SkPoint_Reference.md
index 9e701b8a5f..e35801822d 100644
--- a/site/user/api/SkPoint_Reference.md
+++ b/site/user/api/SkPoint_Reference.md
@@ -13,6 +13,7 @@ SkPoint <code>typedef</code> define a data type.
<tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
</table>
+
<a href='#SkPoint'>SkPoint</a> holds two 32-bit floating point coordinates.
## Overview
@@ -68,7 +69,6 @@ SkPoint global, <code>struct</code>, and <code>class</code> related member funct
</tr>
</table>
-
## <a name='Member_Function'>Member Function</a>
@@ -178,7 +178,6 @@ SkPoint member functions read and modify the structure properties.
</tr>
</table>
-
## <a name='Member'>Member</a>
@@ -216,7 +215,6 @@ SkPoint members may be read and written directly without using a member function
</tr>
</table>
-
### Members
<table style='border-collapse: collapse; width: 62.5em'>
@@ -254,7 +252,6 @@ SkPoint can be constructed or initialized by these functions, including C++ clas
</tr>
</table>
-
<a name='SkPoint_Make'></a>
## Make
@@ -336,7 +333,6 @@ all equal
</tr>
</table>
-
<a name='SkPoint_x'></a>
## x
@@ -479,7 +475,6 @@ pt.isZero() == true
</tr>
</table>
-
<a name='SkPoint_set'></a>
## set
@@ -665,7 +660,6 @@ pt: nan, -nan abs: nan, nan
</tr>
</table>
-
<a name='SkPoint_Offset'></a>
## Offset
@@ -1017,7 +1011,6 @@ SkPoint operators inline class member functions with arithmetic equivalents.
</tr>
</table>
-
<a name='SkPoint_scale'></a>
## scale
diff --git a/site/user/api/SkRRect_Reference.md b/site/user/api/SkRRect_Reference.md
new file mode 100644
index 0000000000..077838975e
--- /dev/null
+++ b/site/user/api/SkRRect_Reference.md
@@ -0,0 +1,1674 @@
+SkRRect Reference
+===
+
+# <a name='RRect'>RRect</a>
+
+# <a name='SkRRect'>Class SkRRect</a>
+
+## <a name='Constant'>Constant</a>
+
+
+SkRRect related constants are defined by <code>enum</code>, <code>enum class</code>, <code>#define</code>, <code>const</code>, and <code>constexpr</code>.
+<table style='border-collapse: collapse; width: 62.5em'>
+ <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
+<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_Corner'>Corner</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_Type'>Type</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_kComplex_Type'>kComplex Type</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_kEmpty_Type'>kEmpty Type</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_kLastType'>kLastType</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_kLowerLeft_Corner'>kLowerLeft Corner</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_kLowerRight_Corner'>kLowerRight Corner</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_kNinePatch_Type'>kNinePatch Type</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_kOval_Type'>kOval Type</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_kRect_Type'>kRect Type</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_kSimple_Type'>kSimple Type</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_kSizeInMemory'>kSizeInMemory</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_kUpperLeft_Corner'>kUpperLeft Corner</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_kUpperRight_Corner'>kUpperRight Corner</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+</table>
+
+The <a href='#SkRRect'>SkRRect</a> class represents a rounded rect with a potentially different
+radii for each corner. It does not have a constructor so must be
+initialized with one of the initialization functions (e.g., <a href='#SkRRect_setEmpty'>setEmpty</a>,
+<a href='#SkRRect_setRectRadii'>setRectRadii</a>, etc.)
+
+This class allows implementing CSS properties that describe rounded corners.
+A rectangle may have up to eight radii, one for each axis on each of its four
+corners.
+
+If either corner's radii are zero, the corner is square.
+Negative radii are treated as zero.
+If corner curves overlap, they are proportionally reduced to fit.
+
+## Overview
+
+<table style='border-collapse: collapse; width: 62.5em'>
+ <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
+<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Constant'>Constants</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>enum and enum class, and their const values</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Constructor'>Constructors</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>functions that construct <a href='#SkRRect'>SkRRect</a></td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Member_Function'>Functions</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>global and class member functions</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Operator'>Operators</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>operator overloading methods</td>
+ </tr>
+</table>
+
+
+## <a name='Constructor'>Constructor</a>
+
+
+SkRRect can be constructed or initialized by these functions, including C++ class constructors.
+<table style='border-collapse: collapse; width: 62.5em'>
+ <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
+<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_MakeEmpty'>MakeEmpty</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_MakeOval'>MakeOval</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_MakeRect'>MakeRect</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_MakeRectXY'>MakeRectXY</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_empty_constructor'>SkRRect()</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_copy_const_SkRRect'>SkRRect(const SkRRect& rrect)</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_makeOffset'>makeOffset</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+</table>
+
+## <a name='Operator'>Operator</a>
+
+
+SkRRect operators inline class member functions with arithmetic equivalents.
+<table style='border-collapse: collapse; width: 62.5em'>
+ <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
+<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_notequal_operator'>operator!=(const SkRRect& a, const SkRRect& b)</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_copy_operator'>operator=(const SkRRect& rrect)</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_equal_operator'>operator==(const SkRRect& a, const SkRRect& b)</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+</table>
+
+## <a name='Member_Function'>Member Function</a>
+
+
+SkRRect member functions read and modify the structure properties.
+<table style='border-collapse: collapse; width: 62.5em'>
+ <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
+<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_MakeEmpty'>MakeEmpty</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_MakeOval'>MakeOval</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_MakeRect'>MakeRect</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_MakeRectXY'>MakeRectXY</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_contains'>contains</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_dump_2'>dump</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_dumpHex'>dumpHex</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_getBounds'>getBounds</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_getSimpleRadii'>getSimpleRadii</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns corner radii for simple types</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_getType'>getType</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_height'>height</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns span in y</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_inset'>inset</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_isComplex'>isComplex</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if not empty, rect, oval, simple, or nine-patch</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_isEmpty'>isEmpty</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if width or height are zero</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_isNinePatch'>isNinePatch</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if not empty, rect, oval or simple; and radii are axis-aligned</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_isOval'>isOval</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if not empty, axes radii are equal, radii fill bounds</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_isRect'>isRect</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if not empty, and one radius at each corner is zero</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_isSimple'>isSimple</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if not empty, rect or oval; and axes radii are equal</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_isValid'>isValid</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_makeOffset'>makeOffset</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_offset'>offset</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_outset'>outset</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_radii'>radii</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_readFromMemory'>readFromMemory</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_rect'>rect</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_setEmpty'>setEmpty</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>zeroes width, height, and corner radii</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_setNinePatch'>setNinePatch</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_setOval'>setOval</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_setRect'>setRect</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets rect bounds with zeroed corners</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_setRectRadii'>setRectRadii</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_setRectXY'>setRectXY</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_transform'>transform</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_type'>type</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_width'>width</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns span in x</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkRRect_writeToMemory'>writeToMemory</a></td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>incomplete</td>
+ </tr>
+</table>
+
+<a name='SkRRect_empty_constructor'></a>
+## SkRRect
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+<a href='#SkRRect'>SkRRect</a>() = default
+</pre>
+
+Default initialized to a rrect at the origin with zero width and height.
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkRRect_copy_const_SkRRect'></a>
+## SkRRect
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+<a href='#SkRRect'>SkRRect</a>(const <a href='#SkRRect'>SkRRect</a>& rrect) = default
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_copy_const_SkRRect_rrect'><code><strong>rrect</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='SkRRect_copy_operator'></a>
+## operator=
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+<a href='#SkRRect'>SkRRect</a>& <a href='#SkRRect_copy_operator'>operator=(const SkRRect& rrect)</a> = default
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_copy_operator_rrect'><code><strong>rrect</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='SkRRect_Type'>Enum SkRRect::Type</a>
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+ enum <a href='#SkRRect_Type'>Type</a> {
+ <a href='#SkRRect_kEmpty_Type'>kEmpty Type</a>,
+ <a href='#SkRRect_kRect_Type'>kRect Type</a>,
+ <a href='#SkRRect_kOval_Type'>kOval Type</a>,
+ <a href='#SkRRect_kSimple_Type'>kSimple Type</a>,
+ <a href='#SkRRect_kNinePatch_Type'>kNinePatch Type</a>,
+ <a href='#SkRRect_kComplex_Type'>kComplex Type</a>,
+ <a href='#SkRRect_kLastType'>kLastType</a> = <a href='#SkRRect_kComplex_Type'>kComplex Type</a>,
+ };
+</pre>
+
+Enum to capture the various possible subtypes of <a href='#RRect'>Round Rect</a>. Accessed
+by <a href='#SkRRect_type'>type</a>. The subtypes become progressively less restrictive.
+
+### Constants
+
+<table style='border-collapse: collapse; width: 62.5em'>
+ <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
+<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
+<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkRRect_kEmpty_Type'><code>SkRRect::kEmpty_Type</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>#Line # incomplete ##</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+<a href='#RRect'>Round Rect</a> has zero width or height. All radii are zero.
+</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkRRect_kRect_Type'><code>SkRRect::kRect_Type</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>#Line # incomplete ##</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+<a href='#RRect'>Round Rect</a> has width and height. All radii are zero.
+</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkRRect_kOval_Type'><code>SkRRect::kOval_Type</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>#Line # incomplete ##</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+<a href='#RRect'>Round Rect</a> has width and height. All four x-radii are equal,
+and at least half the width. All four y-radii are equal,
+and at least half the height.
+</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkRRect_kSimple_Type'><code>SkRRect::kSimple_Type</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>#Line # incomplete ##</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+<a href='#RRect'>Round Rect</a> has width and height. All four x-radii are equal and
+greater than zero, and all four y-radii are equal and greater than
+zero. Either x-radii are less than half the width, or y-radii is
+less than half the height, or both.
+</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkRRect_kNinePatch_Type'><code>SkRRect::kNinePatch_Type</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>#Line # incomplete ##</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+<a href='#RRect'>Round Rect</a> has width and height. Left x-radii are equal, top
+y-radii are equal, right x-radii are equal, and bottom y-radii
+are equal. The radii do not descript a rect, oval, or simple type.
+
+The centers of the corner ellipses form an axis-aligned rectangle
+that divides the <a href='#RRect'>Round Rect</a> into nine rectangular patches; an
+interior rectangle, four edges, and four corners.
+</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkRRect_kComplex_Type'><code>SkRRect::kComplex_Type</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>#Line # incomplete ##</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+both radii are non-zero.
+</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkRRect_kLastType'><code>SkRRect::kLastType</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>= kComplex_Type</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+incomplete</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+<a name='SkRRect_getType'></a>
+## getType
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+<a href='#SkRRect_Type'>Type</a> <a href='#SkRRect_getType'>getType</a>() const
+</pre>
+
+Returns the RR's sub type.
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkRRect_type'></a>
+## type
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+<a href='#SkRRect_Type'>Type</a> <a href='#SkRRect_type'>type</a>() const
+</pre>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkRRect_isEmpty'></a>
+## isEmpty
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+inline bool <a href='#SkRRect_isEmpty'>isEmpty</a>() const
+</pre>
+
+Returns true if <a href='#SkRRect_rect'>rect</a>.fLeft is equal to <a href='#SkRRect_rect'>rect</a>.fRight, or if <a href='#SkRRect_rect'>rect</a>.fTop is equal
+to <a href='#SkRRect_rect'>rect</a>.fBottom.
+
+### Return Value
+
+true if <a href='#SkRRect_width'>width</a> or <a href='#SkRRect_height'>height</a> are zero
+
+### Example
+
+<div><fiddle-embed name="3afe4ea247923e06326aeb2b165c7485"></fiddle-embed></div>
+
+### See Also
+
+<a href='SkRect_Reference#SkRect_isEmpty'>SkRect::isEmpty</a> <a href='#SkRRect_height'>height</a> <a href='#SkRRect_width'>width</a>
+
+---
+
+<a name='SkRRect_isRect'></a>
+## isRect
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+inline bool <a href='#SkRRect_isRect'>isRect</a>() const
+</pre>
+
+Returns true if not empty, and if either x or y radius at each corner is zero.
+
+### Return Value
+
+true if not empty, and one radius at each corner is zero
+
+### Example
+
+<div><fiddle-embed name="e2dcdad0e9cb7ba3e78a9871e9229753"></fiddle-embed></div>
+
+### See Also
+
+<a href='#SkRRect_isEmpty'>isEmpty</a> <a href='#SkRRect_radii'>radii</a>
+
+---
+
+<a name='SkRRect_isOval'></a>
+## isOval
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+inline bool <a href='#SkRRect_isOval'>isOval</a>() const
+</pre>
+
+Returns true if not empty, if all x-axis radii are equal, if all y-axis radii
+are equal, x-axis radii are at least half the width, and y-axis radii are at
+least half the height.
+
+### Return Value
+
+true if has identical geometry to <a href='undocumented#Oval'>Oval</a>
+
+### Example
+
+<div><fiddle-embed name="ab9b3aef7896aee80b780789848fbba4"><div>The first radii are scaled down proportionately until both x-axis and y-axis fit
+within the bounds. After scaling, x-axis radius is smaller than half the width;
+left round rect is not an oval. The second radii are equal to half the
+dimensions; right round rect is an oval.
+</div></fiddle-embed></div>
+
+### See Also
+
+<a href='#SkRRect_isEmpty'>isEmpty</a> <a href='#SkRRect_isSimple'>isSimple</a> <a href='SkCanvas_Reference#SkCanvas_drawOval'>SkCanvas::drawOval</a>
+
+---
+
+<a name='SkRRect_isSimple'></a>
+## isSimple
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+inline bool <a href='#SkRRect_isSimple'>isSimple</a>() const
+</pre>
+
+Returns true if not empty, if all x-axis radii are equal but not zero,
+if all y-axis radii are equal but not zero; and x-axis radius is less than half
+<a href='#SkRRect_width'>width</a>, or y-axis radius is less than half <a href='#SkRRect_height'>height</a>.
+
+### Return Value
+
+true if not empty, rect or oval; and axes radii are equal
+
+### Example
+
+<div><fiddle-embed name="65bbb109483ed79edb32027cf71851eb"></fiddle-embed></div>
+
+### See Also
+
+<a href='#SkRRect_isEmpty'>isEmpty</a> <a href='#SkRRect_isRect'>isRect</a> <a href='#SkRRect_isOval'>isOval</a> <a href='#SkRRect_isNinePatch'>isNinePatch</a>
+
+---
+
+<a name='SkRRect_isNinePatch'></a>
+## isNinePatch
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+inline bool <a href='#SkRRect_isNinePatch'>isNinePatch</a>() const
+</pre>
+
+Returns true if <a href='#SkRRect_isEmpty'>isEmpty</a>, <a href='#SkRRect_isRect'>isRect</a>, <a href='#SkRRect_isOval'>isOval</a>, and <a href='#SkRRect_isSimple'>isSimple</a> return false; and if
+left x-axis radii are equal, right x-axis radii are equal, top y-axis radii are
+equal, and bottom y-axis radii are equal.
+
+### Return Value
+
+true if not empty, rect, oval or simple; and radii are axis-aligned
+
+### Example
+
+<div><fiddle-embed name="568cb730e66d0df09a7d9bd9d6142c9e"></fiddle-embed></div>
+
+### See Also
+
+<a href='#SkRRect_isEmpty'>isEmpty</a> <a href='#SkRRect_isRect'>isRect</a> <a href='#SkRRect_isOval'>isOval</a> <a href='#SkRRect_isSimple'>isSimple</a> <a href='#SkRRect_isComplex'>isComplex</a>
+
+---
+
+<a name='SkRRect_isComplex'></a>
+## isComplex
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+inline bool <a href='#SkRRect_isComplex'>isComplex</a>() const
+</pre>
+
+Returns true if <a href='#SkRRect_isEmpty'>isEmpty</a>, <a href='#SkRRect_isRect'>isRect</a>, <a href='#SkRRect_isOval'>isOval</a>, <a href='#SkRRect_isSimple'>isSimple</a>, and <a href='#SkRRect_isNinePatch'>isNinePatch</a> return false.
+If true: width and height are greater than zero, at least one corner radii are
+both greater than zero; left x-axis radii are not equal, or right x-axis radii
+are not equal, or top y-axis radii are not equal, or bottom y-axis radii are not
+equal.
+
+### Return Value
+
+true if not empty, rect, oval, simple, or nine-patch
+
+### Example
+
+<div><fiddle-embed name="75db3f4e4757478bca641bccf89b9398"></fiddle-embed></div>
+
+### See Also
+
+<a href='#SkRRect_isEmpty'>isEmpty</a> <a href='#SkRRect_isRect'>isRect</a> <a href='#SkRRect_isOval'>isOval</a> <a href='#SkRRect_isSimple'>isSimple</a> <a href='#SkRRect_isNinePatch'>isNinePatch</a>
+
+---
+
+<a name='SkRRect_width'></a>
+## width
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkRRect_width'>width</a>() const
+</pre>
+
+Returns span on the x-axis. This does not check if result fits in 32-bit float;
+result may be infinity.
+
+### Return Value
+
+bounds().fRight minus bounds().fLeft
+
+### Example
+
+<div><fiddle-embed name="c675a480b41dee157f84fa2550a2a53c"><div><a href='#SkRRect_MakeRect'>SkRRect::MakeRect</a> sorts its input, so <a href='#SkRRect_width'>width</a> is always zero or larger.
+</div>
+
+#### Example Output
+
+~~~~
+unsorted width: 5
+large width: inf
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href='SkRect_Reference#SkRect_width'>SkRect::width</a> <a href='#SkRRect_height'>height</a> <a href='#SkRRect_getBounds'>getBounds</a>
+
+---
+
+<a name='SkRRect_height'></a>
+## height
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkRRect_height'>height</a>() const
+</pre>
+
+Returns span on the y-axis. This does not check if result fits in 32-bit float;
+result may be infinity.
+
+### Return Value
+
+bounds().fBottom minus bounds().fTop
+
+### Example
+
+<div><fiddle-embed name="5a3eb1755164a7becec33cec6e6eca31"><div><a href='#SkRRect_MakeRect'>SkRRect::MakeRect</a> sorts its input, so <a href='#SkRRect_height'>height</a> is always zero or larger.
+</div>
+
+#### Example Output
+
+~~~~
+unsorted height: 5
+large height: inf
+~~~~
+
+</fiddle-embed></div>
+
+### See Also
+
+<a href='SkRect_Reference#SkRect'>SkRect</a>.<a href='#SkRRect_height'>height</a> <a href='#SkRRect_width'>width</a> <a href='#SkRRect_getBounds'>getBounds</a>
+
+---
+
+<a name='SkRRect_getSimpleRadii'></a>
+## getSimpleRadii
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+<a href='SkPoint_Reference#SkVector'>SkVector</a> <a href='#SkRRect_getSimpleRadii'>getSimpleRadii</a>() const
+</pre>
+
+Returns top-left corner x-radii. If <a href='#SkRRect_type'>type</a> returns <a href='#SkRRect_kEmpty_Type'>kEmpty Type</a>, <a href='#SkRRect_kRect_Type'>kRect Type</a>,
+<a href='#SkRRect_kOval_Type'>kOval Type</a>, or <a href='#SkRRect_kSimple_Type'>kSimple Type</a>, returns a value representative of all corner radii.
+If <a href='#SkRRect_type'>type</a> returns <a href='#SkRRect_kNinePatch_Type'>kNinePatch Type</a> or <a href='#SkRRect_kComplex_Type'>kComplex Type</a>, at least one of the
+remaining three corners has a different value.
+
+### Return Value
+
+corner radii for simple types
+
+### Example
+
+<div><fiddle-embed name="f0e02101ecbdb5a2963ec82e7832afb1"></fiddle-embed></div>
+
+### See Also
+
+<a href='#SkRRect_radii'>radii</a> <a href='#SkRRect_getBounds'>getBounds</a> <a href='#SkRRect_getType'>getType</a> <a href='#SkRRect_isSimple'>isSimple</a>
+
+---
+
+<a name='SkRRect_setEmpty'></a>
+## setEmpty
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+void <a href='#SkRRect_setEmpty'>setEmpty</a>()
+</pre>
+
+Sets bounds to zero width and height at (0, 0), the origin. Sets
+corner radii to zero and sets type to <a href='#SkRRect_kEmpty_Type'>kEmpty Type</a>.
+
+### Example
+
+<div><fiddle-embed name="59c1025b8116ec1d3b55f4f6306d1e37"><div>Nothing blue is drawn because rrect is set to empty.
+</div></fiddle-embed></div>
+
+### See Also
+
+<a href='#SkRRect_MakeEmpty'>MakeEmpty</a> <a href='#SkRRect_setRect'>setRect</a>
+
+---
+
+<a name='SkRRect_setRect'></a>
+## setRect
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+void <a href='#SkRRect_setRect'>setRect</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& rect)
+</pre>
+
+Sets bounds to sorted rect, and sets corner radii to zero.
+If set bounds has width and height, and sets type to <a href='#SkRRect_kRect_Type'>kRect Type</a>;
+otherwise, sets type to <a href='#SkRRect_kEmpty_Type'>kEmpty Type</a>.
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_setRect_rect'><code><strong>rect</strong></code></a></td>
+ <td>bounds to set</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="fc97ef7310473b9ba6dc7202efbebb3b"></fiddle-embed></div>
+
+### See Also
+
+<a href='#SkRRect_MakeRect'>MakeRect</a> <a href='#SkRRect_setRectXY'>setRectXY</a>
+
+---
+
+<a name='SkRRect_MakeEmpty'></a>
+## MakeEmpty
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+static <a href='#SkRRect'>SkRRect</a> <a href='#SkRRect_MakeEmpty'>MakeEmpty</a>()
+</pre>
+
+Makes an empty rrect at the origin with zero width and height.
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkRRect_MakeRect'></a>
+## MakeRect
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+static <a href='#SkRRect'>SkRRect</a> <a href='#SkRRect_MakeRect'>MakeRect</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& r)
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_MakeRect_r'><code><strong>r</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='SkRRect_MakeOval'></a>
+## MakeOval
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+static <a href='#SkRRect'>SkRRect</a> <a href='#SkRRect_MakeOval'>MakeOval</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& oval)
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_MakeOval_oval'><code><strong>oval</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='SkRRect_MakeRectXY'></a>
+## MakeRectXY
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+static <a href='#SkRRect'>SkRRect</a> <a href='#SkRRect_MakeRectXY'>MakeRectXY</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& rect, <a href='undocumented#SkScalar'>SkScalar</a> xRad, <a href='undocumented#SkScalar'>SkScalar</a> yRad)
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_MakeRectXY_rect'><code><strong>rect</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkRRect_MakeRectXY_xRad'><code><strong>xRad</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkRRect_MakeRectXY_yRad'><code><strong>yRad</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='SkRRect_setOval'></a>
+## setOval
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+void <a href='#SkRRect_setOval'>setOval</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& oval)
+</pre>
+
+Sets <a href='#RRect'>Round Rect</a> to match the supplied <a href='#SkRRect_setOval_oval'>oval</a>. All x-radii will equal half the
+width and all y-radii will equal half the height.
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_setOval_oval'><code><strong>oval</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkRRect_setRectXY'></a>
+## setRectXY
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+void <a href='#SkRRect_setRectXY'>setRectXY</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& rect, <a href='undocumented#SkScalar'>SkScalar</a> xRad, <a href='undocumented#SkScalar'>SkScalar</a> yRad)
+</pre>
+
+Initializes <a href='#RRect'>Round Rect</a> with the same radii for all four corners.
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_setRectXY_rect'><code><strong>rect</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkRRect_setRectXY_xRad'><code><strong>xRad</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkRRect_setRectXY_yRad'><code><strong>yRad</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkRRect_setNinePatch'></a>
+## setNinePatch
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+void <a href='#SkRRect_setNinePatch'>setNinePatch</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& rect, <a href='undocumented#SkScalar'>SkScalar</a> leftRad, <a href='undocumented#SkScalar'>SkScalar</a> topRad, <a href='undocumented#SkScalar'>SkScalar</a> rightRad,
+ <a href='undocumented#SkScalar'>SkScalar</a> bottomRad)
+</pre>
+
+Initializes <a href='#RRect'>Round Rect</a> with one radius per-side.
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_setNinePatch_rect'><code><strong>rect</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkRRect_setNinePatch_leftRad'><code><strong>leftRad</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkRRect_setNinePatch_topRad'><code><strong>topRad</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkRRect_setNinePatch_rightRad'><code><strong>rightRad</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkRRect_setNinePatch_bottomRad'><code><strong>bottomRad</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkRRect_setRectRadii'></a>
+## setRectRadii
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+void <a href='#SkRRect_setRectRadii'>setRectRadii</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& rect, const <a href='SkPoint_Reference#SkVector'>SkVector</a> radii[4])
+</pre>
+
+Initializes <a href='#RRect'>Round Rect</a> with potentially different radii for all four corners.
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_setRectRadii_rect'><code><strong>rect</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkRRect_setRectRadii_radii'><code><strong>radii</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+## <a name='SkRRect_Corner'>Enum SkRRect::Corner</a>
+
+<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
+ enum <a href='#SkRRect_Corner'>Corner</a> {
+ <a href='#SkRRect_kUpperLeft_Corner'>kUpperLeft Corner</a>,
+ <a href='#SkRRect_kUpperRight_Corner'>kUpperRight Corner</a>,
+ <a href='#SkRRect_kLowerRight_Corner'>kLowerRight Corner</a>,
+ <a href='#SkRRect_kLowerLeft_Corner'>kLowerLeft Corner</a>,
+ };
+</pre>
+
+The radii are stored: top-left, top-right, bottom-right, bottom-left.
+
+### Constants
+
+<table style='border-collapse: collapse; width: 62.5em'>
+ <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
+<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
+<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkRRect_kUpperLeft_Corner'><code>SkRRect::kUpperLeft_Corner</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>#Line # incomplete ##</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkRRect_kUpperRight_Corner'><code>SkRRect::kUpperRight_Corner</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>#Line # incomplete ##</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+incomplete</td>
+ </tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkRRect_kLowerRight_Corner'><code>SkRRect::kLowerRight_Corner</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>#Line # incomplete ##</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+incomplete</td>
+ </tr>
+ <tr>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkRRect_kLowerLeft_Corner'><code>SkRRect::kLowerLeft_Corner</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>#Line # incomplete ##</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+incomplete</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+<a name='SkRRect_rect'></a>
+## rect
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkRRect_rect'>rect</a>() const
+</pre>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkRRect_radii'></a>
+## radii
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+<a href='SkPoint_Reference#SkVector'>SkVector</a> <a href='#SkRRect_radii'>radii</a>(<a href='#SkRRect_Corner'>Corner</a> corner) const
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_radii_corner'><code><strong>corner</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='SkRRect_getBounds'></a>
+## getBounds
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkRRect_getBounds'>getBounds</a>() const
+</pre>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkRRect_equal_operator'></a>
+## operator==
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+bool <a href='#SkRRect_equal_operator'>operator==(const SkRRect& a, const SkRRect& b)</a>
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_equal_operator_a'><code><strong>a</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkRRect_equal_operator_b'><code><strong>b</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='SkRRect_notequal_operator'></a>
+## operator!=
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+bool <a href='#SkRRect_notequal_operator'>operator!=(const SkRRect& a, const SkRRect& b)</a>
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_notequal_operator_a'><code><strong>a</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkRRect_notequal_operator_b'><code><strong>b</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='SkRRect_inset'></a>
+## inset
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+void <a href='#SkRRect_inset'>inset</a>(<a href='undocumented#SkScalar'>SkScalar</a> dx, <a href='undocumented#SkScalar'>SkScalar</a> dy, <a href='#SkRRect'>SkRRect</a>* dst) const
+</pre>
+
+Calls inset on the bounds, and adjust the radii to reflect what happens.
+If the corner is sharp (no curvature), leave it alone,
+otherwise we grow/shrink the radii by the amount of the inset. If a
+given radius becomes negative, it is pinned to 0.
+If the inset amount is larger than the width/height then the rrect collapses to
+a degenerate line or point.
+If the inset is sufficiently negative to cause the bounds to become infinite then
+the result is a default initialized rrect.
+It is valid for <a href='#SkRRect_inset_dst'>dst</a> == this.
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_inset_dx'><code><strong>dx</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkRRect_inset_dy'><code><strong>dy</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkRRect_inset_dst'><code><strong>dst</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkRRect_inset_2'></a>
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+void <a href='#SkRRect_inset'>inset</a>(<a href='undocumented#SkScalar'>SkScalar</a> dx, <a href='undocumented#SkScalar'>SkScalar</a> dy)
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_inset_2_dx'><code><strong>dx</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkRRect_inset_2_dy'><code><strong>dy</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkRRect_outset'></a>
+## outset
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+void <a href='#SkRRect_outset'>outset</a>(<a href='undocumented#SkScalar'>SkScalar</a> dx, <a href='undocumented#SkScalar'>SkScalar</a> dy, <a href='#SkRRect'>SkRRect</a>* dst) const
+</pre>
+
+Call outset on the bounds, and adjust the radii to reflect what happens
+in stroking. If the corner is sharp (no curvature), leave it alone,
+otherwise we grow/shrink the radii by the amount of the inset. If a
+given radius becomes negative, it is pinned to 0.
+It is valid for <a href='#SkRRect_outset_dst'>dst</a> == this.
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_outset_dx'><code><strong>dx</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkRRect_outset_dy'><code><strong>dy</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkRRect_outset_dst'><code><strong>dst</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkRRect_outset_2'></a>
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+void <a href='#SkRRect_outset'>outset</a>(<a href='undocumented#SkScalar'>SkScalar</a> dx, <a href='undocumented#SkScalar'>SkScalar</a> dy)
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_outset_2_dx'><code><strong>dx</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkRRect_outset_2_dy'><code><strong>dy</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkRRect_offset'></a>
+## offset
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+void <a href='#SkRRect_offset'>offset</a>(<a href='undocumented#SkScalar'>SkScalar</a> dx, <a href='undocumented#SkScalar'>SkScalar</a> dy)
+</pre>
+
+Translate the rrect by (<a href='#SkRRect_offset_dx'>dx</a>, <a href='#SkRRect_offset_dy'>dy</a>).
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_offset_dx'><code><strong>dx</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkRRect_offset_dy'><code><strong>dy</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkRRect_makeOffset'></a>
+## makeOffset
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+<a href='#SkRRect'>SkRRect</a> SK_WARN_UNUSED_RESULT <a href='#SkRRect_makeOffset'>makeOffset</a>(<a href='undocumented#SkScalar'>SkScalar</a> dx, <a href='undocumented#SkScalar'>SkScalar</a> dy) const
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_makeOffset_dx'><code><strong>dx</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+ <tr> <td><a name='SkRRect_makeOffset_dy'><code><strong>dy</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='SkRRect_contains'></a>
+## contains
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+bool <a href='#SkRRect_contains'>contains</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& rect) const
+</pre>
+
+Returns true if 'rect' is wholy inside the RR, and both
+are not empty.
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_contains_rect'><code><strong>rect</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='SkRRect_isValid'></a>
+## isValid
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+bool <a href='#SkRRect_isValid'>isValid</a>() const
+</pre>
+
+### Return Value
+
+incomplete
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+### Constants
+
+<table style='border-collapse: collapse; width: 62.5em'>
+ <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
+<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
+<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
+ <tr style='background-color: #f0f0f0; '>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkRRect_kSizeInMemory'><code>SkRRect::kSizeInMemory</code></a></td>
+ <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>48</td>
+ <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
+
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>incomplete
+
+</td>
+ </tr>
+</table>
+
+<a name='SkRRect_writeToMemory'></a>
+## writeToMemory
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+size_t <a href='#SkRRect_writeToMemory'>writeToMemory</a>(void* buffer) const
+</pre>
+
+Write the rrect into the specified <a href='#SkRRect_writeToMemory_buffer'>buffer</a>. This is guaranteed to always
+write <a href='#SkRRect_kSizeInMemory'>kSizeInMemory</a> bytes, and that value is guaranteed to always be
+a multiple of 4. Return <a href='#SkRRect_kSizeInMemory'>kSizeInMemory</a>.
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_writeToMemory_buffer'><code><strong>buffer</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='SkRRect_readFromMemory'></a>
+## readFromMemory
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+size_t <a href='#SkRRect_readFromMemory'>readFromMemory</a>(const void* buffer, size_t length)
+</pre>
+
+Reads the rrect from the specified <a href='#SkRRect_readFromMemory_buffer'>buffer</a>.
+If the specified <a href='#SkRRect_readFromMemory_buffer'>buffer</a> is large enough, this will read <a href='#SkRRect_kSizeInMemory'>kSizeInMemory</a> bytes,
+and that value is guaranteed to always be a multiple of 4.
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_readFromMemory_buffer'><code><strong>buffer</strong></code></a></td>
+ <td>memory to read from</td>
+ </tr>
+ <tr> <td><a name='SkRRect_readFromMemory_length'><code><strong>length</strong></code></a></td>
+ <td>amount of memory available in the <a href='#SkRRect_readFromMemory_buffer'>buffer</a></td>
+ </tr>
+</table>
+
+### Return Value
+
+number of bytes read (must be a multiple of 4) or
+0 if there was not enough memory available
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkRRect_transform'></a>
+## transform
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+bool <a href='#SkRRect_transform'>transform</a>(const <a href='SkMatrix_Reference#SkMatrix'>SkMatrix</a>& matrix, <a href='#SkRRect'>SkRRect</a>* dst) const
+</pre>
+
+Transform by the specified <a href='#SkRRect_transform_matrix'>matrix</a>, and put the result in <a href='#SkRRect_transform_dst'>dst</a>.
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_transform_matrix'><code><strong>matrix</strong></code></a></td>
+ <td><a href='SkMatrix_Reference#SkMatrix'>SkMatrix</a> specifying the transform. Must only contain
+scale and/or translate, or this call will fail.
+</td>
+ </tr>
+ <tr> <td><a name='SkRRect_transform_dst'><code><strong>dst</strong></code></a></td>
+ <td><a href='#SkRRect'>SkRRect</a> to store the result. It is an error to use this,
+which would make this function no longer const.
+</td>
+ </tr>
+</table>
+
+### Return Value
+
+true on success, false on failure.
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkRRect_dump'></a>
+## dump
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+void <a href='#SkRRect_dump'>dump</a>(bool asHex) const
+</pre>
+
+### Parameters
+
+<table> <tr> <td><a name='SkRRect_dump_asHex'><code><strong>asHex</strong></code></a></td>
+ <td>incomplete</td>
+ </tr>
+</table>
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkRRect_dump_2'></a>
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+void <a href='#SkRRect_dump'>dump</a>() const
+</pre>
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
+<a name='SkRRect_dumpHex'></a>
+## dumpHex
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+void <a href='#SkRRect_dumpHex'>dumpHex</a>() const
+</pre>
+
+### Example
+
+<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
+
+### See Also
+
+incomplete
+
+---
+
diff --git a/site/user/api/SkRect_Reference.md b/site/user/api/SkRect_Reference.md
index fcd018d0df..02438608ca 100644
--- a/site/user/api/SkRect_Reference.md
+++ b/site/user/api/SkRect_Reference.md
@@ -86,7 +86,6 @@ SkRect global, <code>struct</code>, and <code>class</code> related member functi
</tr>
</table>
-
## <a name='Member_Function'>Member Function</a>
@@ -308,7 +307,6 @@ SkRect member functions read and modify the structure properties.
</tr>
</table>
-
## <a name='Member'>Member</a>
@@ -364,7 +362,6 @@ SkRect members may be read and written directly without using a member function.
</tr>
</table>
-
### Members
<table style='border-collapse: collapse; width: 62.5em'>
@@ -458,7 +455,6 @@ SkRect can be constructed or initialized by these functions, including C++ class
</tr>
</table>
-
<a name='SkRect_MakeEmpty'></a>
## MakeEmpty
@@ -888,7 +884,6 @@ than <a href='#SkRect_fBottom'>fBottom</a>.
</tr>
</table>
-
<a name='SkRect_isEmpty'></a>
## isEmpty
@@ -1234,7 +1229,7 @@ large width: 4294967296
<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkRect_height'>height</a>() 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 y-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
@@ -1345,7 +1340,6 @@ SkRect operators inline class member functions with arithmetic equivalents.
</tr>
</table>
-
<a name='SkRect_equal_operator'></a>
## operator==
@@ -1459,7 +1453,6 @@ test with NaN is not equal to itself
</tr>
</table>
-
<a name='SkRect_toQuad'></a>
## toQuad
@@ -1470,8 +1463,6 @@ void <a href='#SkRect_toQuad'>toQuad</a>(<a href='SkPoint_Reference#SkPoint'>SkP
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.
-Consider adding param to control whether <a href='#SkRect_toQuad_quad'>quad</a> is clockwise or counterclockwise.
-
### Parameters
<table> <tr> <td><a name='SkRect_toQuad_quad'><code><strong>quad</strong></code></a></td>
@@ -1629,7 +1620,6 @@ added: nan, 8 count: 4 rect: 0, 0, 0, 0 success: false
</tr>
</table>
-
<a name='SkRect_setBoundsNoCheck'></a>
## setBoundsNoCheck
@@ -1995,7 +1985,6 @@ rect: -15, 0, 0, 25 isEmpty: false
</tr>
</table>
-
<a name='SkRect_iset'></a>
## iset
@@ -2111,7 +2100,6 @@ rect2: {0, 0, 1, 2}
</tr>
</table>
-
<a name='SkRect_makeOffset'></a>
## makeOffset
@@ -2462,8 +2450,8 @@ rect: 5, 1, 55, 86
must describe area; <a href='#SkRect_fLeft'>fLeft</a> is less than <a href='#SkRect_fRight'>fRight</a>, and <a href='#SkRect_fTop'>fTop</a> is less than <a href='#SkRect_fBottom'>fBottom</a>;
empty() returns false. The intersection of <a href='#Rect'>Rect</a> pair can be described by:
-(max(a.fLeft, b.fLeft), max(a.fTop, b.fTop),
-min(a.fRight, b.fRight), min(a.fBottom, b.fBottom))
+(max(a.<a href='#SkRect_fLeft'>fLeft</a>, b.<a href='#SkRect_fLeft'>fLeft</a>), max(a.<a href='#SkRect_fTop'>fTop</a>, b.<a href='#SkRect_fTop'>fTop</a>),
+min(a.<a href='#SkRect_fRight'>fRight</a>, b.<a href='#SkRect_fRight'>fRight</a>), min(a.<a href='#SkRect_fBottom'>fBottom</a>, b.<a href='#SkRect_fBottom'>fBottom</a>))
.
The intersection is only meaningful if the resulting <a href='#Rect'>Rect</a> is not empty and
@@ -2503,7 +2491,6 @@ describes an area: <a href='#SkRect_fLeft'>fLeft</a> is less than <a href='#SkRe
</tr>
</table>
-
<a name='SkRect_contains'></a>
## contains
@@ -2929,7 +2916,6 @@ intersection
</tr>
</table>
-
<a name='SkRect_join'></a>
## join
@@ -3122,7 +3108,6 @@ sorted: 10, 0, 55, 100
</tr>
</table>
-
<a name='SkRect_round'></a>
## round
@@ -3348,7 +3333,6 @@ round: 30, 50, 41, 61
</tr>
</table>
-
<a name='SkRect_sort'></a>
## sort
diff --git a/site/user/api/SkSurface_Reference.md b/site/user/api/SkSurface_Reference.md
index 76f2de6716..387c6cbae6 100644
--- a/site/user/api/SkSurface_Reference.md
+++ b/site/user/api/SkSurface_Reference.md
@@ -72,7 +72,6 @@ SkSurface related constants are defined by <code>enum</code>, <code>enum class</
</tr>
</table>
-
## <a name='Related_Function'>Related Function</a>
@@ -98,7 +97,6 @@ SkSurface global, <code>struct</code>, and <code>class</code> related member fun
</tr>
</table>
-
## <a name='Member_Function'>Member Function</a>
@@ -216,7 +214,6 @@ SkSurface member functions read and modify the structure properties.
</tr>
</table>
-
## <a name='Constructor'>Constructor</a>
@@ -270,7 +267,6 @@ SkSurface can be constructed or initialized by these functions, including C++ cl
</tr>
</table>
-
<a name='SkSurface_MakeRasterDirect'></a>
## MakeRasterDirect
@@ -1071,7 +1067,6 @@ surf->makeImageSnapshot() == nullptr
</tr>
</table>
-
<a name='SkSurface_width'></a>
## width
@@ -1220,7 +1215,6 @@ If a snapshot has been generated, this copies the <a href='#Surface'>Surface</a>
</tr>
</table>
-
<a name='SkSurface_notifyContentWillChange'></a>
## notifyContentWillChange
@@ -1233,8 +1227,6 @@ Subsequent calls to <a href='#SkSurface_generationID'>generationID</a> return a
<a href='#SkSurface_notifyContentWillChange_mode'>mode</a> is normally passed as <a href='#SkSurface_kRetain_ContentChangeMode'>kRetain ContentChangeMode</a>.
-Can we deprecate this?
-
### Parameters
<table> <tr> <td><a name='SkSurface_notifyContentWillChange_mode'><code><strong>mode</strong></code></a></td>
@@ -1527,7 +1519,6 @@ are not captured. <a href='SkImage_Reference#Image'>Image</a> allocation is acco
</tr>
</table>
-
<a name='SkSurface_draw'></a>
## draw
@@ -1538,7 +1529,7 @@ void <a href='#SkSurface_draw'>draw</a>(<a href='SkCanvas_Reference#SkCanvas'>Sk
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='SkColor_Reference#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>.
+<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, and <a href='undocumented#Draw_Looper'>Draw Looper</a>.
### Parameters
@@ -1552,7 +1543,7 @@ If <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkSurface_draw_paint'>p
<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>,
+ <td><a href='SkPaint_Reference#Paint'>Paint</a> containing <a href='SkBlendMode_Reference#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>
@@ -1941,7 +1932,6 @@ soon
</tr>
</table>
-
<a name='SkSurface_flush'></a>
## flush
diff --git a/site/user/api/catalog.htm b/site/user/api/catalog.htm
index e8b4e7e70a..e1f9d3ef77 100644
--- a/site/user/api/catalog.htm
+++ b/site/user/api/catalog.htm
@@ -350,6 +350,13 @@
"name": "SkBitmap::width()",
"stdout": "bitmap width: 16 info width: 16\\n"
},
+ "SkBlendMode_Name": {
+ "code": "void draw(SkCanvas* canvas) {\n SkDebugf(\"default blend: SkBlendMode::k%s\\n\", SkBlendMode_Name(SkPaint().getBlendMode()));\n}",
+ "hash": "3996f4994bf4e90b4cd86524c1f9f1a6",
+ "file": "SkBlendMode_Reference",
+ "name": "SkBlendMode_Name",
+ "stdout": "default blend: SkBlendMode::kSrcOver\\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.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",
@@ -364,25 +371,11 @@
"name": "SkCanvas::MakeRasterDirectN32",
"stdout": "---\\n-x-\\n---\\n"
},
- "SkCanvas_SaveLayerRec_SaveLayerRec": {
+ "SkCanvas_SaveLayerRec_empty_constructor": {
"code": "void draw(SkCanvas* canvas) {\n SkCanvas::SaveLayerRec rec1;\n rec1.fSaveLayerFlags = SkCanvas::kPreserveLCDText_SaveLayerFlag;\n SkCanvas::SaveLayerRec rec2(nullptr, nullptr, SkCanvas::kPreserveLCDText_SaveLayerFlag);\n SkDebugf(\"rec1 %c= rec2\\n\", rec1.fBounds == rec2.fBounds\n && rec1.fPaint == rec2.fPaint\n && rec1.fBackdrop == rec2.fBackdrop\n && rec1.fSaveLayerFlags == rec2.fSaveLayerFlags ? '=' : '!');\n}",
"hash": "b5cea1eed80a0eb04ddbab3f36dff73f",
"file": "SkCanvas_Reference",
- "name": "SkCanvas::SaveLayerRec::SaveLayerRec",
- "stdout": "rec1 == rec2\\n"
- },
- "SkCanvas_SaveLayerRec_SaveLayerRec_2": {
- "code": "void draw(SkCanvas* canvas) {\n SkCanvas::SaveLayerRec rec1;\n SkCanvas::SaveLayerRec rec2(nullptr, nullptr);\n SkDebugf(\"rec1 %c= rec2\\n\", rec1.fBounds == rec2.fBounds\n && rec1.fPaint == rec2.fPaint\n && rec1.fBackdrop == rec2.fBackdrop\n && rec1.fSaveLayerFlags == rec2.fSaveLayerFlags ? '=' : '!');\n}",
- "hash": "027f920259888fc19591ea9a90d92873",
- "file": "SkCanvas_Reference",
- "name": "SkCanvas::SaveLayerRec::SaveLayerRec_2",
- "stdout": "rec1 == rec2\\n"
- },
- "SkCanvas_SaveLayerRec_SaveLayerRec_3": {
- "code": "void draw(SkCanvas* canvas) {\n SkCanvas::SaveLayerRec rec1;\n SkCanvas::SaveLayerRec rec2(nullptr, nullptr, nullptr, 0);\n SkDebugf(\"rec1 %c= rec2\\n\", rec1.fBounds == rec2.fBounds\n && rec1.fPaint == rec2.fPaint\n && rec1.fBackdrop == rec2.fBackdrop\n && rec1.fSaveLayerFlags == rec2.fSaveLayerFlags ? '=' : '!');\n}",
- "hash": "9b7fa2fe855642ffff6538829db15328",
- "file": "SkCanvas_Reference",
- "name": "SkCanvas::SaveLayerRec::SaveLayerRec_3",
+ "name": "SkCanvas::SaveLayerRec::SaveLayerRec()",
"stdout": "rec1 == rec2\\n"
},
"SkCanvas_accessTopRasterHandle": {
@@ -399,6 +392,21 @@
"name": "SkCanvas::SkCanvas(const SkBitmap& bitmap, const SkSurfaceProps& props)",
"stdout": "-----\\n---x-\\n---x-\\n---x-\\n---x-\\n---x-\\n---x-\\n-----\\n---x-\\n---x-\\n-----\\n"
},
+ "SkCanvas_const_SkRect_star_const_SkPaint_star": {
+ "code": "void draw(SkCanvas* canvas) {\n SkCanvas::SaveLayerRec rec1;\n SkCanvas::SaveLayerRec rec2(nullptr, nullptr);\n SkDebugf(\"rec1 %c= rec2\\n\", rec1.fBounds == rec2.fBounds\n && rec1.fPaint == rec2.fPaint\n && rec1.fBackdrop == rec2.fBackdrop\n && rec1.fSaveLayerFlags == rec2.fSaveLayerFlags ? '=' : '!');\n}",
+ "hash": "027f920259888fc19591ea9a90d92873",
+ "file": "SkCanvas_Reference",
+ "name": "SkCanvas::SaveLayerRec::SaveLayerRec(const SkRect* bounds, const SkPaint* paint, SaveLayerFlags saveLayerFlags = 0)",
+ "stdout": "rec1 == rec2\\n"
+ },
+ "SkCanvas_const_SkRect_star_const_SkPaint_star_const_SkImageFilter_star": {
+ "code": "void draw(SkCanvas* canvas) {\n SkCanvas::SaveLayerRec rec1;\n SkCanvas::SaveLayerRec rec2(nullptr, nullptr, nullptr, 0);\n SkDebugf(\"rec1 %c= rec2\\n\", rec1.fBounds == rec2.fBounds\n && rec1.fPaint == rec2.fPaint\n && rec1.fBackdrop == rec2.fBackdrop\n && rec1.fSaveLayerFlags == rec2.fSaveLayerFlags ? '=' : '!');\n}",
+ "hash": "9b7fa2fe855642ffff6538829db15328",
+ "file": "SkCanvas_Reference",
+ "name": "SkCanvas::SaveLayerRec::SaveLayerRec(const SkRect* bounds, const SkPaint* paint, const SkImageFilter* backdrop,
+ SaveLayerFlags saveLayerFlags)",
+ "stdout": "rec1 == rec2\\n"
+ },
"SkCanvas_copy_const_SkBitmap": {
"code": "void draw(SkCanvas* ) {\n SkBitmap bitmap;\n // create a bitmap 5 wide and 11 high\n bitmap.allocPixels(SkImageInfo::MakeN32Premul(5, 11));\n SkCanvas canvas(bitmap);\n canvas.clear(SK_ColorWHITE); // white is Unpremultiplied, in ARGB order\n SkPixmap pixmap; // provides guaranteed access to the drawn pixels\n if (!canvas.peekPixels(&pixmap)) {\n SkDebugf(\"peekPixels should never fail.\\n\");\n }\n const SkPMColor* pixels = pixmap.addr32(); // points to top-left of bitmap\n SkPMColor pmWhite = pixels[0]; // the Premultiplied format may vary\n SkPaint paint; // by default, draws black, 12 point text\n canvas.drawString(\"!\", 1, 10, paint); // 1 char at baseline (1, 10)\n for (int y = 0; y < bitmap.height(); ++y) {\n for (int x = 0; x < bitmap.width(); ++x) {\n SkDebugf(\"%c\", *pixels++ == pmWhite ? '-' : 'x');\n }\n SkDebugf(\"\\n\");\n }\n}",
"hash": "dd92db963af190e849894038f39b598a",
@@ -2002,20 +2010,6 @@
"name": "SkPath::IsQuadDegenerate",
"stdout": "quad (100,100), (100.00001,100.00001), (100.00002,100.00002) is degenerate, nearly\\nquad (1100,1100), (1100,1100), (1100,1100) is degenerate, nearly\\nquad (100,100), (100.00001,100.00001), (100.00002,100.00002) is not degenerate, exactly\\nquad (1100,1100), (1100,1100), (1100,1100) is degenerate, exactly\\n"
},
- "SkPath_Iter_Iter": {
- "code": "void draw(SkCanvas* canvas) {\n SkPath::Iter iter;\n SkPoint points[4];\n SkDebugf(\"iter is \" \"%s\" \"done\\n\", SkPath::kDone_Verb == iter.next(points) ? \"\" : \"not \");\n SkPath path;\n iter.setPath(path, false);\n SkDebugf(\"iter is \" \"%s\" \"done\\n\", SkPath::kDone_Verb == iter.next(points) ? \"\" : \"not \");\n}\n",
- "hash": "01648775cb9b354b2f1836dad82a25ab",
- "file": "SkPath_Reference",
- "name": "SkPath::Iter::Iter",
- "stdout": "iter is done\\niter is done\\n"
- },
- "SkPath_Iter_Iter_2": {
- "code": "void draw(SkCanvas* canvas) {\n auto debugster = [](const char* prefix, SkPath::Iter& iter) -> void {\n SkDebugf(\"%s:\\n\", prefix);\n const char* verbStr[] = { \"Move\", \"Line\", \"Quad\", \"Conic\", \"Cubic\", \"Close\", \"Done\" };\n const int pointCount[] = { 1 , 2 , 3 , 3 , 4 , 1 , 0 };\n SkPath::Verb verb;\n do {\n SkPoint points[4];\n verb = iter.next(points);\n SkDebugf(\"k%s_Verb \", verbStr[(int) verb]);\n for (int i = 0; i < pointCount[(int) verb]; ++i) {\n SkDebugf(\"{%g, %g}, \", points[i].fX, points[i].fY);\n }\n if (SkPath::kConic_Verb == verb) {\n SkDebugf(\"weight = %g\", iter.conicWeight());\n }\n SkDebugf(\"\\n\");\n } while (SkPath::kDone_Verb != verb);\n SkDebugf(\"\\n\");\n };\n SkPath path;\n path.quadTo(10, 20, 30, 40);\n SkPath::Iter openIter(path, false);\n debugster(\"open\", openIter);\n SkPath::Iter closedIter(path, true);\n debugster(\"closed\", closedIter);\n}\n",
- "hash": "13044dbf68885c0f15322c0633b633a3",
- "file": "SkPath_Reference",
- "name": "SkPath::Iter::Iter_2",
- "stdout": "open:\\nkMove_Verb {0, 0}, \\nkQuad_Verb {0, 0}, {10, 20}, {30, 40}, \\nkDone_Verb \\n\\nclosed:\\nkMove_Verb {0, 0}, \\nkQuad_Verb {0, 0}, {10, 20}, {30, 40}, \\nkLine_Verb {30, 40}, {0, 0}, \\nkClose_Verb {0, 0}, \\nkDone_Verb \\n\\n"
- },
"SkPath_Iter_conicWeight": {
"code": "void draw(SkCanvas* canvas) {\n SkPath path;\n path.conicTo(1, 2, 3, 4, .5f);\n SkPath::Iter iter(path, false);\n SkPoint p[4];\n SkDebugf(\"first verb is \" \"%s\" \"move\\n\", SkPath::kMove_Verb == iter.next(p) ? \"\" : \"not \");\n SkDebugf(\"next verb is \" \"%s\" \"conic\\n\", SkPath::kConic_Verb == iter.next(p) ? \"\" : \"not \");\n SkDebugf(\"conic points: {%g,%g}, {%g,%g}, {%g,%g}\\n\", p[0].fX, p[0].fY, p[1].fX, p[1].fY,\n p[2].fX, p[2].fY);\n SkDebugf(\"conic weight: %g\\n\", iter.conicWeight());\n}\n",
"hash": "7cdea37741d50f0594c6244eb07fd175",
@@ -2023,6 +2017,13 @@
"name": "SkPath::Iter::conicWeight",
"stdout": "first verb is move\\nnext verb is conic\\nconic points: {0,0}, {1,2}, {3,4}\\nconic weight: 0.5\\n"
},
+ "SkPath_Iter_empty_constructor": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPath::Iter iter;\n SkPoint points[4];\n SkDebugf(\"iter is \" \"%s\" \"done\\n\", SkPath::kDone_Verb == iter.next(points) ? \"\" : \"not \");\n SkPath path;\n iter.setPath(path, false);\n SkDebugf(\"iter is \" \"%s\" \"done\\n\", SkPath::kDone_Verb == iter.next(points) ? \"\" : \"not \");\n}\n",
+ "hash": "01648775cb9b354b2f1836dad82a25ab",
+ "file": "SkPath_Reference",
+ "name": "SkPath::Iter::Iter()",
+ "stdout": "iter is done\\niter is done\\n"
+ },
"SkPath_Iter_isCloseLine": {
"code": "void draw(SkCanvas* canvas) {\n SkPath path;\n path.moveTo(6, 7);\n path.conicTo(1, 2, 3, 4, .5f);\n path.close();\n SkPath::Iter iter(path, false);\n SkPoint p[4];\n SkDebugf(\"1st verb is \" \"%s\" \"move\\n\", SkPath::kMove_Verb == iter.next(p) ? \"\" : \"not \");\n SkDebugf(\"moveTo point: {%g,%g}\\n\", p[0].fX, p[0].fY);\n SkDebugf(\"2nd verb is \" \"%s\" \"conic\\n\", SkPath::kConic_Verb == iter.next(p) ? \"\" : \"not \");\n SkDebugf(\"3rd verb is \" \"%s\" \"line\\n\", SkPath::kLine_Verb == iter.next(p) ? \"\" : \"not \");\n SkDebugf(\"line points: {%g,%g}, {%g,%g}\\n\", p[0].fX, p[0].fY, p[1].fX, p[1].fY);\n SkDebugf(\"line \" \"%s\" \"generated by close\\n\", iter.isCloseLine() ? \"\" : \"not \");\n SkDebugf(\"4th verb is \" \"%s\" \"close\\n\", SkPath::kClose_Verb == iter.next(p) ? \"\" : \"not \");\n}\n",
"hash": "7000b501f49341629bfdd9f80e686103",
@@ -2107,6 +2108,13 @@
"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_const_SkPath": {
+ "code": "void draw(SkCanvas* canvas) {\n auto debugster = [](const char* prefix, SkPath::Iter& iter) -> void {\n SkDebugf(\"%s:\\n\", prefix);\n const char* verbStr[] = { \"Move\", \"Line\", \"Quad\", \"Conic\", \"Cubic\", \"Close\", \"Done\" };\n const int pointCount[] = { 1 , 2 , 3 , 3 , 4 , 1 , 0 };\n SkPath::Verb verb;\n do {\n SkPoint points[4];\n verb = iter.next(points);\n SkDebugf(\"k%s_Verb \", verbStr[(int) verb]);\n for (int i = 0; i < pointCount[(int) verb]; ++i) {\n SkDebugf(\"{%g, %g}, \", points[i].fX, points[i].fY);\n }\n if (SkPath::kConic_Verb == verb) {\n SkDebugf(\"weight = %g\", iter.conicWeight());\n }\n SkDebugf(\"\\n\");\n } while (SkPath::kDone_Verb != verb);\n SkDebugf(\"\\n\");\n };\n SkPath path;\n path.quadTo(10, 20, 30, 40);\n SkPath::Iter openIter(path, false);\n debugster(\"open\", openIter);\n SkPath::Iter closedIter(path, true);\n debugster(\"closed\", closedIter);\n}\n",
+ "hash": "13044dbf68885c0f15322c0633b633a3",
+ "file": "SkPath_Reference",
+ "name": "SkPath::Iter::Iter(const SkPath& path, bool forceClose)",
+ "stdout": "open:\\nkMove_Verb {0, 0}, \\nkQuad_Verb {0, 0}, {10, 20}, {30, 40}, \\nkDone_Verb \\n\\nclosed:\\nkMove_Verb {0, 0}, \\nkQuad_Verb {0, 0}, {10, 20}, {30, 40}, \\nkLine_Verb {30, 40}, {0, 0}, \\nkClose_Verb {0, 0}, \\nkDone_Verb \\n\\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",
@@ -2695,6 +2703,20 @@
"name": "SkPoint::y()",
"stdout": "pt1.fY == pt1.y()\\n"
},
+ "SkRRect_height": {
+ "code": "void draw(SkCanvas* canvas) {\n SkRRect unsorted = SkRRect::MakeRect({ 15, 25, 10, 20 });\n SkDebugf(\"unsorted height: %g\\n\", unsorted.height());\n SkRRect large = SkRRect::MakeRect({ 1, -FLT_MAX, 2, FLT_MAX });\n SkDebugf(\"large height: %.0f\\n\", large.height());\n}",
+ "hash": "5a3eb1755164a7becec33cec6e6eca31",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::height()",
+ "stdout": "unsorted height: 5\\nlarge height: inf\\n"
+ },
+ "SkRRect_width": {
+ "code": "void draw(SkCanvas* canvas) {\n SkRRect unsorted = SkRRect::MakeRect({ 15, 25, 10, 5 });\n SkDebugf(\"unsorted width: %g\\n\", unsorted.width());\n SkRRect large = SkRRect::MakeRect({ -FLT_MAX, 1, FLT_MAX, 2 });\n SkDebugf(\"large width: %.0f\\n\", large.width());\n}",
+ "hash": "c675a480b41dee157f84fa2550a2a53c",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::width()",
+ "stdout": "unsorted width: 5\\nlarge width: inf\\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",
@@ -3264,7 +3286,239 @@
}
}
- var pngs = {"Canvas_Clip": {
+ var pngs = {"Blend_Mode_Clear": {
+ "code": "void draw(SkCanvas* canvas) {\n canvas->saveLayer(nullptr, nullptr);\n canvas->drawColor(SK_ColorYELLOW, SkBlendMode::kClear);\n SkPaint paint;\n for (auto color : { SK_ColorRED, SK_ColorBLUE, SK_ColorGREEN } ) {\n SkColor colors[] = { color, SkColorSetA(color, 0) }; \n paint.setShader(SkGradientShader::MakeRadial({ 64, 64}, 100,\n colors, nullptr, SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode));\n canvas->drawCircle(64, 64, 100, paint);\n canvas->translate(64, 64);\n }\n canvas->restore();\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "a9b56a26ca469bab9ab10e16f62fb2e2",
+ "file": "SkBlendMode_Reference",
+ "name": "Clear"
+},
+ "Blend_Mode_Color": {
+ "code": "void draw(SkCanvas* canvas) {\n canvas->drawImage(image, 0, 0);\n canvas->drawColor(0xFF00FF00, SkBlendMode::kColor);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "953eb53ac00e22d098c1a1290379282e",
+ "file": "SkBlendMode_Reference",
+ "name": "Color"
+},
+ "Blend_Mode_Color_Burn": {
+ "code": "void draw(SkCanvas* canvas) {\n canvas->drawImage(image, 0, 0);\n canvas->clipRect({128, 0, 256, 256});\n canvas->drawColor(SkColorSetARGB(0x80, 0x90, 0x90, 0x90), SkBlendMode::kColorBurn);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "3eeef529375d8083ae0d615789d55e89",
+ "file": "SkBlendMode_Reference",
+ "name": "Color_Burn"
+},
+ "Blend_Mode_Color_Dodge": {
+ "code": "void draw(SkCanvas* canvas) {\n canvas->drawImage(image, 0, 0);\n canvas->clipRect({128, 0, 256, 256});\n canvas->drawColor(SkColorSetARGB(0x80, 0x90, 0x90, 0x90), SkBlendMode::kColorDodge);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "280ad6267a7d2d77b6d2c4531c6fc0bf",
+ "file": "SkBlendMode_Reference",
+ "name": "Color_Dodge"
+},
+ "Blend_Mode_Darken": {
+ "code": "void draw(SkCanvas* canvas) {\n canvas->drawImage(image, 0, 0);\n SkColor colors[] = { SK_ColorWHITE, SK_ColorBLACK };\n SkPoint horz[] = { { 0, 0 }, { 256, 0 } };\n SkPaint paint;\n paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),\n SkShader::kClamp_TileMode));\n paint.setBlendMode(SkBlendMode::kDarken);\n canvas->drawPaint(paint);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "8c5065ba642f815602000f6b53cefc48",
+ "file": "SkBlendMode_Reference",
+ "name": "Darken"
+},
+ "Blend_Mode_Difference": {
+ "code": "void draw(SkCanvas* canvas) {\n canvas->drawImage(image, 0, 0);\n canvas->drawImage(image, 128, 0);\n canvas->drawImage(image, 0, 128);\n canvas->drawImage(image, 128, 128);\n SkPaint paint;\n paint.setBlendMode(SkBlendMode::kDstATop);\n SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };\n SkPoint vert[] = { { 0, 0 }, { 0, 256 } };\n paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n canvas->clipRect( { 30, 30, 226, 226 } );\n canvas->drawColor(0x80bb9977, SkBlendMode::kDifference);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "52d2c8d1b9b428de4477b4caa1543a3d",
+ "file": "SkBlendMode_Reference",
+ "name": "Difference"
+},
+ "Blend_Mode_Dst": {
+ "code": "void draw(SkCanvas* canvas) {\n SkRSXform xforms[] = { { .5f, 0, 0, 0 }, {0, .5f, 125, 128 } };\n SkRect tex[] = { { 0, 0, 250, 250 }, { 0, 0, 250, 250 } };\n SkColor colors[] = { 0x7f55aa00, 0x7f3333bf };\n canvas->drawAtlas(image.get(), xforms, tex, colors, 2, SkBlendMode::kSrc, nullptr, nullptr);\n canvas->translate(128, 0);\n canvas->drawAtlas(image.get(), xforms, tex, colors, 2, SkBlendMode::kDst, nullptr, nullptr);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "35915a2273be1076f00f2e47998ce808",
+ "file": "SkBlendMode_Reference",
+ "name": "Dst"
+},
+ "Blend_Mode_Dst_Atop": {
+ "code": "void draw(SkCanvas* canvas) {\n SkColor colors[] = { SK_ColorRED, SK_ColorBLUE };\n SkPoint horz[] = { { 0, 0 }, { 256, 0 } };\n SkPaint paint;\n paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n paint.setBlendMode(SkBlendMode::kDstATop);\n SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };\n SkPoint vert[] = { { 0, 0 }, { 0, 256 } };\n paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n canvas->clipRect( { 30, 30, 226, 226 } );\n canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kSrcATop);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "1955856d45773a4fd914fcc1f813222f",
+ "file": "SkBlendMode_Reference",
+ "name": "Dst_Atop"
+},
+ "Blend_Mode_Dst_In": {
+ "code": "void draw(SkCanvas* canvas) {\n SkColor colors[] = { SK_ColorRED, SK_ColorBLUE };\n SkPoint horz[] = { { 0, 0 }, { 256, 0 } };\n SkPaint paint;\n paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n paint.setBlendMode(SkBlendMode::kDstIn);\n SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };\n SkPoint vert[] = { { 0, 0 }, { 0, 256 } };\n paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n canvas->clipRect( { 30, 30, 226, 226 } );\n canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kDstIn);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "a5eeba05ccf6097a5d110a9d64f97c25",
+ "file": "SkBlendMode_Reference",
+ "name": "Dst_In"
+},
+ "Blend_Mode_Dst_Out": {
+ "code": "void draw(SkCanvas* canvas) {\n SkColor colors[] = { SK_ColorRED, SK_ColorBLUE };\n SkPoint horz[] = { { 0, 0 }, { 256, 0 } };\n SkPaint paint;\n paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n paint.setBlendMode(SkBlendMode::kDstIn);\n SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };\n SkPoint vert[] = { { 0, 0 }, { 0, 256 } };\n paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n canvas->clipRect( { 30, 30, 226, 226 } );\n canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kDstOut);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "b9a894c9accfc5d94081bbd77d5d790a",
+ "file": "SkBlendMode_Reference",
+ "name": "Dst_Out"
+},
+ "Blend_Mode_Dst_Over": {
+ "code": "void draw(SkCanvas* canvas) {\n SkColor colors[] = { SK_ColorRED, SK_ColorBLUE };\n SkPoint horz[] = { { 0, 0 }, { 256, 0 } };\n SkPaint paint;\n paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n paint.setBlendMode(SkBlendMode::kDstIn);\n SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };\n SkPoint vert[] = { { 0, 0 }, { 0, 256 } };\n paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n canvas->clipRect( { 30, 30, 226, 226 } );\n canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kDstOver);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "10dbb4d97902956ef5f5f8562f65119e",
+ "file": "SkBlendMode_Reference",
+ "name": "Dst_Over"
+},
+ "Blend_Mode_Exclusion": {
+ "code": "void draw(SkCanvas* canvas) {\n canvas->drawImage(image, 0, 0);\n canvas->drawImage(image, 128, 0);\n canvas->drawImage(image, 0, 128);\n canvas->drawImage(image, 128, 128);\n SkPaint paint;\n paint.setBlendMode(SkBlendMode::kDstATop);\n SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };\n SkPoint vert[] = { { 0, 0 }, { 0, 256 } };\n paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n canvas->clipRect( { 30, 30, 226, 226 } );\n canvas->drawColor(0x80bb9977, SkBlendMode::kExclusion);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "a544ee1c67c7c557a9e54d5e99f94bb6",
+ "file": "SkBlendMode_Reference",
+ "name": "Exclusion"
+},
+ "Blend_Mode_Hard_Light": {
+ "code": "void draw(SkCanvas* canvas) {\n canvas->drawImage(image, 0, 0);\n const SkColor colors[] = { 0xFFFFFFFF, 0x00000000 };\n SkPaint paint;\n paint.setBlendMode(SkBlendMode::kHardLight);\n paint.setShader(SkGradientShader::MakeRadial({ 128, 128}, 100, colors,\n nullptr, SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode));\n canvas->clipRect({0, 128, 256, 256});\n canvas->drawPaint(paint);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "ac2fe555e2196e15863ea4ce74db3d54",
+ "file": "SkBlendMode_Reference",
+ "name": "Hard_Light"
+},
+ "Blend_Mode_Hue": {
+ "code": "void draw(SkCanvas* canvas) {\n canvas->drawImage(image, 0, 0);\n canvas->drawColor(0xFF00FF00, SkBlendMode::kHue);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "ade7ea4d06775cb252a1d15c7a8112d3",
+ "file": "SkBlendMode_Reference",
+ "name": "Hue"
+},
+ "Blend_Mode_Lighten": {
+ "code": "void draw(SkCanvas* canvas) {\n canvas->drawImage(image, 0, 0);\n SkColor colors[] = { SK_ColorBLACK, SK_ColorWHITE };\n SkPoint horz[] = { { 0, 0 }, { 256, 0 } };\n SkPaint paint;\n paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),\n SkShader::kClamp_TileMode));\n paint.setBlendMode(SkBlendMode::kLighten);\n canvas->drawPaint(paint);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "bbbe1a7b2587e76f9b2c7996b188a054",
+ "file": "SkBlendMode_Reference",
+ "name": "Lighten"
+},
+ "Blend_Mode_Luminosity": {
+ "code": "void draw(SkCanvas* canvas) {\n canvas->drawImage(image, 0, 0);\n canvas->drawColor(0xFF00FF00, SkBlendMode::kLuminosity);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "7161fa58aa064ee229ae346cb2e165c4",
+ "file": "SkBlendMode_Reference",
+ "name": "Luminosity"
+},
+ "Blend_Mode_Modulate": {
+ "code": "void draw(SkCanvas* canvas) {\n auto drawSquare = [=](int dx, int dy, SkBlendMode mode, const char* label) -> void {\n const SkColor colors[] = { SK_ColorBLACK, SK_ColorWHITE };\n const SkPoint horz[] = { { 0, 0 }, { 128, 0 } };\n SkPaint paint;\n paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),\n SkShader::kClamp_TileMode));\n paint.setBlendMode(mode);\n canvas->translate(dx, dy);\n canvas->drawRect({0, 0, 128, 128}, paint);\n paint.setBlendMode(SkBlendMode::kXor);\n canvas->drawString(label, 40, 100, paint);\n };\n drawSquare(0, 0, SkBlendMode::kSrc, \"destination\");\n drawSquare(128, 0, SkBlendMode::kSrc, \"\");\n drawSquare(0, 128, SkBlendMode::kSrc, \"\");\n canvas->translate(-128, -128);\n canvas->rotate(90, 0, 128);\n drawSquare(0, 0, SkBlendMode::kSrc, \"source\");\n drawSquare(0, -128, SkBlendMode::kModulate, \"modulate\");\n drawSquare(-128, 0, SkBlendMode::kMultiply, \"multiply\");\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "3fdac2b2f48bd227d2e74234c260bc8e",
+ "file": "SkBlendMode_Reference",
+ "name": "Modulate"
+},
+ "Blend_Mode_Multiply": {
+ "code": "void draw(SkCanvas* canvas) {\n canvas->drawImage(image, 0, 0);\n canvas->drawImage(image, 128, 0);\n canvas->drawImage(image, 0, 128);\n canvas->drawImage(image, 128, 128);\n SkPaint paint;\n paint.setBlendMode(SkBlendMode::kDstATop);\n SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };\n SkPoint vert[] = { { 0, 0 }, { 0, 256 } };\n paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n canvas->clipRect( { 30, 30, 226, 226 } );\n canvas->drawColor(0x80bb9977, SkBlendMode::kMultiply);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "145418271d58afc4070e7df42095c750",
+ "file": "SkBlendMode_Reference",
+ "name": "Multiply"
+},
+ "Blend_Mode_Overlay": {
+ "code": "void draw(SkCanvas* canvas) {\n SkColor colors[] = { SK_ColorRED, SK_ColorBLUE };\n SkPoint horz[] = { { 0, 0 }, { 256, 0 } };\n SkPaint paint;\n paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n paint.setBlendMode(SkBlendMode::kDstATop);\n SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };\n SkPoint vert[] = { { 0, 0 }, { 0, 256 } };\n paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n canvas->clipRect( { 30, 30, 226, 226 } );\n canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kOverlay);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "03bf042201de02d6d131938ccd3172eb",
+ "file": "SkBlendMode_Reference",
+ "name": "Overlay"
+},
+ "Blend_Mode_Plus": {
+ "code": "void draw(SkCanvas* canvas) {\n canvas->drawColor(SK_ColorBLACK);\n SkPaint paint;\n paint.setBlendMode(SkBlendMode::kPlus);\n for (auto color : { SK_ColorRED, SK_ColorBLUE, SK_ColorGREEN } ) {\n SkColor colors[] = { color, SkColorSetA(color, 192), SkColorSetA(color, 128),\n SkColorSetA(color, 0) }; \n paint.setShader(SkGradientShader::MakeRadial({ 64, 64}, 100,\n colors, nullptr, SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode));\n canvas->drawCircle(64, 64, 100, paint);\n canvas->translate(64, 64);\n }\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "05383441e510d54008402e128fc8ad2b",
+ "file": "SkBlendMode_Reference",
+ "name": "Plus"
+},
+ "Blend_Mode_Saturation": {
+ "code": "void draw(SkCanvas* canvas) {\n canvas->drawImage(image, 0, 0);\n canvas->drawColor(0xFF00FF00, SkBlendMode::kSaturation);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "4a99f5f6738b18afd92a4cb2bd762bf0",
+ "file": "SkBlendMode_Reference",
+ "name": "Saturation"
+},
+ "Blend_Mode_Screen": {
+ "code": "void draw(SkCanvas* canvas) {\n SkColor colors[] = { SK_ColorRED, SK_ColorBLUE };\n SkPoint horz[] = { { 0, 0 }, { 256, 0 } };\n SkPaint paint;\n paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n paint.setBlendMode(SkBlendMode::kDstATop);\n SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };\n SkPoint vert[] = { { 0, 0 }, { 0, 256 } };\n paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n canvas->clipRect( { 30, 30, 226, 226 } );\n canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kScreen);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "b7b42965927788d853f449f08ddf46de",
+ "file": "SkBlendMode_Reference",
+ "name": "Screen"
+},
+ "Blend_Mode_Soft_Light": {
+ "code": "void draw(SkCanvas* canvas) {\n const SkColor colors[] = { 0xFFFFFFFF, 0x3FFFFFFF };\n SkPaint paint;\n paint.setBlendMode(SkBlendMode::kSoftLight);\n paint.setShader(SkGradientShader::MakeRadial({ 128, 128}, 100, colors,\n nullptr, SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode));\n canvas->drawImage(image, 0, 0);\n canvas->drawCircle(128, 128, 100, paint);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "ac93f30dff13f8a8bb31398de370863b",
+ "file": "SkBlendMode_Reference",
+ "name": "Soft_Light"
+},
+ "Blend_Mode_Src": {
+ "code": "void draw(SkCanvas* canvas) {\n canvas->drawImage(image, 0, 0);\n canvas->clipRect({50, 50, 200, 200});\n SkPaint srcBlend;\n srcBlend.setBlendMode(SkBlendMode::kSrc);\n canvas->saveLayer(nullptr, &srcBlend);\n canvas->drawColor(0);\n SkPaint transRed;\n transRed.setColor(SkColorSetA(SK_ColorRED, 127));\n canvas->drawCircle(125, 125, 75, transRed);\n canvas->restore();\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "0fc85dd916cc1a5896d36c80b9847391",
+ "file": "SkBlendMode_Reference",
+ "name": "Src"
+},
+ "Blend_Mode_Src_Atop": {
+ "code": "void draw(SkCanvas* canvas) {\n SkColor colors[] = { SK_ColorRED, SK_ColorBLUE };\n SkPoint horz[] = { { 0, 0 }, { 256, 0 } };\n SkPaint paint;\n paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n paint.setBlendMode(SkBlendMode::kDstIn);\n SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };\n SkPoint vert[] = { { 0, 0 }, { 0, 256 } };\n paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n canvas->clipRect( { 30, 30, 226, 226 } );\n canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kSrcATop);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "a13148977bfc985934a92752c83a2041",
+ "file": "SkBlendMode_Reference",
+ "name": "Src_Atop"
+},
+ "Blend_Mode_Src_In": {
+ "code": "void draw(SkCanvas* canvas) {\n SkColor colors[] = { SK_ColorRED, SK_ColorBLUE };\n SkPoint horz[] = { { 0, 0 }, { 256, 0 } };\n SkPaint paint;\n paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n paint.setBlendMode(SkBlendMode::kDstIn);\n SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };\n SkPoint vert[] = { { 0, 0 }, { 0, 256 } };\n paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n canvas->clipRect( { 30, 30, 226, 226 } );\n canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kSrcIn);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "b0833c18fe8b0eeaab9bd6d2160d272f",
+ "file": "SkBlendMode_Reference",
+ "name": "Src_In"
+},
+ "Blend_Mode_Src_Out": {
+ "code": "void draw(SkCanvas* canvas) {\n SkColor colors[] = { SK_ColorRED, SK_ColorBLUE };\n SkPoint horz[] = { { 0, 0 }, { 256, 0 } };\n SkPaint paint;\n paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n paint.setBlendMode(SkBlendMode::kDstIn);\n SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };\n SkPoint vert[] = { { 0, 0 }, { 0, 256 } };\n paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n canvas->clipRect( { 30, 30, 226, 226 } );\n canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kSrcOut);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "ccc1e74226e0c9eacbc21f1eed017b84",
+ "file": "SkBlendMode_Reference",
+ "name": "Src_Out"
+},
+ "Blend_Mode_Src_Over": {
+ "code": "void draw(SkCanvas* canvas) {\n SkColor colors[] = { SK_ColorRED, SK_ColorBLUE };\n SkPoint horz[] = { { 0, 0 }, { 256, 0 } };\n SkPaint paint;\n paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n paint.setBlendMode(SkBlendMode::kDstIn);\n SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };\n SkPoint vert[] = { { 0, 0 }, { 0, 256 } };\n paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),\n SkShader::kClamp_TileMode));\n canvas->drawPaint(paint);\n canvas->clipRect( { 30, 30, 226, 226 } );\n canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kSrcOver);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "2ea9c149964a06cdb4929158cb4f15f8",
+ "file": "SkBlendMode_Reference",
+ "name": "Src_Over"
+},
+ "Blend_Mode_Xor": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setBlendMode(SkBlendMode::kXor);\n for (auto color : { SK_ColorRED, SK_ColorBLUE, SK_ColorGREEN } ) {\n SkColor colors[] = { color, SkColorSetA(color, 192), SkColorSetA(color, 128),\n SkColorSetA(color, 0) }; \n paint.setShader(SkGradientShader::MakeRadial({ 64, 64}, 100,\n colors, nullptr, SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode));\n canvas->drawCircle(64, 64, 100, paint);\n canvas->translate(64, 64);\n }\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "29db2c7493d9098b8a086ddbe30dd6d6",
+ "file": "SkBlendMode_Reference",
+ "name": "Xor"
+},
+ "Canvas_Clip": {
"code": "void draw(SkCanvas* canvas) {\n SkPaint redPaint, scalePaint;\n redPaint.setAntiAlias(true);\n redPaint.setColor(SK_ColorRED);\n canvas->save();\n for (bool antialias : { false, true } ) {\n canvas->save();\n canvas->clipRect(SkRect::MakeWH(19.5f, 11.5f), antialias);\n canvas->drawCircle(17, 11, 8, redPaint);\n canvas->restore();\n canvas->translate(16, 0);\n }\n canvas->restore();\n SkMatrix matrix;\n matrix.setScale(6, 6);\n scalePaint.setImageFilter(\n SkImageFilter::MakeMatrixFilter(matrix, kNone_SkFilterQuality, nullptr));\n SkCanvas::SaveLayerRec saveLayerRec(\n nullptr, &scalePaint, SkCanvas::kInitWithPrevious_SaveLayerFlag);\n canvas->saveLayer(saveLayerRec);\n canvas->restore();\n}",
"width": 256,
"height": 90,
@@ -3336,6 +3590,46 @@
"file": "SkColor_Reference",
"name": "Color_Constants_White"
},
+ "Illustrations_Blend_Mode_Color_Blends": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint srcPaint;\n srcPaint.setAntiAlias(true);\n SkPaint labelPaint = srcPaint;\n labelPaint.setTextAlign(SkPaint::kCenter_Align);\n labelPaint.setTextSize(16);\n SkPaint dstPaint = labelPaint;\n dstPaint.setTextSize(80);\n dstPaint.setColor(0xFF606080);\n dstPaint.setTypeface(SkTypeface::MakeFromName(\"Roboto\", SkFontStyle::Bold()));\n srcPaint.setColor(0xFFcc6633);\n SkPath srcPath;\n const SkPoint points[] = {{20, 20}, {80, 45}, {45, 80}};\n srcPath.addPoly(points, SK_ARRAY_COUNT(points), true);\n canvas->drawColor(0, SkBlendMode::kClear);\n for (auto blend : { SkBlendMode::kHue, SkBlendMode::kSaturation, SkBlendMode::kColor,\n SkBlendMode::kLuminosity } ) {\n canvas->drawString(\"&\", 50, 80, dstPaint);\n srcPaint.setBlendMode(blend);\n canvas->drawPath(srcPath, srcPaint);\n canvas->drawString(SkBlendMode_Name(blend), 50, 100, labelPaint);\n canvas->translate(90, 0);\n }\n}",
+ "width": 480,
+ "height": 110,
+ "hash": "03710c1770728da885fa4ac24a19d5d1",
+ "file": "illustrations",
+ "name": "Blend_Mode_Color_Blends"
+},
+ "Illustrations_Blend_Mode_Lighten_Darken": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint srcPaint;\n srcPaint.setAntiAlias(true);\n SkPaint labelPaint = srcPaint;\n labelPaint.setTextAlign(SkPaint::kCenter_Align);\n labelPaint.setTextSize(16);\n SkPaint dstPaint = labelPaint;\n dstPaint.setTextSize(80);\n dstPaint.setColor(0xFF606080);\n dstPaint.setTypeface(SkTypeface::MakeFromName(\"Roboto\", SkFontStyle::Bold()));\n srcPaint.setColor(0xFFcc6633);\n SkPath srcPath;\n const SkPoint points[] = {{20, 20}, {80, 45}, {45, 80}};\n srcPath.addPoly(points, SK_ARRAY_COUNT(points), true);\n canvas->drawColor(0, SkBlendMode::kClear);\n for (auto blend : { SkBlendMode::kPlus, SkBlendMode::kScreen, SkBlendMode::kOverlay,\n SkBlendMode::kDarken, SkBlendMode::kLighten, SkBlendMode::kColorDodge,\n SkBlendMode::kColorBurn, SkBlendMode::kHardLight, SkBlendMode::kSoftLight,\n SkBlendMode::kDifference, SkBlendMode::kExclusion, SkBlendMode::kMultiply } ) {\n canvas->drawString(\"&\", 50, 80, dstPaint);\n srcPaint.setBlendMode(blend);\n canvas->drawPath(srcPath, srcPaint);\n canvas->drawString(SkBlendMode_Name(blend), 50, 100, labelPaint);\n canvas->translate(90, 0);\n if (SkBlendMode::kLighten == blend || SkBlendMode::kDifference == blend) {\n canvas->translate(-90 * 5, 100);\n }\n }\n}",
+ "width": 480,
+ "height": 330,
+ "hash": "8e04f89252632da0fffe713f07f2296f",
+ "file": "illustrations",
+ "name": "Blend_Mode_Lighten_Darken"
+},
+ "Illustrations_Blend_Mode_Modulate_Blend": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint srcPaint;\n srcPaint.setAntiAlias(true);\n SkPaint labelPaint = srcPaint;\n labelPaint.setTextAlign(SkPaint::kCenter_Align);\n labelPaint.setTextSize(16);\n SkPaint dstPaint = labelPaint;\n dstPaint.setTextSize(80);\n dstPaint.setColor(0xFF606080);\n dstPaint.setTypeface(SkTypeface::MakeFromName(\"Roboto\", SkFontStyle::Bold()));\n SkBitmap srcBits;\n srcBits.allocN32Pixels(80, 84);\n SkCanvas srcCanvas(srcBits);\n srcPaint.setColor(0xFFcc6633);\n SkPath srcPath;\n const SkPoint points[] = {{20, 20}, {80, 45}, {45, 80}};\n srcPath.addPoly(points, SK_ARRAY_COUNT(points), true);\n srcBits.eraseColor(0);\n srcCanvas.drawPath(srcPath, srcPaint);\n canvas->drawColor(0, SkBlendMode::kClear);\n srcPaint.setBlendMode(SkBlendMode::kModulate);\n for (auto step: { 1, 2 } ) {\n canvas->drawString(\"&\", 50, 80, dstPaint);\n if (1 == step) {\n canvas->drawBitmap(srcBits, 0, 0, &srcPaint);\n canvas->drawString(\"Bitmap\", 50, 18, labelPaint);\n } else {\n canvas->drawPath(srcPath, srcPaint);\n canvas->drawString(\"Geometry\", 50, 18, labelPaint);\n }\n canvas->drawString(SkBlendMode_Name(SkBlendMode::kModulate), 50, 100, labelPaint);\n canvas->translate(120, 0);\n }\n}",
+ "width": 480,
+ "height": 110,
+ "hash": "d8abdd8fb56f9e69342d745d425c4a17",
+ "file": "illustrations",
+ "name": "Blend_Mode_Modulate_Blend"
+},
+ "Illustrations_Blend_Mode_Porter_Duff": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint srcPaint;\n srcPaint.setAntiAlias(true);\n SkPaint labelPaint = srcPaint;\n labelPaint.setTextAlign(SkPaint::kCenter_Align);\n labelPaint.setTextSize(16);\n SkPaint dstPaint = labelPaint;\n dstPaint.setTextSize(80);\n dstPaint.setColor(0xFF606080);\n dstPaint.setTypeface(SkTypeface::MakeFromName(\"Roboto\", SkFontStyle::Bold()));\n SkBitmap srcBits;\n srcBits.allocN32Pixels(80, 84);\n SkCanvas srcCanvas(srcBits);\n srcPaint.setColor(0xFFcc6633);\n SkPath srcPath;\n const SkPoint points[] = {{20, 20}, {80, 45}, {45, 80}};\n srcPath.addPoly(points, SK_ARRAY_COUNT(points), true);\n srcBits.eraseColor(0);\n srcCanvas.drawPath(srcPath, srcPaint);\n canvas->drawColor(0, SkBlendMode::kClear);\n for (auto blend : { SkBlendMode::kSrc, SkBlendMode::kSrcATop, SkBlendMode::kSrcOver,\n SkBlendMode::kSrcIn, SkBlendMode::kSrcOut,\n SkBlendMode::kDst, SkBlendMode::kDstATop, SkBlendMode::kDstOver,\n SkBlendMode::kDstIn, SkBlendMode::kDstOut,\n SkBlendMode::kClear, SkBlendMode::kXor } ) {\n canvas->drawString(\"&\", 50, 80, dstPaint);\n srcPaint.setBlendMode(blend);\n canvas->drawBitmap(srcBits, 0, 0, &srcPaint);\n canvas->drawString(SkBlendMode_Name(blend), 50, 100, labelPaint);\n canvas->translate(80, 0);\n if (SkBlendMode::kSrcOut == blend || SkBlendMode::kDstOut == blend) {\n canvas->translate(-80 * 5, 100);\n }\n }\n}",
+ "width": 480,
+ "height": 330,
+ "hash": "8c27fb2a58f63505cffa74c1c79e16ba",
+ "file": "illustrations",
+ "name": "Blend_Mode_Porter_Duff"
+},
+ "Illustrations_Blend_Mode_Porter_Duff_2": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint srcPaint;\n srcPaint.setAntiAlias(true);\n SkPaint labelPaint = srcPaint;\n labelPaint.setTextAlign(SkPaint::kCenter_Align);\n labelPaint.setTextSize(16);\n SkPaint dstPaint = labelPaint;\n dstPaint.setTextSize(80);\n dstPaint.setColor(0xFF606080);\n dstPaint.setTypeface(SkTypeface::MakeFromName(\"Roboto\", SkFontStyle::Bold()));\n srcPaint.setColor(0xFFcc6633);\n SkPath srcPath;\n const SkPoint points[] = {{20, 20}, {80, 45}, {45, 80}};\n srcPath.addPoly(points, SK_ARRAY_COUNT(points), true);\n canvas->drawColor(0, SkBlendMode::kClear);\n SkBitmap dstBits;\n dstBits.allocN32Pixels(80, 80);\n SkCanvas dstCanvas(dstBits);\n for (auto blend : { SkBlendMode::kSrc, SkBlendMode::kSrcATop, SkBlendMode::kSrcOver,\n SkBlendMode::kSrcIn, SkBlendMode::kSrcOut,\n SkBlendMode::kDst, SkBlendMode::kDstATop, SkBlendMode::kDstOver,\n SkBlendMode::kDstIn, SkBlendMode::kDstOut,\n SkBlendMode::kClear, SkBlendMode::kXor } ) {\n canvas->drawString(\"&\", 50, 80, dstPaint);\n srcPaint.setBlendMode(blend);\n canvas->drawPath(srcPath, srcPaint);\n canvas->drawString(SkBlendMode_Name(blend), 50, 100, labelPaint);\n canvas->translate(80, 0);\n if (SkBlendMode::kSrcOut == blend || SkBlendMode::kDstOut == blend) {\n canvas->translate(-80 * 5, 100);\n }\n }\n}",
+ "width": 480,
+ "height": 330,
+ "hash": "50ebbb0162bbf60524a196236d66c915",
+ "file": "illustrations",
+ "name": "Blend_Mode_Porter_Duff_2"
+},
"Illustrations_Image_Info_Color_Type_ARGB_4444": {
"code": "void draw(SkCanvas* canvas) {\n canvas->scale(1.25f, 1.25f);\n SkPaint paint;\n paint.setAntiAlias(true);\n paint.setTextSize(10);\n paint.setTextAlign(SkPaint::kCenter_Align);\n canvas->drawString(\"16-bit word\", 5 + 20 * 8, 20, paint);\n canvas->drawString(\"little endian byte order\", 5 + 20 * 4, 85, paint);\n auto drawBoxText = [=](SkScalar e[], const char* s[], int count, int n, SkScalar yPos) -> void {\n SkPaint p(paint);\n p.setColor(SK_ColorRED);\n SkScalar xPos = 15;\n int width = n % 32 + 1;\n int lastN = n > 32 ? 32 : 0;\n for (; n >= lastN; --n) {\n for (int i = 0; i <= count; ++i) {\n int a = width - e[i];\n if (a == n || a == n + 1 || a == n - 32 || a == n - 31) {\n char num[3] = {(char) ('0' + n / 10), (char) ('0' + n % 10), '\\0'};\n canvas->drawString(n >= 10 ? num : &num[1], xPos, yPos - 5, p);\n break;\n }\n }\n xPos += 20;\n }\n p.setColor(SK_ColorBLACK);\n for (int i = 0; i < count; ++i) {\n canvas->drawString(s[i], 5 + (e[i] + e[i + 1]) * 10, yPos + 10, p);\n }\n p.setStyle(SkPaint::kStroke_Style);\n for (int i = 0; i <= count; ++i) {\n canvas->drawLine(5 + e[i] * 20, yPos, 5 + e[i] * 20, yPos + 15, p);\n }\n for (int i = 0; i < 2; ++i) {\n canvas->drawLine(5 + e[0] * 20, yPos + i * 15, 5 + e[count] * 20, yPos + i * 15, p);\n }\n };\n SkScalar edges[] = { 0, 4, 8, 12, 16 };\n const char* labels[] = { \"red\", \"green\", \"blue\", \"alpha\" };\n drawBoxText(&edges[0], &labels[0], 4, 15, 45);\n drawBoxText(&edges[0], &labels[2], 2, 7, 110);\n drawBoxText(&edges[0], &labels[0], 2, 7, 160);\n}\n",
"width": 415,
@@ -3376,6 +3670,14 @@
"file": "illustrations",
"name": "Image_Info_Color_Type_RGBA_F16"
},
+ "Illustrations_Image_Info_Color_Type_RGBA_F32": {
+ "code": "void draw(SkCanvas* canvas) {\n canvas->scale(1.25f, 1.25f);\n SkPaint paint;\n paint.setAntiAlias(true);\n paint.setTextSize(10);\n paint.setTextAlign(SkPaint::kCenter_Align);\n canvas->drawString(\"128-bit word\", 5 + 20 * 16, 20, paint);\n canvas->drawString(\"little endian byte order\", 5 + 20 * 4, 135, paint);\n for (int i = 0; i < 4; ++i) {\n canvas->drawString(\"(low bits)\", 5 + 10 * 4, 187 + i * 100, paint);\n canvas->drawString(\"(high bits)\", 105 + 10 * 4, 237 + i * 100, paint);\n }\n auto drawBoxText = [=](SkScalar e[], const char* s[], const char* nums[] , \n int count, int n, SkScalar yPos) -> void {\n SkPaint p(paint);\n p.setColor(SK_ColorRED);\n SkScalar xPos = 15;\n int stringIndex = 0;\n for (int i = n; i >= 0; --i) {\n if (0 == i || n == i || 32 == i || 31 == i) {\n int x = xPos;\n if (2 == count) {\n x += stringIndex * 12 + (stringIndex ? 8 : 0);\n }\n canvas->drawString(nums[stringIndex], x, yPos - 5, p);\n if (1 == count) {\n canvas->drawString(nums[stringIndex], xPos + 100, yPos - 5, p);\n }\n ++stringIndex;\n }\n xPos += 9;\n }\n p.setColor(SK_ColorBLACK);\n for (int i = 0; i < count; ++i) {\n canvas->drawString(s[i], 5 + (e[i] + e[i + 1]) * 5, yPos + 10, p);\n if (1 == count) {\n canvas->drawString(s[i], 105 + (e[i] + e[i + 1]) * 5, yPos + 10, p);\n }\n }\n p.setStyle(SkPaint::kStroke_Style);\n for (int i = 0; i <= count; ++i) {\n canvas->drawLine(5 + e[i] * 10, yPos, 5 + e[i] * 10, yPos + 15, p);\n if (1 == count) {\n canvas->drawLine(105 + e[i] * 10, yPos, 105 + e[i] * 10, yPos + 15, p);\n }\n }\n for (int i = 0; i < 2; ++i) {\n canvas->drawLine(5 + e[0] * 10, yPos + i * 15,\n 5 + e[count] * 10, yPos + i * 15, p);\n if (1 == count) {\n canvas->drawLine(105 + e[0] * 10, yPos + i * 15,\n 105 + e[count] * 10, yPos + i * 15, p);\n }\n }\n };\n SkScalar edges[] = { 0, 32, 64,\n 0, 8\n };\n const char* labels[] = { \"alpha\", \"blue\", \"green\", \"red\" };\n const char* nums128[] = { \"127\", \"96\", \"95\", \"64\"};\n const char* nums64[] = { \"63\", \"32\", \"31\", \"0\"};\n const char* nums8[] = { \"7\", \"0\"};\n drawBoxText(&edges[0], &labels[0], nums128, 2, 63, 45);\n drawBoxText(&edges[0], &labels[2], nums64, 2, 63, 95);\n drawBoxText(&edges[3], &labels[3], nums8, 1, 7, 160);\n drawBoxText(&edges[3], &labels[3], nums8, 1, 7, 210);\n drawBoxText(&edges[3], &labels[2], nums8, 1, 7, 260);\n drawBoxText(&edges[3], &labels[2], nums8, 1, 7, 310);\n drawBoxText(&edges[3], &labels[1], nums8, 1, 7, 360);\n drawBoxText(&edges[3], &labels[1], nums8, 1, 7, 410);\n drawBoxText(&edges[3], &labels[0], nums8, 1, 7, 460);\n drawBoxText(&edges[3], &labels[0], nums8, 1, 7, 510);\n}\n",
+ "width": 812,
+ "height": 685,
+ "hash": "b26119f9312d5f5d4011bf2dac94fafe",
+ "file": "illustrations",
+ "name": "Image_Info_Color_Type_RGBA_F32"
+},
"Illustrations_Image_Info_Color_Type_RGB_101010": {
"code": "void draw(SkCanvas* canvas) {\n canvas->scale(1.25f, 1.25f);\n SkPaint paint;\n paint.setAntiAlias(true);\n paint.setTextSize(10);\n paint.setTextAlign(SkPaint::kCenter_Align);\n canvas->drawString(\"32-bit word\", 5 + 20 * 16, 20, paint);\n canvas->drawString(\"little endian byte order\", 5 + 20 * 4, 85, paint);\n canvas->drawString(\"(low bits)\", 5 + 20 * 4, 137, paint);\n canvas->drawString(\"(low bits)\", 5 + 20 * 3, 187, paint);\n canvas->drawString(\"(high bits)\", 5 + 20 * 7, 187, paint);\n canvas->drawString(\"(low bits)\", 5 + 20 * 2, 237, paint);\n canvas->drawString(\"(high bits)\", 5 + 20 * 6, 237, paint);\n canvas->drawString(\"(high bits)\", 5 + 20 * 5, 287, paint);\n auto drawBoxText = [=](SkScalar e[], const char* s[], int count, int n, SkScalar yPos) -> void {\n SkPaint p(paint);\n p.setColor(SK_ColorRED);\n SkScalar xPos = 15;\n int width = n % 32 + 1;\n int lastN = n > 32 ? 32 : 0;\n for (; n >= lastN; --n) {\n for (int i = 0; i <= count; ++i) {\n int a = width - e[i];\n if (a == n || a == n + 1 || a == n - 32 || a == n - 31) {\n char num[3] = {(char) ('0' + n / 10), (char) ('0' + n % 10), '\\0'};\n canvas->drawString(n >= 10 ? num : &num[1], xPos, yPos - 5, p);\n break;\n }\n }\n xPos += 20;\n }\n p.setColor(SK_ColorBLACK);\n for (int i = 0; i < count; ++i) {\n canvas->drawString(s[i], 5 + (e[i] + e[i + 1]) * 10, yPos + 10, p);\n }\n p.setStyle(SkPaint::kStroke_Style);\n for (int i = 0; i <= count; ++i) {\n canvas->drawLine(5 + e[i] * 20, yPos, 5 + e[i] * 20, yPos + 15, p);\n }\n for (int i = 0; i < 2; ++i) {\n canvas->drawLine(5 + e[0] * 20, yPos + i * 15, 5 + e[count] * 20, yPos + i * 15, p);\n }\n };\n SkScalar edges[] = { 0, 2, 12, 22, 32,\n 0, 8,\n 0, 6, 8,\n 0, 4, 8,\n 0, 2, 8\n };\n const char* labels[] = { \"unused\", \"blue\", \"green\", \"red\" };\n drawBoxText(&edges[0], &labels[0], 4, 31, 45);\n drawBoxText(&edges[5], &labels[3], 1, 7, 110);\n drawBoxText(&edges[7], &labels[2], 2, 7, 160);\n drawBoxText(&edges[10], &labels[1], 2, 7, 210);\n drawBoxText(&edges[13], &labels[0], 2, 7, 260);\n}\n",
"width": 812,
@@ -3473,10 +3775,10 @@
"name": "Color_Type_RGBA_8888"
},
"Image_Info_Color_Type_RGBA_F16": {
- "code": "union FloatUIntUnion {\n uint32_t fUInt;\n float fFloat;\n};\nuint16_t FloatToHalf(float f) {\n static const FloatUIntUnion magic = { 15 << 23 };\n static const uint32_t round_mask = ~0xfffu;\n FloatUIntUnion floatUnion;\n floatUnion.fFloat = f;\n uint32_t sign = floatUnion.fUInt & 0x80000000u;\n floatUnion.fUInt ^= sign;\n floatUnion.fUInt &= round_mask;\n floatUnion.fFloat *= magic.fFloat;\n floatUnion.fUInt -= round_mask;\n return (floatUnion.fUInt >> 13) | (sign >> 16);\n}\n\nvoid draw(SkCanvas* canvas) {\n canvas->scale(16, 16);\n SkBitmap bitmap;\n SkImageInfo imageInfo = SkImageInfo::Make(2, 2, kRGBA_F16_SkColorType, kPremul_SkAlphaType);\n bitmap.allocPixels(imageInfo);\n SkCanvas offscreen(bitmap);\n offscreen.clear(SK_ColorGREEN);\n canvas->drawBitmap(bitmap, 0, 0);\n auto H = [](float c) -> uint16_t {\n return FloatToHalf(c);\n };\n // R G B A\n uint16_t red_f16[][4] = { { H(1.0f), H(0.0f), H(0.0f), H(1.0f) },\n { H(.75f), H(0.0f), H(0.0f), H(1.0f) },\n { H(.50f), H(0.0f), H(0.0f), H(1.0f) },\n { H(.25f), H(0.0f), H(0.0f), H(1.0f) } };\n uint16_t blue_f16[][4] = { { H(0.0f), H(0.0f), H(1.0f), H(1.0f) },\n { H(0.0f), H(0.0f), H(.75f), H(1.0f) },\n { H(0.0f), H(0.0f), H(.50f), H(1.0f) },\n { H(0.0f), H(0.0f), H(.25f), H(1.0f) } };\n SkPixmap redPixmap(imageInfo, red_f16, imageInfo.minRowBytes());\n if (bitmap.writePixels(redPixmap, 0, 0)) {\n canvas->drawBitmap(bitmap, 2, 2);\n }\n SkPixmap bluePixmap(imageInfo, blue_f16, imageInfo.minRowBytes());\n if (bitmap.writePixels(bluePixmap, 0, 0)) {\n canvas->drawBitmap(bitmap, 4, 4);\n }\n}\n",
+ "code": "union FloatUIntUnion {\n uint32_t fUInt;\n float fFloat;\n};\nuint16_t FloatToHalf(float f) {\n static const FloatUIntUnion magic = { 15 << 23 };\n static const uint32_t round_mask = ~0xfffu;\n FloatUIntUnion floatUnion;\n floatUnion.fFloat = f;\n uint32_t sign = floatUnion.fUInt & 0x80000000u;\n floatUnion.fUInt ^= sign;\n floatUnion.fUInt &= round_mask;\n floatUnion.fFloat *= magic.fFloat;\n floatUnion.fUInt -= round_mask;\n return (floatUnion.fUInt >> 13) | (sign >> 16);\n}\n\nvoid draw(SkCanvas* canvas) {\n canvas->scale(16, 16);\n SkBitmap bitmap;\n SkImageInfo imageInfo = SkImageInfo::Make(2, 2, kRGBA_F16_SkColorType, kPremul_SkAlphaType);\n bitmap.allocPixels(imageInfo);\n SkCanvas offscreen(bitmap);\n offscreen.clear(SK_ColorGREEN);\n canvas->drawBitmap(bitmap, 0, 0);\n auto H = [](float c) -> uint16_t {\n return FloatToHalf(c);\n };\n // R G B A\n uint16_t red_f16[][4] = { { H(1.0), H(0.0), H(0.0), H(1.0) },\n { H(.75), H(0.0), H(0.0), H(1.0) },\n { H(.50), H(0.0), H(0.0), H(1.0) },\n { H(.25), H(0.0), H(0.0), H(1.0) } };\n uint16_t blue_f16[][4] = { { H(0.0), H(0.0), H(1.0), H(1.0) },\n { H(0.0), H(0.0), H(.75), H(1.0) },\n { H(0.0), H(0.0), H(.50), H(1.0) },\n { H(0.0), H(0.0), H(.25), H(1.0) } };\n SkPixmap redPixmap(imageInfo, red_f16, imageInfo.minRowBytes());\n if (bitmap.writePixels(redPixmap, 0, 0)) {\n canvas->drawBitmap(bitmap, 2, 2);\n }\n SkPixmap bluePixmap(imageInfo, blue_f16, imageInfo.minRowBytes());\n if (bitmap.writePixels(bluePixmap, 0, 0)) {\n canvas->drawBitmap(bitmap, 4, 4);\n }\n}\n",
"width": 256,
"height": 96,
- "hash": "788ac33198103a14a5076dc3e03f2f4b",
+ "hash": "dd81527bbdf5eaae7dd21ac04ab84f9e",
"file": "SkImageInfo_Reference",
"name": "Color_Type_RGBA_F16"
},
@@ -6808,6 +7110,118 @@
"file": "SkPath_Reference",
"name": "SkPath::transform_2"
},
+ "SkPicture_AbortCallback_abort": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkPicture_Reference",
+ "name": "SkPicture::AbortCallback::abort()"
+},
+ "SkPicture_AbortCallback_empty_constructor": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkPicture_Reference",
+ "name": "SkPicture::AbortCallback::AbortCallback()"
+},
+ "SkPicture_MakeFromData": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkPicture_Reference",
+ "name": "SkPicture::MakeFromData"
+},
+ "SkPicture_MakeFromData_2": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkPicture_Reference",
+ "name": "SkPicture::MakeFromData_2"
+},
+ "SkPicture_MakeFromStream": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkPicture_Reference",
+ "name": "SkPicture::MakeFromStream"
+},
+ "SkPicture_MakePlaceholder": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkPicture_Reference",
+ "name": "SkPicture::MakePlaceholder"
+},
+ "SkPicture_approximateBytesUsed": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkPicture_Reference",
+ "name": "SkPicture::approximateBytesUsed"
+},
+ "SkPicture_approximateOpCount": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkPicture_Reference",
+ "name": "SkPicture::approximateOpCount"
+},
+ "SkPicture_cullRect": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkPicture_Reference",
+ "name": "SkPicture::cullRect"
+},
+ "SkPicture_destructor": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkPicture_Reference",
+ "name": "SkPicture::AbortCallback::~AbortCallback()"
+},
+ "SkPicture_playback": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkPicture_Reference",
+ "name": "SkPicture::playback()"
+},
+ "SkPicture_serialize": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkPicture_Reference",
+ "name": "SkPicture::serialize()"
+},
+ "SkPicture_serialize_2": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkPicture_Reference",
+ "name": "SkPicture::serialize_2"
+},
+ "SkPicture_uniqueID": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkPicture_Reference",
+ "name": "SkPicture::uniqueID"
+},
"SkPixmap_erase": {
"code": "void draw(SkCanvas* canvas) {\n uint32_t storage[2];\n SkImageInfo info = SkImageInfo::MakeN32Premul(1, 2);\n SkPixmap pixmap(info, storage, info.minRowBytes());\n pixmap.erase(SK_ColorBLUE, {0, 0, 1, 1});\n pixmap.erase(SK_ColorRED, {0, 1, 1, 2});\n SkBitmap bitmap;\n canvas->scale(20, 20);\n bitmap.installPixels(pixmap);\n canvas->drawBitmap(bitmap, 0, 0);\n}",
"width": 256,
@@ -7152,6 +7566,358 @@
"file": "SkColor_Reference",
"name": "SkRGBToHSV"
},
+ "SkRRect_Corner": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::Corner"
+},
+ "SkRRect_MakeEmpty": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::MakeEmpty"
+},
+ "SkRRect_MakeOval": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::MakeOval"
+},
+ "SkRRect_MakeRect": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::MakeRect"
+},
+ "SkRRect_MakeRectXY": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::MakeRectXY"
+},
+ "SkRRect_Type": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::Type"
+},
+ "SkRRect_contains": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::contains()"
+},
+ "SkRRect_copy_const_SkRRect": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::SkRRect(const SkRRect& rrect)"
+},
+ "SkRRect_copy_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::operator=(const SkRRect& rrect)"
+},
+ "SkRRect_dump": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::dump()"
+},
+ "SkRRect_dumpHex": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::dumpHex"
+},
+ "SkRRect_dump_2": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::dump_2"
+},
+ "SkRRect_empty_constructor": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::SkRRect()"
+},
+ "SkRRect_equal_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::operator==(const SkRRect& a, const SkRRect& b)"
+},
+ "SkRRect_getBounds": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::getBounds"
+},
+ "SkRRect_getSimpleRadii": {
+ "code": "void draw(SkCanvas* canvas) {\n auto drawDetails = [=](const SkRRect& rrect) {\n SkPaint paint;\n paint.setAntiAlias(true);\n paint.setTextAlign(SkPaint::kCenter_Align);\n paint.setTextSize(12);\n canvas->drawRRect(rrect, paint);\n SkVector corner = rrect.getSimpleRadii();\n std::string label = \"corner: \" + std::to_string(corner.fX).substr(0, 3) + \", \" +\n std::to_string(corner.fY).substr(0, 3);\n canvas->drawString(label.c_str(), 64, 90, paint);\n canvas->translate(128, 0);\n };\n SkRRect rrect = SkRRect::MakeRect({30, 10, 100, 60});\n drawDetails(rrect);\n rrect.setRectXY(rrect.getBounds(), 5, 8);\n drawDetails(rrect);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "f0e02101ecbdb5a2963ec82e7832afb1",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::getSimpleRadii"
+},
+ "SkRRect_getType": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::getType"
+},
+ "SkRRect_inset": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::inset()"
+},
+ "SkRRect_inset_2": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::inset_2"
+},
+ "SkRRect_isComplex": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n paint.setTextAlign(SkPaint::kCenter_Align);\n paint.setTextSize(16);\n SkVector radii[] = {{25, 30}, {40, 30}, {40, 30}, {20, 30}};\n SkRRect rrect;\n rrect.setRectRadii({30, 10, 100, 60}, radii);\n canvas->drawRRect(rrect, paint);\n canvas->drawString(rrect.isComplex() ? \"complex\" : \"not complex\", 64, 90, paint);\n radii[0].fX = 20;\n rrect.setRectRadii(rrect.getBounds(), radii);\n canvas->translate(128, 0);\n canvas->drawRRect(rrect, paint);\n canvas->drawString(rrect.isComplex() ? \"complex\" : \"not complex\", 64, 90, paint);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "75db3f4e4757478bca641bccf89b9398",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::isComplex"
+},
+ "SkRRect_isEmpty": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n paint.setTextAlign(SkPaint::kCenter_Align);\n paint.setTextSize(16);\n SkRRect rrect = SkRRect::MakeRectXY({30, 10, 100, 60}, 10, 5);\n canvas->drawRRect(rrect, paint);\n canvas->drawString(rrect.isEmpty() ? \"empty\" : \"not empty\", 64, 90, paint);\n rrect.inset(40, 0);\n canvas->translate(128, 0);\n canvas->drawRRect(rrect, paint);\n canvas->drawString(rrect.isEmpty() ? \"empty\" : \"not empty\", 64, 90, paint);\n}",
+ "width": 256,
+ "height": 100,
+ "hash": "3afe4ea247923e06326aeb2b165c7485",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::isEmpty"
+},
+ "SkRRect_isNinePatch": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n paint.setTextAlign(SkPaint::kCenter_Align);\n paint.setTextSize(16);\n SkVector radii[] = {{20, 30}, {40, 30}, {40, 30}, {20, 30}};\n SkRRect rrect;\n rrect.setRectRadii({30, 10, 100, 60}, radii);\n canvas->drawRRect(rrect, paint);\n canvas->drawString(rrect.isNinePatch() ? \"9 patch\" : \"not 9 patch\", 64, 90, paint);\n radii[0].fX = 35;\n rrect.setRectRadii(rrect.getBounds(), radii);\n canvas->translate(128, 0);\n canvas->drawRRect(rrect, paint);\n canvas->drawString(rrect.isNinePatch() ? \"9 patch\" : \"not 9 patch\", 64, 90, paint);\n}",
+ "width": 256,
+ "height": 100,
+ "hash": "568cb730e66d0df09a7d9bd9d6142c9e",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::isNinePatch"
+},
+ "SkRRect_isOval": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n paint.setTextAlign(SkPaint::kCenter_Align);\n paint.setTextSize(16);\n SkRRect rrect = SkRRect::MakeRectXY({30, 10, 100, 60}, 40, 30);\n canvas->drawRRect(rrect, paint);\n canvas->drawString(rrect.isOval() ? \"oval\" : \"not oval\", 64, 90, paint);\n rrect.setRectXY(rrect.getBounds(), 35, 25);\n canvas->translate(128, 0);\n canvas->drawRRect(rrect, paint);\n canvas->drawString(rrect.isOval() ? \"oval\" : \"not oval\", 64, 90, paint);\n}",
+ "width": 256,
+ "height": 100,
+ "hash": "ab9b3aef7896aee80b780789848fbba4",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::isOval"
+},
+ "SkRRect_isRect": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n paint.setTextAlign(SkPaint::kCenter_Align);\n paint.setTextSize(16);\n SkRRect rrect = SkRRect::MakeRect({30, 10, 100, 60});\n canvas->drawRRect(rrect, paint);\n canvas->drawString(rrect.isRect() ? \"rect\" : \"not rect\", 64, 90, paint);\n SkVector radii[] = {{10, 10}, {0, 0}, {0, 0}, {0, 0}};\n rrect.setRectRadii(rrect.getBounds(), radii);\n canvas->translate(128, 0);\n canvas->drawRRect(rrect, paint);\n canvas->drawString(rrect.isRect() ? \"rect\" : \"not rect\", 64, 90, paint);\n}",
+ "width": 256,
+ "height": 100,
+ "hash": "e2dcdad0e9cb7ba3e78a9871e9229753",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::isRect"
+},
+ "SkRRect_isSimple": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n paint.setAntiAlias(true);\n paint.setTextAlign(SkPaint::kCenter_Align);\n paint.setTextSize(16);\n SkVector radii[] = {{40, 30}, {40, 30}, {40, 30}, {40, 30}};\n SkRRect rrect;\n rrect.setRectRadii({30, 10, 100, 60}, radii);\n canvas->drawRRect(rrect, paint);\n canvas->drawString(rrect.isSimple() ? \"simple\" : \"not simple\", 64, 90, paint);\n radii[0].fX = 35;\n rrect.setRectRadii(rrect.getBounds(), radii);\n canvas->translate(128, 0);\n canvas->drawRRect(rrect, paint);\n canvas->drawString(rrect.isSimple() ? \"simple\" : \"not simple\", 64, 90, paint);\n}",
+ "width": 256,
+ "height": 100,
+ "hash": "65bbb109483ed79edb32027cf71851eb",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::isSimple"
+},
+ "SkRRect_isValid": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::isValid"
+},
+ "SkRRect_kSizeInMemory": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::kSizeInMemory"
+},
+ "SkRRect_makeOffset": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::makeOffset"
+},
+ "SkRRect_notequal_operator": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::operator!=(const SkRRect& a, const SkRRect& b)"
+},
+ "SkRRect_offset": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::offset()"
+},
+ "SkRRect_outset": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::outset()"
+},
+ "SkRRect_outset_2": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::outset_2"
+},
+ "SkRRect_radii": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::radii()"
+},
+ "SkRRect_readFromMemory": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::readFromMemory"
+},
+ "SkRRect_rect": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::rect()"
+},
+ "SkRRect_setEmpty": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n SkRRect rrect = SkRRect::MakeRect({30, 10, 100, 60});\n canvas->drawRRect(rrect, paint);\n rrect.setEmpty();\n paint.setColor(SK_ColorBLUE);\n canvas->drawRRect(rrect, paint);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "59c1025b8116ec1d3b55f4f6306d1e37",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::setEmpty"
+},
+ "SkRRect_setNinePatch": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::setNinePatch"
+},
+ "SkRRect_setOval": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::setOval"
+},
+ "SkRRect_setRect": {
+ "code": "void draw(SkCanvas* canvas) {\n SkPaint paint;\n SkRRect rrect = SkRRect::MakeRect({30, 10, 100, 60});\n canvas->drawRRect(rrect, paint);\n rrect.setRect({60, 30, 120, 80});\n paint.setColor(SK_ColorBLUE);\n canvas->drawRRect(rrect, paint);\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "fc97ef7310473b9ba6dc7202efbebb3b",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::setRect"
+},
+ "SkRRect_setRectRadii": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::setRectRadii"
+},
+ "SkRRect_setRectXY": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::setRectXY"
+},
+ "SkRRect_transform": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::transform()"
+},
+ "SkRRect_type": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::type()"
+},
+ "SkRRect_writeToMemory": {
+ "code": "void draw(SkCanvas* canvas) {\n // incomplete\n}",
+ "width": 256,
+ "height": 256,
+ "hash": "882e8e0103048009a25cfc20400492f7",
+ "file": "SkRRect_Reference",
+ "name": "SkRRect::writeToMemory"
+},
"SkSurface_MakeFromBackendTexture": {
"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::MakeFromBackendTexture(context,\n backEndTexture, kTopLeft_GrSurfaceOrigin, 0,\n kRGBA_8888_SkColorType, nullptr, nullptr);\n auto surfaceCanvas = gpuSurface->getCanvas();\n surfaceCanvas->drawString(\"GPU rocks!\", 20, 40, paint);\n sk_sp<SkImage> image(gpuSurface->makeImageSnapshot());\n canvas->drawImage(image, 0, 0);\n}",
"width": 256,
diff --git a/site/user/api/undocumented.md b/site/user/api/undocumented.md
index bb8977a294..26e9795b37 100644
--- a/site/user/api/undocumented.md
+++ b/site/user/api/undocumented.md
@@ -17,36 +17,6 @@ undocumented
# <a name='Big_Endian'>Big Endian</a>
-# <a name='Blend_Mode'>Blend Mode</a>
-
-## <a name='SkBlendMode'>Enum SkBlendMode</a>
-
-### Constants
-
-<table style='border-collapse: collapse; width: 62.5em'>
- <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
-<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
-<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
- <tr style='background-color: #f0f0f0; '>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kSrc'><code>SkBlendMode::kSrc</code></a></td>
- <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
-</td>
- </tr>
- <tr>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kSrcOver'><code>SkBlendMode::kSrcOver</code></a></td>
- <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
-</td>
- </tr>
- <tr style='background-color: #f0f0f0; '>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkBlendMode_kPlus'><code>SkBlendMode::kPlus</code></a></td>
- <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>12</td>
- <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
-</td>
- </tr>
-</table>
-
# <a name='Cartesian_Coordinate'>Cartesian Coordinate</a>
# <a name='Circle'>Circle</a>
@@ -181,6 +151,10 @@ SK_API void <a href='#SkDebugf'>SkDebugf</a>(const char format[], ...)
# <a name='Descenders'>Descenders</a>
+# <a name='Deserial_Procs'>Deserial Procs</a>
+
+# <a name='SkDeserialProcs'>Struct SkDeserialProcs</a>
+
# <a name='Destructor'>Destructor</a>
# <a name='Device'>Device</a>
@@ -417,20 +391,7 @@ bool SK_API <a href='#Op'>Op</a>(const <a href='SkPath_Reference#SkPath'>SkPath<
# <a name='SkPathEffect'>Class SkPathEffect</a>
-# <a name='Picture'>Picture</a>
-
-# <a name='SkPicture'>Class SkPicture</a>
-
-<a name='SkPicture_playback'></a>
-## playback
-
-<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-virtual void <a href='#SkPicture_playback'>playback</a>(<a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>*, AbortCallback* = nullptr) const = 0
-</pre>
-
----
-
-## <a name='Recorder'>Recorder</a>
+# <a name='Picture_Recorder'>Picture Recorder</a>
# <a name='SkPictureRecorder'>Class SkPictureRecorder</a>
@@ -555,28 +516,6 @@ bool <a href='#GrBackendRenderTarget_isValid'>isValid</a>() const
# <a name='Right_Side_Bearing'>Right Side Bearing</a>
-# <a name='Round_Rect'>Round Rect</a>
-
-# <a name='SkRRect'>Class SkRRect</a>
-
-<a name='SkRRect_dump'></a>
-## dump
-
-<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-void <a href='#SkRRect_dump'>dump</a>() const
-</pre>
-
----
-
-<a name='SkRRect_dumpHex'></a>
-## dumpHex
-
-<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
-void <a href='#SkRRect_dumpHex'>dumpHex</a>() const
-</pre>
-
----
-
# <a name='SVG'>SVG</a>
## <a name='Canvas'>Canvas</a>
@@ -591,6 +530,10 @@ void <a href='#SkRRect_dumpHex'>dumpHex</a>() const
## <a name='SkScalar'>Typedef SkScalar</a>
+# <a name='Serial_Procs'>Serial Procs</a>
+
+# <a name='SkSerialProcs'>Struct SkSerialProcs</a>
+
# <a name='Shader'>Shader</a>
# <a name='SkShader'>Class SkShader</a>
@@ -633,6 +576,16 @@ static <a href='#sk_sp'>sk sp</a>&lt;<a href='#SkShader'>SkShader</a>&gt; <a hre
---
+<a name='SkShader_MakeCompose'></a>
+## MakeCompose
+
+<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
+static <a href='#sk_sp'>sk sp</a>&lt;<a href='#SkShader'>SkShader</a>&gt; <a href='#SkShader_MakeCompose'>MakeCompose</a>(<a href='#sk_sp'>sk sp</a>&lt;<a href='#SkShader'>SkShader</a>&gt; dst, <a href='#sk_sp'>sk sp</a>&lt;<a href='#SkShader'>SkShader</a>&gt; src, <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode,
+ float lerp = 1)
+</pre>
+
+---
+
# <a name='Size'>Size</a>
# <a name='SkSize'>Struct SkSize</a>
@@ -641,7 +594,7 @@ static <a href='#sk_sp'>sk sp</a>&lt;<a href='#SkShader'>SkShader</a>&gt; <a hre
# <a name='Stream'>Stream</a>
-# <a name='SkWStream'>Class SkWStream</a>
+# <a name='SkStream'>Class SkStream</a>
# <a name='String'>String</a>
@@ -719,6 +672,14 @@ bool <a href='#GrBackendTexture_isValid'>isValid</a>() const
## <a name='Texs'>Texs</a>
+# <a name='WStream'>WStream</a>
+
+# <a name='SkWStream'>Class SkWStream</a>
+
+# <a name='Xfermode_Image_Filter'>Xfermode Image Filter</a>
+
+# <a name='SkXfermodeImageFilter'>Class SkXfermodeImageFilter</a>
+
# <a name='YUV_Component_U'>YUV Component U</a>
# <a name='YUV_Component_V'>YUV Component V</a>