Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(809)

Side by Side Diff: src/utils/SkDeferredCanvas.h

Issue 2120333002: deferred canvas (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: make flush virtual Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2016 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #ifndef SkNWayCanvas_DEFINED 9 #ifndef SkDeferredCanvas_DEFINED
10 #define SkNWayCanvas_DEFINED 10 #define SkDeferredCanvas_DEFINED
11 11
12 #include "../private/SkTDArray.h" 12 #include "../private/SkTDArray.h"
13 #include "SkCanvas.h" 13 #include "SkCanvas.h"
14 14
15 class SK_API SkNWayCanvas : public SkCanvas { 15 class SK_API SkDeferredCanvas : public SkCanvas {
16 public: 16 public:
17 SkNWayCanvas(int width, int height); 17 SkDeferredCanvas(SkCanvas*);
18 virtual ~SkNWayCanvas(); 18 ~SkDeferredCanvas() override;
19
20 virtual void addCanvas(SkCanvas*);
21 virtual void removeCanvas(SkCanvas*);
22 virtual void removeAll();
23
24 ///////////////////////////////////////////////////////////////////////////
25 // These are forwarded to the N canvases we're referencing
26 19
27 #ifdef SK_SUPPORT_LEGACY_DRAWFILTER 20 #ifdef SK_SUPPORT_LEGACY_DRAWFILTER
28 SkDrawFilter* setDrawFilter(SkDrawFilter*) override; 21 SkDrawFilter* setDrawFilter(SkDrawFilter*) override;
29 #endif 22 #endif
30 23
31 protected: 24 protected:
32 SkTDArray<SkCanvas*> fList; 25 sk_sp<SkSurface> onNewSurface(const SkImageInfo&, const SkSurfaceProps&) ove rride;
26 SkISize getBaseLayerSize() const override;
27 bool getClipBounds(SkRect* bounds) const override;
28 bool getClipDeviceBounds(SkIRect* bounds) const override;
29 bool isClipEmpty() const override;
30 bool isClipRect() const override;
31 bool onPeekPixels(SkPixmap*) override;
32 bool onAccessTopLayerPixels(SkPixmap*) override;
33 SkImageInfo onImageInfo() const override;
34 bool onGetProps(SkSurfaceProps*) const override;
35 void onFlush() override;
36 // SkCanvas* canvasForDrawIter() override;
33 37
34 void willSave() override; 38 void willSave() override;
35 SaveLayerStrategy getSaveLayerStrategy(const SaveLayerRec&) override; 39 SaveLayerStrategy getSaveLayerStrategy(const SaveLayerRec&) override;
36 void willRestore() override; 40 void willRestore() override;
37 41
38 void didConcat(const SkMatrix&) override; 42 void didConcat(const SkMatrix&) override;
39 void didSetMatrix(const SkMatrix&) override; 43 void didSetMatrix(const SkMatrix&) override;
40 44
41 void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override; 45 void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override;
42 virtual void onDrawText(const void* text, size_t byteLength, SkScalar x, SkS calar y, 46 virtual void onDrawText(const void* text, size_t byteLength, SkScalar x, SkS calar y,
(...skipping 17 matching lines...) Expand all
60 void onDrawRRect(const SkRRect&, const SkPaint&) override; 64 void onDrawRRect(const SkRRect&, const SkPaint&) override;
61 void onDrawPath(const SkPath&, const SkPaint&) override; 65 void onDrawPath(const SkPath&, const SkPaint&) override;
62 void onDrawBitmap(const SkBitmap&, SkScalar left, SkScalar top, const SkPain t*) override; 66 void onDrawBitmap(const SkBitmap&, SkScalar left, SkScalar top, const SkPain t*) override;
63 void onDrawBitmapRect(const SkBitmap&, const SkRect* src, const SkRect& dst, const SkPaint*, 67 void onDrawBitmapRect(const SkBitmap&, const SkRect* src, const SkRect& dst, const SkPaint*,
64 SrcRectConstraint) override; 68 SrcRectConstraint) override;
65 void onDrawImage(const SkImage*, SkScalar left, SkScalar top, const SkPaint* ) override; 69 void onDrawImage(const SkImage*, SkScalar left, SkScalar top, const SkPaint* ) override;
66 void onDrawImageRect(const SkImage*, const SkRect* src, const SkRect& dst, 70 void onDrawImageRect(const SkImage*, const SkRect* src, const SkRect& dst,
67 const SkPaint*, SrcRectConstraint) override; 71 const SkPaint*, SrcRectConstraint) override;
68 void onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect& dst, 72 void onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect& dst,
69 const SkPaint*) override; 73 const SkPaint*) override;
74 void onDrawImageNine(const SkImage* image, const SkIRect& center,
75 const SkRect& dst, const SkPaint*) override;
70 void onDrawVertices(VertexMode vmode, int vertexCount, 76 void onDrawVertices(VertexMode vmode, int vertexCount,
71 const SkPoint vertices[], const SkPoint texs[], 77 const SkPoint vertices[], const SkPoint texs[],
72 const SkColor colors[], SkXfermode* xmode, 78 const SkColor colors[], SkXfermode* xmode,
73 const uint16_t indices[], int indexCount, 79 const uint16_t indices[], int indexCount,
74 const SkPaint&) override; 80 const SkPaint&) override;
81 void onDrawAtlas(const SkImage* image, const SkRSXform xform[],
82 const SkRect rects[], const SkColor colors[],
83 int count, SkXfermode::Mode mode,
84 const SkRect* cull, const SkPaint* paint) override;
75 85
76 void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) override; 86 void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) override;
77 void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) override; 87 void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) override;
78 void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) override; 88 void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) override;
79 void onClipRegion(const SkRegion&, SkRegion::Op) override; 89 void onClipRegion(const SkRegion&, SkRegion::Op) override;
80 90
91 void onDrawDrawable(SkDrawable*, const SkMatrix*) override;
81 void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) overri de; 92 void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) overri de;
82 void onDrawAnnotation(const SkRect&, const char[], SkData*) override; 93 void onDrawAnnotation(const SkRect&, const char[], SkData*) override;
83 94
84 class Iter; 95 class Iter;
85 96
86 private: 97 private:
98 SkCanvas* fCanvas;
99
100 enum Type {
101 kSave_Type,
102 kClipRect_Type,
103 kTrans_Type,
104 kScaleTrans_Type,
105 };
106 struct Rec {
107 Type fType;
108 union {
109 int fSaveCount;
110 SkRect fBounds;
111 SkVector fTranslate;
112 struct {
113 SkVector fScale;
114 SkVector fTrans; // post translate
115 } fScaleTrans;
116 } fData;
117
118 bool isConcat(SkMatrix*) const;
119 void getConcat(SkMatrix* mat) const {
120 SkDEBUGCODE(bool isconcat = ) this->isConcat(mat);
121 SkASSERT(isconcat);
f(malita) 2016/07/07 15:24:07 Nit: SkAssertResult?
122 }
123 void setConcat(const SkMatrix&);
124 };
125 SkTDArray<Rec> fRecs;
126 int fSaveCount;
127
128 void push_save();
129 void push_cliprect(const SkRect&);
130 bool push_concat(const SkMatrix&);
131
132 void emit(const Rec& rec);
133
134 void flush_all();
135 void flush_before_saves();
136 void flush_le(int index);
137 void flush_translate(SkScalar* x, SkScalar* y, const SkPaint&);
138 void flush_translate(SkScalar* x, SkScalar* y, const SkRect& bounds, const S kPaint* = nullptr);
139 void flush_check(SkRect* bounds, const SkPaint*, unsigned flags = 0);
140
141 void internal_flush_translate(SkScalar* x, SkScalar* y, const SkRect* bounds OrNull);
142
87 typedef SkCanvas INHERITED; 143 typedef SkCanvas INHERITED;
88 }; 144 };
89 145
90 146
91 #endif 147 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698