| 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" |
| (...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 503 State(const State& other); | 503 State(const State& other); |
| 504 State operator=(const State& rhs); | 504 State operator=(const State& rhs); |
| 505 void AllocateGradientInfoStorage(); | 505 void AllocateGradientInfoStorage(); |
| 506 }; | 506 }; |
| 507 | 507 |
| 508 //////////////////////////////////////////////////////////////////////////////// | 508 //////////////////////////////////////////////////////////////////////////////// |
| 509 | 509 |
| 510 SkPDFFunctionShader::SkPDFFunctionShader(SkPDFShader::State* state) | 510 SkPDFFunctionShader::SkPDFFunctionShader(SkPDFShader::State* state) |
| 511 : SkPDFDict("Pattern"), fShaderState(state) {} | 511 : SkPDFDict("Pattern"), fShaderState(state) {} |
| 512 | 512 |
| 513 void SkPDFFunctionShader::getResources(const SkTSet<SkPDFObject*>& known, | |
| 514 SkTSet<SkPDFObject*>* newr) { | |
| 515 GetResourcesHelper(&fResources, known, newr); | |
| 516 } | |
| 517 | |
| 518 SkPDFFunctionShader::~SkPDFFunctionShader() { | 513 SkPDFFunctionShader::~SkPDFFunctionShader() { |
| 519 SkAutoMutexAcquire lock(SkPDFCanon::GetShaderMutex()); | 514 SkAutoMutexAcquire lock(SkPDFCanon::GetShaderMutex()); |
| 520 SkPDFCanon::GetCanon().removeFunctionShader(this); | 515 SkPDFCanon::GetCanon().removeFunctionShader(this); |
| 521 lock.release(); | 516 lock.release(); |
| 522 fResources.unrefAll(); | 517 fResources.unrefAll(); |
| 523 } | 518 } |
| 524 | 519 |
| 525 bool SkPDFFunctionShader::equals(const SkPDFShader::State& state) const { | 520 bool SkPDFFunctionShader::equals(const SkPDFShader::State& state) const { |
| 526 return state == *fShaderState; | 521 return state == *fShaderState; |
| 527 } | 522 } |
| 528 | 523 |
| 529 //////////////////////////////////////////////////////////////////////////////// | 524 //////////////////////////////////////////////////////////////////////////////// |
| 530 | 525 |
| 531 SkPDFAlphaFunctionShader::SkPDFAlphaFunctionShader(SkPDFShader::State* state) | 526 SkPDFAlphaFunctionShader::SkPDFAlphaFunctionShader(SkPDFShader::State* state) |
| 532 : fShaderState(state) {} | 527 : fShaderState(state) {} |
| 533 | 528 |
| 534 bool SkPDFAlphaFunctionShader::equals(const SkPDFShader::State& state) const { | 529 bool SkPDFAlphaFunctionShader::equals(const SkPDFShader::State& state) const { |
| 535 return state == *fShaderState; | 530 return state == *fShaderState; |
| 536 } | 531 } |
| 537 | 532 |
| 538 SkPDFAlphaFunctionShader::~SkPDFAlphaFunctionShader() { | 533 SkPDFAlphaFunctionShader::~SkPDFAlphaFunctionShader() { |
| 539 SkAutoMutexAcquire lock(SkPDFCanon::GetShaderMutex()); | 534 SkAutoMutexAcquire lock(SkPDFCanon::GetShaderMutex()); |
| 540 SkPDFCanon::GetCanon().removeAlphaShader(this); | 535 SkPDFCanon::GetCanon().removeAlphaShader(this); |
| 541 } | 536 } |
| 542 | 537 |
| 543 void SkPDFAlphaFunctionShader::getResources(const SkTSet<SkPDFObject*>& known, | |
| 544 SkTSet<SkPDFObject*>* newr) { | |
| 545 fResourceDict->getReferencedResources(known, newr, true); | |
| 546 } | |
| 547 | |
| 548 //////////////////////////////////////////////////////////////////////////////// | 538 //////////////////////////////////////////////////////////////////////////////// |
| 549 | 539 |
| 550 SkPDFImageShader::SkPDFImageShader(SkPDFShader::State* state) | 540 SkPDFImageShader::SkPDFImageShader(SkPDFShader::State* state) |
| 551 : fShaderState(state) {} | 541 : fShaderState(state) {} |
| 552 | 542 |
| 553 bool SkPDFImageShader::equals(const SkPDFShader::State& state) const { | 543 bool SkPDFImageShader::equals(const SkPDFShader::State& state) const { |
| 554 return state == *fShaderState; | 544 return state == *fShaderState; |
| 555 } | 545 } |
| 556 | 546 |
| 557 SkPDFImageShader::~SkPDFImageShader() { | 547 SkPDFImageShader::~SkPDFImageShader() { |
| 558 SkAutoMutexAcquire lock(SkPDFCanon::GetShaderMutex()); | 548 SkAutoMutexAcquire lock(SkPDFCanon::GetShaderMutex()); |
| 559 SkPDFCanon::GetCanon().removeImageShader(this); | 549 SkPDFCanon::GetCanon().removeImageShader(this); |
| 560 lock.release(); | 550 lock.release(); |
| 561 fResources.unrefAll(); | 551 fResources.unrefAll(); |
| 562 } | 552 } |
| 563 | 553 |
| 564 void SkPDFImageShader::getResources(const SkTSet<SkPDFObject*>& known, | |
| 565 SkTSet<SkPDFObject*>* newr) { | |
| 566 GetResourcesHelper(&fResources.toArray(), known, newr); | |
| 567 } | |
| 568 | |
| 569 //////////////////////////////////////////////////////////////////////////////// | 554 //////////////////////////////////////////////////////////////////////////////// |
| 570 | 555 |
| 571 static SkPDFObject* get_pdf_shader_by_state( | 556 static SkPDFObject* get_pdf_shader_by_state( |
| 572 SkAutoTDelete<SkPDFShader::State>* autoState) { | 557 SkAutoTDelete<SkPDFShader::State>* autoState) { |
| 573 const SkPDFShader::State& state = **autoState; | 558 const SkPDFShader::State& state = **autoState; |
| 574 if (state.fType == SkShader::kNone_GradientType && state.fImage.isNull()) { | 559 if (state.fType == SkShader::kNone_GradientType && state.fImage.isNull()) { |
| 575 // TODO(vandebo) This drops SKComposeShader on the floor. We could | 560 // TODO(vandebo) This drops SKComposeShader on the floor. We could |
| 576 // handle compose shader by pulling things up to a layer, drawing with | 561 // handle compose shader by pulling things up to a layer, drawing with |
| 577 // the first shader, applying the xfer mode and drawing again with the | 562 // the first shader, applying the xfer mode and drawing again with the |
| 578 // second shader, then applying the layer to the original drawing. | 563 // second shader, then applying the layer to the original drawing. |
| (...skipping 543 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1122 } | 1107 } |
| 1123 } | 1108 } |
| 1124 | 1109 |
| 1125 // Put the canvas into the pattern stream (fContent). | 1110 // Put the canvas into the pattern stream (fContent). |
| 1126 SkAutoTDelete<SkStream> content(pattern.content()); | 1111 SkAutoTDelete<SkStream> content(pattern.content()); |
| 1127 | 1112 |
| 1128 SkPDFImageShader* imageShader = | 1113 SkPDFImageShader* imageShader = |
| 1129 SkNEW_ARGS(SkPDFImageShader, (autoState->detach())); | 1114 SkNEW_ARGS(SkPDFImageShader, (autoState->detach())); |
| 1130 imageShader->setData(content.get()); | 1115 imageShader->setData(content.get()); |
| 1131 | 1116 |
| 1132 SkPDFResourceDict* resourceDict = pattern.getResourceDict(); | |
| 1133 resourceDict->getReferencedResources(imageShader->fResources, | |
| 1134 &imageShader->fResources, false); | |
| 1135 | |
| 1136 populate_tiling_pattern_dict(imageShader, patternBBox, | 1117 populate_tiling_pattern_dict(imageShader, patternBBox, |
| 1137 pattern.getResourceDict(), finalMatrix); | 1118 pattern.getResourceDict(), finalMatrix); |
| 1138 | 1119 |
| 1139 imageShader->fShaderState->fImage.unlockPixels(); | 1120 imageShader->fShaderState->fImage.unlockPixels(); |
| 1140 | 1121 |
| 1141 SkPDFCanon::GetCanon().addImageShader(imageShader); | 1122 SkPDFCanon::GetCanon().addImageShader(imageShader); |
| 1142 return imageShader; | 1123 return imageShader; |
| 1143 } | 1124 } |
| 1144 | 1125 |
| 1145 bool SkPDFShader::State::operator==(const SkPDFShader::State& b) const { | 1126 bool SkPDFShader::State::operator==(const SkPDFShader::State& b) const { |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1325 return false; | 1306 return false; |
| 1326 } | 1307 } |
| 1327 | 1308 |
| 1328 void SkPDFShader::State::AllocateGradientInfoStorage() { | 1309 void SkPDFShader::State::AllocateGradientInfoStorage() { |
| 1329 fColorData.set(sk_malloc_throw( | 1310 fColorData.set(sk_malloc_throw( |
| 1330 fInfo.fColorCount * (sizeof(SkColor) + sizeof(SkScalar)))); | 1311 fInfo.fColorCount * (sizeof(SkColor) + sizeof(SkScalar)))); |
| 1331 fInfo.fColors = reinterpret_cast<SkColor*>(fColorData.get()); | 1312 fInfo.fColors = reinterpret_cast<SkColor*>(fColorData.get()); |
| 1332 fInfo.fColorOffsets = | 1313 fInfo.fColorOffsets = |
| 1333 reinterpret_cast<SkScalar*>(fInfo.fColors + fInfo.fColorCount); | 1314 reinterpret_cast<SkScalar*>(fInfo.fColors + fInfo.fColorCount); |
| 1334 } | 1315 } |
| OLD | NEW |