1 /* 2 * Copyright (C) 2009 Dirk Schulze <krit (at) webkit.org> 3 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Library General Public 7 * License as published by the Free Software Foundation; either 8 * version 2 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Library General Public License for more details. 14 * 15 * You should have received a copy of the GNU Library General Public License 16 * along with this library; see the file COPYING.LIB. If not, write to 17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 18 * Boston, MA 02110-1301, USA. 19 */ 20 21 #include "config.h" 22 23 #if ENABLE(SVG) && ENABLE(FILTERS) 24 #include "SVGFilter.h" 25 26 namespace WebCore { 27 28 SVGFilter::SVGFilter(const AffineTransform& absoluteTransform, const FloatRect& absoluteSourceDrawingRegion, const FloatRect& targetBoundingBox, const FloatRect& filterRegion, bool effectBBoxMode) 29 : Filter() 30 , m_absoluteTransform(absoluteTransform) 31 , m_absoluteSourceDrawingRegion(absoluteSourceDrawingRegion) 32 , m_targetBoundingBox(targetBoundingBox) 33 , m_filterRegion(filterRegion) 34 , m_effectBBoxMode(effectBBoxMode) 35 { 36 m_absoluteFilterRegion = absoluteTransform.mapRect(filterRegion); 37 } 38 39 float SVGFilter::applyHorizontalScale(float value) const 40 { 41 if (m_effectBBoxMode) 42 value *= m_targetBoundingBox.width(); 43 return Filter::applyHorizontalScale(value) * m_absoluteFilterRegion.width() / m_filterRegion.width(); 44 } 45 46 float SVGFilter::applyVerticalScale(float value) const 47 { 48 if (m_effectBBoxMode) 49 value *= m_targetBoundingBox.height(); 50 return Filter::applyVerticalScale(value) * m_absoluteFilterRegion.height() / m_filterRegion.height(); 51 } 52 53 PassRefPtr<SVGFilter> SVGFilter::create(const AffineTransform& absoluteTransform, const FloatRect& absoluteSourceDrawingRegion, const FloatRect& targetBoundingBox, const FloatRect& filterRegion, bool effectBBoxMode) 54 { 55 return adoptRef(new SVGFilter(absoluteTransform, absoluteSourceDrawingRegion, targetBoundingBox, filterRegion, effectBBoxMode)); 56 } 57 58 } // namespace WebCore 59 60 #endif // ENABLE(SVG) && ENABLE(FILTERS) 61