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 "include/core/SkBBHFactory.h" 11 #include "include/core/SkDrawable.h" 12 #include "include/core/SkFlattenable.h" 13 #include "include/core/SkRect.h" 14 #include "include/core/SkRefCnt.h" 15 #include "src/core/SkRecord.h" 16 #include "src/core/SkRecorder.h" 17 18 #include <cstddef> 19 #include <memory> 20 #include <utility> 21 22 class SkCanvas; 23 class SkPicture; 24 class SkReadBuffer; 25 class SkWriteBuffer; 26 27 class SkRecordedDrawable : public SkDrawable { 28 public: SkRecordedDrawable(sk_sp<SkRecord> record,sk_sp<SkBBoxHierarchy> bbh,std::unique_ptr<SkDrawableList> drawableList,const SkRect & bounds)29 SkRecordedDrawable(sk_sp<SkRecord> record, sk_sp<SkBBoxHierarchy> bbh, 30 std::unique_ptr<SkDrawableList> drawableList, const SkRect& bounds) 31 : fRecord(std::move(record)) 32 , fBBH(std::move(bbh)) 33 , fDrawableList(std::move(drawableList)) 34 , fBounds(bounds) 35 {} 36 37 void flatten(SkWriteBuffer& buffer) const override; 38 39 protected: onGetBounds()40 SkRect onGetBounds() override { return fBounds; } 41 size_t onApproximateBytesUsed() override; 42 43 void onDraw(SkCanvas* canvas) override; 44 45 sk_sp<SkPicture> onMakePictureSnapshot() override; 46 47 private: 48 SK_FLATTENABLE_HOOKS(SkRecordedDrawable) 49 50 sk_sp<SkRecord> fRecord; 51 sk_sp<SkBBoxHierarchy> fBBH; 52 std::unique_ptr<SkDrawableList> fDrawableList; 53 const SkRect fBounds; 54 }; 55 #endif // SkRecordedDrawable_DEFINED 56