SkRecorder.h revision 2347b624678fedf1d2f7ab1d79b9ad70087c3392
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 void drawPatch(const SkPatch& patch, const SkPaint& paint) SK_OVERRIDE; 65 66 void willSave() SK_OVERRIDE; 67 SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SkCanvas::SaveFlags) SK_OVERRIDE; 68 void willRestore() SK_OVERRIDE; 69 70 void didConcat(const SkMatrix&) SK_OVERRIDE; 71 void didSetMatrix(const SkMatrix&) SK_OVERRIDE; 72 73 void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE; 74 void onDrawText(const void* text, 75 size_t byteLength, 76 SkScalar x, 77 SkScalar y, 78 const SkPaint& paint) SK_OVERRIDE; 79 void onDrawPosText(const void* text, 80 size_t byteLength, 81 const SkPoint pos[], 82 const SkPaint& paint) SK_OVERRIDE; 83 void onDrawPosTextH(const void* text, 84 size_t byteLength, 85 const SkScalar xpos[], 86 SkScalar constY, 87 const SkPaint& paint) SK_OVERRIDE; 88 void onDrawTextOnPath(const void* text, 89 size_t byteLength, 90 const SkPath& path, 91 const SkMatrix* matrix, 92 const SkPaint& paint) SK_OVERRIDE; 93 void onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle edgeStyle) SK_OVERRIDE; 94 void onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle edgeStyle) SK_OVERRIDE; 95 void onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle edgeStyle) SK_OVERRIDE; 96 void onClipRegion(const SkRegion& deviceRgn, SkRegion::Op op) SK_OVERRIDE; 97 98 void onDrawPicture(const SkPicture* picture) SK_OVERRIDE; 99 100 void onPushCull(const SkRect& cullRect) SK_OVERRIDE; 101 void onPopCull() SK_OVERRIDE; 102 103private: 104 template <typename T> 105 T* copy(const T*); 106 107 template <typename T> 108 T* copy(const T[], size_t count); 109 110 SkRecord* fRecord; 111}; 112 113#endif//SkRecorder_DEFINED 114