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

Unified Diff: Source/core/platform/graphics/filters/SkiaImageFilterBuilder.cpp

Issue 99103006: Moving GraphicsContext and dependencies from core to platform. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Final patch - fixes Android Created 7 years 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 side-by-side diff with in-line comments
Download patch
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;
-}
-
-};
« no previous file with comments | « Source/core/platform/graphics/filters/SkiaImageFilterBuilder.h ('k') | Source/core/platform/graphics/filters/SourceAlpha.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698