Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: src/pdf/SkPDFShader.cpp

Issue 2098393002: SkPDF: SkPDFStream takes only SkStreamAsset (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/pdf/SkPDFFormXObject.cpp ('k') | src/pdf/SkPDFStream.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 654 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 if (!matrix.isIdentity()) { 665 if (!matrix.isIdentity()) {
666 pattern->insertObject("Matrix", SkPDFUtils::MatrixToArray(matrix)); 666 pattern->insertObject("Matrix", SkPDFUtils::MatrixToArray(matrix));
667 } 667 }
668 } 668 }
669 669
670 /** 670 /**
671 * Creates a content stream which fills the pattern P0 across bounds. 671 * Creates a content stream which fills the pattern P0 across bounds.
672 * @param gsIndex A graphics state resource index to apply, or <0 if no 672 * @param gsIndex A graphics state resource index to apply, or <0 if no
673 * graphics state to apply. 673 * graphics state to apply.
674 */ 674 */
675 static SkStream* create_pattern_fill_content(int gsIndex, SkRect& bounds) { 675 static SkStreamAsset* create_pattern_fill_content(int gsIndex, SkRect& bounds) {
676 SkDynamicMemoryWStream content; 676 SkDynamicMemoryWStream content;
677 if (gsIndex >= 0) { 677 if (gsIndex >= 0) {
678 SkPDFUtils::ApplyGraphicState(gsIndex, &content); 678 SkPDFUtils::ApplyGraphicState(gsIndex, &content);
679 } 679 }
680 SkPDFUtils::ApplyPattern(0, &content); 680 SkPDFUtils::ApplyPattern(0, &content);
681 SkPDFUtils::AppendRectangle(bounds, &content); 681 SkPDFUtils::AppendRectangle(bounds, &content);
682 SkPDFUtils::PaintPath(SkPaint::kFill_Style, SkPath::kEvenOdd_FillType, 682 SkPDFUtils::PaintPath(SkPaint::kFill_Style, SkPath::kEvenOdd_FillType,
683 &content); 683 &content);
684 684
685 return content.detachAsStream(); 685 return content.detachAsStream();
686 } 686 }
687 687
688 /** 688 /**
689 * Creates a ExtGState with the SMask set to the luminosityShader in 689 * Creates a ExtGState with the SMask set to the luminosityShader in
690 * luminosity mode. The shader pattern extends to the bbox. 690 * luminosity mode. The shader pattern extends to the bbox.
691 */ 691 */
692 static sk_sp<SkPDFObject> create_smask_graphic_state( 692 static sk_sp<SkPDFObject> create_smask_graphic_state(
693 SkPDFDocument* doc, SkScalar dpi, const SkPDFShader::State& state) { 693 SkPDFDocument* doc, SkScalar dpi, const SkPDFShader::State& state) {
694 SkRect bbox; 694 SkRect bbox;
695 bbox.set(state.fBBox); 695 bbox.set(state.fBBox);
696 696
697 std::unique_ptr<SkPDFShader::State> alphaToLuminosityState( 697 std::unique_ptr<SkPDFShader::State> alphaToLuminosityState(
698 state.CreateAlphaToLuminosityState()); 698 state.CreateAlphaToLuminosityState());
699 sk_sp<SkPDFObject> luminosityShader( 699 sk_sp<SkPDFObject> luminosityShader(
700 get_pdf_shader_by_state(doc, dpi, &alphaToLuminosityState)); 700 get_pdf_shader_by_state(doc, dpi, &alphaToLuminosityState));
701 701
702 std::unique_ptr<SkStream> alphaStream(create_pattern_fill_content(-1, bbox)) ; 702 std::unique_ptr<SkStreamAsset> alphaStream(create_pattern_fill_content(-1, b box));
703 703
704 auto resources = 704 auto resources =
705 get_gradient_resource_dict(luminosityShader.get(), nullptr); 705 get_gradient_resource_dict(luminosityShader.get(), nullptr);
706 706
707 sk_sp<SkPDFFormXObject> alphaMask( 707 sk_sp<SkPDFFormXObject> alphaMask(
708 new SkPDFFormXObject(alphaStream.get(), bbox, resources.get())); 708 new SkPDFFormXObject(alphaStream.get(), bbox, resources.get()));
709 709
710 return SkPDFGraphicState::GetSMaskGraphicState( 710 return SkPDFGraphicState::GetSMaskGraphicState(
711 alphaMask.get(), false, 711 alphaMask.get(), false,
712 SkPDFGraphicState::kLuminosity_SMaskMode, doc->canon()); 712 SkPDFGraphicState::kLuminosity_SMaskMode, doc->canon());
(...skipping 18 matching lines...) Expand all
731 // Create resource dict with alpha graphics state as G0 and 731 // Create resource dict with alpha graphics state as G0 and
732 // pattern shader as P0, then write content stream. 732 // pattern shader as P0, then write content stream.
733 auto alphaGs = create_smask_graphic_state(doc, dpi, state); 733 auto alphaGs = create_smask_graphic_state(doc, dpi, state);
734 734
735 SkPDFAlphaFunctionShader* alphaFunctionShader = 735 SkPDFAlphaFunctionShader* alphaFunctionShader =
736 new SkPDFAlphaFunctionShader(autoState->release()); 736 new SkPDFAlphaFunctionShader(autoState->release());
737 737
738 auto resourceDict = 738 auto resourceDict =
739 get_gradient_resource_dict(colorShader.get(), alphaGs.get()); 739 get_gradient_resource_dict(colorShader.get(), alphaGs.get());
740 740
741 std::unique_ptr<SkStream> colorStream( 741 std::unique_ptr<SkStreamAsset> colorStream(
742 create_pattern_fill_content(0, bbox)); 742 create_pattern_fill_content(0, bbox));
743 alphaFunctionShader->setData(colorStream.get()); 743 alphaFunctionShader->setData(colorStream.get());
744 744
745 populate_tiling_pattern_dict(alphaFunctionShader, bbox, resourceDict.get(), 745 populate_tiling_pattern_dict(alphaFunctionShader, bbox, resourceDict.get(),
746 SkMatrix::I()); 746 SkMatrix::I());
747 doc->canon()->addAlphaShader(alphaFunctionShader); 747 doc->canon()->addAlphaShader(alphaFunctionShader);
748 return alphaFunctionShader; 748 return alphaFunctionShader;
749 } 749 }
750 750
751 // Finds affine and persp such that in = affine * persp. 751 // Finds affine and persp such that in = affine * persp.
(...skipping 659 matching lines...) Expand 10 before | Expand all | Expand 10 after
1411 return false; 1411 return false;
1412 } 1412 }
1413 1413
1414 void SkPDFShader::State::AllocateGradientInfoStorage() { 1414 void SkPDFShader::State::AllocateGradientInfoStorage() {
1415 fColorData.set(sk_malloc_throw( 1415 fColorData.set(sk_malloc_throw(
1416 fInfo.fColorCount * (sizeof(SkColor) + sizeof(SkScalar)))); 1416 fInfo.fColorCount * (sizeof(SkColor) + sizeof(SkScalar))));
1417 fInfo.fColors = reinterpret_cast<SkColor*>(fColorData.get()); 1417 fInfo.fColors = reinterpret_cast<SkColor*>(fColorData.get());
1418 fInfo.fColorOffsets = 1418 fInfo.fColorOffsets =
1419 reinterpret_cast<SkScalar*>(fInfo.fColors + fInfo.fColorCount); 1419 reinterpret_cast<SkScalar*>(fInfo.fColors + fInfo.fColorCount);
1420 } 1420 }
OLDNEW
« no previous file with comments | « src/pdf/SkPDFFormXObject.cpp ('k') | src/pdf/SkPDFStream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698