36 explicit Drawer() : fImageInfo(
SkImageInfo::MakeN32Premul(200, 100)) {
38 surf->getCanvas()->clear(0xffffffff);
41 surf->getCanvas()->drawCircle(50, 50, 50, circlePaint);
42 fCircleImage = surf->makeImageSnapshot();
45 const SkImageInfo& imageInfo()
const {
return fImageInfo; }
61 canvas->
clear(0xff000000);
64 canvas->
drawRect(canvasRect, greenPaint);
77class RecordingStrategy {
79 virtual ~RecordingStrategy() {}
80 virtual const SkBitmap& recordAndReplay(
const Drawer& drawer,
85class BitmapBackedCanvasStrategy :
public RecordingStrategy {
88 BitmapBackedCanvasStrategy(
const SkImageInfo& imageInfo) {
92 const SkBitmap& recordAndReplay(
const Drawer& drawer,
const SkRect& intoClip,
95 canvas.
clear(0xffffffff);
98 drawer.draw(&canvas, intoClip, mode);
106class PictureStrategy :
public RecordingStrategy {
113 fWidth = imageInfo.
width();
114 fHeight = imageInfo.
height();
117 const SkBitmap& recordAndReplay(
const Drawer& drawer,
const SkRect& intoClip,
125 drawer.draw(canvas, canvasRect, mode);
129 replayCanvas.clear(0xffffffff);
130 replayCanvas.clipRect(intoClip);
148 BitmapBackedCanvasStrategy golden(drawer.imageInfo());
149 PictureStrategy picture(drawer.imageInfo());
152 unsigned numErrors = 0;
160 const SkBitmap& goldenBM = golden.recordAndReplay(drawer,
clip, mode);
161 const SkBitmap& pictureBM = picture.recordAndReplay(drawer,
clip, mode);
173 errors.appendf(
"For SkBlendMode %d %s: SkPictureRecorder bitmap is wrong\n",
SK_API const char * SkBlendMode_Name(SkBlendMode blendMode)
static constexpr int kSkBlendModeCount
static SkPath clip(const SkPath &path, const SkHalfPlane &plane)
#define DEF_TEST(name, reporter)
#define REPORTER_ASSERT(r, cond,...)
static void draw(SkCanvas *canvas, SkRect &target, int x, int y)
void allocPixels(const SkImageInfo &info, size_t rowBytes)
size_t computeByteSize() const
int saveLayer(const SkRect *bounds, const SkPaint *paint)
void drawRect(const SkRect &rect, const SkPaint &paint)
void clipRect(const SkRect &rect, SkClipOp op, bool doAntiAlias)
void clear(SkColor color)
void drawImageRect(const SkImage *, const SkRect &src, const SkRect &dst, const SkSamplingOptions &, const SkPaint *, SrcRectConstraint)
void setColor(SkColor color)
void setBlendMode(SkBlendMode mode)
SkCanvas * beginRecording(const SkRect &bounds, sk_sp< SkBBoxHierarchy > bbh)
sk_sp< SkPicture > finishRecordingAsPicture()
virtual void playback(SkCanvas *canvas, AbortCallback *callback=nullptr) const =0
sk_sp< const SkPicture > picture
SK_API sk_sp< SkSurface > Raster(const SkImageInfo &imageInfo, size_t rowBytes, const SkSurfaceProps *surfaceProps)
static SkImageInfo MakeN32Premul(int width, int height)
static constexpr SkRect MakeXYWH(float x, float y, float w, float h)
static constexpr SkRect MakeWH(float w, float h)