1 /*
2  * Copyright 2016 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 #ifndef SkRecordedDrawable_DEFINED
8 #define SkRecordedDrawable_DEFINED
9 
10 #include "SkBBoxHierarchy.h"
11 #include "SkDrawable.h"
12 #include "SkRecord.h"
13 #include "SkRecorder.h"
14 
15 class SkRecordedDrawable : public SkDrawable {
16 public:
SkRecordedDrawable(sk_sp<SkRecord> record,sk_sp<SkBBoxHierarchy> bbh,std::unique_ptr<SkDrawableList> drawableList,const SkRect & bounds)17     SkRecordedDrawable(sk_sp<SkRecord> record, sk_sp<SkBBoxHierarchy> bbh,
18                        std::unique_ptr<SkDrawableList> drawableList, const SkRect& bounds)
19         : fRecord(std::move(record))
20         , fBBH(std::move(bbh))
21         , fDrawableList(std::move(drawableList))
22         , fBounds(bounds)
23     {}
24 
25     void flatten(SkWriteBuffer& buffer) const override;
26 
27     static sk_sp<SkFlattenable> CreateProc(SkReadBuffer& buffer);
28 
getFactory()29     Factory getFactory() const override { return CreateProc; }
30 
31 protected:
onGetBounds()32     SkRect onGetBounds() override { return fBounds; }
33 
34     void onDraw(SkCanvas* canvas) override;
35 
36     SkPicture* onNewPictureSnapshot() override;
37 
38 private:
39     sk_sp<SkRecord>                 fRecord;
40     sk_sp<SkBBoxHierarchy>          fBBH;
41     std::unique_ptr<SkDrawableList> fDrawableList;
42     const SkRect                    fBounds;
43 };
44 #endif  // SkRecordedDrawable_DEFINED
45