Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2011 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2013 Google Inc. All rights reserved. | 3 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 141 // Create a parent filter for shorthand filters. These have already been | 141 // Create a parent filter for shorthand filters. These have already been |
| 142 // scaled by the CSS code for page zoom, so scale is 1.0 here. | 142 // scaled by the CSS code for page zoom, so scale is 1.0 here. |
| 143 Filter* parentFilter = Filter::create(1.0f); | 143 Filter* parentFilter = Filter::create(1.0f); |
| 144 FilterEffect* previousEffect = parentFilter->getSourceGraphic(); | 144 FilterEffect* previousEffect = parentFilter->getSourceGraphic(); |
| 145 for (FilterOperation* filterOperation : operations.operations()) { | 145 for (FilterOperation* filterOperation : operations.operations()) { |
| 146 FilterEffect* effect = nullptr; | 146 FilterEffect* effect = nullptr; |
| 147 switch (filterOperation->type()) { | 147 switch (filterOperation->type()) { |
| 148 case FilterOperation::REFERENCE: { | 148 case FilterOperation::REFERENCE: { |
| 149 ReferenceFilterOperation& referenceOperation = | 149 ReferenceFilterOperation& referenceOperation = |
| 150 toReferenceFilterOperation(*filterOperation); | 150 toReferenceFilterOperation(*filterOperation); |
| 151 if (Filter* referenceFilter = | 151 Filter* referenceFilter = |
| 152 buildReferenceFilter(referenceOperation, previousEffect)) { | 152 buildReferenceFilter(referenceOperation, previousEffect); |
| 153 if (referenceFilter) { | |
| 154 effect = referenceFilter->lastEffect(); | |
|
Stephen White
2016/10/27 17:10:51
I'm not sure I understand why we now grab the last
fs
2016/10/28 08:46:31
That's what we did previously as well (I only reor
Stephen White
2016/10/28 14:58:06
Oh right; I misread.
fs
2016/10/31 09:19:12
I'd expect something along those lines to be the r
| |
| 153 // TODO(fs): This is essentially only needed for the | 155 // TODO(fs): This is essentially only needed for the |
| 154 // side-effects (mapRect). The filter differs from the one | 156 // side-effects (mapRect). The filter differs from the one |
| 155 // computed just above in what the SourceGraphic is, and how | 157 // computed just above in what the SourceGraphic is, and how |
| 156 // it's connected to the filter-chain. | 158 // it's connected to the filter-chain. |
| 157 referenceOperation.setFilter( | 159 referenceFilter = buildReferenceFilter(referenceOperation, nullptr); |
| 158 buildReferenceFilter(referenceOperation, nullptr)); | |
| 159 effect = referenceFilter->lastEffect(); | |
| 160 } | 160 } |
| 161 referenceOperation.setFilter(referenceFilter); | |
| 161 break; | 162 break; |
| 162 } | 163 } |
| 163 case FilterOperation::GRAYSCALE: { | 164 case FilterOperation::GRAYSCALE: { |
| 164 Vector<float> inputParameters = grayscaleMatrix( | 165 Vector<float> inputParameters = grayscaleMatrix( |
| 165 toBasicColorMatrixFilterOperation(filterOperation)->amount()); | 166 toBasicColorMatrixFilterOperation(filterOperation)->amount()); |
| 166 effect = FEColorMatrix::create(parentFilter, FECOLORMATRIX_TYPE_MATRIX, | 167 effect = FEColorMatrix::create(parentFilter, FECOLORMATRIX_TYPE_MATRIX, |
| 167 inputParameters); | 168 inputParameters); |
| 168 break; | 169 break; |
| 169 } | 170 } |
| 170 case FilterOperation::SEPIA: { | 171 case FilterOperation::SEPIA: { |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 301 | 302 |
| 302 CompositorFilterOperations filters; | 303 CompositorFilterOperations filters; |
| 303 for (FilterOperation* op : operations.operations()) { | 304 for (FilterOperation* op : operations.operations()) { |
| 304 switch (op->type()) { | 305 switch (op->type()) { |
| 305 case FilterOperation::REFERENCE: { | 306 case FilterOperation::REFERENCE: { |
| 306 ReferenceFilterOperation& referenceOperation = | 307 ReferenceFilterOperation& referenceOperation = |
| 307 toReferenceFilterOperation(*op); | 308 toReferenceFilterOperation(*op); |
| 308 Filter* referenceFilter = | 309 Filter* referenceFilter = |
| 309 buildReferenceFilter(referenceOperation, nullptr); | 310 buildReferenceFilter(referenceOperation, nullptr); |
| 310 if (referenceFilter && referenceFilter->lastEffect()) { | 311 if (referenceFilter && referenceFilter->lastEffect()) { |
| 311 referenceOperation.setFilter(referenceFilter); | |
| 312 SkiaImageFilterBuilder::populateSourceGraphicImageFilters( | 312 SkiaImageFilterBuilder::populateSourceGraphicImageFilters( |
| 313 referenceFilter->getSourceGraphic(), nullptr, currentColorSpace); | 313 referenceFilter->getSourceGraphic(), nullptr, currentColorSpace); |
| 314 | 314 |
| 315 FilterEffect* filterEffect = referenceFilter->lastEffect(); | 315 FilterEffect* filterEffect = referenceFilter->lastEffect(); |
| 316 currentColorSpace = filterEffect->operatingColorSpace(); | 316 currentColorSpace = filterEffect->operatingColorSpace(); |
| 317 filters.appendReferenceFilter( | 317 filters.appendReferenceFilter( |
| 318 SkiaImageFilterBuilder::build(filterEffect, currentColorSpace)); | 318 SkiaImageFilterBuilder::build(filterEffect, currentColorSpace)); |
| 319 } | 319 } |
| 320 referenceOperation.setFilter(referenceFilter); | |
| 320 break; | 321 break; |
| 321 } | 322 } |
| 322 case FilterOperation::GRAYSCALE: | 323 case FilterOperation::GRAYSCALE: |
| 323 case FilterOperation::SEPIA: | 324 case FilterOperation::SEPIA: |
| 324 case FilterOperation::SATURATE: | 325 case FilterOperation::SATURATE: |
| 325 case FilterOperation::HUE_ROTATE: { | 326 case FilterOperation::HUE_ROTATE: { |
| 326 float amount = toBasicColorMatrixFilterOperation(*op).amount(); | 327 float amount = toBasicColorMatrixFilterOperation(*op).amount(); |
| 327 switch (op->type()) { | 328 switch (op->type()) { |
| 328 case FilterOperation::GRAYSCALE: | 329 case FilterOperation::GRAYSCALE: |
| 329 filters.appendGrayscaleFilter(amount); | 330 filters.appendGrayscaleFilter(amount); |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 434 Filter::create(m_referenceBox, filterRegion, m_zoom, unitScaling); | 435 Filter::create(m_referenceBox, filterRegion, m_zoom, unitScaling); |
| 435 if (!previousEffect) | 436 if (!previousEffect) |
| 436 previousEffect = result->getSourceGraphic(); | 437 previousEffect = result->getSourceGraphic(); |
| 437 SVGFilterBuilder builder(previousEffect, nodeMap, m_fillPaint, m_strokePaint); | 438 SVGFilterBuilder builder(previousEffect, nodeMap, m_fillPaint, m_strokePaint); |
| 438 builder.buildGraph(result, filterElement, m_referenceBox); | 439 builder.buildGraph(result, filterElement, m_referenceBox); |
| 439 result->setLastEffect(builder.lastEffect()); | 440 result->setLastEffect(builder.lastEffect()); |
| 440 return result; | 441 return result; |
| 441 } | 442 } |
| 442 | 443 |
| 443 } // namespace blink | 444 } // namespace blink |
| OLD | NEW |