blob: c5961d42b1a6b0d45075d6350070206adbdd182c [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
vandebo@chromium.org8459d4e2010-09-24 22:25:30 +00002/*
epoger@google.comec3ed6a2011-07-28 14:26:00 +00003 * Copyright 2010 Google Inc.
vandebo@chromium.org8459d4e2010-09-24 22:25:30 +00004 *
epoger@google.comec3ed6a2011-07-28 14:26:00 +00005 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
vandebo@chromium.org8459d4e2010-09-24 22:25:30 +00007 */
8
epoger@google.comec3ed6a2011-07-28 14:26:00 +00009
vandebo@chromium.org8459d4e2010-09-24 22:25:30 +000010#ifndef SkPDFStream_DEFINED
11#define SkPDFStream_DEFINED
12
13#include "SkPDFTypes.h"
14#include "SkRefCnt.h"
vandebo@chromium.orga09ef972010-12-01 22:17:20 +000015#include "SkStream.h"
vandebo@chromium.org8459d4e2010-09-24 22:25:30 +000016#include "SkTemplates.h"
17
halcanary37c46ca2015-03-31 12:30:20 -070018class SkPDFObjNumMap;
vandebo@chromium.org8459d4e2010-09-24 22:25:30 +000019
20/** \class SkPDFStream
21
vandebo@chromium.orgda912d62011-03-08 18:31:02 +000022 A stream object in a PDF. Note, all streams must be indirect objects (via
23 SkObjRef).
vandebo@chromium.org8459d4e2010-09-24 22:25:30 +000024*/
vandebo@chromium.orgd90c1412011-02-24 21:50:04 +000025class SkPDFStream : public SkPDFDict {
mtklein2766c002015-06-26 11:45:03 -070026
vandebo@chromium.org8459d4e2010-09-24 22:25:30 +000027public:
28 /** Create a PDF stream. A Length entry is automatically added to the
halcanarye3224822014-07-14 09:12:12 -070029 * stream dictionary.
halcanarya060eba2015-08-19 12:26:46 -070030 * @param data The data part of the stream. Will not take ownership.
vandebo@chromium.org8459d4e2010-09-24 22:25:30 +000031 */
halcanarya060eba2015-08-19 12:26:46 -070032 explicit SkPDFStream(SkData* data) { this->setData(data); }
halcanarye3224822014-07-14 09:12:12 -070033
34 /** Create a PDF stream. A Length entry is automatically added to the
35 * stream dictionary.
halcanarya060eba2015-08-19 12:26:46 -070036 * @param stream The data part of the stream. Will not take ownership.
halcanarye3224822014-07-14 09:12:12 -070037 */
halcanarya060eba2015-08-19 12:26:46 -070038 explicit SkPDFStream(SkStream* stream) { this->setData(stream); }
halcanary1f8ed022014-06-27 10:37:27 -070039
vandebo@chromium.org8459d4e2010-09-24 22:25:30 +000040 virtual ~SkPDFStream();
41
halcanaryc1b71d62015-02-20 12:45:50 -080042 // The SkPDFObject interface.
tfarinaf4219dd2015-04-27 17:18:28 -070043 void emitObject(SkWStream* stream,
44 const SkPDFObjNumMap& objNumMap,
halcanarya060eba2015-08-19 12:26:46 -070045 const SkPDFSubstituteMap& substitutes) const override;
vandebo@chromium.org8459d4e2010-09-24 22:25:30 +000046
vandebo@chromium.org421d6442011-07-20 17:39:01 +000047protected:
edisonn@google.comd9dfa182013-04-24 13:01:01 +000048 /* Create a PDF stream with no data. The setData method must be called to
49 * set the data.
50 */
halcanarya060eba2015-08-19 12:26:46 -070051 SkPDFStream() {}
edisonn@google.comd9dfa182013-04-24 13:01:01 +000052
halcanarya060eba2015-08-19 12:26:46 -070053 /** Only call this function once. */
edisonn@google.comd9dfa182013-04-24 13:01:01 +000054 void setData(SkStream* stream);
halcanarya060eba2015-08-19 12:26:46 -070055 void setData(SkData* data) {
56 SkMemoryStream memoryStream(data);
57 this->setData(&memoryStream);
edisonn@google.comd9dfa182013-04-24 13:01:01 +000058 }
59
edisonn@google.comd9dfa182013-04-24 13:01:01 +000060private:
halcanarya060eba2015-08-19 12:26:46 -070061 SkAutoTDelete<SkStreamRewindable> fCompressedData;
vandebo@chromium.orgd90c1412011-02-24 21:50:04 +000062
63 typedef SkPDFDict INHERITED;
vandebo@chromium.org8459d4e2010-09-24 22:25:30 +000064};
65
66#endif