diff options
Diffstat (limited to 'gfx/skia/skia/src/core/SkPicturePlayback.h')
-rw-r--r-- | gfx/skia/skia/src/core/SkPicturePlayback.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/gfx/skia/skia/src/core/SkPicturePlayback.h b/gfx/skia/skia/src/core/SkPicturePlayback.h new file mode 100644 index 0000000000..fdad38e92d --- /dev/null +++ b/gfx/skia/skia/src/core/SkPicturePlayback.h @@ -0,0 +1,67 @@ +/* + * Copyright 2014 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkPicturePlayback_DEFINED +#define SkPicturePlayback_DEFINED + +#include "include/core/SkM44.h" +#include "include/core/SkPicture.h" +#include "include/private/base/SkNoncopyable.h" +#include "src/core/SkPictureFlat.h" + +#include <cstddef> +#include <cstdint> + +class SkCanvas; +class SkPictureData; +class SkReadBuffer; + +// The basic picture playback class replays the provided picture into a canvas. +class SkPicturePlayback final : SkNoncopyable { +public: + SkPicturePlayback(const SkPictureData* data) + : fPictureData(data) + , fCurOffset(0) { + } + + void draw(SkCanvas* canvas, SkPicture::AbortCallback*, SkReadBuffer* buffer); + + // TODO: remove the curOp calls after cleaning up GrGatherDevice + // Return the ID of the operation currently being executed when playing + // back. 0 indicates no call is active. + size_t curOpID() const { return fCurOffset; } + void resetOpID() { fCurOffset = 0; } + +private: + const SkPictureData* fPictureData; + + // The offset of the current operation when within the draw method + size_t fCurOffset; + + void handleOp(SkReadBuffer* reader, + DrawType op, + uint32_t size, + SkCanvas* canvas, + const SkM44& initialMatrix); + + class AutoResetOpID { + public: + AutoResetOpID(SkPicturePlayback* playback) : fPlayback(playback) { } + ~AutoResetOpID() { + if (fPlayback) { + fPlayback->resetOpID(); + } + } + + private: + SkPicturePlayback* fPlayback; + }; + + using INHERITED = SkNoncopyable; +}; + +#endif |