blob: 027edfba7ab0a8e839be323aca3e1a99e89c23da [file] [log] [blame]
reed54dc4872016-09-13 08:09:45 -07001/*
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
8#ifndef SkPipe_DEFINED
9#define SkPipe_DEFINED
10
reed262052c2016-09-15 14:24:53 -070011#include "SkData.h"
Hal Canary6b20a552017-02-07 14:09:38 -050012#include "SkImage.h"
13#include "SkPicture.h"
reed54dc4872016-09-13 08:09:45 -070014
15class SkCanvas;
Mike Reed3ac64b42016-10-18 19:34:08 -040016class SkImageDeserializer;
Hal Canary6b20a552017-02-07 14:09:38 -050017class SkImageSerializer;
18class SkTypeface;
19class SkTypefaceDeserializer;
20class SkTypefaceSerializer;
reed54dc4872016-09-13 08:09:45 -070021class SkWStream;
22
Hal Canary6b20a552017-02-07 14:09:38 -050023struct SkRect;
24
reed54dc4872016-09-13 08:09:45 -070025class SkPipeSerializer {
26public:
27 SkPipeSerializer();
28 ~SkPipeSerializer();
29
30 // Ownership is not transferred, so caller must ceep the serializer alive
31 void setTypefaceSerializer(SkTypefaceSerializer*);
Mike Reed3ac64b42016-10-18 19:34:08 -040032 void setImageSerializer(SkImageSerializer*);
reed54dc4872016-09-13 08:09:45 -070033
34 void resetCache();
35
reed262052c2016-09-15 14:24:53 -070036 sk_sp<SkData> writeImage(SkImage*);
37 sk_sp<SkData> writePicture(SkPicture*);
38
39 void writeImage(SkImage*, SkWStream*);
40 void writePicture(SkPicture*, SkWStream*);
reed54dc4872016-09-13 08:09:45 -070041
42 SkCanvas* beginWrite(const SkRect& cullBounds, SkWStream*);
43 void endWrite();
44
45private:
46 class Impl;
47 std::unique_ptr<Impl> fImpl;
48};
49
50class SkPipeDeserializer {
51public:
52 SkPipeDeserializer();
53 ~SkPipeDeserializer();
54
55 // Ownership is not transferred, so caller must ceep the deserializer alive
56 void setTypefaceDeserializer(SkTypefaceDeserializer*);
Mike Reed3ac64b42016-10-18 19:34:08 -040057 void setImageDeserializer(SkImageDeserializer*);
reed54dc4872016-09-13 08:09:45 -070058
reed262052c2016-09-15 14:24:53 -070059 sk_sp<SkImage> readImage(const SkData* data) {
60 if (!data) {
61 return nullptr;
62 }
63 return this->readImage(data->data(), data->size());
64 }
65
66 sk_sp<SkPicture> readPicture(const SkData* data) {
67 if (!data) {
68 return nullptr;
69 }
70 return this->readPicture(data->data(), data->size());
71 }
72
reed54dc4872016-09-13 08:09:45 -070073 sk_sp<SkImage> readImage(const void*, size_t);
reed262052c2016-09-15 14:24:53 -070074 sk_sp<SkPicture> readPicture(const void*, size_t);
75
reed54dc4872016-09-13 08:09:45 -070076 bool playback(const void*, size_t, SkCanvas*);
77
78private:
79 class Impl;
80 std::unique_ptr<Impl> fImpl;
81};
82
83//////////////////////////////////////////////////////////////////////////////////////////////////
84
85class SkTypefaceSerializer {
86public:
87 virtual ~SkTypefaceSerializer() {}
88
89 virtual sk_sp<SkData> serialize(SkTypeface*) = 0;
90};
91
Mike Reed3ac64b42016-10-18 19:34:08 -040092class SkImageSerializer {
93public:
94 virtual ~SkImageSerializer() {}
95
96 virtual sk_sp<SkData> serialize(SkImage*) = 0;
97};
98
99
reed54dc4872016-09-13 08:09:45 -0700100class SkTypefaceDeserializer {
101public:
102 virtual ~SkTypefaceDeserializer() {}
103
104 virtual sk_sp<SkTypeface> deserialize(const void* data, size_t size) = 0;
105};
106
reed54dc4872016-09-13 08:09:45 -0700107#endif