1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2014 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef SkPicturePlayback_DEFINED 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define SkPicturePlayback_DEFINED 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPictureFlat.h" // for DrawType 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkBitmap; 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkCanvas; 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkPaint; 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkPictureData; 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot// The basic picture playback class replays the provided picture into a canvas. 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkPicturePlayback final : SkNoncopyable { 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPicturePlayback(const SkPictureData* data) 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot : fPictureData(data) 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fCurOffset(0) { 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void draw(SkCanvas* canvas, SkPicture::AbortCallback*, SkReadBuffer* buffer); 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // TODO: remove the curOp calls after cleaning up GrGatherDevice 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // Return the ID of the operation currently being executed when playing 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // back. 0 indicates no call is active. 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot size_t curOpID() const { return fCurOffset; } 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void resetOpID() { fCurOffset = 0; } 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const SkPictureData* fPictureData; 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // The offset of the current operation when within the draw method 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot size_t fCurOffset; 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void handleOp(SkReadBuffer* reader, 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot DrawType op, 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot uint32_t size, 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkCanvas* canvas, 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const SkMatrix& initialMatrix); 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static DrawType ReadOpAndSize(SkReadBuffer* reader, uint32_t* size); 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot class AutoResetOpID { 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot public: 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot AutoResetOpID(SkPicturePlayback* playback) : fPlayback(playback) { } 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot ~AutoResetOpID() { 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (fPlayback) { 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fPlayback->resetOpID(); 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot private: 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPicturePlayback* fPlayback; 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot }; 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef SkNoncopyable INHERITED; 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 66