File indexing completed on 2024-04-28 15:24:30

0001 /*
0002     Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
0003                   2004, 2005 Rob Buis <buis@kde.org>
0004 
0005     This file is part of the KDE project
0006 
0007     This library is free software; you can redistribute it and/or
0008     modify it under the terms of the GNU Library General Public
0009     License as published by the Free Software Foundation; either
0010     version 2 of the License, or (at your option) any later version.
0011 
0012     This library is distributed in the hope that it will be useful,
0013     but WITHOUT ANY WARRANTY; without even the implied warranty of
0014     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0015     Library General Public License for more details.
0016 
0017     You should have received a copy of the GNU Library General Public License
0018     along with this library; see the file COPYING.LIB.  If not, write to
0019     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0020     Boston, MA 02110-1301, USA.
0021 */
0022 
0023 #if ENABLE(SVG) && ENABLE(SVG_FILTERS)
0024 #include "SVGFEComponentTransferElement.h"
0025 
0026 #include "Attr.h"
0027 #include "SVGNames.h"
0028 #include "SVGRenderStyle.h"
0029 #include "SVGFEFuncRElement.h"
0030 #include "SVGFEFuncGElement.h"
0031 #include "SVGFEFuncBElement.h"
0032 #include "SVGFEFuncAElement.h"
0033 #include "SVGResourceFilter.h"
0034 
0035 namespace WebCore
0036 {
0037 
0038 SVGFEComponentTransferElement::SVGFEComponentTransferElement(const QualifiedName &tagName, Document *doc)
0039     : SVGFilterPrimitiveStandardAttributes(tagName, doc)
0040     , m_filterEffect(0)
0041 {
0042 }
0043 
0044 SVGFEComponentTransferElement::~SVGFEComponentTransferElement()
0045 {
0046     delete m_filterEffect;
0047 }
0048 
0049 ANIMATED_PROPERTY_DEFINITIONS(SVGFEComponentTransferElement, String, String, string, In1, in1, SVGNames::inAttr, m_in1)
0050 
0051 void SVGFEComponentTransferElement::parseMappedAttribute(MappedAttribute *attr)
0052 {
0053     const String &value = attr->value();
0054     if (attr->name() == SVGNames::inAttr) {
0055         setIn1BaseValue(value);
0056     } else {
0057         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
0058     }
0059 }
0060 
0061 SVGFEComponentTransfer *SVGFEComponentTransferElement::filterEffect(SVGResourceFilter *filter) const
0062 {
0063     if (!m_filterEffect) {
0064         m_filterEffect = new SVGFEComponentTransfer(filter);
0065     }
0066 
0067     m_filterEffect->setIn(in1());
0068     setStandardAttributes(m_filterEffect);
0069 
0070     for (Node *n = firstChild(); n != 0; n = n->nextSibling()) {
0071         if (n->hasTagName(SVGNames::feFuncRTag)) {
0072             m_filterEffect->setRedFunction(static_cast<SVGFEFuncRElement *>(n)->transferFunction());
0073         } else if (n->hasTagName(SVGNames::feFuncGTag)) {
0074             m_filterEffect->setGreenFunction(static_cast<SVGFEFuncGElement *>(n)->transferFunction());
0075         } else if (n->hasTagName(SVGNames::feFuncBTag)) {
0076             m_filterEffect->setBlueFunction(static_cast<SVGFEFuncBElement *>(n)->transferFunction());
0077         } else if (n->hasTagName(SVGNames::feFuncATag)) {
0078             m_filterEffect->setAlphaFunction(static_cast<SVGFEFuncAElement *>(n)->transferFunction());
0079         }
0080     }
0081 
0082     return m_filterEffect;
0083 }
0084 
0085 }
0086 
0087 #endif // ENABLE(SVG)
0088