1ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips/* 2ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips * Copyright 2014 Google Inc. 3ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips * 4ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips * Use of this source code is governed by a BSD-style license that can be 5ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips * found in the LICENSE file. 6ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips */ 7ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips 8ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips#ifndef SkPicturePlayback_DEFINED 9ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips#define SkPicturePlayback_DEFINED 10ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips 111ad00e4b245d464c16ba78bdaa377281f29972cdrobertphillips#include "SkPictureFlat.h" // for DrawType 12ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips 13ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillipsclass SkBitmap; 14ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillipsclass SkCanvas; 15ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillipsclass SkPaint; 16ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillipsclass SkPictureData; 17ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips 18c26d991bf2d85bb1843a21b0a4f861212b0eacedrobertphillips// The basic picture playback class replays the provided picture into a canvas. 1999e20891a080f39113bd7a5dc202730f2a13fa07robertphillipsclass SkPicturePlayback final : SkNoncopyable { 20ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillipspublic: 21c6ad9eefa0f8d0c2ede9884b446c65dde9b04dd1mtklein SkPicturePlayback(const SkPictureData* data) 22c6ad9eefa0f8d0c2ede9884b446c65dde9b04dd1mtklein : fPictureData(data) 2346616af01b412ea984a516fda1ed8ec08e689f29mtklein , fCurOffset(0) { 24ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips } 25ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips 26d921dbb9b88327eef7b1fbd42e9d88bace4a65ffreed void draw(SkCanvas* canvas, SkPicture::AbortCallback*, SkReadBuffer* buffer); 27ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips 28c26d991bf2d85bb1843a21b0a4f861212b0eacedrobertphillips // TODO: remove the curOp calls after cleaning up GrGatherDevice 29ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips // Return the ID of the operation currently being executed when playing 30ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips // back. 0 indicates no call is active. 31ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips size_t curOpID() const { return fCurOffset; } 32ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips void resetOpID() { fCurOffset = 0; } 33ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips 34ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillipsprotected: 35ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips const SkPictureData* fPictureData; 36ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips 37ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips // The offset of the current operation when within the draw method 38ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips size_t fCurOffset; 39ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips 409ca06c4b00bfb9bb1a7f352efd264185e5a95fbcrobertphillips void handleOp(SkReadBuffer* reader, 4146616af01b412ea984a516fda1ed8ec08e689f29mtklein DrawType op, 4246616af01b412ea984a516fda1ed8ec08e689f29mtklein uint32_t size, 433afef1f75f710b8f183113cdc5188416f7d01f28robertphillips SkCanvas* canvas, 443afef1f75f710b8f183113cdc5188416f7d01f28robertphillips const SkMatrix& initialMatrix); 453afef1f75f710b8f183113cdc5188416f7d01f28robertphillips 469ca06c4b00bfb9bb1a7f352efd264185e5a95fbcrobertphillips static DrawType ReadOpAndSize(SkReadBuffer* reader, uint32_t* size); 471ad00e4b245d464c16ba78bdaa377281f29972cdrobertphillips 481ad00e4b245d464c16ba78bdaa377281f29972cdrobertphillips class AutoResetOpID { 491ad00e4b245d464c16ba78bdaa377281f29972cdrobertphillips public: 501ad00e4b245d464c16ba78bdaa377281f29972cdrobertphillips AutoResetOpID(SkPicturePlayback* playback) : fPlayback(playback) { } 511ad00e4b245d464c16ba78bdaa377281f29972cdrobertphillips ~AutoResetOpID() { 5249f085dddff10473b6ebf832a974288300224e60bsalomon if (fPlayback) { 531ad00e4b245d464c16ba78bdaa377281f29972cdrobertphillips fPlayback->resetOpID(); 541ad00e4b245d464c16ba78bdaa377281f29972cdrobertphillips } 551ad00e4b245d464c16ba78bdaa377281f29972cdrobertphillips } 561ad00e4b245d464c16ba78bdaa377281f29972cdrobertphillips 571ad00e4b245d464c16ba78bdaa377281f29972cdrobertphillips private: 581ad00e4b245d464c16ba78bdaa377281f29972cdrobertphillips SkPicturePlayback* fPlayback; 591ad00e4b245d464c16ba78bdaa377281f29972cdrobertphillips }; 601ad00e4b245d464c16ba78bdaa377281f29972cdrobertphillips 61ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillipsprivate: 62ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips typedef SkNoncopyable INHERITED; 63ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips}; 64ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips 65ce4dd3de38cd7c29bf5b9d8a8efb55c08ec9be47robertphillips#endif 66