09d80c0337
Replace a hunk of documentation in docs/*.bmh with #Populate, which instructs bookmaker to retrieve the documentation from include/core. Check spelling for all documentation retrieved from include/core against Skia declarations and a list of words in spelling.txt. TBR=caryclark@google.com Docs-Preview: https://skia.org/?cl=163491 Bug: skia: Change-Id: If057c3a1336e312ad59c084a3a130f0276802496 Reviewed-on: https://skia-review.googlesource.com/c/163491 Commit-Queue: Cary Clark <caryclark@skia.org> Reviewed-by: Cary Clark <caryclark@skia.org> Auto-Submit: Cary Clark <caryclark@skia.org>
403 lines
12 KiB
Plaintext
403 lines
12 KiB
Plaintext
#Topic Picture
|
|
#Alias Pictures ##
|
|
#Alias Picture_Reference ##
|
|
|
|
#Class SkPicture
|
|
|
|
#Code
|
|
#Populate
|
|
##
|
|
|
|
Picture records drawing commands made to Canvas. The command stream may be
|
|
played in whole or in part at a later time.
|
|
|
|
Picture is an abstract class. Picture may be generated by Picture_Recorder
|
|
or Drawable, or from Picture previously saved to Data or Stream.
|
|
|
|
Picture may contain any Canvas drawing command, as well as one or more
|
|
Canvas_Matrix or Canvas_Clip. Picture has a cull Rect, which is used as
|
|
a bounding box hint. To limit Picture bounds, use Canvas_Clip when
|
|
recording or drawing Picture.
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Class AbortCallback
|
|
#Line # utility to stop picture playback ##
|
|
|
|
#Code
|
|
class AbortCallback {
|
|
public:
|
|
AbortCallback() {}
|
|
virtual ~AbortCallback() {}
|
|
virtual bool abort() = 0;
|
|
};
|
|
##
|
|
|
|
AbortCallback is an abstract class. An implementation of AbortCallback may
|
|
passed as a parameter to SkPicture::playback, to stop it before all drawing
|
|
commands have been processed.
|
|
|
|
If AbortCallback::abort returns true, SkPicture::playback is interrupted.
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method AbortCallback()
|
|
#In Constructors
|
|
#Line # defines default constructor ##
|
|
#Populate
|
|
|
|
#NoExample
|
|
##
|
|
|
|
#SeeAlso playback
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method virtual ~AbortCallback()
|
|
#In Constructors
|
|
#Line # defines default destructor ##
|
|
#Populate
|
|
|
|
#NoExample
|
|
##
|
|
|
|
#SeeAlso playback
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method virtual bool abort() = 0
|
|
#In Utility
|
|
#Line # aborts playback by callback ##
|
|
#Populate
|
|
|
|
#NoExample
|
|
##
|
|
|
|
#SeeAlso playback
|
|
|
|
#Method ##
|
|
|
|
#Example
|
|
#Description
|
|
JustOneDraw allows the black rectangle to draw but stops playback before the
|
|
white rectangle appears.
|
|
##
|
|
#Function
|
|
class JustOneDraw : public SkPicture::AbortCallback {
|
|
public:
|
|
bool abort() override { return fCalls++ > 0; }
|
|
private:
|
|
int fCalls = 0;
|
|
};
|
|
##
|
|
|
|
void draw(SkCanvas* canvas) {
|
|
SkPictureRecorder recorder;
|
|
SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
|
|
SkPaint paint;
|
|
pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
|
|
paint.setColor(SK_ColorWHITE);
|
|
pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
|
|
sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
|
|
JustOneDraw callback;
|
|
picture->playback(canvas, &callback);
|
|
}
|
|
|
|
##
|
|
|
|
#Class AbortCallback ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method static sk_sp<SkPicture> MakeFromStream(SkStream* stream,
|
|
const SkDeserialProcs* procs = nullptr)
|
|
#In Constructors
|
|
#Line # constructs Picture from stream ##
|
|
#Populate
|
|
|
|
#Example
|
|
SkPictureRecorder recorder;
|
|
SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
|
|
SkPaint paint;
|
|
pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
|
|
paint.setColor(SK_ColorWHITE);
|
|
pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
|
|
sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
|
|
SkDynamicMemoryWStream writableStream;
|
|
picture->serialize(&writableStream);
|
|
std::unique_ptr<SkStreamAsset> readableStream = writableStream.detachAsStream();
|
|
sk_sp<SkPicture> copy = SkPicture::MakeFromStream(readableStream.get());
|
|
copy->playback(canvas);
|
|
##
|
|
|
|
#SeeAlso MakeFromData SkPictureRecorder
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method static sk_sp<SkPicture> MakeFromData(const SkData* data,
|
|
const SkDeserialProcs* procs = nullptr)
|
|
#In Constructors
|
|
#Line # constructs Picture from data ##
|
|
#Populate
|
|
|
|
#Example
|
|
SkPictureRecorder recorder;
|
|
SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
|
|
SkPaint paint;
|
|
pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
|
|
paint.setColor(SK_ColorWHITE);
|
|
pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
|
|
sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
|
|
SkDynamicMemoryWStream writableStream;
|
|
picture->serialize(&writableStream);
|
|
sk_sp<SkData> readableData = writableStream.detachAsData();
|
|
sk_sp<SkPicture> copy = SkPicture::MakeFromData(readableData.get());
|
|
copy->playback(canvas);
|
|
##
|
|
|
|
#SeeAlso MakeFromStream SkPictureRecorder
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method static sk_sp<SkPicture> MakeFromData(const void* data, size_t size,
|
|
const SkDeserialProcs* procs = nullptr)
|
|
#Populate
|
|
|
|
#Example
|
|
SkPictureRecorder recorder;
|
|
SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
|
|
SkPaint paint;
|
|
pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
|
|
paint.setColor(SK_ColorWHITE);
|
|
pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
|
|
sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
|
|
SkDynamicMemoryWStream writableStream;
|
|
picture->serialize(&writableStream);
|
|
sk_sp<SkData> readableData = writableStream.detachAsData();
|
|
sk_sp<SkPicture> copy = SkPicture::MakeFromData(readableData->data(), readableData->size());
|
|
copy->playback(canvas);
|
|
##
|
|
|
|
#SeeAlso MakeFromStream SkPictureRecorder
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method virtual void playback(SkCanvas* canvas, AbortCallback* callback = nullptr) const = 0
|
|
#In Action
|
|
#Line # replays drawing commands on canvas ##
|
|
#Populate
|
|
|
|
#Example
|
|
SkPictureRecorder recorder;
|
|
SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
|
|
SkPaint paint;
|
|
pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
|
|
paint.setColor(SK_ColorWHITE);
|
|
pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
|
|
sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
|
|
picture->playback(canvas);
|
|
##
|
|
|
|
#SeeAlso SkCanvas::drawPicture
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method virtual SkRect cullRect() const = 0
|
|
#In Property
|
|
#Line # returns bounds used to record Picture ##
|
|
#Populate
|
|
|
|
#Example
|
|
#Description
|
|
Picture recorded bounds are smaller than contents; contents outside recorded
|
|
bounds may be drawn, and are drawn in this example.
|
|
##
|
|
SkPictureRecorder recorder;
|
|
SkCanvas* pictureCanvas = recorder.beginRecording({64, 64, 192, 192});
|
|
SkPaint paint;
|
|
pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
|
|
paint.setColor(SK_ColorWHITE);
|
|
pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
|
|
sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
|
|
picture->playback(canvas);
|
|
paint.setBlendMode(SkBlendMode::kModulate);
|
|
paint.setColor(0x40404040);
|
|
canvas->drawRect(picture->cullRect(), paint);
|
|
##
|
|
|
|
#SeeAlso SkCanvas::clipRect
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method uint32_t uniqueID() const
|
|
#In Property
|
|
#Line # returns identifier for Picture ##
|
|
#Populate
|
|
|
|
#Example
|
|
SkPictureRecorder recorder;
|
|
recorder.beginRecording({0, 0, 0, 0});
|
|
sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
|
|
SkDebugf("empty picture id = %d\n", picture->uniqueID());
|
|
sk_sp<SkPicture> placeholder = SkPicture::MakePlaceholder({0, 0, 0, 0});
|
|
SkDebugf("placeholder id = %d\n", placeholder->uniqueID());
|
|
#StdOut
|
|
empty picture id = 1
|
|
placeholder id = 2
|
|
##
|
|
##
|
|
|
|
#SeeAlso SkRefCnt
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method sk_sp<SkData> serialize(const SkSerialProcs* procs = nullptr) const
|
|
#In Utility
|
|
#Line # writes Picture to Data ##
|
|
#Populate
|
|
|
|
#Example
|
|
SkPictureRecorder recorder;
|
|
SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
|
|
SkPaint paint;
|
|
pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
|
|
paint.setColor(SK_ColorWHITE);
|
|
pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
|
|
sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
|
|
sk_sp<SkData> readableData = picture->serialize();
|
|
sk_sp<SkPicture> copy = SkPicture::MakeFromData(readableData->data(), readableData->size());
|
|
copy->playback(canvas);
|
|
##
|
|
|
|
#SeeAlso MakeFromData SkData SkSerialProcs
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method void serialize(SkWStream* stream, const SkSerialProcs* procs = nullptr) const
|
|
#Populate
|
|
|
|
#Example
|
|
SkPictureRecorder recorder;
|
|
SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
|
|
SkPaint paint;
|
|
pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
|
|
paint.setColor(SK_ColorWHITE);
|
|
pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
|
|
sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
|
|
SkDynamicMemoryWStream writableStream;
|
|
picture->serialize(&writableStream);
|
|
sk_sp<SkData> readableData = writableStream.detachAsData();
|
|
sk_sp<SkPicture> copy = SkPicture::MakeFromData(readableData->data(), readableData->size());
|
|
copy->playback(canvas);
|
|
##
|
|
|
|
#SeeAlso MakeFromStream SkWStream SkSerialProcs
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method static sk_sp<SkPicture> MakePlaceholder(SkRect cull)
|
|
#In Constructors
|
|
#Line # constructs placeholder with unique identifier ##
|
|
#Populate
|
|
|
|
#Example
|
|
#Function
|
|
class MyCanvas : public SkCanvas {
|
|
public:
|
|
MyCanvas(SkCanvas* c) : canvas(c) {}
|
|
void onDrawPicture(const SkPicture* picture, const SkMatrix* ,
|
|
const SkPaint* ) override {
|
|
const SkRect rect = picture->cullRect();
|
|
SkPaint redPaint;
|
|
redPaint.setColor(SK_ColorRED);
|
|
canvas->drawRect(rect, redPaint);
|
|
}
|
|
|
|
SkCanvas* canvas;
|
|
};
|
|
##
|
|
SkPictureRecorder recorder;
|
|
SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
|
|
sk_sp<SkPicture> placeholder = SkPicture::MakePlaceholder({10, 40, 80, 110});
|
|
pictureCanvas->drawPicture(placeholder);
|
|
sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
|
|
MyCanvas myCanvas(canvas);
|
|
myCanvas.drawPicture(picture);
|
|
##
|
|
|
|
#SeeAlso MakeFromStream MakeFromData uniqueID
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method virtual int approximateOpCount() const = 0
|
|
#In Property
|
|
#Line # returns approximate operation count ##
|
|
#Populate
|
|
|
|
#Example
|
|
SkPictureRecorder recorder;
|
|
SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
|
|
SkPaint paint;
|
|
pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
|
|
paint.setColor(SK_ColorWHITE);
|
|
pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
|
|
sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
|
|
picture->playback(canvas);
|
|
std::string opCount = "approximate op count: " + std::to_string(picture->approximateOpCount());
|
|
canvas->drawString(opCount.c_str(), 50, 220, SkPaint());
|
|
##
|
|
|
|
#SeeAlso approximateBytesUsed
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method virtual size_t approximateBytesUsed() const = 0
|
|
#In Property
|
|
#Line # returns approximate size ##
|
|
#Populate
|
|
|
|
#Example
|
|
SkPictureRecorder recorder;
|
|
SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
|
|
SkPaint paint;
|
|
pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
|
|
paint.setColor(SK_ColorWHITE);
|
|
pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
|
|
sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
|
|
picture->playback(canvas);
|
|
std::string opCount = "approximate bytes used: " + std::to_string(picture->approximateBytesUsed());
|
|
canvas->drawString(opCount.c_str(), 20, 220, SkPaint());
|
|
##
|
|
|
|
#SeeAlso approximateOpCount
|
|
|
|
#Method ##
|
|
|
|
#Class SkPicture ##
|
|
|
|
#Topic Picture ##
|