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

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

Issue 966863002: PDF: Canon now owns a reference to all interned objects (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 2015-02-27 (Friday) 15:27:08 EST Created 5 years, 9 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/SkPDFShader.h ('k') | no next file » | 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 /* 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"
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 bool GradientHasAlpha() const; 499 bool GradientHasAlpha() const;
500 500
501 private: 501 private:
502 State(const State& other); 502 State(const State& other);
503 State operator=(const State& rhs); 503 State operator=(const State& rhs);
504 void AllocateGradientInfoStorage(); 504 void AllocateGradientInfoStorage();
505 }; 505 };
506 506
507 //////////////////////////////////////////////////////////////////////////////// 507 ////////////////////////////////////////////////////////////////////////////////
508 508
509 SkPDFFunctionShader::SkPDFFunctionShader(SkPDFCanon* canon, 509 SkPDFFunctionShader::SkPDFFunctionShader(SkPDFShader::State* state)
510 SkPDFShader::State* state) 510 : SkPDFDict("Pattern"), fShaderState(state) {}
511 : SkPDFDict("Pattern"), fCanon(canon), fShaderState(state) {}
512 511
513 SkPDFFunctionShader::~SkPDFFunctionShader() { 512 SkPDFFunctionShader::~SkPDFFunctionShader() {
514 fCanon->removeFunctionShader(this);
515 fResources.unrefAll(); 513 fResources.unrefAll();
516 } 514 }
517 515
518 bool SkPDFFunctionShader::equals(const SkPDFShader::State& state) const { 516 bool SkPDFFunctionShader::equals(const SkPDFShader::State& state) const {
519 return state == *fShaderState; 517 return state == *fShaderState;
520 } 518 }
521 519
522 //////////////////////////////////////////////////////////////////////////////// 520 ////////////////////////////////////////////////////////////////////////////////
523 521
524 SkPDFAlphaFunctionShader::SkPDFAlphaFunctionShader(SkPDFCanon* canon, 522 SkPDFAlphaFunctionShader::SkPDFAlphaFunctionShader(SkPDFShader::State* state)
525 SkPDFShader::State* state) 523 : fShaderState(state) {}
526 : fCanon(canon), fShaderState(state) {}
527 524
528 bool SkPDFAlphaFunctionShader::equals(const SkPDFShader::State& state) const { 525 bool SkPDFAlphaFunctionShader::equals(const SkPDFShader::State& state) const {
529 return state == *fShaderState; 526 return state == *fShaderState;
530 } 527 }
531 528
532 SkPDFAlphaFunctionShader::~SkPDFAlphaFunctionShader() { 529 SkPDFAlphaFunctionShader::~SkPDFAlphaFunctionShader() {}
533 fCanon->removeAlphaShader(this);
534 }
535 530
536 //////////////////////////////////////////////////////////////////////////////// 531 ////////////////////////////////////////////////////////////////////////////////
537 532
538 SkPDFImageShader::SkPDFImageShader(SkPDFCanon* canon, SkPDFShader::State* state) 533 SkPDFImageShader::SkPDFImageShader(SkPDFShader::State* state)
539 : fCanon(canon), fShaderState(state) {} 534 : fShaderState(state) {}
540 535
541 bool SkPDFImageShader::equals(const SkPDFShader::State& state) const { 536 bool SkPDFImageShader::equals(const SkPDFShader::State& state) const {
542 return state == *fShaderState; 537 return state == *fShaderState;
543 } 538 }
544 539
545 SkPDFImageShader::~SkPDFImageShader() { 540 SkPDFImageShader::~SkPDFImageShader() {
546 fCanon->removeImageShader(this);
547 fResources.unrefAll(); 541 fResources.unrefAll();
548 } 542 }
549 543
550 //////////////////////////////////////////////////////////////////////////////// 544 ////////////////////////////////////////////////////////////////////////////////
551 545
552 static SkPDFObject* get_pdf_shader_by_state( 546 static SkPDFObject* get_pdf_shader_by_state(
553 SkPDFCanon* canon, 547 SkPDFCanon* canon,
554 SkScalar dpi, 548 SkScalar dpi,
555 SkAutoTDelete<SkPDFShader::State>* autoState) { 549 SkAutoTDelete<SkPDFShader::State>* autoState) {
556 const SkPDFShader::State& state = **autoState; 550 const SkPDFShader::State& state = **autoState;
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
684 if (!colorShader) { 678 if (!colorShader) {
685 return NULL; 679 return NULL;
686 } 680 }
687 681
688 // Create resource dict with alpha graphics state as G0 and 682 // Create resource dict with alpha graphics state as G0 and
689 // pattern shader as P0, then write content stream. 683 // pattern shader as P0, then write content stream.
690 SkAutoTUnref<SkPDFGraphicState> alphaGs( 684 SkAutoTUnref<SkPDFGraphicState> alphaGs(
691 create_smask_graphic_state(canon, dpi, state)); 685 create_smask_graphic_state(canon, dpi, state));
692 686
693 SkPDFAlphaFunctionShader* alphaFunctionShader = 687 SkPDFAlphaFunctionShader* alphaFunctionShader =
694 SkNEW_ARGS(SkPDFAlphaFunctionShader, (canon, autoState->detach())); 688 SkNEW_ARGS(SkPDFAlphaFunctionShader, (autoState->detach()));
695 689
696 alphaFunctionShader->fColorShader.reset(colorShader); 690 alphaFunctionShader->fColorShader.reset(colorShader);
697 691
698 alphaFunctionShader->fResourceDict.reset(get_gradient_resource_dict( 692 alphaFunctionShader->fResourceDict.reset(get_gradient_resource_dict(
699 alphaFunctionShader->fColorShader.get(), alphaGs.get())); 693 alphaFunctionShader->fColorShader.get(), alphaGs.get()));
700 694
701 SkAutoTDelete<SkStream> colorStream( 695 SkAutoTDelete<SkStream> colorStream(
702 create_pattern_fill_content(0, bbox)); 696 create_pattern_fill_content(0, bbox));
703 alphaFunctionShader->setData(colorStream.get()); 697 alphaFunctionShader->setData(colorStream.get());
704 698
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 pdfShader->insertName("ColorSpace", "DeviceRGB"); 884 pdfShader->insertName("ColorSpace", "DeviceRGB");
891 pdfShader->insert("Domain", domain.get()); 885 pdfShader->insert("Domain", domain.get());
892 886
893 SkPDFStream* function = make_ps_function(functionCode, domain.get()); 887 SkPDFStream* function = make_ps_function(functionCode, domain.get());
894 pdfShader->insert("Function", new SkPDFObjRef(function))->unref(); 888 pdfShader->insert("Function", new SkPDFObjRef(function))->unref();
895 889
896 SkAutoTUnref<SkPDFArray> matrixArray( 890 SkAutoTUnref<SkPDFArray> matrixArray(
897 SkPDFUtils::MatrixToArray(finalMatrix)); 891 SkPDFUtils::MatrixToArray(finalMatrix));
898 892
899 SkPDFFunctionShader* pdfFunctionShader = 893 SkPDFFunctionShader* pdfFunctionShader =
900 SkNEW_ARGS(SkPDFFunctionShader, (canon, autoState->detach())); 894 SkNEW_ARGS(SkPDFFunctionShader, (autoState->detach()));
901 895
902 pdfFunctionShader->fResources.push(function); 896 pdfFunctionShader->fResources.push(function);
903 // Pass ownership to resource list. 897 // Pass ownership to resource list.
904 898
905 pdfFunctionShader->insertInt("PatternType", 2); 899 pdfFunctionShader->insertInt("PatternType", 2);
906 pdfFunctionShader->insert("Matrix", matrixArray.get()); 900 pdfFunctionShader->insert("Matrix", matrixArray.get());
907 pdfFunctionShader->insert("Shading", pdfShader.get()); 901 pdfFunctionShader->insert("Shading", pdfShader.get());
908 902
909 canon->addFunctionShader(pdfFunctionShader); 903 canon->addFunctionShader(pdfFunctionShader);
910 return pdfFunctionShader; 904 return pdfFunctionShader;
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
1106 drawBitmapMatrix(&canvas, bottom, bottomMatrix); 1100 drawBitmapMatrix(&canvas, bottom, bottomMatrix);
1107 } 1101 }
1108 patternBBox.fBottom = deviceBounds.height(); 1102 patternBBox.fBottom = deviceBounds.height();
1109 } 1103 }
1110 } 1104 }
1111 1105
1112 // Put the canvas into the pattern stream (fContent). 1106 // Put the canvas into the pattern stream (fContent).
1113 SkAutoTDelete<SkStreamAsset> content(patternDevice->content()); 1107 SkAutoTDelete<SkStreamAsset> content(patternDevice->content());
1114 1108
1115 SkPDFImageShader* imageShader = 1109 SkPDFImageShader* imageShader =
1116 SkNEW_ARGS(SkPDFImageShader, (canon, autoState->detach())); 1110 SkNEW_ARGS(SkPDFImageShader, (autoState->detach()));
1117 imageShader->setData(content.get()); 1111 imageShader->setData(content.get());
1118 1112
1119 populate_tiling_pattern_dict(imageShader, patternBBox, 1113 populate_tiling_pattern_dict(imageShader, patternBBox,
1120 patternDevice->getResourceDict(), finalMatrix); 1114 patternDevice->getResourceDict(), finalMatrix);
1121 1115
1122 imageShader->fShaderState->fImage.unlockPixels(); 1116 imageShader->fShaderState->fImage.unlockPixels();
1123 1117
1124 canon->addImageShader(imageShader); 1118 canon->addImageShader(imageShader);
1125 return imageShader; 1119 return imageShader;
1126 } 1120 }
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
1317 return false; 1311 return false;
1318 } 1312 }
1319 1313
1320 void SkPDFShader::State::AllocateGradientInfoStorage() { 1314 void SkPDFShader::State::AllocateGradientInfoStorage() {
1321 fColorData.set(sk_malloc_throw( 1315 fColorData.set(sk_malloc_throw(
1322 fInfo.fColorCount * (sizeof(SkColor) + sizeof(SkScalar)))); 1316 fInfo.fColorCount * (sizeof(SkColor) + sizeof(SkScalar))));
1323 fInfo.fColors = reinterpret_cast<SkColor*>(fColorData.get()); 1317 fInfo.fColors = reinterpret_cast<SkColor*>(fColorData.get());
1324 fInfo.fColorOffsets = 1318 fInfo.fColorOffsets =
1325 reinterpret_cast<SkScalar*>(fInfo.fColors + fInfo.fColorCount); 1319 reinterpret_cast<SkScalar*>(fInfo.fColors + fInfo.fColorCount);
1326 } 1320 }
OLDNEW
« no previous file with comments | « src/pdf/SkPDFShader.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698