blob: 5e8a2cb0c23c33d33e3c296fb83cb8b0fc551b55 [file] [log] [blame]
halcanaryfb62b3d2015-01-21 09:59:14 -08001/*
2 * Copyright 2015 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
halcanary7a14b312015-10-01 07:28:13 -07008#include "SkImage.h"
halcanary1b5c6042015-02-18 11:29:56 -08009#include "SkPDFBitmap.h"
halcanaryfb62b3d2015-01-21 09:59:14 -080010#include "SkPDFCanon.h"
11#include "SkPDFFont.h"
halcanaryfb62b3d2015-01-21 09:59:14 -080012
13////////////////////////////////////////////////////////////////////////////////
14
halcanarycee13422016-08-18 09:52:48 -070015SkPDFCanon::~SkPDFCanon() {
halcanarybe27a112015-04-01 13:31:19 -070016 fGraphicStateRecords.foreach ([](WrapGS w) { w.fPtr->unref(); });
halcanaryfb62b3d2015-01-21 09:59:14 -080017}
18
halcanaryfb62b3d2015-01-21 09:59:14 -080019////////////////////////////////////////////////////////////////////////////////
20
halcanarydabd4f02016-08-03 11:16:56 -070021template <typename T>
22sk_sp<SkPDFObject> find_shader(const SkTArray<T>& records,
23 const SkPDFShader::State& state) {
24 for (const T& record : records) {
25 if (record.fShaderState == state) {
26 return record.fShaderObject;
27 }
28 }
29 return nullptr;
30}
31
32sk_sp<SkPDFObject> SkPDFCanon::findFunctionShader(
halcanary530ea8e2015-01-23 06:17:35 -080033 const SkPDFShader::State& state) const {
halcanarydabd4f02016-08-03 11:16:56 -070034 return find_shader(fFunctionShaderRecords, state);
halcanary530ea8e2015-01-23 06:17:35 -080035}
halcanarydabd4f02016-08-03 11:16:56 -070036void SkPDFCanon::addFunctionShader(sk_sp<SkPDFObject> pdfShader,
37 SkPDFShader::State state) {
Hal Canary5c1b3602017-04-17 16:30:06 -040038 fFunctionShaderRecords.emplace_back(ShaderRec{std::move(state), std::move(pdfShader)});
halcanaryfb62b3d2015-01-21 09:59:14 -080039}
40
halcanarydabd4f02016-08-03 11:16:56 -070041sk_sp<SkPDFObject> SkPDFCanon::findAlphaShader(
halcanary530ea8e2015-01-23 06:17:35 -080042 const SkPDFShader::State& state) const {
halcanarydabd4f02016-08-03 11:16:56 -070043 return find_shader(fAlphaShaderRecords, state);
halcanary530ea8e2015-01-23 06:17:35 -080044}
halcanarydabd4f02016-08-03 11:16:56 -070045void SkPDFCanon::addAlphaShader(sk_sp<SkPDFObject> pdfShader,
46 SkPDFShader::State state) {
Hal Canary5c1b3602017-04-17 16:30:06 -040047 fAlphaShaderRecords.emplace_back(ShaderRec{std::move(state), std::move(pdfShader)});
halcanaryfb62b3d2015-01-21 09:59:14 -080048}
49
halcanarydabd4f02016-08-03 11:16:56 -070050sk_sp<SkPDFObject> SkPDFCanon::findImageShader(
halcanary530ea8e2015-01-23 06:17:35 -080051 const SkPDFShader::State& state) const {
halcanarydabd4f02016-08-03 11:16:56 -070052 return find_shader(fImageShaderRecords, state);
halcanary530ea8e2015-01-23 06:17:35 -080053}
54
halcanarydabd4f02016-08-03 11:16:56 -070055void SkPDFCanon::addImageShader(sk_sp<SkPDFObject> pdfShader,
56 SkPDFShader::State state) {
Hal Canary5c1b3602017-04-17 16:30:06 -040057 fImageShaderRecords.emplace_back(ShaderRec{std::move(state), std::move(pdfShader)});
halcanaryfb62b3d2015-01-21 09:59:14 -080058}
59
60////////////////////////////////////////////////////////////////////////////////
61
halcanarybe27a112015-04-01 13:31:19 -070062const SkPDFGraphicState* SkPDFCanon::findGraphicState(
63 const SkPDFGraphicState& key) const {
64 const WrapGS* ptr = fGraphicStateRecords.find(WrapGS(&key));
halcanary96fcdcc2015-08-27 07:41:13 -070065 return ptr ? ptr->fPtr : nullptr;
halcanaryfb62b3d2015-01-21 09:59:14 -080066}
67
halcanarybe27a112015-04-01 13:31:19 -070068void SkPDFCanon::addGraphicState(const SkPDFGraphicState* state) {
69 SkASSERT(state);
70 WrapGS w(SkRef(state));
71 SkASSERT(!fGraphicStateRecords.contains(w));
72 fGraphicStateRecords.add(w);
halcanaryfb62b3d2015-01-21 09:59:14 -080073}
halcanary1b5c6042015-02-18 11:29:56 -080074