1 /* 2 * Copyright 2016 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 SkLiteDL_DEFINED 9 #define SkLiteDL_DEFINED 10 11 #include "SkCanvas.h" 12 #include "SkPaint.h" 13 #include "SkPath.h" 14 #include "SkDrawable.h" 15 #include "SkRect.h" 16 #include "SkTDArray.h" 17 #include "SkTemplates.h" 18 19 class SkLiteDL final { 20 public: 21 ~SkLiteDL(); 22 23 void draw(SkCanvas* canvas) const; 24 25 void reset(); empty()26 bool empty() const { return fUsed == 0; } 27 28 #ifdef SK_SUPPORT_LEGACY_DRAWFILTER 29 void setDrawFilter(SkDrawFilter*); 30 #endif 31 32 void save(); 33 void saveLayer(const SkRect*, const SkPaint*, const SkImageFilter*, const SkImage*, 34 const SkMatrix*, SkCanvas::SaveLayerFlags); 35 void restore(); 36 37 void concat (const SkMatrix&); 38 void setMatrix (const SkMatrix&); 39 void translate(SkScalar, SkScalar); 40 void translateZ(SkScalar); 41 42 void clipPath (const SkPath&, SkClipOp, bool aa); 43 void clipRect (const SkRect&, SkClipOp, bool aa); 44 void clipRRect (const SkRRect&, SkClipOp, bool aa); 45 void clipRegion(const SkRegion&, SkClipOp); 46 47 void drawPaint (const SkPaint&); 48 void drawPath (const SkPath&, const SkPaint&); 49 void drawRect (const SkRect&, const SkPaint&); 50 void drawRegion(const SkRegion&, const SkPaint&); 51 void drawOval (const SkRect&, const SkPaint&); 52 void drawArc (const SkRect&, SkScalar, SkScalar, bool, const SkPaint&); 53 void drawRRect (const SkRRect&, const SkPaint&); 54 void drawDRRect(const SkRRect&, const SkRRect&, const SkPaint&); 55 56 void drawAnnotation (const SkRect&, const char*, SkData*); 57 void drawDrawable (SkDrawable*, const SkMatrix*); 58 void drawPicture (const SkPicture*, const SkMatrix*, const SkPaint*); 59 60 void drawText (const void*, size_t, SkScalar, SkScalar, const SkPaint&); 61 void drawPosText (const void*, size_t, const SkPoint[], const SkPaint&); 62 void drawPosTextH (const void*, size_t, const SkScalar[], SkScalar, const SkPaint&); 63 void drawTextOnPath (const void*, size_t, const SkPath&, const SkMatrix*, const SkPaint&); 64 void drawTextRSXform(const void*, size_t, const SkRSXform[], const SkRect*, const SkPaint&); 65 void drawTextBlob (const SkTextBlob*, SkScalar,SkScalar, const SkPaint&); 66 67 void drawImage (sk_sp<const SkImage>, SkScalar,SkScalar, const SkPaint*); 68 void drawImageNine(sk_sp<const SkImage>, const SkIRect&, const SkRect&, const SkPaint*); 69 void drawImageRect(sk_sp<const SkImage>, const SkRect*, const SkRect&, const SkPaint*, 70 SkCanvas::SrcRectConstraint); 71 void drawImageLattice(sk_sp<const SkImage>, const SkCanvas::Lattice&, 72 const SkRect&, const SkPaint*); 73 74 void drawPatch(const SkPoint[12], const SkColor[4], const SkPoint[4], 75 SkBlendMode, const SkPaint&); 76 void drawPoints(SkCanvas::PointMode, size_t, const SkPoint[], const SkPaint&); 77 void drawVertices(const SkVertices*, SkBlendMode, const SkPaint&); 78 void drawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], int, 79 SkBlendMode, const SkRect*, const SkPaint*); 80 void drawShadowRec(const SkPath&, const SkDrawShadowRec&); 81 82 private: 83 template <typename T, typename... Args> 84 void* push(size_t, Args&&...); 85 86 template <typename Fn, typename... Args> 87 void map(const Fn[], Args...) const; 88 89 SkAutoTMalloc<uint8_t> fBytes; 90 size_t fUsed = 0; 91 size_t fReserved = 0; 92 }; 93 94 #endif//SkLiteDL_DEFINED 95