| Index: Source/core/platform/graphics/filters/FilterEffect.h
|
| diff --git a/Source/core/platform/graphics/filters/FilterEffect.h b/Source/core/platform/graphics/filters/FilterEffect.h
|
| deleted file mode 100644
|
| index f502b09b753355b5bad9407437881232327cfa0a..0000000000000000000000000000000000000000
|
| --- a/Source/core/platform/graphics/filters/FilterEffect.h
|
| +++ /dev/null
|
| @@ -1,227 +0,0 @@
|
| -/*
|
| - * Copyright (C) 2008 Alex Mathews <possessedpenguinbob@gmail.com>
|
| - * Copyright (C) 2009 Dirk Schulze <krit@webkit.org>
|
| - * Copyright (C) Research In Motion Limited 2010. All rights reserved.
|
| - * Copyright (C) 2013 Google Inc. All rights reserved.
|
| - *
|
| - * This library is free software; you can redistribute it and/or
|
| - * modify it under the terms of the GNU Library General Public
|
| - * License as published by the Free Software Foundation; either
|
| - * version 2 of the License, or (at your option) any later version.
|
| - *
|
| - * This library is distributed in the hope that it will be useful,
|
| - * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
| - * Library General Public License for more details.
|
| - *
|
| - * You should have received a copy of the GNU Library General Public License
|
| - * along with this library; see the file COPYING.LIB. If not, write to
|
| - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
| - * Boston, MA 02110-1301, USA.
|
| - */
|
| -
|
| -#ifndef FilterEffect_h
|
| -#define FilterEffect_h
|
| -
|
| -#include "platform/geometry/FloatRect.h"
|
| -#include "platform/geometry/IntRect.h"
|
| -#include "platform/graphics/ColorSpace.h"
|
| -
|
| -#include "third_party/skia/include/core/SkImageFilter.h"
|
| -
|
| -#include "wtf/PassOwnPtr.h"
|
| -#include "wtf/RefCounted.h"
|
| -#include "wtf/RefPtr.h"
|
| -#include "wtf/Uint8ClampedArray.h"
|
| -#include "wtf/Vector.h"
|
| -
|
| -static const float kMaxFilterSize = 5000.0f;
|
| -
|
| -namespace WebCore {
|
| -
|
| -class Filter;
|
| -class FilterEffect;
|
| -class ImageBuffer;
|
| -class TextStream;
|
| -
|
| -class SkiaImageFilterBuilder;
|
| -
|
| -typedef Vector<RefPtr<FilterEffect> > FilterEffectVector;
|
| -
|
| -enum FilterEffectType {
|
| - FilterEffectTypeUnknown,
|
| - FilterEffectTypeImage,
|
| - FilterEffectTypeTile,
|
| - FilterEffectTypeSourceInput
|
| -};
|
| -
|
| -enum DetermineSubregionFlag {
|
| - DetermineSubregionNone = 0,
|
| - MapRectForward = 1,
|
| - ClipToFilterRegion = 1 << 1
|
| -};
|
| -
|
| -typedef int DetermineSubregionFlags;
|
| -
|
| -class FilterEffect : public RefCounted<FilterEffect> {
|
| -public:
|
| - virtual ~FilterEffect();
|
| -
|
| - void clearResult();
|
| - void clearResultsRecursive();
|
| -
|
| - ImageBuffer* asImageBuffer();
|
| - PassRefPtr<Uint8ClampedArray> asUnmultipliedImage(const IntRect&);
|
| - PassRefPtr<Uint8ClampedArray> asPremultipliedImage(const IntRect&);
|
| - void copyUnmultipliedImage(Uint8ClampedArray* destination, const IntRect&);
|
| - void copyPremultipliedImage(Uint8ClampedArray* destination, const IntRect&);
|
| -
|
| - FilterEffectVector& inputEffects() { return m_inputEffects; }
|
| - FilterEffect* inputEffect(unsigned) const;
|
| - unsigned numberOfEffectInputs() const { return m_inputEffects.size(); }
|
| -
|
| - inline bool hasResult() const
|
| - {
|
| - // This function needs platform specific checks, if the memory managment is not done by FilterEffect.
|
| - return m_imageBufferResult
|
| - || m_unmultipliedImageResult
|
| - || m_premultipliedImageResult;
|
| - }
|
| -
|
| - IntRect drawingRegionOfInputImage(const IntRect&) const;
|
| - IntRect requestedRegionOfInputImageData(const IntRect&) const;
|
| -
|
| - // Solid black image with different alpha values.
|
| - bool isAlphaImage() const { return m_alphaImage; }
|
| - void setIsAlphaImage(bool alphaImage) { m_alphaImage = alphaImage; }
|
| -
|
| - IntRect absolutePaintRect() const { return m_absolutePaintRect; }
|
| - void setAbsolutePaintRect(const IntRect& absolutePaintRect) { m_absolutePaintRect = absolutePaintRect; }
|
| -
|
| - FloatRect maxEffectRect() const { return m_maxEffectRect; }
|
| - void setMaxEffectRect(const FloatRect& maxEffectRect) { m_maxEffectRect = maxEffectRect; }
|
| -
|
| - void apply();
|
| -
|
| - // Correct any invalid pixels, if necessary, in the result of a filter operation.
|
| - // This method is used to ensure valid pixel values on filter inputs and the final result.
|
| - // Only the arithmetic composite filter ever needs to perform correction.
|
| - virtual void correctFilterResultIfNeeded() { }
|
| -
|
| - virtual PassRefPtr<SkImageFilter> createImageFilter(SkiaImageFilterBuilder*);
|
| -
|
| - virtual void determineAbsolutePaintRect();
|
| -
|
| - // Mapping a rect forwards determines which which destination pixels a
|
| - // given source rect would affect. Mapping a rect backwards determines
|
| - // which pixels from the source rect would be required to fill a given
|
| - // destination rect. Note that these are not necessarily the inverse of
|
| - // each other. For example, for FEGaussianBlur, they are the same
|
| - // transformation.
|
| - virtual FloatRect mapRect(const FloatRect& rect, bool forward = true) { return rect; }
|
| - FloatRect mapRectRecursive(const FloatRect&);
|
| -
|
| - // This is a recursive version of a backwards mapRect(), which also takes
|
| - // into account the filter primitive subregion of each effect.
|
| - FloatRect getSourceRect(const FloatRect& destRect, const FloatRect& clipRect);
|
| -
|
| - virtual FilterEffectType filterEffectType() const { return FilterEffectTypeUnknown; }
|
| -
|
| - virtual TextStream& externalRepresentation(TextStream&, int indention = 0) const;
|
| -
|
| - // The following functions are SVG specific and will move to RenderSVGResourceFilterPrimitive.
|
| - // See bug https://bugs.webkit.org/show_bug.cgi?id=45614.
|
| - bool hasX() const { return m_hasX; }
|
| - void setHasX(bool value) { m_hasX = value; }
|
| -
|
| - bool hasY() const { return m_hasY; }
|
| - void setHasY(bool value) { m_hasY = value; }
|
| -
|
| - bool hasWidth() const { return m_hasWidth; }
|
| - void setHasWidth(bool value) { m_hasWidth = value; }
|
| -
|
| - bool hasHeight() const { return m_hasHeight; }
|
| - void setHasHeight(bool value) { m_hasHeight = value; }
|
| -
|
| - FloatRect filterPrimitiveSubregion() const { return m_filterPrimitiveSubregion; }
|
| - void setFilterPrimitiveSubregion(const FloatRect& filterPrimitiveSubregion) { m_filterPrimitiveSubregion = filterPrimitiveSubregion; }
|
| -
|
| - FloatRect effectBoundaries() const { return m_effectBoundaries; }
|
| - void setEffectBoundaries(const FloatRect& effectBoundaries) { m_effectBoundaries = effectBoundaries; }
|
| -
|
| - Filter* filter() { return m_filter; }
|
| - const Filter* filter() const { return m_filter; }
|
| -
|
| - bool clipsToBounds() const { return m_clipsToBounds; }
|
| - void setClipsToBounds(bool value) { m_clipsToBounds = value; }
|
| -
|
| - ColorSpace operatingColorSpace() const { return m_operatingColorSpace; }
|
| - virtual void setOperatingColorSpace(ColorSpace colorSpace) { m_operatingColorSpace = colorSpace; }
|
| - ColorSpace resultColorSpace() const { return m_resultColorSpace; }
|
| - virtual void setResultColorSpace(ColorSpace colorSpace) { m_resultColorSpace = colorSpace; }
|
| -
|
| - virtual void transformResultColorSpace(FilterEffect* in, const int) { in->transformResultColorSpace(m_operatingColorSpace); }
|
| - void transformResultColorSpace(ColorSpace);
|
| -
|
| - FloatRect determineFilterPrimitiveSubregion(DetermineSubregionFlags = DetermineSubregionNone);
|
| -
|
| -protected:
|
| - FilterEffect(Filter*);
|
| -
|
| - ImageBuffer* createImageBufferResult();
|
| - Uint8ClampedArray* createUnmultipliedImageResult();
|
| - Uint8ClampedArray* createPremultipliedImageResult();
|
| -
|
| - // Return true if the filter will only operate correctly on valid RGBA values, with
|
| - // alpha in [0,255] and each color component in [0, alpha].
|
| - virtual bool requiresValidPreMultipliedPixels() { return true; }
|
| -
|
| - // If a pre-multiplied image, check every pixel for validity and correct if necessary.
|
| - void forceValidPreMultipliedPixels();
|
| - SkImageFilter::CropRect getCropRect(const FloatSize& cropOffset) const;
|
| -
|
| -private:
|
| - virtual void applySoftware() = 0;
|
| - virtual bool applySkia() { return false; }
|
| -
|
| - inline void copyImageBytes(Uint8ClampedArray* source, Uint8ClampedArray* destination, const IntRect&);
|
| -
|
| - OwnPtr<ImageBuffer> m_imageBufferResult;
|
| - RefPtr<Uint8ClampedArray> m_unmultipliedImageResult;
|
| - RefPtr<Uint8ClampedArray> m_premultipliedImageResult;
|
| - FilterEffectVector m_inputEffects;
|
| -
|
| - bool m_alphaImage;
|
| -
|
| - IntRect m_absolutePaintRect;
|
| -
|
| - // The maximum size of a filter primitive. In SVG this is the primitive subregion in absolute coordinate space.
|
| - // The absolute paint rect should never be bigger than m_maxEffectRect.
|
| - FloatRect m_maxEffectRect;
|
| - Filter* m_filter;
|
| -
|
| - // The following member variables are SVG specific and will move to RenderSVGResourceFilterPrimitive.
|
| - // See bug https://bugs.webkit.org/show_bug.cgi?id=45614.
|
| -
|
| - // The subregion of a filter primitive according to the SVG Filter specification in local coordinates.
|
| - // This is SVG specific and needs to move to RenderSVGResourceFilterPrimitive.
|
| - FloatRect m_filterPrimitiveSubregion;
|
| -
|
| - // x, y, width and height of the actual SVGFE*Element. Is needed to determine the subregion of the
|
| - // filter primitive on a later step.
|
| - FloatRect m_effectBoundaries;
|
| - bool m_hasX;
|
| - bool m_hasY;
|
| - bool m_hasWidth;
|
| - bool m_hasHeight;
|
| -
|
| - // Should the effect clip to its primitive region, or expand to use the combined region of its inputs.
|
| - bool m_clipsToBounds;
|
| -
|
| - ColorSpace m_operatingColorSpace;
|
| - ColorSpace m_resultColorSpace;
|
| -};
|
| -
|
| -} // namespace WebCore
|
| -
|
| -#endif // FilterEffect_h
|
|
|