| Index: Source/core/platform/graphics/filters/SkiaImageFilterBuilder.cpp
|
| diff --git a/Source/core/platform/graphics/filters/SkiaImageFilterBuilder.cpp b/Source/core/platform/graphics/filters/SkiaImageFilterBuilder.cpp
|
| deleted file mode 100644
|
| index 1144e1ca9ea0b88a5ff54d99cd62902ef5864045..0000000000000000000000000000000000000000
|
| --- a/Source/core/platform/graphics/filters/SkiaImageFilterBuilder.cpp
|
| +++ /dev/null
|
| @@ -1,201 +0,0 @@
|
| -/*
|
| - * Copyright (C) 2012 Google Inc. All rights reserved.
|
| - *
|
| - * Redistribution and use in source and binary forms, with or without
|
| - * modification, are permitted provided that the following conditions
|
| - * are met:
|
| - *
|
| - * 1. Redistributions of source code must retain the above copyright
|
| - * notice, this list of conditions and the following disclaimer.
|
| - * 2. Redistributions in binary form must reproduce the above copyright
|
| - * notice, this list of conditions and the following disclaimer in the
|
| - * documentation and/or other materials provided with the distribution.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
|
| - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
| - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
| - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
|
| - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
| - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
| - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
| - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
| - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| - */
|
| -#include "config.h"
|
| -
|
| -#include "core/platform/graphics/filters/SkiaImageFilterBuilder.h"
|
| -
|
| -#include "SkBlurImageFilter.h"
|
| -#include "SkColorFilterImageFilter.h"
|
| -#include "SkColorMatrixFilter.h"
|
| -#include "SkDropShadowImageFilter.h"
|
| -#include "SkTableColorFilter.h"
|
| -#include "core/platform/graphics/ImageBuffer.h"
|
| -#include "core/platform/graphics/filters/FilterEffect.h"
|
| -#include "core/platform/graphics/filters/FilterOperations.h"
|
| -#include "core/platform/graphics/filters/SourceGraphic.h"
|
| -#include "public/platform/WebPoint.h"
|
| -
|
| -namespace {
|
| -
|
| -PassRefPtr<SkImageFilter> createMatrixImageFilter(SkScalar matrix[20], SkImageFilter* input)
|
| -{
|
| - RefPtr<SkColorFilter> colorFilter(adoptRef(new SkColorMatrixFilter(matrix)));
|
| - return adoptRef(SkColorFilterImageFilter::Create(colorFilter.get(), input));
|
| -}
|
| -
|
| -};
|
| -
|
| -namespace WebCore {
|
| -
|
| -SkiaImageFilterBuilder::SkiaImageFilterBuilder()
|
| -{
|
| -}
|
| -
|
| -SkiaImageFilterBuilder::~SkiaImageFilterBuilder()
|
| -{
|
| -}
|
| -
|
| -PassRefPtr<SkImageFilter> SkiaImageFilterBuilder::build(FilterEffect* effect, ColorSpace colorSpace)
|
| -{
|
| - if (!effect)
|
| - return 0;
|
| -
|
| - FilterColorSpacePair key(effect, colorSpace);
|
| - FilterBuilderHashMap::iterator it = m_map.find(key);
|
| - if (it != m_map.end()) {
|
| - return it->value;
|
| - } else {
|
| - // Note that we may still need the color transform even if the filter is null
|
| - RefPtr<SkImageFilter> origFilter = effect->createImageFilter(this);
|
| - RefPtr<SkImageFilter> filter = transformColorSpace(origFilter.get(), effect->operatingColorSpace(), colorSpace);
|
| - m_map.set(key, filter);
|
| - return filter.release();
|
| - }
|
| -}
|
| -
|
| -PassRefPtr<SkImageFilter> SkiaImageFilterBuilder::transformColorSpace(
|
| - SkImageFilter* input, ColorSpace srcColorSpace, ColorSpace dstColorSpace) {
|
| -
|
| - RefPtr<SkColorFilter> colorFilter = ImageBuffer::createColorSpaceFilter(srcColorSpace, dstColorSpace);
|
| - if (!colorFilter)
|
| - return input;
|
| -
|
| - return adoptRef(SkColorFilterImageFilter::Create(colorFilter.get(), input));
|
| -}
|
| -
|
| -bool SkiaImageFilterBuilder::buildFilterOperations(const FilterOperations& operations, blink::WebFilterOperations* filters)
|
| -{
|
| - if (!filters)
|
| - return false;
|
| -
|
| - ColorSpace currentColorSpace = ColorSpaceDeviceRGB;
|
| -
|
| - RefPtr<SkImageFilter> noopFilter;
|
| - SkScalar matrix[20];
|
| - memset(matrix, 0, 20 * sizeof(SkScalar));
|
| - matrix[0] = matrix[6] = matrix[12] = matrix[18] = 1.f;
|
| - noopFilter = createMatrixImageFilter(matrix, 0);
|
| -
|
| - for (size_t i = 0; i < operations.size(); ++i) {
|
| - const FilterOperation& op = *operations.at(i);
|
| - switch (op.type()) {
|
| - case FilterOperation::REFERENCE: {
|
| - RefPtr<SkImageFilter> filter;
|
| - ReferenceFilter* referenceFilter = toReferenceFilterOperation(op).filter();
|
| - if (referenceFilter && referenceFilter->lastEffect()) {
|
| - FilterEffect* filterEffect = referenceFilter->lastEffect();
|
| - // Link SourceGraphic to a noop filter that serves as a placholder for
|
| - // the previous filter in the chain. We don't know what color space the
|
| - // interior nodes will request, so we have to populate the map with both
|
| - // options. (Only one of these will actually have a color transform on it.)
|
| - FilterColorSpacePair deviceKey(referenceFilter->sourceGraphic(), ColorSpaceDeviceRGB);
|
| - FilterColorSpacePair linearKey(referenceFilter->sourceGraphic(), ColorSpaceLinearRGB);
|
| - m_map.set(deviceKey, transformColorSpace(noopFilter.get(), currentColorSpace, ColorSpaceDeviceRGB));
|
| - m_map.set(linearKey, transformColorSpace(noopFilter.get(), currentColorSpace, ColorSpaceLinearRGB));
|
| -
|
| - currentColorSpace = filterEffect->operatingColorSpace();
|
| - filter = SkiaImageFilterBuilder::build(filterEffect, currentColorSpace);
|
| - // We might have no reference to the SourceGraphic's Skia filter now, so make
|
| - // sure we don't keep it in the map anymore.
|
| - m_map.remove(deviceKey);
|
| - m_map.remove(linearKey);
|
| - filters->appendReferenceFilter(filter.get());
|
| - }
|
| - break;
|
| - }
|
| - case FilterOperation::GRAYSCALE:
|
| - case FilterOperation::SEPIA:
|
| - case FilterOperation::SATURATE:
|
| - case FilterOperation::HUE_ROTATE: {
|
| - float amount = toBasicColorMatrixFilterOperation(op).amount();
|
| - switch (op.type()) {
|
| - case FilterOperation::GRAYSCALE:
|
| - filters->appendGrayscaleFilter(amount);
|
| - break;
|
| - case FilterOperation::SEPIA:
|
| - filters->appendSepiaFilter(amount);
|
| - break;
|
| - case FilterOperation::SATURATE:
|
| - filters->appendSaturateFilter(amount);
|
| - break;
|
| - case FilterOperation::HUE_ROTATE:
|
| - filters->appendHueRotateFilter(amount);
|
| - break;
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - }
|
| - break;
|
| - }
|
| - case FilterOperation::INVERT:
|
| - case FilterOperation::OPACITY:
|
| - case FilterOperation::BRIGHTNESS:
|
| - case FilterOperation::CONTRAST: {
|
| - float amount = toBasicComponentTransferFilterOperation(op).amount();
|
| - switch (op.type()) {
|
| - case FilterOperation::INVERT:
|
| - filters->appendInvertFilter(amount);
|
| - break;
|
| - case FilterOperation::OPACITY:
|
| - filters->appendOpacityFilter(amount);
|
| - break;
|
| - case FilterOperation::BRIGHTNESS:
|
| - filters->appendBrightnessFilter(amount);
|
| - break;
|
| - case FilterOperation::CONTRAST:
|
| - filters->appendContrastFilter(amount);
|
| - break;
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - }
|
| - break;
|
| - }
|
| - case FilterOperation::BLUR: {
|
| - float pixelRadius = toBlurFilterOperation(op).stdDeviation().getFloatValue();
|
| - filters->appendBlurFilter(pixelRadius);
|
| - break;
|
| - }
|
| - case FilterOperation::DROP_SHADOW: {
|
| - const DropShadowFilterOperation& drop = toDropShadowFilterOperation(op);
|
| - filters->appendDropShadowFilter(blink::WebPoint(drop.x(), drop.y()), drop.stdDeviation(), drop.color().rgb());
|
| - break;
|
| - }
|
| - case FilterOperation::VALIDATED_CUSTOM:
|
| - case FilterOperation::CUSTOM:
|
| - return false; // Not supported.
|
| - case FilterOperation::NONE:
|
| - break;
|
| - }
|
| - }
|
| - if (currentColorSpace != ColorSpaceDeviceRGB) {
|
| - // Transform to device color space at the end of processing, if required
|
| - RefPtr<SkImageFilter> filter;
|
| - filter = transformColorSpace(noopFilter.get(), currentColorSpace, ColorSpaceDeviceRGB);
|
| - if (filter != noopFilter)
|
| - filters->appendReferenceFilter(filter.get());
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -};
|
|
|