update canvas doc, primarily readpixels and writepixels

also fixed minor bookmaker bugs so canvas 
include and online docs are (bookmaker detected)
error-free

TBR=reed@google.com
Docs-Preview: https://skia.org/?cl=37840
Bug: skia:
Change-Id: Ifcec9c751105444047c37d89fd984dbd4dfd1913
Reviewed-on: https://skia-review.googlesource.com/37840
Reviewed-by: Cary Clark <caryclark@google.com>
Commit-Queue: Cary Clark <caryclark@skia.org>
This commit is contained in:
Cary Clark 2017-08-24 12:59:48 -04:00 committed by Skia Commit-Bot
parent e253831ee0
commit f05bddaac3
4 changed files with 382 additions and 360 deletions

View File

@ -182,17 +182,18 @@ info contains Image_Color_Type and Image_Alpha_Type supported by Raster_Surface;
pixels is not nullptr;
rowBytes is zero or large enough to contain info width pixels of Image_Color_Type.
pixel buffer size should be info height times rowBytes times bytes required for
Image_Color_Type.
Pass zero for rowBytes to compute rowBytes from info width and size of pixel.
If rowBytes is greater than zero, it must be equal to or greater than
info width times bytes required for Image_Color_Type.
Pixel buffer size should be info height times computed rowBytes.
#Param info width, height, Image_Color_Type, Image_Alpha_Type, Color_Space, of Raster_Surface;
width, or height, or both, may be zero
##
#Param pixels pointer to destination pixels buffer; buffer size should be height
times rowBytes times four
#Param pixels pointer to destination pixels buffer
##
#Param rowBytes interval from one Surface row to the next; equal to or greater than
info width times bytes required for Image_Color_Type
#Param rowBytes interval from one Surface row to the next, or zero
##
#Return Canvas if all parameters are valid; otherwise, nullptr ##
@ -249,21 +250,22 @@ To access pixels after drawing, call flush() or peekPixels.
Canvas is returned if all parameters are valid.
Valid parameters include:
info dimensions are zero or positive;
info contains Image_Color_Type and Image_Alpha_Type supported by Raster_Surface;
width and height are zero or positive;
pixels is not nullptr;
rowBytes is zero or large enough to contain width pixels of Image_Color_Type.
rowBytes is zero or large enough to contain width pixels of kN32_SkColorType.
pixel buffer size should be info height times rowBytes times bytes required for
Image_Color_Type.
Pass zero for rowBytes to compute rowBytes from fo width and size of pixel.
If rowBytes is greater than zero, it must be equal to or greater than
width times bytes required for Image_Color_Type.
Pixel buffer size should be height times rowBytes.
#Param width pixel column count on Raster_Surface created; must be zero or greater ##
#Param height pixel row count on Raster_Surface created.; must be zero or greater ##
#Param pixels pointer to destination pixels buffer; buffer size should be height
times rowBytes times four
times rowBytes
##
#Param rowBytes interval from one Surface row to the next; equal to or greater than
width times four
#Param rowBytes interval from one Surface row to the next, or zero
##
#Return Canvas if all parameters are valid; otherwise, nullptr ##
@ -312,8 +314,8 @@ void draw(SkCanvas* ) {
#Method SkCanvas()
Creates an empty canvas with no backing device/pixels, and zero
dimensions.
Creates an empty canvas with no backing device or pixels, with
a width and height of zero.
#Return empty canvas ##
@ -587,20 +589,20 @@ drawing surface that blends with the bitmap. When offscreen goes out of
scope, offscreen destructor is called. The saved layer is restored, drawing
transparent letters.
##
void draw(SkCanvas* canvas) {
SkBitmap bitmap;
bitmap.allocPixels(SkImageInfo::MakeN32Premul(200, 200));
{
SkCanvas offscreen(bitmap);
SkPaint paint;
paint.setTextSize(100);
offscreen.drawString("ABC", 20, 160, paint);
SkRect layerBounds = SkRect::MakeXYWH(32, 32, 192, 192);
offscreen.saveLayerAlpha(&layerBounds, 128);
offscreen.clear(SK_ColorWHITE);
offscreen.drawString("DEF", 20, 160, paint);
}
canvas->drawBitmap(bitmap, 0, 0, nullptr);
void draw(SkCanvas* canvas) {
SkBitmap bitmap;
bitmap.allocPixels(SkImageInfo::MakeN32Premul(200, 200));
{
SkCanvas offscreen(bitmap);
SkPaint paint;
paint.setTextSize(100);
offscreen.drawString("ABC", 20, 160, paint);
SkRect layerBounds = SkRect::MakeXYWH(32, 32, 192, 192);
offscreen.saveLayerAlpha(&layerBounds, 128);
offscreen.clear(SK_ColorWHITE);
offscreen.drawString("DEF", 20, 160, paint);
}
canvas->drawBitmap(bitmap, 0, 0, nullptr);
}
##
@ -612,7 +614,7 @@ void draw(SkCanvas* canvas) {
#Method SkMetaData& getMetaData()
Associates additional data with the canvas.
Returns storage to associate additional data with the canvas.
The storage is freed when Canvas is deleted.
#Return storage that can be read from and written to ##
@ -648,14 +650,14 @@ GPU_Surface, returned Image_Color_Type is set to kUnknown_SkColorType.
#Return dimensions and Image_Color_Type of Canvas ##
#Example
SkCanvas emptyCanvas;
SkImageInfo canvasInfo = emptyCanvas.imageInfo();
SkImageInfo emptyInfo;
SkDebugf("emptyInfo %c= canvasInfo\n", emptyInfo == canvasInfo ? '=' : '!');
#StdOut
emptyInfo == canvasInfo
##
SkCanvas emptyCanvas;
SkImageInfo canvasInfo = emptyCanvas.imageInfo();
SkImageInfo emptyInfo;
SkDebugf("emptyInfo %c= canvasInfo\n", emptyInfo == canvasInfo ? '=' : '!');
#StdOut
emptyInfo == canvasInfo
##
##
#ToDo incomplete ##
@ -944,12 +946,12 @@ the drawing destination.
Returns true if Canvas has direct access to its pixels.
Pixels are readable when Device is raster. Pixels are not readable when SkCanvas
Pixels are readable when Device is raster. Pixels are not readable when Canvas
is returned from GPU_Surface, returned by SkDocument::beginPage, returned by
SkPictureRecorder::beginRecording, or SkCanvas is the base of a utility class
SkPictureRecorder::beginRecording, or Canvas is the base of a utility class
like SkDumpCanvas.
pixmap pixel address is only valid while Canvas is in scope and unchanged. Any
pixmap is valid only while Canvas is in scope and unchanged. Any
Canvas or Surface call may invalidate the pixmap values.
#Param pixmap storage for Canvas pixel state if Canvas pixels are readable;
@ -975,53 +977,66 @@ Canvas or Surface call may invalidate the pixmap values.
#Method bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes,
int srcX, int srcY)
Copies rectangle of pixels from Canvas into dstPixels, converting their
Image_Color_Type and Image_Alpha_Type. Pixels are readable when Device is
raster. Pixels are not readable when SkCanvas is returned from GPU_Surface,
returned by SkDocument::beginPage, returned by SkPictureRecorder::beginRecording,
or SkCanvas is the base of a utility class like SkDumpCanvas.
Copies rectangle of pixels from Canvas into dstPixels. Matrix and Clip are
ignored. Source rectangle corners are (srcX, srcY) and
(this->imageInfo.width(), this->imageInfo.height()).
Destination rectangle corners are (0, 0) and (dstInfo.width(), dstInfo.height()).
Copies each readable pixel intersecting both rectangles, without scaling,
converting to dstInfo.colorType() and dstInfo.alphaType() if required.
Pixel values are converted only if Canvas Image_Color_Type and Image_Alpha_Type
does not match dstInfo. Only pixels within the rectangle that intersect Canvas
pixels are copied. dstPixels outside the rectangle intersection are unchanged.
Pixels are readable when Device is raster, or backed by a GPU.
Pixels are not readable when SkCanvas is returned by SkDocument::beginPage,
returned by SkPictureRecorder::beginRecording, or Canvas is the base of a utility
class like SkDumpCanvas.
#Table
#Legend
# source rectangle # value ##
##
# left # srcX ##
# top # srcY ##
# width # dstInfo.width() ##
# height # dstInfo.height() ##
##
The destination pixel storage must be allocated by the caller.
#Table
#Legend
# canvas pixel bounds # value ##
##
# left # 0 ##
# top # 0 ##
# width # imageInfo().width() ##
# height # imageInfo().height() ##
##
Pixel values are converted only if Image_Color_Type and Image_Alpha_Type
do not match. Only pixels within both source and destination rectangles
are copied. dstPixels contents outside the rectangle intersection are unchanged.
Pass negative values for srcX or srcY to offset pixels across or down destination.
Does not copy, and returns false if:
#List
# Source rectangle and canvas pixel bounds do not intersect. ##
# Canvas pixels could not be converted to dstInfo Image_Color_Type or dstInfo Image_Alpha_Type. ##
# Canvas pixels are not readable; for instance, Canvas is not raster, or is document-based. ##
# Source and destination rectangles do not intersect. ##
# Canvas pixels could not be converted to dstInfo.colorType() or dstInfo.alphaType(). ##
# Canvas pixels are not readable; for instance, Canvas is document-based. ##
# dstRowBytes is too small to contain one row of pixels. ##
##
#Param dstInfo dimensions, Image_Color_Type, and Image_Alpha_Type of dstPixels ##
#Param dstPixels storage for pixels, of size dstInfo.height() times dstRowBytes ##
#Param dstRowBytes size of one destination row, dstInfo.width() times pixel size ##
#Param srcX offset into readable pixels in x ##
#Param srcY offset into readable pixels in y ##
#Param dstInfo width, height, Image_Color_Type, and Image_Alpha_Type of dstPixels ##
#Param dstPixels storage for pixels; dstInfo.height() times dstRowBytes, or larger ##
#Param dstRowBytes size of one destination row; dstInfo.width() times pixel size, or larger ##
#Param srcX offset into readable pixels in x; may be negative ##
#Param srcY offset into readable pixels in y; may be negative ##
#Return true if pixels were copied ##
#Example
#Width 64
#Height 64
#Description
A black circle drawn on a blue background provides an image to copy.
readPixels copies one quarter of the canvas into each of the four corners.
The offscreen draws over the image.
##
canvas->clear(SK_ColorBLUE);
SkPaint paint;
canvas->drawCircle(32, 32, 28, paint);
SkImageInfo info = SkImageInfo::Make(64, 64, kBGRA_8888_SkColorType, kPremul_SkAlphaType);
sk_sp<SkData> data(SkData::MakeUninitialized(info.minRowBytes() * info.height()));
sk_bzero(data->writable_data(), info.minRowBytes() * info.height());
for (int x : { 32, -32 } ) {
for (int y : { 32, -32 } ) {
canvas->readPixels(info, data->writable_data(), info.minRowBytes(), x, y);
}
}
sk_sp<SkImage> image = SkImage::MakeRasterData(info, data, info.minRowBytes());
canvas->drawImage(image, 0, 0);
##
#Example
#Description
Canvas returned by Raster_Surface has premultiplied pixel values.
@ -1045,7 +1060,7 @@ Does not copy, and returns false if:
##
##
#ToDo incomplete ##
#SeeAlso peekPixels writePixels drawBitmap drawImage
##
@ -1053,67 +1068,61 @@ Does not copy, and returns false if:
#Method bool readPixels(const SkPixmap& pixmap, int srcX, int srcY)
Copies rectangle of pixels from Canvas into Pixmap, converting their
Image_Color_Type and Image_Alpha_Type. Pixels are readable when Device is raster.
Pixels are not readable when SkCanvas is returned from GPU_Surface, returned by
SkDocument::beginPage, returned by SkPictureRecorder::beginRecording,
or SkCanvas is the base of a utility class like SkDumpCanvas.
Copies rectangle of pixels from Canvas into pixmap. Matrix and Clip are
ignored. Source rectangle corners are (srcX, srcY) and
(this->imageInfo.width(), this->imageInfo.height()).
Destination rectangle are (0, 0) and (pixmap.width(), pixmap.height()).
Copies each readable pixel intersecting both rectangles, without scaling,
converting to pixmap.colorType() and pixmap.alphaType() if required.
Pixel values are converted only if Canvas Image_Color_Type and Image_Alpha_Type
does not match bitmap Image_Info. Only Pixmap pixels within the rectangle that
intersect Canvas pixels are copied. Pixmap pixels outside the rectangle
intersection are unchanged.
Pixels are readable when Device is raster, or backed by a GPU.
Pixels are not readable when SkCanvas is returned by SkDocument::beginPage,
returned by SkPictureRecorder::beginRecording, or Canvas is the base of a utility
class like SkDumpCanvas.
#Table
#Legend
# source rectangle # value ##
##
# left # srcX ##
# top # srcY ##
# width # bitmap.width() ##
# height # bitmap.height() ##
##
Allocates pixel storage in pixmap if needed.
#Table
#Legend
# canvas pixel bounds # value ##
##
# left # 0 ##
# top # 0 ##
# width # imageInfo().width() ##
# height # imageInfo().height() ##
##
Pixel values are converted only if Image_Color_Type and Image_Alpha_Type
do not match. Only pixels within both source and destination rectangles
are copied. pixmap pixels contents outside the rectangle intersection are unchanged.
Pass negative values for srcX or srcY to offset pixels across or down pixmap.
Does not copy, and returns false if:
#List
# Source rectangle and canvas pixel bounds do not intersect. ##
# Canvas pixels could not be converted to bitmap Image_Color_Type or bitmap Image_Alpha_Type. ##
# Canvas pixels are not readable; for instance, Canvas is not raster, or is document-based. ##
# bitmap pixels could not be allocated. ##
# Bitmap_Row_Bytes is too small to contain one row of pixels. ##
# Source and destination rectangles do not intersect. ##
# Canvas pixels could not be converted to pixmap.colorType() or pixmap.alphaType(). ##
# Canvas pixels are not readable; for instance, Canvas is document-based. ##
# Pixmap pixels could not be allocated. ##
# pixmap.rowBytes() is too small to contain one row of pixels. ##
##
#Param pixmap storage for pixels copied from Canvas ##
#Param srcX offset into readable pixels in x ##
#Param srcY offset into readable pixels in y ##
#Param srcX offset into readable pixels in x; may be negative ##
#Param srcY offset into readable pixels in y; may be negative ##
#Return true if pixels were copied ##
#Example
void draw(SkCanvas* canvas) {
canvas->clear(0x8055aaff);
uint32_t pixels[1] = { 0 };
SkPixmap pixmap(SkImageInfo::MakeN32Premul(1, 1), pixels, 4);
canvas->readPixels(pixmap, 0, 0);
SkDebugf("pixel = %08x\n", pixels[0]);
}
#Description
clear() takes unpremultiplied input with Color_Alpha equal 0x80
and Color_RGB equal 0x55, 0xAA, 0xFF. Color_RGB is multipled by Color_Alpha
to generate premultipled value 0x802B5580.
##
void draw(SkCanvas* canvas) {
canvas->clear(0x8055aaff);
uint32_t pixels[1] = { 0 };
SkPixmap pixmap(SkImageInfo::MakeN32Premul(1, 1), pixels, 4);
canvas->readPixels(pixmap, 0, 0);
SkDebugf("pixel = %08x\n", pixels[0]);
}
#StdOut
pixel = 802b5580
##
##
#ToDo incomplete ##
#SeeAlso peekPixels writePixels drawBitmap drawImage
##
@ -1121,45 +1130,48 @@ void draw(SkCanvas* canvas) {
#Method bool readPixels(const SkBitmap& bitmap, int srcX, int srcY)
Copies pixels enclosed by bitmap offset to (x, y) from Canvas into bitmap,
converting their Image_Color_Type and Image_Alpha_Type.
Pixels are readable when Device is raster. Pixels are not readable when SkCanvas
is returned from GPU_Surface, returned by SkDocument::beginPage, returned by
SkPictureRecorder::beginRecording, or SkCanvas is the base of a utility class
like SkDumpCanvas. Allocates pixel storage in bitmap if needed.
Copies rectangle of pixels from Canvas into bitmap. Matrix and Clip are
ignored. Source rectangle corners are (srcX, srcY) and
(this->imageInfo.width(), this->imageInfo.height()).
Destination rectangle corners are (0, 0) and (bitmap.width(), bitmap.height()).
Copies each readable pixel intersecting both rectangles, without scaling,
converting to bitmap.colorType() and bitmap.alphaType() if required.
Pixel values are converted only if Canvas Image_Color_Type and Image_Alpha_Type
does not match bitmap Image_Info. Only pixels within the rectangle that intersect
Canvas pixels are copied. Bitamp pixels outside the rectangle intersection are
unchanged.
Pixels are readable when Device is raster, or backed by a GPU.
Pixels are not readable when SkCanvas is returned by SkDocument::beginPage,
returned by SkPictureRecorder::beginRecording, or Canvas is the base of a utility
class like SkDumpCanvas.
#Table
#Legend
# canvas pixel bounds # value ##
##
# left # 0 ##
# top # 0 ##
# width # imageInfo().width() ##
# height # imageInfo().height() ##
##
Allocates pixel storage in bitmap if needed.
Bitmap values are converted only if Image_Color_Type and Image_Alpha_Type
do not match. Only pixels within both source and destination rectangles
are copied. Bitmap pixels outside the rectangle intersection are unchanged.
Pass negative values for srcX or srcY to offset pixels across or down bitmap.
Does not copy, and returns false if:
#List
# Bounds formed by (x, y) and bitmap (width, height) and canvas pixel bounds do not intersect. ##
# Canvas pixels could not be converted to bitmap Image_Color_Type or bitmap Image_Alpha_Type. ##
# Canvas pixels are not readable; for instance, Canvas is not raster, or is document-based. ##
# Source and destination rectangles do not intersect. ##
# Canvas pixels could not be converted to bitmap.colorType() or bitmap.alphaType(). ##
# Canvas pixels are not readable; for instance, Canvas is document-based. ##
# bitmap pixels could not be allocated. ##
# Bitmap_Row_Bytes is too small to contain one row of pixels. ##
# bitmap.rowBytes() is too small to contain one row of pixels. ##
##
#Param bitmap storage for pixels copied from Canvas ##
#Param srcX offset into readable pixels in x ##
#Param srcY offset into readable pixels in y ##
#Param srcX offset into readable pixels in x; may be negative ##
#Param srcY offset into readable pixels in y; may be negative ##
#Return true if pixels were copied ##
#Example
#Description
clear() takes unpremultiplied input with Color_Alpha equal 0x80
and Color_RGB equal 0x55, 0xAA, 0xFF. Color_RGB is multipled by Color_Alpha
to generate premultipled value 0x802B5580.
##
void draw(SkCanvas* canvas) {
canvas->clear(0x8055aaff);
SkBitmap bitmap;
@ -1172,7 +1184,7 @@ void draw(SkCanvas* canvas) {
##
##
#ToDo incomplete ##
#SeeAlso peekPixels writePixels drawBitmap drawImage
##
@ -1180,48 +1192,39 @@ void draw(SkCanvas* canvas) {
#Method bool writePixels(const SkImageInfo& info, const void* pixels, size_t rowBytes, int x, int y)
Copies to Canvas pixels, ignoring the Matrix and Clip, converting to match
info Image_Color_Type and info Image_Alpha_Type.
Copies rectangle from pixels to Canvas. Matrix and Clip are ignored.
Source rectangle corners are (0, 0) and (info.width(), info.height()).
Destination rectangle corners are (x, y) and
(this->imageInfo.width(), this->imageInfo.height()). Copies each readable pixel
intersecting both rectangles, without scaling, converting to
this->imageInfo.colorType() and this->imageInfo.alphaType() if required.
Pixel values are converted only if Canvas Image_Color_Type and Image_Alpha_Type
does not match info. Only pixels within the source rectangle that intersect
Canvas pixel bounds are copied. Canvas pixels outside the rectangle intersection
are unchanged.
Pixels are writable when Device is raster, or backed by a GPU.
Pixels are not writable when SkCanvas is returned by SkDocument::beginPage,
returned by SkPictureRecorder::beginRecording, or Canvas is the base of a utility
class like SkDumpCanvas.
#Table
#Legend
# source rectangle # value ##
##
# left # x ##
# top # y ##
# width # info.width() ##
# height # info.height() ##
##
Pixel values are converted only if Image_Color_Type and Image_Alpha_Type
do not match. Only pixels within both source and destination rectangles
are copied. Canvas pixels outside the rectangle intersection are unchanged.
#Table
#Legend
# canvas pixel bounds # value ##
##
# left # 0 ##
# top # 0 ##
# width # imageInfo().width() ##
# height # imageInfo().height() ##
##
Pass negative values for x or y to offset pixels to the left or
above Canvas pixels.
Does not copy, and returns false if:
#List
# Source rectangle and canvas pixel bounds do not intersect. ##
# pixels could not be converted to Canvas Image_Color_Type or Canvas Image_Alpha_Type. ##
# Source and destination rectangles do not intersect. ##
# pixels could not be converted to this->imageInfo.colorType() or this->imageInfo.alphaType(). ##
# Canvas pixels are not writable; for instance, Canvas is document-based. ##
# rowBytes is too small to contain one row of pixels. ##
##
#Param info dimensions, Image_Color_Type, and Image_Alpha_Type of pixels ##
#Param pixels pixels to copy, of size info.height() times rowBytes ##
#Param rowBytes offset from one row to the next, usually info.width() times pixel size ##
#Param x offset into Canvas writable pixels in x ##
#Param y offset into Canvas writable pixels in y ##
#Param info width, height, Image_Color_Type, and Image_Alpha_Type of pixels ##
#Param pixels pixels to copy, of size info.height() times rowBytes, or larger ##
#Param rowBytes size of one pixels row; info.width() times pixel size, or larger ##
#Param x offset into Canvas writable pixels in x; may be negative ##
#Param y offset into Canvas writable pixels in y; may be negative ##
#Return true if pixels were written to Canvas ##
@ -1236,7 +1239,7 @@ Does not copy, and returns false if:
}
##
#ToDo incomplete ##
#SeeAlso readPixels drawBitmap drawImage
##
@ -1244,47 +1247,38 @@ Does not copy, and returns false if:
#Method bool writePixels(const SkBitmap& bitmap, int x, int y)
Writes to Canvas pixels, ignoring the Matrix and Clip, converting to match
bitmap Image_Color_Type and bitmap Image_Alpha_Type.
Copies rectangle from pixels to Canvas. Matrix and Clip are ignored.
Source rectangle corners are (0, 0) and (bitmap.width(), bitmap.height()).
Destination rectangle corners are (x, y) and
(this->imageInfo.width(), this->imageInfo.height()). Copies each readable pixel
intersecting both rectangles, without scaling, converting to
this->imageInfo.colorType() and this->imageInfo.alphaType() if required.
Pixel values are converted only if Canvas Image_Color_Type and Image_Alpha_Type
does not match bitmap. Only pixels within the source rectangle that intersect
Canvas pixel bounds are copied. Canvas pixels outside the rectangle intersection
are unchanged.
Pixels are writable when Device is raster, or backed by a GPU.
Pixels are not writable when SkCanvas is returned by SkDocument::beginPage,
returned by SkPictureRecorder::beginRecording, or Canvas is the base of a utility
class like SkDumpCanvas.
#Table
#Legend
# source rectangle # value ##
##
# left # x ##
# top # y ##
# width # bitmap.width() ##
# height # bitmap.height() ##
##
Pixel values are converted only if Image_Color_Type and Image_Alpha_Type
do not match. Only pixels within both source and destination rectangles
are copied. Canvas pixels outside the rectangle intersection are unchanged.
#Table
#Legend
# canvas pixel bounds # value ##
##
# left # 0 ##
# top # 0 ##
# width # imageInfo().width() ##
# height # imageInfo().height() ##
##
Pass negative values for x or y to offset pixels to the left or
above Canvas pixels.
Does not copy, and returns false if:
#List
# Source rectangle and Canvas pixel bounds do not intersect. ##
# Source and destination rectangles do not intersect. ##
# bitmap does not have allocated pixels. ##
# bitmap pixels could not be converted to Canvas Image_Color_Type or Canvas Image_Alpha_Type. ##
# bitmap pixels could not be converted to this->imageInfo.colorType() or this->imageInfo.alphaType(). ##
# Canvas pixels are not writable; for instance, Canvas is document-based. ##
# bitmap pixels are inaccessible; for instance, bitmap wraps a texture. ##
##
#Param bitmap contains pixels copied to Canvas ##
#Param x offset into Canvas writable pixels in x ##
#Param y offset into Canvas writable pixels in y ##
#Param x offset into Canvas writable pixels in x; may be negative ##
#Param y offset into Canvas writable pixels in y; may be negative ##
#Return true if pixels were written to Canvas ##
@ -1307,7 +1301,7 @@ void draw(SkCanvas* canvas) {
}
##
#ToDo incomplete ##
#SeeAlso readPixels drawBitmap drawImage
##

View File

@ -166,8 +166,11 @@ Valid parameters include:
<a href="SkCanvas_Reference#MakeRasterDirect">pixels</a> is not nullptr;
<a href="SkCanvas_Reference#MakeRasterDirect">rowBytes</a> is zero or large enough to contain <a href="SkCanvas_Reference#MakeRasterDirect">info</a> width <a href="SkCanvas_Reference#MakeRasterDirect">pixels</a> of <a href="undocumented#Color_Type">Image Color Type</a>.
pixel buffer size should be <a href="SkCanvas_Reference#MakeRasterDirect">info</a> height times <a href="SkCanvas_Reference#MakeRasterDirect">rowBytes</a> times bytes required for
<a href="undocumented#Color_Type">Image Color Type</a>.
Pass zero for <a href="SkCanvas_Reference#MakeRasterDirect">rowBytes</a> to compute <a href="SkCanvas_Reference#MakeRasterDirect">rowBytes</a> from <a href="SkCanvas_Reference#MakeRasterDirect">info</a> width and size of pixel.
If <a href="SkCanvas_Reference#MakeRasterDirect">rowBytes</a> is greater than zero, it must be equal to or greater than
<a href="SkCanvas_Reference#MakeRasterDirect">info</a> width times bytes required for <a href="undocumented#Color_Type">Image Color Type</a>.
<a href="undocumented#Pixel">Pixel</a> buffer size should be <a href="SkCanvas_Reference#MakeRasterDirect">info</a> height times computed <a href="SkCanvas_Reference#MakeRasterDirect">rowBytes</a>.
### Parameters
@ -175,11 +178,9 @@ pixel buffer size should be <a href="SkCanvas_Reference#MakeRasterDirect">info</
width, height, <a href="undocumented#Color_Type">Image Color Type</a>, <a href="undocumented#Alpha_Type">Image Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>, of <a href="undocumented#Raster_Surface">Raster Surface</a>;
width, or height, or both, may be zero</td>
</tr> <tr> <td><code><strong>pixels </strong></code></td> <td>
pointer to destination <a href="SkCanvas_Reference#MakeRasterDirect">pixels</a> buffer; buffer size should be height
times <a href="SkCanvas_Reference#MakeRasterDirect">rowBytes</a> times four</td>
pointer to destination <a href="SkCanvas_Reference#MakeRasterDirect">pixels</a> buffer</td>
</tr> <tr> <td><code><strong>rowBytes </strong></code></td> <td>
interval from one <a href="undocumented#Surface">Surface</a> row to the next; equal to or greater than
<a href="SkCanvas_Reference#MakeRasterDirect">info</a> width times bytes required for <a href="undocumented#Color_Type">Image Color Type</a></td>
interval from one <a href="undocumented#Surface">Surface</a> row to the next, or zero</td>
</tr>
</table>
@ -225,13 +226,15 @@ To access <a href="SkCanvas_Reference#MakeRasterDirectN32">pixels</a> after draw
<a href="SkCanvas_Reference#Canvas">Canvas</a> is returned if all parameters are valid.
Valid parameters include:
info dimensions are zero or positive;
info contains <a href="undocumented#Color_Type">Image Color Type</a> and <a href="undocumented#Alpha_Type">Image Alpha Type</a> supported by <a href="undocumented#Raster_Surface">Raster Surface</a>;
<a href="SkCanvas_Reference#width">width</a> and <a href="SkCanvas_Reference#height">height</a> are zero or positive;
<a href="SkCanvas_Reference#MakeRasterDirectN32">pixels</a> is not nullptr;
<a href="SkCanvas_Reference#MakeRasterDirectN32">rowBytes</a> is zero or large enough to contain <a href="SkCanvas_Reference#width">width</a> <a href="SkCanvas_Reference#MakeRasterDirectN32">pixels</a> of <a href="undocumented#Color_Type">Image Color Type</a>.
<a href="SkCanvas_Reference#MakeRasterDirectN32">rowBytes</a> is zero or large enough to contain <a href="SkCanvas_Reference#width">width</a> <a href="SkCanvas_Reference#MakeRasterDirectN32">pixels</a> of <a href="undocumented#SkColorType">kN32 SkColorType</a>.
pixel buffer size should be info <a href="SkCanvas_Reference#height">height</a> times <a href="SkCanvas_Reference#MakeRasterDirectN32">rowBytes</a> times bytes required for
<a href="undocumented#Color_Type">Image Color Type</a>.
Pass zero for <a href="SkCanvas_Reference#MakeRasterDirectN32">rowBytes</a> to compute <a href="SkCanvas_Reference#MakeRasterDirectN32">rowBytes</a> from fo <a href="SkCanvas_Reference#width">width</a> and size of pixel.
If <a href="SkCanvas_Reference#MakeRasterDirectN32">rowBytes</a> is greater than zero, it must be equal to or greater than
<a href="SkCanvas_Reference#width">width</a> times bytes required for <a href="undocumented#Color_Type">Image Color Type</a>.
<a href="undocumented#Pixel">Pixel</a> buffer size should be <a href="SkCanvas_Reference#height">height</a> times <a href="SkCanvas_Reference#MakeRasterDirectN32">rowBytes</a>.
### Parameters
@ -241,10 +244,9 @@ pixel column count on <a href="undocumented#Raster_Surface">Raster Surface</a> c
pixel row count on <a href="undocumented#Raster_Surface">Raster Surface</a> created.; must be zero or greater</td>
</tr> <tr> <td><code><strong>pixels </strong></code></td> <td>
pointer to destination <a href="SkCanvas_Reference#MakeRasterDirectN32">pixels</a> buffer; buffer size should be <a href="SkCanvas_Reference#height">height</a>
times <a href="SkCanvas_Reference#MakeRasterDirectN32">rowBytes</a> times four</td>
times <a href="SkCanvas_Reference#MakeRasterDirectN32">rowBytes</a></td>
</tr> <tr> <td><code><strong>rowBytes </strong></code></td> <td>
interval from one <a href="undocumented#Surface">Surface</a> row to the next; equal to or greater than
<a href="SkCanvas_Reference#width">width</a> times four</td>
interval from one <a href="undocumented#Surface">Surface</a> row to the next, or zero</td>
</tr>
</table>
@ -276,8 +278,8 @@ in the center.</div>
SkCanvas()
</pre>
Creates an empty canvas with no backing device/pixels, and zero
dimensions.
Creates an empty canvas with no backing device or pixels, with
a width and height of zero.
### Return Value
@ -547,7 +549,7 @@ transparent letters.</div></fiddle-embed></div>
SkMetaData& getMetaData()
</pre>
Associates additional data with the canvas.
Returns storage to associate additional data with the canvas.
The storage is freed when <a href="SkCanvas_Reference#Canvas">Canvas</a> is deleted.
### Return Value
@ -833,12 +835,12 @@ bool peekPixels(SkPixmap* pixmap)
Returns true if <a href="SkCanvas_Reference#Canvas">Canvas</a> has direct access to its pixels.
Pixels are readable when <a href="undocumented#Device">Device</a> is raster. Pixels are not readable when <a href="SkCanvas_Reference#SkCanvas">SkCanvas</a>
Pixels are readable when <a href="undocumented#Device">Device</a> is raster. Pixels are not readable when <a href="SkCanvas_Reference#Canvas">Canvas</a>
is returned from <a href="undocumented#GPU_Surface">GPU Surface</a>, returned by <a href="undocumented#beginPage">SkDocument::beginPage</a>, returned by
<a href="undocumented#beginRecording">SkPictureRecorder::beginRecording</a>, or <a href="SkCanvas_Reference#SkCanvas">SkCanvas</a> is the base of a utility class
<a href="undocumented#beginRecording">SkPictureRecorder::beginRecording</a>, or <a href="SkCanvas_Reference#Canvas">Canvas</a> is the base of a utility class
like <a href="undocumented#SkDumpCanvas">SkDumpCanvas</a>.
<a href="SkCanvas_Reference#peekPixels">pixmap</a> pixel address is only valid while <a href="SkCanvas_Reference#Canvas">Canvas</a> is in scope and unchanged. Any
<a href="SkCanvas_Reference#peekPixels">pixmap</a> is valid only while <a href="SkCanvas_Reference#Canvas">Canvas</a> is in scope and unchanged. Any
<a href="SkCanvas_Reference#Canvas">Canvas</a> or <a href="undocumented#Surface">Surface</a> call may invalidate the <a href="SkCanvas_Reference#peekPixels">pixmap</a> values.
### Parameters
@ -875,51 +877,47 @@ bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes,
int srcX, int srcY)
</pre>
Copies rectangle of pixels from <a href="SkCanvas_Reference#Canvas">Canvas</a> into <a href="SkCanvas_Reference#dstPixels">dstPixels</a>, converting their
<a href="undocumented#Color_Type">Image Color Type</a> and <a href="undocumented#Alpha_Type">Image Alpha Type</a>. Pixels are readable when <a href="undocumented#Device">Device</a> is
raster. Pixels are not readable when <a href="SkCanvas_Reference#SkCanvas">SkCanvas</a> is returned from <a href="undocumented#GPU_Surface">GPU Surface</a>,
returned by <a href="undocumented#beginPage">SkDocument::beginPage</a>, returned by <a href="undocumented#beginRecording">SkPictureRecorder::beginRecording</a>,
or <a href="SkCanvas_Reference#SkCanvas">SkCanvas</a> is the base of a utility class like <a href="undocumented#SkDumpCanvas">SkDumpCanvas</a>.
Copies rectangle of pixels from <a href="SkCanvas_Reference#Canvas">Canvas</a> into <a href="SkCanvas_Reference#dstPixels">dstPixels</a>. <a href="SkCanvas_Reference#Matrix">Matrix</a> and <a href="SkCanvas_Reference#Clip">Clip</a> are
ignored. Source rectangle corners are (<a href="SkCanvas_Reference#srcX">srcX</a>, <a href="SkCanvas_Reference#srcY">srcY</a>) and
(this-><a href="SkCanvas_Reference#imageInfo">imageInfo</a>.width(), this-><a href="SkCanvas_Reference#imageInfo">imageInfo</a>.height()).
Destination rectangle corners are (0, 0) and (<a href="SkCanvas_Reference#dstInfo">dstInfo</a>.width(), <a href="SkCanvas_Reference#dstInfo">dstInfo</a>.height()).
Copies each readable pixel intersecting both rectangles, without scaling,
converting to <a href="SkCanvas_Reference#dstInfo">dstInfo</a>.colorType() and <a href="SkCanvas_Reference#dstInfo">dstInfo</a>.alphaType() if required.
<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="SkCanvas_Reference#Canvas">Canvas</a> <a href="undocumented#Color_Type">Image Color Type</a> and <a href="undocumented#Alpha_Type">Image Alpha Type</a>
does not match <a href="SkCanvas_Reference#dstInfo">dstInfo</a>. Only pixels within the rectangle that intersect <a href="SkCanvas_Reference#Canvas">Canvas</a>
pixels are copied. <a href="SkCanvas_Reference#dstPixels">dstPixels</a> outside the rectangle intersection are unchanged.
Pixels are readable when <a href="undocumented#Device">Device</a> is raster, or backed by a <a href="undocumented#GPU">GPU</a>.
Pixels are not readable when <a href="SkCanvas_Reference#SkCanvas">SkCanvas</a> is returned by <a href="undocumented#beginPage">SkDocument::beginPage</a>,
returned by <a href="undocumented#beginRecording">SkPictureRecorder::beginRecording</a>, or <a href="SkCanvas_Reference#Canvas">Canvas</a> is the base of a utility
class like <a href="undocumented#SkDumpCanvas">SkDumpCanvas</a>.
| source rectangle | value |
| --- | --- |
| left | <a href="SkCanvas_Reference#srcX">srcX</a> |
| top | <a href="SkCanvas_Reference#srcY">srcY</a> |
| width | <a href="SkCanvas_Reference#dstInfo">dstInfo</a>.width() |
| height | <a href="SkCanvas_Reference#dstInfo">dstInfo</a>.height() |
The destination pixel storage must be allocated by the caller.
| canvas pixel bounds | value |
| --- | --- |
| left | 0 |
| top | 0 |
| width | <a href="SkCanvas_Reference#imageInfo">imageInfo</a>.width() |
| height | <a href="SkCanvas_Reference#imageInfo">imageInfo</a>.height() |
<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="undocumented#Color_Type">Image Color Type</a> and <a href="undocumented#Alpha_Type">Image Alpha Type</a>
do not match. Only pixels within both source and destination rectangles
are copied. <a href="SkCanvas_Reference#dstPixels">dstPixels</a> contents outside the rectangle intersection are unchanged.
Pass negative values for <a href="SkCanvas_Reference#srcX">srcX</a> or <a href="SkCanvas_Reference#srcY">srcY</a> to offset pixels across or down destination.
Does not copy, and returns false if:
<table> <tr>
<td>Source rectangle and canvas pixel bounds do not intersect.</td> </tr> <tr>
<td><a href="SkCanvas_Reference#Canvas">Canvas</a> pixels could not be converted to <a href="SkCanvas_Reference#dstInfo">dstInfo</a> <a href="undocumented#Color_Type">Image Color Type</a> or <a href="SkCanvas_Reference#dstInfo">dstInfo</a> <a href="undocumented#Alpha_Type">Image Alpha Type</a>.</td> </tr> <tr>
<td><a href="SkCanvas_Reference#Canvas">Canvas</a> pixels are not readable; for instance, <a href="SkCanvas_Reference#Canvas">Canvas</a> is not raster, or is document-based.</td> </tr> <tr>
<td>Source and destination rectangles do not intersect.</td> </tr> <tr>
<td><a href="SkCanvas_Reference#Canvas">Canvas</a> pixels could not be converted to <a href="SkCanvas_Reference#dstInfo">dstInfo</a>.colorType() or <a href="SkCanvas_Reference#dstInfo">dstInfo</a>.alphaType().</td> </tr> <tr>
<td><a href="SkCanvas_Reference#Canvas">Canvas</a> pixels are not readable; for instance, <a href="SkCanvas_Reference#Canvas">Canvas</a> is document-based.</td> </tr> <tr>
<td><a href="SkCanvas_Reference#dstRowBytes">dstRowBytes</a> is too small to contain one row of pixels.</td> </tr>
</table>
### Parameters
<table> <tr> <td><code><strong>dstInfo </strong></code></td> <td>
dimensions, <a href="undocumented#Color_Type">Image Color Type</a>, and <a href="undocumented#Alpha_Type">Image Alpha Type</a> of <a href="SkCanvas_Reference#dstPixels">dstPixels</a></td>
width, height, <a href="undocumented#Color_Type">Image Color Type</a>, and <a href="undocumented#Alpha_Type">Image Alpha Type</a> of <a href="SkCanvas_Reference#dstPixels">dstPixels</a></td>
</tr> <tr> <td><code><strong>dstPixels </strong></code></td> <td>
storage for pixels, of size <a href="SkCanvas_Reference#dstInfo">dstInfo</a>.height() times <a href="SkCanvas_Reference#dstRowBytes">dstRowBytes</a></td>
storage for pixels; <a href="SkCanvas_Reference#dstInfo">dstInfo</a>.height() times <a href="SkCanvas_Reference#dstRowBytes">dstRowBytes</a>, or larger</td>
</tr> <tr> <td><code><strong>dstRowBytes </strong></code></td> <td>
size of one destination row, <a href="SkCanvas_Reference#dstInfo">dstInfo</a>.width() times pixel size</td>
size of one destination row; <a href="SkCanvas_Reference#dstInfo">dstInfo</a>.width() times pixel size, or larger</td>
</tr> <tr> <td><code><strong>srcX </strong></code></td> <td>
offset into readable pixels in x</td>
offset into readable pixels in x; may be negative</td>
</tr> <tr> <td><code><strong>srcY </strong></code></td> <td>
offset into readable pixels in y</td>
offset into readable pixels in y; may be negative</td>
</tr>
</table>
@ -929,6 +927,12 @@ true if pixels were copied
### Example
<div><fiddle-embed name="2964297993747769b0760874c19e0168"><div>A black circle drawn on a blue background provides an image to copy.
<a href="SkCanvas_Reference#readPixels">readPixels</a> copies one quarter of the canvas into each of the four corners.
The offscreen draws over the image.</div></fiddle-embed></div>
### Example
<div><fiddle-embed name="481e990e923a0ed34654f4361b94f096"><div><a href="SkCanvas_Reference#Canvas">Canvas</a> returned by <a href="undocumented#Raster_Surface">Raster Surface</a> has premultiplied pixel values.
<a href="SkCanvas_Reference#clear">clear</a> takes unpremultiplied input with <a href="undocumented#Alpha">Color Alpha</a> equal 0x80
and <a href="undocumented#RGB">Color RGB</a> equal 0x55, 0xAA, 0xFF. <a href="undocumented#RGB">Color RGB</a> is multipled by <a href="undocumented#Alpha">Color Alpha</a>
@ -944,45 +948,44 @@ pixel = 8056a9ff
</fiddle-embed></div>
### See Also
<a href="SkCanvas_Reference#peekPixels">peekPixels</a> <a href="SkCanvas_Reference#writePixels">writePixels</a> <a href="SkCanvas_Reference#drawBitmap">drawBitmap</a> <a href="SkCanvas_Reference#drawImage">drawImage</a>
---
<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
bool readPixels(const SkPixmap& pixmap, int srcX, int srcY)
</pre>
Copies rectangle of pixels from <a href="SkCanvas_Reference#Canvas">Canvas</a> into <a href="undocumented#Pixmap">Pixmap</a>, converting their
<a href="undocumented#Color_Type">Image Color Type</a> and <a href="undocumented#Alpha_Type">Image Alpha Type</a>. Pixels are readable when <a href="undocumented#Device">Device</a> is raster.
Pixels are not readable when <a href="SkCanvas_Reference#SkCanvas">SkCanvas</a> is returned from <a href="undocumented#GPU_Surface">GPU Surface</a>, returned by
<a href="undocumented#beginPage">SkDocument::beginPage</a>, returned by <a href="undocumented#beginRecording">SkPictureRecorder::beginRecording</a>,
or <a href="SkCanvas_Reference#SkCanvas">SkCanvas</a> is the base of a utility class like <a href="undocumented#SkDumpCanvas">SkDumpCanvas</a>.
Copies rectangle of pixels from <a href="SkCanvas_Reference#Canvas">Canvas</a> into <a href="SkCanvas_Reference#pixmap">pixmap</a>. <a href="SkCanvas_Reference#Matrix">Matrix</a> and <a href="SkCanvas_Reference#Clip">Clip</a> are
ignored. Source rectangle corners are (<a href="SkCanvas_Reference#srcX">srcX</a>, <a href="SkCanvas_Reference#srcY">srcY</a>) and
(this-><a href="SkCanvas_Reference#imageInfo">imageInfo</a>.width(), this-><a href="SkCanvas_Reference#imageInfo">imageInfo</a>.height()).
Destination rectangle are (0, 0) and (<a href="SkCanvas_Reference#pixmap">pixmap</a>.width(), <a href="SkCanvas_Reference#pixmap">pixmap</a>.height()).
Copies each readable pixel intersecting both rectangles, without scaling,
converting to <a href="SkCanvas_Reference#pixmap">pixmap</a>.colorType() and <a href="SkCanvas_Reference#pixmap">pixmap</a>.alphaType() if required.
<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="SkCanvas_Reference#Canvas">Canvas</a> <a href="undocumented#Color_Type">Image Color Type</a> and <a href="undocumented#Alpha_Type">Image Alpha Type</a>
does not match bitmap <a href="undocumented#Info">Image Info</a>. Only <a href="undocumented#Pixmap">Pixmap</a> pixels within the rectangle that
intersect <a href="SkCanvas_Reference#Canvas">Canvas</a> pixels are copied. <a href="undocumented#Pixmap">Pixmap</a> pixels outside the rectangle
intersection are unchanged.
Pixels are readable when <a href="undocumented#Device">Device</a> is raster, or backed by a <a href="undocumented#GPU">GPU</a>.
Pixels are not readable when <a href="SkCanvas_Reference#SkCanvas">SkCanvas</a> is returned by <a href="undocumented#beginPage">SkDocument::beginPage</a>,
returned by <a href="undocumented#beginRecording">SkPictureRecorder::beginRecording</a>, or <a href="SkCanvas_Reference#Canvas">Canvas</a> is the base of a utility
class like <a href="undocumented#SkDumpCanvas">SkDumpCanvas</a>.
| source rectangle | value |
| --- | --- |
| left | <a href="SkCanvas_Reference#srcX">srcX</a> |
| top | <a href="SkCanvas_Reference#srcY">srcY</a> |
| width | bitmap.width() |
| height | bitmap.height() |
Allocates pixel storage in <a href="SkCanvas_Reference#pixmap">pixmap</a> if needed.
| canvas pixel bounds | value |
| --- | --- |
| left | 0 |
| top | 0 |
| width | <a href="SkCanvas_Reference#imageInfo">imageInfo</a>.width() |
| height | <a href="SkCanvas_Reference#imageInfo">imageInfo</a>.height() |
<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="undocumented#Color_Type">Image Color Type</a> and <a href="undocumented#Alpha_Type">Image Alpha Type</a>
do not match. Only pixels within both source and destination rectangles
are copied. <a href="SkCanvas_Reference#pixmap">pixmap</a> pixels contents outside the rectangle intersection are unchanged.
Pass negative values for <a href="SkCanvas_Reference#srcX">srcX</a> or <a href="SkCanvas_Reference#srcY">srcY</a> to offset pixels across or down <a href="SkCanvas_Reference#pixmap">pixmap</a>.
Does not copy, and returns false if:
<table> <tr>
<td>Source rectangle and canvas pixel bounds do not intersect.</td> </tr> <tr>
<td><a href="SkCanvas_Reference#Canvas">Canvas</a> pixels could not be converted to bitmap <a href="undocumented#Color_Type">Image Color Type</a> or bitmap <a href="undocumented#Alpha_Type">Image Alpha Type</a>.</td> </tr> <tr>
<td><a href="SkCanvas_Reference#Canvas">Canvas</a> pixels are not readable; for instance, <a href="SkCanvas_Reference#Canvas">Canvas</a> is not raster, or is document-based.</td> </tr> <tr>
<td>bitmap pixels could not be allocated.</td> </tr> <tr>
<td><a href="undocumented#Row_Bytes">Bitmap Row Bytes</a> is too small to contain one row of pixels.</td> </tr>
<td>Source and destination rectangles do not intersect.</td> </tr> <tr>
<td><a href="SkCanvas_Reference#Canvas">Canvas</a> pixels could not be converted to <a href="SkCanvas_Reference#pixmap">pixmap</a>.colorType() or <a href="SkCanvas_Reference#pixmap">pixmap</a>.alphaType().</td> </tr> <tr>
<td><a href="SkCanvas_Reference#Canvas">Canvas</a> pixels are not readable; for instance, <a href="SkCanvas_Reference#Canvas">Canvas</a> is document-based.</td> </tr> <tr>
<td><a href="undocumented#Pixmap">Pixmap</a> pixels could not be allocated.</td> </tr> <tr>
<td><a href="SkCanvas_Reference#pixmap">pixmap</a>.rowBytes() is too small to contain one row of pixels.</td> </tr>
</table>
### Parameters
@ -990,9 +993,9 @@ Does not copy, and returns false if:
<table> <tr> <td><code><strong>pixmap </strong></code></td> <td>
storage for pixels copied from <a href="SkCanvas_Reference#Canvas">Canvas</a></td>
</tr> <tr> <td><code><strong>srcX </strong></code></td> <td>
offset into readable pixels in x</td>
offset into readable pixels in x; may be negative</td>
</tr> <tr> <td><code><strong>srcY </strong></code></td> <td>
offset into readable pixels in y</td>
offset into readable pixels in y; may be negative</td>
</tr>
</table>
@ -1002,7 +1005,9 @@ true if pixels were copied
### Example
<div><fiddle-embed name="85f199032943b6483722c34a91c4e20f">
<div><fiddle-embed name="85f199032943b6483722c34a91c4e20f"><div><a href="SkCanvas_Reference#clear">clear</a> takes unpremultiplied input with <a href="undocumented#Alpha">Color Alpha</a> equal 0x80
and <a href="undocumented#RGB">Color RGB</a> equal 0x55, 0xAA, 0xFF. <a href="undocumented#RGB">Color RGB</a> is multipled by <a href="undocumented#Alpha">Color Alpha</a>
to generate premultipled value 0x802B5580.</div>
#### Example Output
@ -1012,39 +1017,44 @@ pixel = 802b5580
</fiddle-embed></div>
### See Also
<a href="SkCanvas_Reference#peekPixels">peekPixels</a> <a href="SkCanvas_Reference#writePixels">writePixels</a> <a href="SkCanvas_Reference#drawBitmap">drawBitmap</a> <a href="SkCanvas_Reference#drawImage">drawImage</a>
---
<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
bool readPixels(const SkBitmap& bitmap, int srcX, int srcY)
</pre>
Copies pixels enclosed by <a href="SkCanvas_Reference#bitmap">bitmap</a> offset to (x, y) from <a href="SkCanvas_Reference#Canvas">Canvas</a> into <a href="SkCanvas_Reference#bitmap">bitmap</a>,
converting their <a href="undocumented#Color_Type">Image Color Type</a> and <a href="undocumented#Alpha_Type">Image Alpha Type</a>.
Pixels are readable when <a href="undocumented#Device">Device</a> is raster. Pixels are not readable when <a href="SkCanvas_Reference#SkCanvas">SkCanvas</a>
is returned from <a href="undocumented#GPU_Surface">GPU Surface</a>, returned by <a href="undocumented#beginPage">SkDocument::beginPage</a>, returned by
<a href="undocumented#beginRecording">SkPictureRecorder::beginRecording</a>, or <a href="SkCanvas_Reference#SkCanvas">SkCanvas</a> is the base of a utility class
like <a href="undocumented#SkDumpCanvas">SkDumpCanvas</a>. Allocates pixel storage in <a href="SkCanvas_Reference#bitmap">bitmap</a> if needed.
Copies rectangle of pixels from <a href="SkCanvas_Reference#Canvas">Canvas</a> into <a href="SkCanvas_Reference#bitmap">bitmap</a>. <a href="SkCanvas_Reference#Matrix">Matrix</a> and <a href="SkCanvas_Reference#Clip">Clip</a> are
ignored. Source rectangle corners are (<a href="SkCanvas_Reference#srcX">srcX</a>, <a href="SkCanvas_Reference#srcY">srcY</a>) and
(this-><a href="SkCanvas_Reference#imageInfo">imageInfo</a>.width(), this-><a href="SkCanvas_Reference#imageInfo">imageInfo</a>.height()).
Destination rectangle corners are (0, 0) and (<a href="SkCanvas_Reference#bitmap">bitmap</a>.width(), <a href="SkCanvas_Reference#bitmap">bitmap</a>.height()).
Copies each readable pixel intersecting both rectangles, without scaling,
converting to <a href="SkCanvas_Reference#bitmap">bitmap</a>.colorType() and <a href="SkCanvas_Reference#bitmap">bitmap</a>.alphaType() if required.
<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="SkCanvas_Reference#Canvas">Canvas</a> <a href="undocumented#Color_Type">Image Color Type</a> and <a href="undocumented#Alpha_Type">Image Alpha Type</a>
does not match <a href="SkCanvas_Reference#bitmap">bitmap</a> <a href="undocumented#Info">Image Info</a>. Only pixels within the rectangle that intersect
<a href="SkCanvas_Reference#Canvas">Canvas</a> pixels are copied. Bitamp pixels outside the rectangle intersection are
unchanged.
Pixels are readable when <a href="undocumented#Device">Device</a> is raster, or backed by a <a href="undocumented#GPU">GPU</a>.
Pixels are not readable when <a href="SkCanvas_Reference#SkCanvas">SkCanvas</a> is returned by <a href="undocumented#beginPage">SkDocument::beginPage</a>,
returned by <a href="undocumented#beginRecording">SkPictureRecorder::beginRecording</a>, or <a href="SkCanvas_Reference#Canvas">Canvas</a> is the base of a utility
class like <a href="undocumented#SkDumpCanvas">SkDumpCanvas</a>.
| canvas pixel bounds | value |
| --- | --- |
| left | 0 |
| top | 0 |
| width | <a href="SkCanvas_Reference#imageInfo">imageInfo</a>.width() |
| height | <a href="SkCanvas_Reference#imageInfo">imageInfo</a>.height() |
Allocates pixel storage in <a href="SkCanvas_Reference#bitmap">bitmap</a> if needed.
<a href="undocumented#Bitmap">Bitmap</a> values are converted only if <a href="undocumented#Color_Type">Image Color Type</a> and <a href="undocumented#Alpha_Type">Image Alpha Type</a>
do not match. Only pixels within both source and destination rectangles
are copied. <a href="undocumented#Bitmap">Bitmap</a> pixels outside the rectangle intersection are unchanged.
Pass negative values for <a href="SkCanvas_Reference#srcX">srcX</a> or <a href="SkCanvas_Reference#srcY">srcY</a> to offset pixels across or down <a href="SkCanvas_Reference#bitmap">bitmap</a>.
Does not copy, and returns false if:
<table> <tr>
<td>Bounds formed by (x, y) and <a href="SkCanvas_Reference#bitmap">bitmap</a> (width, height) and canvas pixel bounds do not intersect.</td> </tr> <tr>
<td><a href="SkCanvas_Reference#Canvas">Canvas</a> pixels could not be converted to <a href="SkCanvas_Reference#bitmap">bitmap</a> <a href="undocumented#Color_Type">Image Color Type</a> or <a href="SkCanvas_Reference#bitmap">bitmap</a> <a href="undocumented#Alpha_Type">Image Alpha Type</a>.</td> </tr> <tr>
<td><a href="SkCanvas_Reference#Canvas">Canvas</a> pixels are not readable; for instance, <a href="SkCanvas_Reference#Canvas">Canvas</a> is not raster, or is document-based.</td> </tr> <tr>
<td>Source and destination rectangles do not intersect.</td> </tr> <tr>
<td><a href="SkCanvas_Reference#Canvas">Canvas</a> pixels could not be converted to <a href="SkCanvas_Reference#bitmap">bitmap</a>.colorType() or <a href="SkCanvas_Reference#bitmap">bitmap</a>.alphaType().</td> </tr> <tr>
<td><a href="SkCanvas_Reference#Canvas">Canvas</a> pixels are not readable; for instance, <a href="SkCanvas_Reference#Canvas">Canvas</a> is document-based.</td> </tr> <tr>
<td><a href="SkCanvas_Reference#bitmap">bitmap</a> pixels could not be allocated.</td> </tr> <tr>
<td><a href="undocumented#Row_Bytes">Bitmap Row Bytes</a> is too small to contain one row of pixels.</td> </tr>
<td><a href="SkCanvas_Reference#bitmap">bitmap</a>.rowBytes() is too small to contain one row of pixels.</td> </tr>
</table>
### Parameters
@ -1052,9 +1062,9 @@ Does not copy, and returns false if:
<table> <tr> <td><code><strong>bitmap </strong></code></td> <td>
storage for pixels copied from <a href="SkCanvas_Reference#Canvas">Canvas</a></td>
</tr> <tr> <td><code><strong>srcX </strong></code></td> <td>
offset into readable pixels in x</td>
offset into readable pixels in x; may be negative</td>
</tr> <tr> <td><code><strong>srcY </strong></code></td> <td>
offset into readable pixels in y</td>
offset into readable pixels in y; may be negative</td>
</tr>
</table>
@ -1064,7 +1074,9 @@ true if pixels were copied
### Example
<div><fiddle-embed name="af6dec8ef974aa67bf102f29915bcd6a">
<div><fiddle-embed name="af6dec8ef974aa67bf102f29915bcd6a"><div><a href="SkCanvas_Reference#clear">clear</a> takes unpremultiplied input with <a href="undocumented#Alpha">Color Alpha</a> equal 0x80
and <a href="undocumented#RGB">Color RGB</a> equal 0x55, 0xAA, 0xFF. <a href="undocumented#RGB">Color RGB</a> is multipled by <a href="undocumented#Alpha">Color Alpha</a>
to generate premultipled value 0x802B5580.</div>
#### Example Output
@ -1074,6 +1086,10 @@ pixel = 802b5580
</fiddle-embed></div>
### See Also
<a href="SkCanvas_Reference#peekPixels">peekPixels</a> <a href="SkCanvas_Reference#writePixels">writePixels</a> <a href="SkCanvas_Reference#drawBitmap">drawBitmap</a> <a href="SkCanvas_Reference#drawImage">drawImage</a>
---
<a name="writePixels"></a>
@ -1084,33 +1100,30 @@ bool writePixels(const SkImageInfo& info, const void* pixels, size_t rowBytes,
int x, int y)
</pre>
Copies to <a href="SkCanvas_Reference#Canvas">Canvas</a> <a href="SkCanvas_Reference#pixels">pixels</a>, ignoring the <a href="SkCanvas_Reference#Matrix">Matrix</a> and <a href="SkCanvas_Reference#Clip">Clip</a>, converting to match
<a href="SkCanvas_Reference#info">info</a> <a href="undocumented#Color_Type">Image Color Type</a> and <a href="SkCanvas_Reference#info">info</a> <a href="undocumented#Alpha_Type">Image Alpha Type</a>.
Copies rectangle from <a href="SkCanvas_Reference#pixels">pixels</a> to <a href="SkCanvas_Reference#Canvas">Canvas</a>. <a href="SkCanvas_Reference#Matrix">Matrix</a> and <a href="SkCanvas_Reference#Clip">Clip</a> are ignored.
Source rectangle corners are (0, 0) and (<a href="SkCanvas_Reference#info">info</a>.width(), <a href="SkCanvas_Reference#info">info</a>.height()).
Destination rectangle corners are (<a href="SkCanvas_Reference#x">x</a>, <a href="SkCanvas_Reference#y">y</a>) and
(this-><a href="SkCanvas_Reference#imageInfo">imageInfo</a>.width(), this-><a href="SkCanvas_Reference#imageInfo">imageInfo</a>.height()). Copies each readable pixel
intersecting both rectangles, without scaling, converting to
this-><a href="SkCanvas_Reference#imageInfo">imageInfo</a>.colorType() and this-><a href="SkCanvas_Reference#imageInfo">imageInfo</a>.alphaType() if required.
<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="SkCanvas_Reference#Canvas">Canvas</a> <a href="undocumented#Color_Type">Image Color Type</a> and <a href="undocumented#Alpha_Type">Image Alpha Type</a>
does not match <a href="SkCanvas_Reference#info">info</a>. Only <a href="SkCanvas_Reference#pixels">pixels</a> within the source rectangle that intersect
<a href="SkCanvas_Reference#Canvas">Canvas</a> pixel bounds are copied. <a href="SkCanvas_Reference#Canvas">Canvas</a> <a href="SkCanvas_Reference#pixels">pixels</a> outside the rectangle intersection
are unchanged.
Pixels are writable when <a href="undocumented#Device">Device</a> is raster, or backed by a <a href="undocumented#GPU">GPU</a>.
Pixels are not writable when <a href="SkCanvas_Reference#SkCanvas">SkCanvas</a> is returned by <a href="undocumented#beginPage">SkDocument::beginPage</a>,
returned by <a href="undocumented#beginRecording">SkPictureRecorder::beginRecording</a>, or <a href="SkCanvas_Reference#Canvas">Canvas</a> is the base of a utility
class like <a href="undocumented#SkDumpCanvas">SkDumpCanvas</a>.
| source rectangle | value |
| --- | --- |
| left | <a href="SkCanvas_Reference#x">x</a> |
| top | <a href="SkCanvas_Reference#y">y</a> |
| width | <a href="SkCanvas_Reference#info">info</a>.width() |
| height | <a href="SkCanvas_Reference#info">info</a>.height() |
<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="undocumented#Color_Type">Image Color Type</a> and <a href="undocumented#Alpha_Type">Image Alpha Type</a>
do not match. Only <a href="SkCanvas_Reference#pixels">pixels</a> within both source and destination rectangles
are copied. <a href="SkCanvas_Reference#Canvas">Canvas</a> <a href="SkCanvas_Reference#pixels">pixels</a> outside the rectangle intersection are unchanged.
| canvas pixel bounds | value |
| --- | --- |
| left | 0 |
| top | 0 |
| width | <a href="SkCanvas_Reference#imageInfo">imageInfo</a>.width() |
| height | <a href="SkCanvas_Reference#imageInfo">imageInfo</a>.height() |
Pass negative values for <a href="SkCanvas_Reference#x">x</a> or <a href="SkCanvas_Reference#y">y</a> to offset <a href="SkCanvas_Reference#pixels">pixels</a> to the left or
above <a href="SkCanvas_Reference#Canvas">Canvas</a> <a href="SkCanvas_Reference#pixels">pixels</a>.
Does not copy, and returns false if:
<table> <tr>
<td>Source rectangle and canvas pixel bounds do not intersect.</td> </tr> <tr>
<td><a href="SkCanvas_Reference#pixels">pixels</a> could not be converted to <a href="SkCanvas_Reference#Canvas">Canvas</a> <a href="undocumented#Color_Type">Image Color Type</a> or <a href="SkCanvas_Reference#Canvas">Canvas</a> <a href="undocumented#Alpha_Type">Image Alpha Type</a>.</td> </tr> <tr>
<td>Source and destination rectangles do not intersect.</td> </tr> <tr>
<td><a href="SkCanvas_Reference#pixels">pixels</a> could not be converted to this-><a href="SkCanvas_Reference#imageInfo">imageInfo</a>.colorType() or this-><a href="SkCanvas_Reference#imageInfo">imageInfo</a>.alphaType().</td> </tr> <tr>
<td><a href="SkCanvas_Reference#Canvas">Canvas</a> <a href="SkCanvas_Reference#pixels">pixels</a> are not writable; for instance, <a href="SkCanvas_Reference#Canvas">Canvas</a> is document-based.</td> </tr> <tr>
<td><a href="SkCanvas_Reference#rowBytes">rowBytes</a> is too small to contain one row of <a href="SkCanvas_Reference#pixels">pixels</a>.</td> </tr>
</table>
@ -1118,15 +1131,15 @@ Does not copy, and returns false if:
### Parameters
<table> <tr> <td><code><strong>info </strong></code></td> <td>
dimensions, <a href="undocumented#Color_Type">Image Color Type</a>, and <a href="undocumented#Alpha_Type">Image Alpha Type</a> of <a href="SkCanvas_Reference#pixels">pixels</a></td>
width, height, <a href="undocumented#Color_Type">Image Color Type</a>, and <a href="undocumented#Alpha_Type">Image Alpha Type</a> of <a href="SkCanvas_Reference#pixels">pixels</a></td>
</tr> <tr> <td><code><strong>pixels </strong></code></td> <td>
<a href="SkCanvas_Reference#pixels">pixels</a> to copy, of size <a href="SkCanvas_Reference#info">info</a>.height() times <a href="SkCanvas_Reference#rowBytes">rowBytes</a></td>
<a href="SkCanvas_Reference#pixels">pixels</a> to copy, of size <a href="SkCanvas_Reference#info">info</a>.height() times <a href="SkCanvas_Reference#rowBytes">rowBytes</a>, or larger</td>
</tr> <tr> <td><code><strong>rowBytes </strong></code></td> <td>
offset from one row to the next, usually <a href="SkCanvas_Reference#info">info</a>.width() times pixel size</td>
size of one <a href="SkCanvas_Reference#pixels">pixels</a> row; <a href="SkCanvas_Reference#info">info</a>.width() times pixel size, or larger</td>
</tr> <tr> <td><code><strong>x </strong></code></td> <td>
offset into <a href="SkCanvas_Reference#Canvas">Canvas</a> writable <a href="SkCanvas_Reference#pixels">pixels</a> in <a href="SkCanvas_Reference#x">x</a></td>
offset into <a href="SkCanvas_Reference#Canvas">Canvas</a> writable <a href="SkCanvas_Reference#pixels">pixels</a> in <a href="SkCanvas_Reference#x">x</a>; may be negative</td>
</tr> <tr> <td><code><strong>y </strong></code></td> <td>
offset into <a href="SkCanvas_Reference#Canvas">Canvas</a> writable <a href="SkCanvas_Reference#pixels">pixels</a> in <a href="SkCanvas_Reference#y">y</a></td>
offset into <a href="SkCanvas_Reference#Canvas">Canvas</a> writable <a href="SkCanvas_Reference#pixels">pixels</a> in <a href="SkCanvas_Reference#y">y</a>; may be negative</td>
</tr>
</table>
@ -1138,40 +1151,41 @@ true if <a href="SkCanvas_Reference#pixels">pixels</a> were written to <a href="
<div><fiddle-embed name="29b98ebf58aa9fd1edfaabf9f4490b3a"></fiddle-embed></div>
### See Also
<a href="SkCanvas_Reference#readPixels">readPixels</a> <a href="SkCanvas_Reference#drawBitmap">drawBitmap</a> <a href="SkCanvas_Reference#drawImage">drawImage</a>
---
<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
bool writePixels(const SkBitmap& bitmap, int x, int y)
</pre>
Writes to <a href="SkCanvas_Reference#Canvas">Canvas</a> pixels, ignoring the <a href="SkCanvas_Reference#Matrix">Matrix</a> and <a href="SkCanvas_Reference#Clip">Clip</a>, converting to match
<a href="SkCanvas_Reference#bitmap">bitmap</a> <a href="undocumented#Color_Type">Image Color Type</a> and <a href="SkCanvas_Reference#bitmap">bitmap</a> <a href="undocumented#Alpha_Type">Image Alpha Type</a>.
Copies rectangle from pixels to <a href="SkCanvas_Reference#Canvas">Canvas</a>. <a href="SkCanvas_Reference#Matrix">Matrix</a> and <a href="SkCanvas_Reference#Clip">Clip</a> are ignored.
Source rectangle corners are (0, 0) and (<a href="SkCanvas_Reference#bitmap">bitmap</a>.width(), <a href="SkCanvas_Reference#bitmap">bitmap</a>.height()).
Destination rectangle corners are (<a href="SkCanvas_Reference#x">x</a>, <a href="SkCanvas_Reference#y">y</a>) and
(this-><a href="SkCanvas_Reference#imageInfo">imageInfo</a>.width(), this-><a href="SkCanvas_Reference#imageInfo">imageInfo</a>.height()). Copies each readable pixel
intersecting both rectangles, without scaling, converting to
this-><a href="SkCanvas_Reference#imageInfo">imageInfo</a>.colorType() and this-><a href="SkCanvas_Reference#imageInfo">imageInfo</a>.alphaType() if required.
<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="SkCanvas_Reference#Canvas">Canvas</a> <a href="undocumented#Color_Type">Image Color Type</a> and <a href="undocumented#Alpha_Type">Image Alpha Type</a>
does not match <a href="SkCanvas_Reference#bitmap">bitmap</a>. Only pixels within the source rectangle that intersect
<a href="SkCanvas_Reference#Canvas">Canvas</a> pixel bounds are copied. <a href="SkCanvas_Reference#Canvas">Canvas</a> pixels outside the rectangle intersection
are unchanged.
Pixels are writable when <a href="undocumented#Device">Device</a> is raster, or backed by a <a href="undocumented#GPU">GPU</a>.
Pixels are not writable when <a href="SkCanvas_Reference#SkCanvas">SkCanvas</a> is returned by <a href="undocumented#beginPage">SkDocument::beginPage</a>,
returned by <a href="undocumented#beginRecording">SkPictureRecorder::beginRecording</a>, or <a href="SkCanvas_Reference#Canvas">Canvas</a> is the base of a utility
class like <a href="undocumented#SkDumpCanvas">SkDumpCanvas</a>.
| source rectangle | value |
| --- | --- |
| left | <a href="SkCanvas_Reference#x">x</a> |
| top | <a href="SkCanvas_Reference#y">y</a> |
| width | <a href="SkCanvas_Reference#bitmap">bitmap</a>.width() |
| height | <a href="SkCanvas_Reference#bitmap">bitmap</a>.height() |
<a href="undocumented#Pixel">Pixel</a> values are converted only if <a href="undocumented#Color_Type">Image Color Type</a> and <a href="undocumented#Alpha_Type">Image Alpha Type</a>
do not match. Only pixels within both source and destination rectangles
are copied. <a href="SkCanvas_Reference#Canvas">Canvas</a> pixels outside the rectangle intersection are unchanged.
| canvas pixel bounds | value |
| --- | --- |
| left | 0 |
| top | 0 |
| width | <a href="SkCanvas_Reference#imageInfo">imageInfo</a>.width() |
| height | <a href="SkCanvas_Reference#imageInfo">imageInfo</a>.height() |
Pass negative values for <a href="SkCanvas_Reference#x">x</a> or <a href="SkCanvas_Reference#y">y</a> to offset pixels to the left or
above <a href="SkCanvas_Reference#Canvas">Canvas</a> pixels.
Does not copy, and returns false if:
<table> <tr>
<td>Source rectangle and <a href="SkCanvas_Reference#Canvas">Canvas</a> pixel bounds do not intersect.</td> </tr> <tr>
<td>Source and destination rectangles do not intersect.</td> </tr> <tr>
<td><a href="SkCanvas_Reference#bitmap">bitmap</a> does not have allocated pixels.</td> </tr> <tr>
<td><a href="SkCanvas_Reference#bitmap">bitmap</a> pixels could not be converted to <a href="SkCanvas_Reference#Canvas">Canvas</a> <a href="undocumented#Color_Type">Image Color Type</a> or <a href="SkCanvas_Reference#Canvas">Canvas</a> <a href="undocumented#Alpha_Type">Image Alpha Type</a>.</td> </tr> <tr>
<td><a href="SkCanvas_Reference#bitmap">bitmap</a> pixels could not be converted to this-><a href="SkCanvas_Reference#imageInfo">imageInfo</a>.colorType() or this-><a href="SkCanvas_Reference#imageInfo">imageInfo</a>.alphaType().</td> </tr> <tr>
<td><a href="SkCanvas_Reference#Canvas">Canvas</a> pixels are not writable; for instance, <a href="SkCanvas_Reference#Canvas">Canvas</a> is document-based.</td> </tr> <tr>
<td><a href="SkCanvas_Reference#bitmap">bitmap</a> pixels are inaccessible; for instance, <a href="SkCanvas_Reference#bitmap">bitmap</a> wraps a texture.</td> </tr>
</table>
@ -1181,9 +1195,9 @@ Does not copy, and returns false if:
<table> <tr> <td><code><strong>bitmap </strong></code></td> <td>
contains pixels copied to <a href="SkCanvas_Reference#Canvas">Canvas</a></td>
</tr> <tr> <td><code><strong>x </strong></code></td> <td>
offset into <a href="SkCanvas_Reference#Canvas">Canvas</a> writable pixels in <a href="SkCanvas_Reference#x">x</a></td>
offset into <a href="SkCanvas_Reference#Canvas">Canvas</a> writable pixels in <a href="SkCanvas_Reference#x">x</a>; may be negative</td>
</tr> <tr> <td><code><strong>y </strong></code></td> <td>
offset into <a href="SkCanvas_Reference#Canvas">Canvas</a> writable pixels in <a href="SkCanvas_Reference#y">y</a></td>
offset into <a href="SkCanvas_Reference#Canvas">Canvas</a> writable pixels in <a href="SkCanvas_Reference#y">y</a>; may be negative</td>
</tr>
</table>
@ -1195,6 +1209,10 @@ true if pixels were written to <a href="SkCanvas_Reference#Canvas">Canvas</a>
<div><fiddle-embed name="8b128e067881f9251357653692fa28da"></fiddle-embed></div>
### See Also
<a href="SkCanvas_Reference#readPixels">readPixels</a> <a href="SkCanvas_Reference#drawBitmap">drawBitmap</a> <a href="SkCanvas_Reference#drawImage">drawImage</a>
---
# <a name="State_Stack"></a> State Stack

View File

@ -430,17 +430,24 @@ bool Definition::crossCheckInside(const char* start, const char* end,
}
} else if (!incEof && '#' == inc.peek() && (defEof || '#' != def.peek())) {
inc.next();
SkASSERT(inc.startsWith("if"));
inc.skipToEndBracket("#");
SkASSERT(inc.startsWith("#endif"));
inc.skipToEndBracket("\n");
if (inc.startsWith("if")) {
inc.skipToEndBracket("\n");
} else if (inc.startsWith("endif")) {
inc.skipToEndBracket("\n");
} else {
SkASSERT(0); // incomplete
return false;
}
} else {
break;
}
inc.next();
} while (true);
if (defEof || incEof) {
return defEof == incEof || (!defEof && ';' == def.peek());
if (defEof == incEof || (!defEof && ';' == def.peek())) {
return true;
}
return false; // allow setting breakpoint on failure
}
char defCh;
do {
@ -1960,7 +1967,7 @@ string BmhParser::word(const string& prefix, const string& delimiter) {
DEFINE_string2(bmh, b, "", "A path to a *.bmh file or a directory.");
DEFINE_string2(examples, e, "", "File of fiddlecli input, usually fiddle.json (For now, disables -r -f -s)");
DEFINE_string2(fiddle, f, "fiddleout.json", "File of fiddlecli output.");
DEFINE_string2(fiddle, f, "", "File of fiddlecli output, usually fiddleout.json.");
DEFINE_string2(include, i, "", "A path to a *.h file or a directory.");
DEFINE_bool2(hack, k, false, "Do a find/replace hack to update all *.bmh files. (Requires -b)");
DEFINE_bool2(populate, p, false, "Populate include from bmh. (Requires -b -i)");

View File

@ -315,6 +315,7 @@ bool IncludeParser::crossCheck(BmhParser& bmhParser) {
} break;
case MarkType::kComment:
break;
case MarkType::kEnumClass:
case MarkType::kEnum: {
if (!def) {
// work backwards from first word to deduce #Enum name
@ -366,7 +367,9 @@ bool IncludeParser::crossCheck(BmhParser& bmhParser) {
SkDebugf("enum differs from bmh: %s\n", def->fName.c_str());
}
for (auto& child : token.fChildren) {
string constName = className + "::" + child->fName;
string constName = MarkType::kEnumClass == token.fMarkType ?
fullName : className;
constName += "::" + child->fName;
def = root->find(constName);
if (!def) {
string innerName = classMapper.first + "::" + child->fName;