729b3e68bf07b18fdd9da070672926563c67ced8
[WebKit-https.git] / WebCore / ksvg2 / svg / SVGAElement.cpp
1 /*
2     Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
3                   2004, 2005 Rob Buis <buis@kde.org>
4
5     This file is part of the KDE project
6
7     This library is free software; you can redistribute it and/or
8     modify it under the terms of the GNU Library General Public
9     License as published by the Free Software Foundation; either
10     version 2 of the License, or (at your option) any later version.
11
12     This library is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15     Library General Public License for more details.
16
17     You should have received a copy of the GNU Library General Public License
18     along with this library; see the file COPYING.LIB.  If not, write to
19     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20     Boston, MA 02111-1307, USA.
21 */
22
23 #include "config.h"
24
25 #ifdef SVG_SUPPORT
26
27 #include "SVGAElement.h"
28
29 #include "Attr.h"
30 #include "Document.h"
31 #include "Event.h"
32 #include "EventNames.h"
33 #include "Frame.h"
34 #include "FrameLoader.h"
35 #include "KRenderingDevice.h"
36 #include "MouseEvent.h"
37 #include "MouseEvent.h"
38 #include "RenderSVGContainer.h"
39 #include "ResourceRequest.h"
40 #include "SVGHelper.h"
41 #include "SVGNames.h"
42 #include "csshelper.h"
43
44 namespace WebCore {
45
46 SVGAElement::SVGAElement(const QualifiedName& tagName, Document *doc)
47     : SVGStyledTransformableElement(tagName, doc)
48     , SVGURIReference()
49     , SVGTests()
50     , SVGLangSpace()
51     , SVGExternalResourcesRequired()
52 {
53 }
54
55 SVGAElement::~SVGAElement()
56 {
57 }
58
59 ANIMATED_PROPERTY_DEFINITIONS(SVGAElement, String, String, string, Target, target, SVGNames::targetAttr.localName(), m_target)
60
61 void SVGAElement::parseMappedAttribute(MappedAttribute *attr)
62 {
63     const AtomicString& value(attr->value());
64     if (attr->name() == SVGNames::targetAttr) {
65         setTargetBaseValue(value);
66     } else {
67         if (SVGURIReference::parseMappedAttribute(attr)) {
68             m_isLink = attr->value() != 0;
69             return;
70         }
71         if (SVGTests::parseMappedAttribute(attr))
72             return;
73         if (SVGLangSpace::parseMappedAttribute(attr))
74             return;
75         if (SVGExternalResourcesRequired::parseMappedAttribute(attr))
76             return;
77         SVGStyledTransformableElement::parseMappedAttribute(attr);
78     }
79 }
80
81 RenderObject* SVGAElement::createRenderer(RenderArena* arena, RenderStyle* style)
82 {
83     return new (arena) RenderSVGContainer(this);
84 }
85
86 void SVGAElement::defaultEventHandler(Event *evt)
87 {
88     // TODO : should use CLICK instead
89     if ((evt->type() == EventNames::mouseupEvent && m_isLink)) {
90         MouseEvent *e = static_cast<MouseEvent*>(evt);
91
92         if (e && e->button() == 2) {
93             SVGStyledTransformableElement::defaultEventHandler(evt);
94             return;
95         }
96
97         String url = parseURL(href());
98
99         String target = getAttribute(SVGNames::targetAttr);
100         if (e && e->button() == 1)
101             target = "_blank";
102
103         if (!evt->defaultPrevented())
104             if (document() && document()->frame())
105                 document()->frame()->loader()->urlSelected(document()->completeURL(url), target, evt);
106
107         evt->setDefaultHandled();
108     }
109
110     SVGStyledTransformableElement::defaultEventHandler(evt);
111 }
112
113 } // namespace WebCore
114
115 // vim:ts=4:noet
116 #endif // SVG_SUPPORT