Index: experimental/PdfViewer/SkTrackDevice.h |
=================================================================== |
--- experimental/PdfViewer/SkTrackDevice.h (revision 0) |
+++ experimental/PdfViewer/SkTrackDevice.h (revision 0) |
@@ -0,0 +1,177 @@ |
+#ifndef EXPERIMENTAL_PDFVIEWER_SKTRACKDEVICE_H_ |
+#define EXPERIMENTAL_PDFVIEWER_SKTRACKDEVICE_H_ |
+ |
+#include "SkDevice.h" |
+#include "SkTracker.h" |
+ |
+class SkTrackDevice : public SkDevice { |
+public: |
+ SK_DECLARE_INST_COUNT(SkTrackDevice) |
+ |
+ SkTrackDevice(const SkBitmap& bitmap) : SkDevice(bitmap) |
+ , fTracker(NULL) {} |
+ |
+ SkTrackDevice(const SkBitmap& bitmap, const SkDeviceProperties& deviceProperties) |
+ : SkDevice(bitmap, deviceProperties) |
+ , fTracker(NULL) {} |
+ |
+ SkTrackDevice(SkBitmap::Config config, int width, int height, bool isOpaque = false) |
+ : SkDevice(config, width, height, isOpaque) |
+ , fTracker(NULL) {} |
+ |
+ SkTrackDevice(SkBitmap::Config config, int width, int height, bool isOpaque, |
+ const SkDeviceProperties& deviceProperties) |
+ : SkDevice(config, width, height, isOpaque, deviceProperties) |
+ , fTracker(NULL) {} |
+ |
+ virtual ~SkTrackDevice() {} |
+ |
+ void installTracker(SkTracker* tracker) { |
+ fTracker = tracker; |
+ fTracker->newFrame(); |
+ } |
+ |
+protected: |
+ virtual void clear(SkColor color) { |
+ before(); |
+ INHERITED::clear(color); |
+ after(); |
+ } |
+ |
+ virtual void drawPaint(const SkDraw& dummy1, const SkPaint& paint) { |
+ before(); |
+ INHERITED::drawPaint(dummy1, paint); |
+ after(); |
+ } |
+ |
+ virtual void drawPoints(const SkDraw& dummy1, SkCanvas::PointMode mode, size_t count, |
+ const SkPoint dummy2[], const SkPaint& paint) { |
+ before(); |
+ INHERITED::drawPoints(dummy1, mode, count, dummy2, paint); |
+ after(); |
+ } |
+ |
+ virtual void drawRect(const SkDraw& dummy1, const SkRect& r, |
+ const SkPaint& paint) { |
+ before(); |
+ INHERITED::drawRect(dummy1, r, paint); |
+ after(); |
+ } |
+ |
+ |
+ virtual void drawOval(const SkDraw& dummy1, const SkRect& oval, |
+ const SkPaint& paint) { |
+ before(); |
+ INHERITED::drawOval(dummy1, oval, paint); |
+ after(); |
+ } |
+ |
+ virtual void drawRRect(const SkDraw& dummy1, const SkRRect& rr, |
+ const SkPaint& paint) { |
+ before(); |
+ INHERITED::drawRRect(dummy1, rr, paint); |
+ after(); |
+ } |
+ |
+ virtual void drawPath(const SkDraw& dummy1, const SkPath& path, |
+ const SkPaint& paint, |
+ const SkMatrix* prePathMatrix = NULL, |
+ bool pathIsMutable = false) { |
+ before(); |
+ INHERITED::drawPath(dummy1, path, paint, prePathMatrix, pathIsMutable); |
+ after(); |
+ } |
+ |
+ virtual void drawBitmap(const SkDraw& dummy1, const SkBitmap& bitmap, |
+ const SkIRect* srcRectOrNull, |
+ const SkMatrix& matrix, const SkPaint& paint) { |
+ before(); |
+ INHERITED::drawBitmap(dummy1, bitmap, srcRectOrNull, matrix, paint); |
+ after(); |
+ } |
+ |
+ virtual void drawSprite(const SkDraw& dummy1, const SkBitmap& bitmap, |
+ int x, int y, const SkPaint& paint) { |
+ before(); |
+ INHERITED::drawSprite(dummy1, bitmap, x, y, paint); |
+ after(); |
+ } |
+ |
+ virtual void drawBitmapRect(const SkDraw& dummy1, const SkBitmap& dummy2, |
+ const SkRect* srcOrNull, const SkRect& dst, |
+ const SkPaint& paint) { |
+ before(); |
+ INHERITED::drawBitmapRect(dummy1, dummy2, srcOrNull, dst, paint); |
+ after(); |
+ } |
+ |
+ virtual void drawText(const SkDraw& dummy1, const void* text, size_t len, |
+ SkScalar x, SkScalar y, const SkPaint& paint) { |
+ before(); |
+ INHERITED::drawText(dummy1, text, len, x, y, paint); |
+ after(); |
+ } |
+ |
+ virtual void drawPosText(const SkDraw& dummy1, const void* text, size_t len, |
+ const SkScalar pos[], SkScalar constY, |
+ int scalarsPerPos, const SkPaint& paint) { |
+ before(); |
+ INHERITED::drawPosText(dummy1, text, len, pos, constY, scalarsPerPos, paint); |
+ after(); |
+ } |
+ |
+ virtual void drawTextOnPath(const SkDraw& dummy1, const void* text, size_t len, |
+ const SkPath& path, const SkMatrix* matrix, |
+ const SkPaint& paint) { |
+ before(); |
+ INHERITED::drawTextOnPath(dummy1, text, len, path, matrix, paint); |
+ after(); |
+ } |
+ |
+#ifdef SK_BUILD_FOR_ANDROID |
+ virtual void drawPosTextOnPath(const SkDraw& draw, const void* text, size_t len, |
+ const SkPoint pos[], const SkPaint& paint, |
+ const SkPath& path, const SkMatrix* matrix) { |
+ before(); |
+ INHERITED::drawPosTextOnPath(draw, text, len, pos, paint, path, matrix); |
+ after(); |
+ } |
+#endif |
+ virtual void drawVertices(const SkDraw& dummy1, SkCanvas::VertexMode dummy2, int vertexCount, |
+ const SkPoint verts[], const SkPoint texs[], |
+ const SkColor colors[], SkXfermode* xmode, |
+ const uint16_t indices[], int indexCount, |
+ const SkPaint& paint) { |
+ before(); |
+ INHERITED::drawVertices(dummy1, dummy2, vertexCount,verts, texs,colors, xmode, indices, indexCount, paint); |
+ after(); |
+ } |
+ |
+ virtual void drawDevice(const SkDraw& dummy1, SkDevice* dummy2, int x, int y, |
+ const SkPaint& dummy3) { |
+ before(); |
+ INHERITED::drawDevice(dummy1, dummy2, x, y, dummy3); |
+ after(); |
+ } |
+ |
+private: |
+ void before() { |
+ if (fTracker) { |
+ fTracker->before(accessBitmap(false)); |
+ } |
+ } |
+ |
+ // any/all of the expected touched has to be changed, and all expected untouched must be intact |
+ void after() { |
+ if (fTracker) { |
+ fTracker->after(accessBitmap(false)); |
+ } |
+ } |
+ |
+private: |
+ SkTracker* fTracker; |
+ |
+ typedef SkDevice INHERITED; |
+}; |
+ |
+#endif // EXPERIMENTAL_PDFVIEWER_SKTRACKDEVICE_H_ |