| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 | 8 |
| 9 #include "SkPDFShader.h" | 9 #include "SkPDFShader.h" |
| 10 | 10 |
| (...skipping 635 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 646 SkPDFDocument* doc, SkScalar dpi, const SkPDFShader::State& state) { | 646 SkPDFDocument* doc, SkScalar dpi, const SkPDFShader::State& state) { |
| 647 SkRect bbox; | 647 SkRect bbox; |
| 648 bbox.set(state.fBBox); | 648 bbox.set(state.fBBox); |
| 649 | 649 |
| 650 sk_sp<SkPDFObject> luminosityShader( | 650 sk_sp<SkPDFObject> luminosityShader( |
| 651 get_pdf_shader_by_state(doc, dpi, state.MakeAlphaToLuminosityState()
, | 651 get_pdf_shader_by_state(doc, dpi, state.MakeAlphaToLuminosityState()
, |
| 652 SkBitmap())); | 652 SkBitmap())); |
| 653 | 653 |
| 654 std::unique_ptr<SkStreamAsset> alphaStream(create_pattern_fill_content(-1, b
box)); | 654 std::unique_ptr<SkStreamAsset> alphaStream(create_pattern_fill_content(-1, b
box)); |
| 655 | 655 |
| 656 auto resources = | 656 sk_sp<SkPDFDict> resources = |
| 657 get_gradient_resource_dict(luminosityShader.get(), nullptr); | 657 get_gradient_resource_dict(luminosityShader.get(), nullptr); |
| 658 | 658 |
| 659 auto alphaMask = SkPDFMakeFormXObject(std::move(alphaStream), | 659 sk_sp<SkPDFObject> alphaMask = |
| 660 SkPDFUtils::RectToArray(bbox), | 660 SkPDFMakeFormXObject(std::move(alphaStream), |
| 661 std::move(resources), | 661 SkPDFUtils::RectToArray(bbox), |
| 662 SkMatrix::I(), | 662 std::move(resources), |
| 663 "DeviceRGB"); | 663 SkMatrix::I(), |
| 664 "DeviceRGB"); |
| 664 return SkPDFGraphicState::GetSMaskGraphicState( | 665 return SkPDFGraphicState::GetSMaskGraphicState( |
| 665 std::move(alphaMask), false, | 666 std::move(alphaMask), false, |
| 666 SkPDFGraphicState::kLuminosity_SMaskMode, doc->canon()); | 667 SkPDFGraphicState::kLuminosity_SMaskMode, doc->canon()); |
| 667 } | 668 } |
| 668 | 669 |
| 669 static sk_sp<SkPDFStream> make_alpha_function_shader(SkPDFDocument* doc, | 670 static sk_sp<SkPDFStream> make_alpha_function_shader(SkPDFDocument* doc, |
| 670 SkScalar dpi, | 671 SkScalar dpi, |
| 671 const SkPDFShader::State& s
tate) { | 672 const SkPDFShader::State& s
tate) { |
| 672 SkRect bbox; | 673 SkRect bbox; |
| 673 bbox.set(state.fBBox); | 674 bbox.set(state.fBBox); |
| 674 | 675 |
| 675 SkPDFShader::State opaqueState(state.MakeOpaqueState()); | 676 SkPDFShader::State opaqueState(state.MakeOpaqueState()); |
| 676 | 677 |
| 677 sk_sp<SkPDFObject> colorShader( | 678 sk_sp<SkPDFObject> colorShader( |
| 678 get_pdf_shader_by_state(doc, dpi, std::move(opaqueState), SkBitmap()
)); | 679 get_pdf_shader_by_state(doc, dpi, std::move(opaqueState), SkBitmap()
)); |
| 679 if (!colorShader) { | 680 if (!colorShader) { |
| 680 return nullptr; | 681 return nullptr; |
| 681 } | 682 } |
| 682 | 683 |
| 683 // Create resource dict with alpha graphics state as G0 and | 684 // Create resource dict with alpha graphics state as G0 and |
| 684 // pattern shader as P0, then write content stream. | 685 // pattern shader as P0, then write content stream. |
| 685 auto alphaGs = create_smask_graphic_state(doc, dpi, state); | 686 sk_sp<SkPDFObject> alphaGs = create_smask_graphic_state(doc, dpi, state); |
| 686 | 687 |
| 687 auto resourceDict = | 688 sk_sp<SkPDFDict> resourceDict = |
| 688 get_gradient_resource_dict(colorShader.get(), alphaGs.get()); | 689 get_gradient_resource_dict(colorShader.get(), alphaGs.get()); |
| 689 | 690 |
| 690 std::unique_ptr<SkStreamAsset> colorStream( | 691 std::unique_ptr<SkStreamAsset> colorStream( |
| 691 create_pattern_fill_content(0, bbox)); | 692 create_pattern_fill_content(0, bbox)); |
| 692 auto alphaFunctionShader = sk_make_sp<SkPDFStream>(std::move(colorStream)); | 693 auto alphaFunctionShader = sk_make_sp<SkPDFStream>(std::move(colorStream)); |
| 693 | 694 |
| 694 populate_tiling_pattern_dict(alphaFunctionShader->dict(), bbox, | 695 populate_tiling_pattern_dict(alphaFunctionShader->dict(), bbox, |
| 695 std::move(resourceDict), SkMatrix::I()); | 696 std::move(resourceDict), SkMatrix::I()); |
| 696 return alphaFunctionShader; | 697 return alphaFunctionShader; |
| 697 } | 698 } |
| (...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1345 } | 1346 } |
| 1346 return false; | 1347 return false; |
| 1347 } | 1348 } |
| 1348 | 1349 |
| 1349 void SkPDFShader::State::allocateGradientInfoStorage() { | 1350 void SkPDFShader::State::allocateGradientInfoStorage() { |
| 1350 fColors.reset(new SkColor[fInfo.fColorCount]); | 1351 fColors.reset(new SkColor[fInfo.fColorCount]); |
| 1351 fStops.reset(new SkScalar[fInfo.fColorCount]); | 1352 fStops.reset(new SkScalar[fInfo.fColorCount]); |
| 1352 fInfo.fColors = fColors.get(); | 1353 fInfo.fColors = fColors.get(); |
| 1353 fInfo.fColorOffsets = fStops.get(); | 1354 fInfo.fColorOffsets = fStops.get(); |
| 1354 } | 1355 } |
| OLD | NEW |