1/* 2 * Copyright 2014 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8#ifndef SkRecorder_DEFINED 9#define SkRecorder_DEFINED 10 11#include "SkCanvas.h" 12#include "SkRecord.h" 13#include "SkRecords.h" 14 15// SkRecorder provides an SkCanvas interface for recording into an SkRecord. 16 17class SkRecorder : public SkCanvas { 18public: 19 // Does not take ownership of the SkRecord. 20 SkRecorder(SkRecord*, int width, int height); 21 22 // Make SkRecorder forget entirely about its SkRecord*; all calls to SkRecorder will fail. 23 void forgetRecord(); 24 25 void clear(SkColor) SK_OVERRIDE; 26 void drawPaint(const SkPaint& paint) SK_OVERRIDE; 27 void drawPoints(PointMode mode, 28 size_t count, 29 const SkPoint pts[], 30 const SkPaint& paint) SK_OVERRIDE; 31 void drawRect(const SkRect& rect, const SkPaint& paint) SK_OVERRIDE; 32 void drawOval(const SkRect& oval, const SkPaint&) SK_OVERRIDE; 33 void drawRRect(const SkRRect& rrect, const SkPaint& paint) SK_OVERRIDE; 34 void drawPath(const SkPath& path, const SkPaint& paint) SK_OVERRIDE; 35 void drawBitmap(const SkBitmap& bitmap, 36 SkScalar left, 37 SkScalar top, 38 const SkPaint* paint = NULL) SK_OVERRIDE; 39 void drawBitmapRectToRect(const SkBitmap& bitmap, 40 const SkRect* src, 41 const SkRect& dst, 42 const SkPaint* paint = NULL, 43 DrawBitmapRectFlags flags = kNone_DrawBitmapRectFlag) SK_OVERRIDE; 44 void drawBitmapMatrix(const SkBitmap& bitmap, 45 const SkMatrix& m, 46 const SkPaint* paint = NULL) SK_OVERRIDE; 47 void drawBitmapNine(const SkBitmap& bitmap, 48 const SkIRect& center, 49 const SkRect& dst, 50 const SkPaint* paint = NULL) SK_OVERRIDE; 51 void drawSprite(const SkBitmap& bitmap, 52 int left, 53 int top, 54 const SkPaint* paint = NULL) SK_OVERRIDE; 55 void drawVertices(VertexMode vmode, 56 int vertexCount, 57 const SkPoint vertices[], 58 const SkPoint texs[], 59 const SkColor colors[], 60 SkXfermode* xmode, 61 const uint16_t indices[], 62 int indexCount, 63 const SkPaint& paint) SK_OVERRIDE; 64 65 void willSave(SkCanvas::SaveFlags) SK_OVERRIDE; 66 SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SkCanvas::SaveFlags) SK_OVERRIDE; 67 void willRestore() SK_OVERRIDE; 68 69 void didConcat(const SkMatrix&) SK_OVERRIDE; 70 void didSetMatrix(const SkMatrix&) SK_OVERRIDE; 71 72 void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE; 73 void onDrawText(const void* text, 74 size_t byteLength, 75 SkScalar x, 76 SkScalar y, 77 const SkPaint& paint) SK_OVERRIDE; 78 void onDrawPosText(const void* text, 79 size_t byteLength, 80 const SkPoint pos[], 81 const SkPaint& paint) SK_OVERRIDE; 82 void onDrawPosTextH(const void* text, 83 size_t byteLength, 84 const SkScalar xpos[], 85 SkScalar constY, 86 const SkPaint& paint) SK_OVERRIDE; 87 void onDrawTextOnPath(const void* text, 88 size_t byteLength, 89 const SkPath& path, 90 const SkMatrix* matrix, 91 const SkPaint& paint) SK_OVERRIDE; 92 void onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle edgeStyle) SK_OVERRIDE; 93 void onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle edgeStyle) SK_OVERRIDE; 94 void onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle edgeStyle) SK_OVERRIDE; 95 void onClipRegion(const SkRegion& deviceRgn, SkRegion::Op op) SK_OVERRIDE; 96 97 void onDrawPicture(const SkPicture* picture) SK_OVERRIDE; 98 99 void onPushCull(const SkRect& cullRect) SK_OVERRIDE; 100 void onPopCull() SK_OVERRIDE; 101 102private: 103 template <typename T> 104 T* copy(const T*); 105 106 template <typename T> 107 T* copy(const T[], unsigned count); 108 109 SkRecord* fRecord; 110}; 111 112#endif//SkRecorder_DEFINED 113