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

Unified Diff: src/pipe/SkPipeCanvas.h

Issue 2201323003: add pipecanvas (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: drawVertices and drawTextOnPath Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: src/pipe/SkPipeCanvas.h
diff --git a/include/utils/SkNWayCanvas.h b/src/pipe/SkPipeCanvas.h
similarity index 61%
copy from include/utils/SkNWayCanvas.h
copy to src/pipe/SkPipeCanvas.h
index a4b9c594122e6d1a51e46c4f77d9db67a245fa5d..a476c0bdb3ca5260c54d4b220724e6ec77c4aa40 100644
--- a/include/utils/SkNWayCanvas.h
+++ b/src/pipe/SkPipeCanvas.h
@@ -1,36 +1,92 @@
-
/*
- * Copyright 2011 Google Inc.
+ * Copyright 2016 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
-#ifndef SkNWayCanvas_DEFINED
-#define SkNWayCanvas_DEFINED
+#ifndef SkPipeCanvas_DEFINED
+#define SkPipeCanvas_DEFINED
-#include "../private/SkTDArray.h"
#include "SkCanvas.h"
+#include "SkDeduper.h"
+#include "SkImage.h"
+#include "SkTypeface.h"
+#include "SkWriteBuffer.h"
+
+class SkPipeCanvas;
+class SkPipeWriter;
-class SK_API SkNWayCanvas : public SkCanvas {
+template <typename T> class SkTIndexSet {
public:
- SkNWayCanvas(int width, int height);
- virtual ~SkNWayCanvas();
+ void reset() { fArray.reset(); }
+
+ // returns the found index or 0
+ int find(const T& key) {
+ const Rec* stop = fArray.end();
+ for (const Rec* curr = fArray.begin(); curr < stop; ++curr) {
+ if (key == curr->fKey) {
+ return curr->fIndex;
+ }
+ }
+ return 0;
+ }
+
+ // returns the new index
+ int add(const T& key) {
+ Rec* rec = fArray.append();
+ rec->fKey = key;
+ rec->fIndex = fNextIndex++;
+ return rec->fIndex;
+ }
- virtual void addCanvas(SkCanvas*);
- virtual void removeCanvas(SkCanvas*);
- virtual void removeAll();
+private:
+ struct Rec {
+ T fKey;
+ int fIndex;
+ };
- ///////////////////////////////////////////////////////////////////////////
- // These are forwarded to the N canvases we're referencing
+ SkTDArray<Rec> fArray;
+ int fNextIndex = 1;
+};
-#ifdef SK_SUPPORT_LEGACY_DRAWFILTER
- SkDrawFilter* setDrawFilter(SkDrawFilter*) override;
-#endif
+class SkPipeDeduper : public SkDeduper {
+public:
+ SkPipeDeduper() : fPipeCanvas(nullptr), fStream(nullptr) {}
-protected:
- SkTDArray<SkCanvas*> fList;
+ void resetCaches() {
+ fImages.reset();
+ fPictures.reset();
+ fTypefaces.reset();
+ fFactories.reset();
+ }
+
+ void setCanvas(SkPipeCanvas* canvas) { fPipeCanvas = canvas; }
+ void setStream(SkWStream* stream) { fStream = stream; }
+
+ int findOrDefineImage(SkImage*) override;
+ int findOrDefinePicture(SkPicture*) override;
+ int findOrDefineTypeface(SkTypeface*) override;
+ int findOrDefineFactory(SkFlattenable*) override;
+
+private:
+ SkPipeCanvas* fPipeCanvas;
+ SkWStream* fStream;
+
+ // All our keys (at the moment) are 32bit uniqueIDs
+ SkTIndexSet<uint32_t> fImages;
+ SkTIndexSet<uint32_t> fPictures;
+ SkTIndexSet<uint32_t> fTypefaces;
+ SkTIndexSet<SkFlattenable::Factory> fFactories;
+};
+
+class SkPipeCanvas : public SkCanvas {
+public:
+ SkPipeCanvas(const SkRect& cull, SkPipeDeduper*, SkWStream*);
+ ~SkPipeCanvas() override;
+
+protected:
void willSave() override;
SaveLayerStrategy getSaveLayerStrategy(const SaveLayerRec&) override;
void willRestore() override;
@@ -64,11 +120,13 @@ protected:
void onDrawBitmap(const SkBitmap&, SkScalar left, SkScalar top, const SkPaint*) override;
void onDrawBitmapRect(const SkBitmap&, const SkRect* src, const SkRect& dst, const SkPaint*,
SrcRectConstraint) override;
+ void onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect& dst,
+ const SkPaint*) override;
void onDrawImage(const SkImage*, SkScalar left, SkScalar top, const SkPaint*) override;
void onDrawImageRect(const SkImage*, const SkRect* src, const SkRect& dst,
const SkPaint*, SrcRectConstraint) override;
- void onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect& dst,
- const SkPaint*) override;
+ void onDrawImageNine(const SkImage*, const SkIRect& center, const SkRect& dst,
+ const SkPaint*) override;
void onDrawVertices(VertexMode vmode, int vertexCount,
const SkPoint vertices[], const SkPoint texs[],
const SkColor colors[], SkXfermode* xmode,
@@ -83,9 +141,12 @@ protected:
void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) override;
void onDrawAnnotation(const SkRect&, const char[], SkData*) override;
- class Iter;
-
private:
+ SkPipeDeduper* fDeduper;
+ SkWStream* fStream;
+
+ friend class SkPipeWriter;
+
typedef SkCanvas INHERITED;
};

Powered by Google App Engine
This is Rietveld 408576698