OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #include "SkPDFShader.h" | 10 #include "SkPDFShader.h" |
11 | 11 |
12 #include "SkData.h" | 12 #include "SkData.h" |
13 #include "SkOncePtr.h" | |
14 #include "SkPDFCanon.h" | 13 #include "SkPDFCanon.h" |
15 #include "SkPDFDevice.h" | 14 #include "SkPDFDevice.h" |
16 #include "SkPDFFormXObject.h" | 15 #include "SkPDFFormXObject.h" |
17 #include "SkPDFGraphicState.h" | 16 #include "SkPDFGraphicState.h" |
18 #include "SkPDFResourceDict.h" | 17 #include "SkPDFResourceDict.h" |
19 #include "SkPDFUtils.h" | 18 #include "SkPDFUtils.h" |
20 #include "SkScalar.h" | 19 #include "SkScalar.h" |
21 #include "SkStream.h" | 20 #include "SkStream.h" |
22 #include "SkTemplates.h" | 21 #include "SkTemplates.h" |
23 #include "SkTypes.h" | 22 #include "SkTypes.h" |
(...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
671 zero, one, zero, | 670 zero, one, zero, |
672 -p0/p2, -p1/p2, 1/p2); | 671 -p0/p2, -p1/p2, 1/p2); |
673 | 672 |
674 affine->setAll(sx - p0 * tx / p2, kx - p1 * tx / p2, tx / p2, | 673 affine->setAll(sx - p0 * tx / p2, kx - p1 * tx / p2, tx / p2, |
675 ky - p0 * ty / p2, sy - p1 * ty / p2, ty / p2, | 674 ky - p0 * ty / p2, sy - p1 * ty / p2, ty / p2, |
676 zero, zero, one); | 675 zero, zero, one); |
677 | 676 |
678 return true; | 677 return true; |
679 } | 678 } |
680 | 679 |
681 static SkPDFObject* create_range_object() { | 680 namespace { |
| 681 SkPDFObject* create_range_object() { |
682 SkPDFArray* range = new SkPDFArray; | 682 SkPDFArray* range = new SkPDFArray; |
683 range->reserve(6); | 683 range->reserve(6); |
684 range->appendInt(0); | 684 range->appendInt(0); |
685 range->appendInt(1); | 685 range->appendInt(1); |
686 range->appendInt(0); | 686 range->appendInt(0); |
687 range->appendInt(1); | 687 range->appendInt(1); |
688 range->appendInt(0); | 688 range->appendInt(0); |
689 range->appendInt(1); | 689 range->appendInt(1); |
690 return range; | 690 return range; |
691 } | 691 } |
692 SK_DECLARE_STATIC_ONCE_PTR(SkPDFObject, rangeObject); | 692 |
| 693 template <typename T> void unref(T* ptr) { ptr->unref();} |
| 694 } // namespace |
| 695 |
| 696 SK_DECLARE_STATIC_LAZY_PTR(SkPDFObject, rangeObject, |
| 697 create_range_object, unref<SkPDFObject>); |
693 | 698 |
694 static SkPDFStream* make_ps_function(const SkString& psCode, | 699 static SkPDFStream* make_ps_function(const SkString& psCode, |
695 SkPDFArray* domain) { | 700 SkPDFArray* domain) { |
696 SkAutoDataUnref funcData( | 701 SkAutoDataUnref funcData( |
697 SkData::NewWithCopy(psCode.c_str(), psCode.size())); | 702 SkData::NewWithCopy(psCode.c_str(), psCode.size())); |
698 SkPDFStream* result = new SkPDFStream(funcData.get()); | 703 SkPDFStream* result = new SkPDFStream(funcData.get()); |
699 result->insertInt("FunctionType", 4); | 704 result->insertInt("FunctionType", 4); |
700 result->insertObject("Domain", SkRef(domain)); | 705 result->insertObject("Domain", SkRef(domain)); |
701 result->insertObject("Range", SkRef(rangeObject.get(create_range_object))); | 706 result->insertObject("Range", SkRef(rangeObject.get())); |
702 return result; | 707 return result; |
703 } | 708 } |
704 | 709 |
705 SkPDFFunctionShader* SkPDFFunctionShader::Create( | 710 SkPDFFunctionShader* SkPDFFunctionShader::Create( |
706 SkPDFCanon* canon, SkAutoTDelete<SkPDFShader::State>* autoState) { | 711 SkPDFCanon* canon, SkAutoTDelete<SkPDFShader::State>* autoState) { |
707 const SkPDFShader::State& state = **autoState; | 712 const SkPDFShader::State& state = **autoState; |
708 | 713 |
709 SkString (*codeFunction)(const SkShader::GradientInfo& info, | 714 SkString (*codeFunction)(const SkShader::GradientInfo& info, |
710 const SkMatrix& perspectiveRemover) = nullptr; | 715 const SkMatrix& perspectiveRemover) = nullptr; |
711 SkPoint transformPoints[2]; | 716 SkPoint transformPoints[2]; |
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1224 return false; | 1229 return false; |
1225 } | 1230 } |
1226 | 1231 |
1227 void SkPDFShader::State::AllocateGradientInfoStorage() { | 1232 void SkPDFShader::State::AllocateGradientInfoStorage() { |
1228 fColorData.set(sk_malloc_throw( | 1233 fColorData.set(sk_malloc_throw( |
1229 fInfo.fColorCount * (sizeof(SkColor) + sizeof(SkScalar)))); | 1234 fInfo.fColorCount * (sizeof(SkColor) + sizeof(SkScalar)))); |
1230 fInfo.fColors = reinterpret_cast<SkColor*>(fColorData.get()); | 1235 fInfo.fColors = reinterpret_cast<SkColor*>(fColorData.get()); |
1231 fInfo.fColorOffsets = | 1236 fInfo.fColorOffsets = |
1232 reinterpret_cast<SkScalar*>(fInfo.fColors + fInfo.fColorCount); | 1237 reinterpret_cast<SkScalar*>(fInfo.fColors + fInfo.fColorCount); |
1233 } | 1238 } |
OLD | NEW |