blob: d53c8de1512cc553f5fcb77c6ba20fdb475cf2c9 [file] [log] [blame]
mtklein9c5052f2016-08-06 12:51:51 -07001/*
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
mtkleinec559592016-08-06 20:31:30 -070018class GrContext;
19
mtklein9c5052f2016-08-06 12:51:51 -070020class SkLiteDL final : public SkDrawable {
21public:
22 static sk_sp<SkLiteDL> New(SkRect);
mtklein883c8ef2016-08-16 09:36:18 -070023 void reset(SkRect);
mtklein0c753e52016-08-09 07:40:23 -070024
mtkleinec559592016-08-06 20:31:30 -070025 void optimizeFor(GrContext*);
mtklein03591a72016-08-07 13:35:46 -070026 void makeThreadsafe();
mtklein2ae98b02016-08-15 11:43:35 -070027 bool empty() const;
mtkleinec559592016-08-06 20:31:30 -070028
mtklein9c5052f2016-08-06 12:51:51 -070029 void save();
mtklein29de8d92016-08-07 11:35:08 -070030 void saveLayer(const SkRect*, const SkPaint*, const SkImageFilter*, SkCanvas::SaveLayerFlags);
mtklein9c5052f2016-08-06 12:51:51 -070031 void restore();
32
33 void concat (const SkMatrix&);
34 void setMatrix (const SkMatrix&);
mtklein29de8d92016-08-07 11:35:08 -070035 void translateZ(SkScalar);
mtklein9c5052f2016-08-06 12:51:51 -070036
mtklein6f8411d2016-08-06 15:28:11 -070037 void clipPath (const SkPath&, SkRegion::Op, bool aa);
mtklein9c5052f2016-08-06 12:51:51 -070038 void clipRect (const SkRect&, SkRegion::Op, bool aa);
mtklein6f8411d2016-08-06 15:28:11 -070039 void clipRRect (const SkRRect&, SkRegion::Op, bool aa);
40 void clipRegion(const SkRegion&, SkRegion::Op);
mtklein9c5052f2016-08-06 12:51:51 -070041
mtklein6f8411d2016-08-06 15:28:11 -070042 void drawPaint (const SkPaint&);
mtklein9c5052f2016-08-06 12:51:51 -070043 void drawPath (const SkPath&, const SkPaint&);
44 void drawRect (const SkRect&, const SkPaint&);
mtklein6f8411d2016-08-06 15:28:11 -070045 void drawOval (const SkRect&, const SkPaint&);
46 void drawRRect (const SkRRect&, const SkPaint&);
47 void drawDRRect(const SkRRect&, const SkRRect&, const SkPaint&);
mtklein9c5052f2016-08-06 12:51:51 -070048
mtklein29de8d92016-08-07 11:35:08 -070049 void drawAnnotation (const SkRect&, const char*, SkData*);
50 void drawDrawable (SkDrawable*, const SkMatrix*);
51 void drawPicture (const SkPicture*, const SkMatrix*, const SkPaint*);
52 void drawShadowedPicture(const SkPicture*, const SkMatrix*, const SkPaint*);
mtklein9c5052f2016-08-06 12:51:51 -070053
mtkleinec559592016-08-06 20:31:30 -070054 void drawText (const void*, size_t, SkScalar, SkScalar, const SkPaint&);
55 void drawPosText (const void*, size_t, const SkPoint[], const SkPaint&);
56 void drawPosTextH (const void*, size_t, const SkScalar[], SkScalar, const SkPaint&);
mtklein29de8d92016-08-07 11:35:08 -070057 void drawTextOnPath (const void*, size_t, const SkPath&, const SkMatrix*, const SkPaint&);
58 void drawTextRSXform(const void*, size_t, const SkRSXform[], const SkRect*, const SkPaint&);
mtkleinec559592016-08-06 20:31:30 -070059 void drawTextBlob (const SkTextBlob*, SkScalar,SkScalar, const SkPaint&);
mtklein9c5052f2016-08-06 12:51:51 -070060
mtkleinec559592016-08-06 20:31:30 -070061 void drawBitmap (const SkBitmap&, SkScalar, SkScalar, const SkPaint*);
62 void drawBitmapNine(const SkBitmap&, const SkIRect&, const SkRect&, const SkPaint*);
63 void drawBitmapRect(const SkBitmap&, const SkRect*, const SkRect&, const SkPaint*,
64 SkCanvas::SrcRectConstraint);
msarett16882062016-08-16 09:31:08 -070065 void drawBitmapLattice(const SkBitmap&, const SkCanvas::Lattice&, const SkRect&,
66 const SkPaint*);
mtklein9c5052f2016-08-06 12:51:51 -070067
mtkleinec559592016-08-06 20:31:30 -070068 void drawImage (const SkImage*, SkScalar,SkScalar, const SkPaint*);
69 void drawImageNine(const SkImage*, const SkIRect&, const SkRect&, const SkPaint*);
70 void drawImageRect(const SkImage*, const SkRect*, const SkRect&, const SkPaint*,
71 SkCanvas::SrcRectConstraint);
mtklein29de8d92016-08-07 11:35:08 -070072 void drawImageLattice(const SkImage*, const SkCanvas::Lattice&, const SkRect&, const SkPaint*);
mtklein9c5052f2016-08-06 12:51:51 -070073
74 void drawPatch(const SkPoint[12], const SkColor[4], const SkPoint[4],
mtklein03591a72016-08-07 13:35:46 -070075 SkXfermode*, const SkPaint&);
mtklein29de8d92016-08-07 11:35:08 -070076 void drawPoints(SkCanvas::PointMode, size_t, const SkPoint[], const SkPaint&);
mtklein9c5052f2016-08-06 12:51:51 -070077 void drawVertices(SkCanvas::VertexMode, int, const SkPoint[], const SkPoint[], const SkColor[],
mtklein03591a72016-08-07 13:35:46 -070078 SkXfermode*, const uint16_t[], int, const SkPaint&);
mtklein9c5052f2016-08-06 12:51:51 -070079 void drawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], int,
mtklein29de8d92016-08-07 11:35:08 -070080 SkXfermode::Mode, const SkRect*, const SkPaint*);
mtklein9c5052f2016-08-06 12:51:51 -070081
82private:
mtklein883c8ef2016-08-16 09:36:18 -070083 SkLiteDL(SkRect);
mtklein9c5052f2016-08-06 12:51:51 -070084 ~SkLiteDL();
85
mtklein9c5052f2016-08-06 12:51:51 -070086 SkRect onGetBounds() override;
87 void onDraw(SkCanvas*) override;
88
mtkleinb2028332016-08-09 15:13:18 -070089 template <typename T, typename... Args>
90 void* push(size_t, Args&&...);
91
mtklein64806192016-08-16 17:18:27 -070092 template <typename Fn, typename... Args>
93 void map(const Fn[], Args...);
mtkleinb2028332016-08-09 15:13:18 -070094
95 SkAutoTMalloc<uint8_t> fBytes;
96 size_t fUsed;
97 size_t fReserved;
98 SkRect fBounds;
mtklein9c5052f2016-08-06 12:51:51 -070099};
100
101#endif//SkLiteDL_DEFINED