diff options
author | Steve Block <steveblock@google.com> | 2009-11-05 09:23:40 +0000 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2009-11-10 22:41:12 +0000 |
commit | cac0f67c402d107cdb10971b95719e2ff9c7c76b (patch) | |
tree | d182c7f87211c6f201a5f038e332336493ebdbe7 /WebCore/svg/graphics | |
parent | 4b2ef0f288e7c6c4602f621b7a0e9feed304b70e (diff) | |
download | external_webkit-cac0f67c402d107cdb10971b95719e2ff9c7c76b.zip external_webkit-cac0f67c402d107cdb10971b95719e2ff9c7c76b.tar.gz external_webkit-cac0f67c402d107cdb10971b95719e2ff9c7c76b.tar.bz2 |
Merge webkit.org at r50258 : Initial merge by git.
Change-Id: I1a9e1dc4ed654b69174ad52a4f031a07240f37b0
Diffstat (limited to 'WebCore/svg/graphics')
-rw-r--r-- | WebCore/svg/graphics/SVGImage.cpp | 3 | ||||
-rw-r--r-- | WebCore/svg/graphics/SVGResourceFilter.cpp | 38 | ||||
-rw-r--r-- | WebCore/svg/graphics/SVGResourceFilter.h | 27 | ||||
-rw-r--r-- | WebCore/svg/graphics/filters/SVGFEFlood.cpp | 7 | ||||
-rw-r--r-- | WebCore/svg/graphics/filters/SVGFEFlood.h | 5 | ||||
-rw-r--r-- | WebCore/svg/graphics/filters/SVGFEGaussianBlur.cpp | 82 | ||||
-rw-r--r-- | WebCore/svg/graphics/filters/SVGFEGaussianBlur.h | 58 | ||||
-rw-r--r-- | WebCore/svg/graphics/filters/SVGFEMorphology.cpp | 8 | ||||
-rw-r--r-- | WebCore/svg/graphics/filters/SVGFEMorphology.h | 6 | ||||
-rw-r--r-- | WebCore/svg/graphics/filters/SVGFilter.cpp | 24 | ||||
-rw-r--r-- | WebCore/svg/graphics/filters/SVGFilter.h | 5 |
11 files changed, 49 insertions, 214 deletions
diff --git a/WebCore/svg/graphics/SVGImage.cpp b/WebCore/svg/graphics/SVGImage.cpp index dc63582..0a506f8 100644 --- a/WebCore/svg/graphics/SVGImage.cpp +++ b/WebCore/svg/graphics/SVGImage.cpp @@ -239,14 +239,13 @@ bool SVGImage::dataChanged(bool allDataReceived) static DragClient* dummyDragClient = 0; #endif static InspectorClient* dummyInspectorClient = new EmptyInspectorClient; - static PluginHalterClient* dummyPluginHalterClient = new EmptyPluginHalterClient; m_chromeClient.set(new SVGImageChromeClient(this)); // FIXME: If this SVG ends up loading itself, we might leak the world. // The comment said that the Cache code does not know about CachedImages // holding Frames and won't know to break the cycle. But - m_page.set(new Page(m_chromeClient.get(), dummyContextMenuClient, dummyEditorClient, dummyDragClient, dummyInspectorClient, dummyPluginHalterClient)); + m_page.set(new Page(m_chromeClient.get(), dummyContextMenuClient, dummyEditorClient, dummyDragClient, dummyInspectorClient, 0)); m_page->settings()->setJavaScriptEnabled(false); m_page->settings()->setPluginsEnabled(false); diff --git a/WebCore/svg/graphics/SVGResourceFilter.cpp b/WebCore/svg/graphics/SVGResourceFilter.cpp index 4a4bdd5..973743c 100644 --- a/WebCore/svg/graphics/SVGResourceFilter.cpp +++ b/WebCore/svg/graphics/SVGResourceFilter.cpp @@ -31,52 +31,44 @@ #include "PlatformString.h" #include "SVGFilter.h" #include "SVGFilterBuilder.h" +#include "SVGFilterElement.h" #include "SVGRenderTreeAsText.h" #include "SVGFilterPrimitiveStandardAttributes.h" namespace WebCore { -SVGResourceFilter::SVGResourceFilter() - : m_filterBBoxMode(false) +SVGResourceFilter::SVGResourceFilter(const SVGFilterElement* ownerElement) + : SVGResource() + , m_ownerElement(ownerElement) + , m_filterBBoxMode(false) , m_effectBBoxMode(false) - , m_xBBoxMode(false) - , m_yBBoxMode(false) , m_savedContext(0) , m_sourceGraphicBuffer(0) { m_filterBuilder.set(new SVGFilterBuilder()); } -void SVGResourceFilter::addFilterEffect(SVGFilterPrimitiveStandardAttributes* effectAttributes, PassRefPtr<FilterEffect> effect) +SVGResourceFilter::~SVGResourceFilter() { - effectAttributes->setStandardAttributes(this, effect.get()); - builder()->add(effectAttributes->result(), effect); } -FloatRect SVGResourceFilter::filterBBoxForItemBBox(const FloatRect& itemBBox) const +void SVGResourceFilter::addFilterEffect(SVGFilterPrimitiveStandardAttributes* effectAttributes, PassRefPtr<FilterEffect> effect) { - FloatRect filterBBox = filterRect(); - - if (filterBoundingBoxMode()) - filterBBox = FloatRect(itemBBox.x() + filterBBox.x() * itemBBox.width(), - itemBBox.y() + filterBBox.y() * itemBBox.height(), - filterBBox.width() * itemBBox.width(), - filterBBox.height() * itemBBox.height()); - - return filterBBox; + effectAttributes->setStandardAttributes(this, effect.get()); + builder()->add(effectAttributes->result(), effect); } void SVGResourceFilter::prepareFilter(GraphicsContext*& context, const RenderObject* object) { - m_itemBBox = object->objectBoundingBox(); - m_filterBBox = filterBBoxForItemBBox(m_itemBBox); + FloatRect targetRect = object->objectBoundingBox(); + m_ownerElement->buildFilter(targetRect); // clip sourceImage to filterRegion - FloatRect clippedSourceRect = m_itemBBox; + FloatRect clippedSourceRect = targetRect; clippedSourceRect.intersect(m_filterBBox); // prepare Filters - m_filter = SVGFilter::create(m_itemBBox, m_filterBBox, m_effectBBoxMode, m_filterBBoxMode); + m_filter = SVGFilter::create(targetRect, m_filterBBox, m_effectBBoxMode); FilterEffect* lastEffect = m_filterBuilder->lastEffect(); if (lastEffect) @@ -91,8 +83,8 @@ void SVGResourceFilter::prepareFilter(GraphicsContext*& context, const RenderObj return; GraphicsContext* sourceGraphicContext = sourceGraphic->context(); - sourceGraphicContext->translate(-m_itemBBox.x(), -m_itemBBox.y()); - sourceGraphicContext->clearRect(FloatRect(FloatPoint(), m_itemBBox.size())); + sourceGraphicContext->translate(-targetRect.x(), -targetRect.y()); + sourceGraphicContext->clearRect(FloatRect(FloatPoint(), targetRect.size())); m_sourceGraphicBuffer.set(sourceGraphic.release()); m_savedContext = context; diff --git a/WebCore/svg/graphics/SVGResourceFilter.h b/WebCore/svg/graphics/SVGResourceFilter.h index ee1efca..86b11fe 100644 --- a/WebCore/svg/graphics/SVGResourceFilter.h +++ b/WebCore/svg/graphics/SVGResourceFilter.h @@ -43,11 +43,13 @@ class Filter; class FilterEffect; class GraphicsContext; class SVGFilterBuilder; +class SVGFilterElement; class SVGFilterPrimitiveStandardAttributes; class SVGResourceFilter : public SVGResource { public: - SVGResourceFilter(); + static PassRefPtr<SVGResourceFilter> create(const SVGFilterElement* ownerElement) { return adoptRef(new SVGResourceFilter(ownerElement)); } + virtual ~SVGResourceFilter(); virtual SVGResourceType resourceType() const { return FilterResourceType; } @@ -57,44 +59,31 @@ public: bool effectBoundingBoxMode() const { return m_effectBBoxMode; } void setEffectBoundingBoxMode(bool bboxMode) { m_effectBBoxMode = bboxMode; } - bool xBoundingBoxMode() const { return m_xBBoxMode; } - void setXBoundingBoxMode(bool bboxMode) { m_xBBoxMode = bboxMode; } - - bool yBoundingBoxMode() const { return m_yBBoxMode; } - void setYBoundingBoxMode(bool bboxMode) { m_yBBoxMode = bboxMode; } - FloatRect filterRect() const { return m_filterRect; } void setFilterRect(const FloatRect& rect) { m_filterRect = rect; } FloatRect filterBoundingBox() { return m_filterBBox; } void setFilterBoundingBox(const FloatRect& rect) { m_filterBBox = rect; } - FloatRect itemBoundingBox() { return m_itemBBox; } - void setItemBoundingBox(const FloatRect& rect) { m_itemBBox = rect; } - - FloatRect filterBBoxForItemBBox(const FloatRect& itemBBox) const; - - virtual TextStream& externalRepresentation(TextStream&) const; - void prepareFilter(GraphicsContext*&, const RenderObject*); void applyFilter(GraphicsContext*&, const RenderObject*); void addFilterEffect(SVGFilterPrimitiveStandardAttributes*, PassRefPtr<FilterEffect>); SVGFilterBuilder* builder() { return m_filterBuilder.get(); } + + virtual TextStream& externalRepresentation(TextStream&) const; private: + SVGResourceFilter(const SVGFilterElement*); + + const SVGFilterElement* m_ownerElement; bool m_filterBBoxMode : 1; bool m_effectBBoxMode : 1; - bool m_xBBoxMode : 1; - bool m_yBBoxMode : 1; - FloatRect m_filterRect; - FloatRect m_filterBBox; - FloatRect m_itemBBox; OwnPtr<SVGFilterBuilder> m_filterBuilder; GraphicsContext* m_savedContext; diff --git a/WebCore/svg/graphics/filters/SVGFEFlood.cpp b/WebCore/svg/graphics/filters/SVGFEFlood.cpp index 3f4a6d7..668209f 100644 --- a/WebCore/svg/graphics/filters/SVGFEFlood.cpp +++ b/WebCore/svg/graphics/filters/SVGFEFlood.cpp @@ -31,17 +31,16 @@ namespace WebCore { -FEFlood::FEFlood(FilterEffect* in, const Color& floodColor, const float& floodOpacity) +FEFlood::FEFlood(const Color& floodColor, const float& floodOpacity) : FilterEffect() - , m_in(in) , m_floodColor(floodColor) , m_floodOpacity(floodOpacity) { } -PassRefPtr<FEFlood> FEFlood::create(FilterEffect* in, const Color& floodColor, const float& floodOpacity) +PassRefPtr<FEFlood> FEFlood::create(const Color& floodColor, const float& floodOpacity) { - return adoptRef(new FEFlood(in, floodColor, floodOpacity)); + return adoptRef(new FEFlood(floodColor, floodOpacity)); } Color FEFlood::floodColor() const diff --git a/WebCore/svg/graphics/filters/SVGFEFlood.h b/WebCore/svg/graphics/filters/SVGFEFlood.h index 21985db..91795dd 100644 --- a/WebCore/svg/graphics/filters/SVGFEFlood.h +++ b/WebCore/svg/graphics/filters/SVGFEFlood.h @@ -31,7 +31,7 @@ namespace WebCore { class FEFlood : public FilterEffect { public: - static PassRefPtr<FEFlood> create(FilterEffect*, const Color&, const float&); + static PassRefPtr<FEFlood> create(const Color&, const float&); Color floodColor() const; void setFloodColor(const Color &); @@ -44,9 +44,8 @@ namespace WebCore { TextStream& externalRepresentation(TextStream& ts) const; private: - FEFlood(FilterEffect*, const Color&, const float&); + FEFlood(const Color&, const float&); - RefPtr<FilterEffect> m_in; Color m_floodColor; float m_floodOpacity; }; diff --git a/WebCore/svg/graphics/filters/SVGFEGaussianBlur.cpp b/WebCore/svg/graphics/filters/SVGFEGaussianBlur.cpp deleted file mode 100644 index 601c39e..0000000 --- a/WebCore/svg/graphics/filters/SVGFEGaussianBlur.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org> - 2004, 2005 Rob Buis <buis@kde.org> - 2005 Eric Seidel <eric@webkit.org> - - 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 - aint 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. -*/ - -#include "config.h" - -#if ENABLE(SVG) && ENABLE(FILTERS) -#include "SVGFEGaussianBlur.h" -#include "SVGRenderTreeAsText.h" -#include "Filter.h" - -namespace WebCore { - -FEGaussianBlur::FEGaussianBlur(FilterEffect* in, const float& x, const float& y) - : FilterEffect() - , m_in(in) - , m_x(x) - , m_y(y) -{ -} - -PassRefPtr<FEGaussianBlur> FEGaussianBlur::create(FilterEffect* in, const float& x, const float& y) -{ - return adoptRef(new FEGaussianBlur(in, x, y)); -} - -float FEGaussianBlur::stdDeviationX() const -{ - return m_x; -} - -void FEGaussianBlur::setStdDeviationX(float x) -{ - m_x = x; -} - -float FEGaussianBlur::stdDeviationY() const -{ - return m_y; -} - -void FEGaussianBlur::setStdDeviationY(float y) -{ - m_y = y; -} - -void FEGaussianBlur::apply(Filter*) -{ -} - -void FEGaussianBlur::dump() -{ -} - -TextStream& FEGaussianBlur::externalRepresentation(TextStream& ts) const -{ - ts << "[type=GAUSSIAN-BLUR] "; - FilterEffect::externalRepresentation(ts); - ts << " [std dev. x=" << stdDeviationX() << " y=" << stdDeviationY() << "]"; - return ts; -} - -} // namespace WebCore - -#endif // ENABLE(SVG) && ENABLE(FILTERS) diff --git a/WebCore/svg/graphics/filters/SVGFEGaussianBlur.h b/WebCore/svg/graphics/filters/SVGFEGaussianBlur.h deleted file mode 100644 index 69f1cc5..0000000 --- a/WebCore/svg/graphics/filters/SVGFEGaussianBlur.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org> - 2004, 2005 Rob Buis <buis@kde.org> - 2005 Eric Seidel <eric@webkit.org> - - 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 - aint 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 SVGFEGaussianBlur_h -#define SVGFEGaussianBlur_h - -#if ENABLE(SVG) && ENABLE(FILTERS) -#include "FilterEffect.h" -#include "Filter.h" - -namespace WebCore { - - class FEGaussianBlur : public FilterEffect { - public: - static PassRefPtr<FEGaussianBlur> create(FilterEffect*, const float&, const float&); - - float stdDeviationX() const; - void setStdDeviationX(float); - - float stdDeviationY() const; - void setStdDeviationY(float); - - virtual FloatRect uniteChildEffectSubregions(Filter* filter) { return calculateUnionOfChildEffectSubregions(filter, m_in.get()); } - void apply(Filter*); - void dump(); - TextStream& externalRepresentation(TextStream& ts) const; - - private: - FEGaussianBlur(FilterEffect*, const float&, const float&); - - RefPtr<FilterEffect> m_in; - float m_x; - float m_y; - }; - -} // namespace WebCore - -#endif // ENABLE(SVG) && ENABLE(FILTERS) - -#endif // SVGFEGaussianBlur_h diff --git a/WebCore/svg/graphics/filters/SVGFEMorphology.cpp b/WebCore/svg/graphics/filters/SVGFEMorphology.cpp index 3767734..f7fc5d8 100644 --- a/WebCore/svg/graphics/filters/SVGFEMorphology.cpp +++ b/WebCore/svg/graphics/filters/SVGFEMorphology.cpp @@ -28,7 +28,7 @@ namespace WebCore { -FEMorphology::FEMorphology(FilterEffect* in, MorphologyOperatorType type, const float& radiusX, const float& radiusY) +FEMorphology::FEMorphology(FilterEffect* in, MorphologyOperatorType type, float radiusX, float radiusY) : FilterEffect() , m_in(in) , m_type(type) @@ -37,7 +37,7 @@ FEMorphology::FEMorphology(FilterEffect* in, MorphologyOperatorType type, const { } -PassRefPtr<FEMorphology> FEMorphology::create(FilterEffect* in, MorphologyOperatorType type, const float& radiusX, const float& radiusY) +PassRefPtr<FEMorphology> FEMorphology::create(FilterEffect* in, MorphologyOperatorType type, float radiusX, float radiusY) { return adoptRef(new FEMorphology(in, type, radiusX, radiusY)); } @@ -88,8 +88,8 @@ static TextStream& operator<<(TextStream& ts, MorphologyOperatorType t) ts << "UNKNOWN"; break; case FEMORPHOLOGY_OPERATOR_ERODE: ts << "ERODE"; break; - case FEMORPHOLOGY_OPERATOR_DIALATE: - ts << "DIALATE"; break; + case FEMORPHOLOGY_OPERATOR_DILATE: + ts << "DILATE"; break; } return ts; } diff --git a/WebCore/svg/graphics/filters/SVGFEMorphology.h b/WebCore/svg/graphics/filters/SVGFEMorphology.h index bdc2b9b..6a321c8 100644 --- a/WebCore/svg/graphics/filters/SVGFEMorphology.h +++ b/WebCore/svg/graphics/filters/SVGFEMorphology.h @@ -31,12 +31,12 @@ namespace WebCore { enum MorphologyOperatorType { FEMORPHOLOGY_OPERATOR_UNKNOWN = 0, FEMORPHOLOGY_OPERATOR_ERODE = 1, - FEMORPHOLOGY_OPERATOR_DIALATE = 2 + FEMORPHOLOGY_OPERATOR_DILATE = 2 }; class FEMorphology : public FilterEffect { public: - PassRefPtr<FEMorphology> create(FilterEffect*, MorphologyOperatorType, const float&, const float&); + static PassRefPtr<FEMorphology> create(FilterEffect*, MorphologyOperatorType, float radiusX, float radiusY); MorphologyOperatorType morphologyOperator() const; void setMorphologyOperator(MorphologyOperatorType); @@ -52,7 +52,7 @@ namespace WebCore { TextStream& externalRepresentation(TextStream& ts) const; private: - FEMorphology(FilterEffect*, MorphologyOperatorType, const float&, const float&); + FEMorphology(FilterEffect*, MorphologyOperatorType, float radiusX, float radiusY); RefPtr<FilterEffect> m_in; MorphologyOperatorType m_type; diff --git a/WebCore/svg/graphics/filters/SVGFilter.cpp b/WebCore/svg/graphics/filters/SVGFilter.cpp index c892ee9..6bfcf39 100644 --- a/WebCore/svg/graphics/filters/SVGFilter.cpp +++ b/WebCore/svg/graphics/filters/SVGFilter.cpp @@ -24,12 +24,11 @@ namespace WebCore { -SVGFilter::SVGFilter(const FloatRect& itemBox, const FloatRect& filterRect, bool effectBBoxMode, bool filterBBoxMode) +SVGFilter::SVGFilter(const FloatRect& itemBox, const FloatRect& filterRect, bool effectBBoxMode) : Filter() , m_itemBox(itemBox) , m_filterRect(filterRect) , m_effectBBoxMode(effectBBoxMode) - , m_filterBBoxMode(filterBBoxMode) { } @@ -37,7 +36,6 @@ void SVGFilter::calculateEffectSubRegion(FilterEffect* effect) { FloatRect subRegionBBox = effect->subRegion(); FloatRect useBBox = effect->unionOfChildEffectSubregions(); - FloatRect newSubRegion = subRegionBBox; if (m_effectBBoxMode) { @@ -55,17 +53,17 @@ void SVGFilter::calculateEffectSubRegion(FilterEffect* effect) if (effect->hasHeight()) newSubRegion.setHeight(subRegionBBox.height() * m_itemBox.height()); } else { - if (effect->xBoundingBoxMode()) - newSubRegion.setX(useBBox.x() + subRegionBBox.x() * useBBox.width()); + if (!effect->hasX()) + newSubRegion.setX(useBBox.x()); - if (effect->yBoundingBoxMode()) - newSubRegion.setY(useBBox.y() + subRegionBBox.y() * useBBox.height()); + if (!effect->hasY()) + newSubRegion.setY(useBBox.y()); - if (effect->widthBoundingBoxMode()) - newSubRegion.setWidth(subRegionBBox.width() * useBBox.width()); + if (!effect->hasWidth()) + newSubRegion.setWidth(useBBox.width()); - if (effect->heightBoundingBoxMode()) - newSubRegion.setHeight(subRegionBBox.height() * useBBox.height()); + if (!effect->hasHeight()) + newSubRegion.setHeight(useBBox.height()); } // clip every filter effect to the filter region @@ -74,9 +72,9 @@ void SVGFilter::calculateEffectSubRegion(FilterEffect* effect) effect->setSubRegion(newSubRegion); } -PassRefPtr<SVGFilter> SVGFilter::create(const FloatRect& itemBox, const FloatRect& filterRect, bool effectBBoxMode, bool filterBBoxMode) +PassRefPtr<SVGFilter> SVGFilter::create(const FloatRect& itemBox, const FloatRect& filterRect, bool effectBBoxMode) { - return adoptRef(new SVGFilter(itemBox, filterRect, effectBBoxMode, filterBBoxMode)); + return adoptRef(new SVGFilter(itemBox, filterRect, effectBBoxMode)); } } // namespace WebCore diff --git a/WebCore/svg/graphics/filters/SVGFilter.h b/WebCore/svg/graphics/filters/SVGFilter.h index d6e5f77..f23d1ea 100644 --- a/WebCore/svg/graphics/filters/SVGFilter.h +++ b/WebCore/svg/graphics/filters/SVGFilter.h @@ -33,7 +33,7 @@ namespace WebCore { class SVGFilter : public Filter { public: - static PassRefPtr<SVGFilter> create(const FloatRect&, const FloatRect&, bool, bool); + static PassRefPtr<SVGFilter> create(const FloatRect&, const FloatRect&, bool); bool effectBoundingBoxMode() { return m_effectBBoxMode; } @@ -42,12 +42,11 @@ namespace WebCore { void calculateEffectSubRegion(FilterEffect*); private: - SVGFilter(const FloatRect& itemBox, const FloatRect& filterRect, bool itemBBoxMode, bool filterBBoxMode); + SVGFilter(const FloatRect& itemBox, const FloatRect& filterRect, bool effectBBoxMode); FloatRect m_itemBox; FloatRect m_filterRect; bool m_effectBBoxMode; - bool m_filterBBoxMode; }; } // namespace WebCore |