1c4b21e6c03a6cdb03e116b9f510eb10cf8daedb1commit-bot@chromium.org/* 2c4b21e6c03a6cdb03e116b9f510eb10cf8daedb1commit-bot@chromium.org * Copyright 2014 Google Inc. 3c4b21e6c03a6cdb03e116b9f510eb10cf8daedb1commit-bot@chromium.org * 4c4b21e6c03a6cdb03e116b9f510eb10cf8daedb1commit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be 5c4b21e6c03a6cdb03e116b9f510eb10cf8daedb1commit-bot@chromium.org * found in the LICENSE file. 6c4b21e6c03a6cdb03e116b9f510eb10cf8daedb1commit-bot@chromium.org */ 7c4b21e6c03a6cdb03e116b9f510eb10cf8daedb1commit-bot@chromium.org 818fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org#ifndef SkRecording_DEFINED 918fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org#define SkRecording_DEFINED 1018fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org 11732bd66ac2aea4bacd1e7e8f33628f7efb50f1d0commit-bot@chromium.org#include "SkCanvas.h" // SkCanvas 12732bd66ac2aea4bacd1e7e8f33628f7efb50f1d0commit-bot@chromium.org#include "SkRefCnt.h" // SkAutoTUnref 13732bd66ac2aea4bacd1e7e8f33628f7efb50f1d0commit-bot@chromium.org#include "SkTemplates.h" // SkAutoTDelete 14732bd66ac2aea4bacd1e7e8f33628f7efb50f1d0commit-bot@chromium.org#include "SkTypes.h" // SkNoncopyable 1518fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org 1618fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org// These are intentionally left opaque. 1718fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.orgclass SkRecord; 1818fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.orgclass SkRecorder; 1918fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org 2018fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.orgnamespace EXPERIMENTAL { 2118fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org 2218fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org/** Easy mode interface to SkRecord-based SkCanvas recording. 2318fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org * 24732bd66ac2aea4bacd1e7e8f33628f7efb50f1d0commit-bot@chromium.org * scoped_ptr<SkRecording> recording(new SkRecording(1920, 1080)); 25732bd66ac2aea4bacd1e7e8f33628f7efb50f1d0commit-bot@chromium.org * skia::RefPtr<SkCanvas> canvas(skia::SharePtr(recording->canvas())); 2618fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org * 2718fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org * canvas->drawThis(); 2818fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org * canvas->clipThat(); 2918fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org * ... 3018fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org * 31732bd66ac2aea4bacd1e7e8f33628f7efb50f1d0commit-bot@chromium.org * canvas.clear(); // You must deref the canvas before you may call releasePlayback(). 32732bd66ac2aea4bacd1e7e8f33628f7efb50f1d0commit-bot@chromium.org * scoped_ptr<const SkPlayback> playback(recording->releasePlayback()); 3318fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org * playback->draw(&someCanvas); 3418fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org * playback->draw(&someOtherCanvas); 3518fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org * 3618fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org * SkPlayback is thread safe; SkRecording is not. 3718fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org */ 3818fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org 3919bce5fc4b17f544b524a2d4bacf5a312af31fcccommit-bot@chromium.orgclass SK_API SkPlayback : SkNoncopyable { 4018fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.orgpublic: 4118fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org // Remember, if you've got an SkPlayback*, you probably own it. Don't forget to delete it! 4218fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org ~SkPlayback(); 4318fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org 4418fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org // Draw recorded commands into a canvas. 4518fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org void draw(SkCanvas*) const; 4618fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org 4718fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.orgprivate: 4818fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org explicit SkPlayback(const SkRecord*); 4918fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org 50732bd66ac2aea4bacd1e7e8f33628f7efb50f1d0commit-bot@chromium.org SkAutoTDelete<const SkRecord> fRecord; 5118fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org 5218fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org friend class SkRecording; 5318fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org}; 5418fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org 5519bce5fc4b17f544b524a2d4bacf5a312af31fcccommit-bot@chromium.orgclass SK_API SkRecording : SkNoncopyable { 5618fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.orgpublic: 57732bd66ac2aea4bacd1e7e8f33628f7efb50f1d0commit-bot@chromium.org SkRecording(int width, int height); 58732bd66ac2aea4bacd1e7e8f33628f7efb50f1d0commit-bot@chromium.org ~SkRecording(); 5918fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org 6018fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org // Draws issued to this canvas will be replayed by SkPlayback::draw(). 61732bd66ac2aea4bacd1e7e8f33628f7efb50f1d0commit-bot@chromium.org // Any refs held on canvas() must be dropped before you may call releasePlayback(). 6218fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org SkCanvas* canvas(); 6318fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org 64732bd66ac2aea4bacd1e7e8f33628f7efb50f1d0commit-bot@chromium.org // Release exclusive ownership of an SkPlayback to the caller. 65732bd66ac2aea4bacd1e7e8f33628f7efb50f1d0commit-bot@chromium.org // Any refs held on canvas() must be dropped before you may call releasePlayback(). 66732bd66ac2aea4bacd1e7e8f33628f7efb50f1d0commit-bot@chromium.org SkPlayback* releasePlayback(); 6718fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org 68732bd66ac2aea4bacd1e7e8f33628f7efb50f1d0commit-bot@chromium.orgprivate: 69732bd66ac2aea4bacd1e7e8f33628f7efb50f1d0commit-bot@chromium.org SkAutoTDelete<SkRecord> fRecord; 70732bd66ac2aea4bacd1e7e8f33628f7efb50f1d0commit-bot@chromium.org SkAutoTUnref<SkRecorder> fRecorder; 7118fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org}; 7218fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org 7318fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org} // namespace EXPERIMENTAL 7418fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org 7518fd2b923a5060175ab4e446e73a73cba581c20dcommit-bot@chromium.org#endif//SkRecording_DEFINED 76