blob: 8edd700e8528fc89ea3e7095d7be832b3cb6d353 [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
18class SkLiteDL final : public SkDrawable {
19public:
20 static sk_sp<SkLiteDL> New(SkRect);
mtklein883c8ef2016-08-16 09:36:18 -070021 void reset(SkRect);
mtklein0c753e52016-08-09 07:40:23 -070022
mtklein03591a72016-08-07 13:35:46 -070023 void makeThreadsafe();
mtklein1da01c12016-08-17 10:20:27 -070024 bool empty() const { return fUsed == 0; }
mtkleinec559592016-08-06 20:31:30 -070025
reed6ae69692016-09-02 04:56:53 -070026#ifdef SK_SUPPORT_LEGACY_DRAWFILTER
27 void setDrawFilter(SkDrawFilter*);
28#endif
29
mtkleinf53fcc82016-09-08 08:49:08 -070030 // Draws as if...
31 // SkRect bounds = this->getBounds();
32 // canvas->saveLayer(&bounds, paint);
33 // this->draw(canvas, matrix);
34 // canvas->restore();
35 void drawAsLayer(SkCanvas*, const SkMatrix*, const SkPaint*);
36
mtklein9c5052f2016-08-06 12:51:51 -070037 void save();
mtklein29de8d92016-08-07 11:35:08 -070038 void saveLayer(const SkRect*, const SkPaint*, const SkImageFilter*, SkCanvas::SaveLayerFlags);
mtklein9c5052f2016-08-06 12:51:51 -070039 void restore();
40
41 void concat (const SkMatrix&);
42 void setMatrix (const SkMatrix&);
mtkleincbdf0072016-08-19 09:05:27 -070043 void translate(SkScalar, SkScalar);
mtklein29de8d92016-08-07 11:35:08 -070044 void translateZ(SkScalar);
mtklein9c5052f2016-08-06 12:51:51 -070045
mtklein6f8411d2016-08-06 15:28:11 -070046 void clipPath (const SkPath&, SkRegion::Op, bool aa);
mtklein9c5052f2016-08-06 12:51:51 -070047 void clipRect (const SkRect&, SkRegion::Op, bool aa);
mtklein6f8411d2016-08-06 15:28:11 -070048 void clipRRect (const SkRRect&, SkRegion::Op, bool aa);
49 void clipRegion(const SkRegion&, SkRegion::Op);
mtklein9c5052f2016-08-06 12:51:51 -070050
mtklein6f8411d2016-08-06 15:28:11 -070051 void drawPaint (const SkPaint&);
mtklein9c5052f2016-08-06 12:51:51 -070052 void drawPath (const SkPath&, const SkPaint&);
53 void drawRect (const SkRect&, const SkPaint&);
msarett44df6512016-08-25 13:54:30 -070054 void drawRegion(const SkRegion&, const SkPaint&);
mtklein6f8411d2016-08-06 15:28:11 -070055 void drawOval (const SkRect&, const SkPaint&);
bsalomonac3aa242016-08-19 11:25:19 -070056 void drawArc (const SkRect&, SkScalar, SkScalar, bool, const SkPaint&);
mtklein6f8411d2016-08-06 15:28:11 -070057 void drawRRect (const SkRRect&, const SkPaint&);
58 void drawDRRect(const SkRRect&, const SkRRect&, const SkPaint&);
mtklein9c5052f2016-08-06 12:51:51 -070059
mtklein29de8d92016-08-07 11:35:08 -070060 void drawAnnotation (const SkRect&, const char*, SkData*);
61 void drawDrawable (SkDrawable*, const SkMatrix*);
62 void drawPicture (const SkPicture*, const SkMatrix*, const SkPaint*);
vjiaoblacke6f5d562016-08-25 06:30:23 -070063 void drawShadowedPicture(const SkPicture*, const SkMatrix*,
64 const SkPaint*, const SkShadowParams& params);
mtklein9c5052f2016-08-06 12:51:51 -070065
mtkleinec559592016-08-06 20:31:30 -070066 void drawText (const void*, size_t, SkScalar, SkScalar, const SkPaint&);
67 void drawPosText (const void*, size_t, const SkPoint[], const SkPaint&);
68 void drawPosTextH (const void*, size_t, const SkScalar[], SkScalar, const SkPaint&);
mtklein29de8d92016-08-07 11:35:08 -070069 void drawTextOnPath (const void*, size_t, const SkPath&, const SkMatrix*, const SkPaint&);
70 void drawTextRSXform(const void*, size_t, const SkRSXform[], const SkRect*, const SkPaint&);
mtkleinec559592016-08-06 20:31:30 -070071 void drawTextBlob (const SkTextBlob*, SkScalar,SkScalar, const SkPaint&);
mtklein9c5052f2016-08-06 12:51:51 -070072
mtkleinec559592016-08-06 20:31:30 -070073 void drawBitmap (const SkBitmap&, SkScalar, SkScalar, const SkPaint*);
74 void drawBitmapNine(const SkBitmap&, const SkIRect&, const SkRect&, const SkPaint*);
75 void drawBitmapRect(const SkBitmap&, const SkRect*, const SkRect&, const SkPaint*,
76 SkCanvas::SrcRectConstraint);
msarett16882062016-08-16 09:31:08 -070077 void drawBitmapLattice(const SkBitmap&, const SkCanvas::Lattice&, const SkRect&,
78 const SkPaint*);
mtklein9c5052f2016-08-06 12:51:51 -070079
mtkleinec559592016-08-06 20:31:30 -070080 void drawImage (const SkImage*, SkScalar,SkScalar, const SkPaint*);
81 void drawImageNine(const SkImage*, const SkIRect&, const SkRect&, const SkPaint*);
82 void drawImageRect(const SkImage*, const SkRect*, const SkRect&, const SkPaint*,
83 SkCanvas::SrcRectConstraint);
mtklein29de8d92016-08-07 11:35:08 -070084 void drawImageLattice(const SkImage*, const SkCanvas::Lattice&, const SkRect&, const SkPaint*);
mtklein9c5052f2016-08-06 12:51:51 -070085
86 void drawPatch(const SkPoint[12], const SkColor[4], const SkPoint[4],
mtklein03591a72016-08-07 13:35:46 -070087 SkXfermode*, const SkPaint&);
mtklein29de8d92016-08-07 11:35:08 -070088 void drawPoints(SkCanvas::PointMode, size_t, const SkPoint[], const SkPaint&);
mtklein9c5052f2016-08-06 12:51:51 -070089 void drawVertices(SkCanvas::VertexMode, int, const SkPoint[], const SkPoint[], const SkColor[],
mtklein03591a72016-08-07 13:35:46 -070090 SkXfermode*, const uint16_t[], int, const SkPaint&);
mtklein9c5052f2016-08-06 12:51:51 -070091 void drawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], int,
mtklein29de8d92016-08-07 11:35:08 -070092 SkXfermode::Mode, const SkRect*, const SkPaint*);
mtklein9c5052f2016-08-06 12:51:51 -070093
94private:
mtklein883c8ef2016-08-16 09:36:18 -070095 SkLiteDL(SkRect);
mtklein9c5052f2016-08-06 12:51:51 -070096 ~SkLiteDL();
97
mtklein9c5052f2016-08-06 12:51:51 -070098 SkRect onGetBounds() override;
99 void onDraw(SkCanvas*) override;
100
mtkleinb2028332016-08-09 15:13:18 -0700101 template <typename T, typename... Args>
102 void* push(size_t, Args&&...);
103
mtklein64806192016-08-16 17:18:27 -0700104 template <typename Fn, typename... Args>
105 void map(const Fn[], Args...);
mtkleinb2028332016-08-09 15:13:18 -0700106
107 SkAutoTMalloc<uint8_t> fBytes;
108 size_t fUsed;
109 size_t fReserved;
110 SkRect fBounds;
mtklein9c5052f2016-08-06 12:51:51 -0700111};
112
113#endif//SkLiteDL_DEFINED