043e2884d762fd6a392b84fb33149e0dad6f0f9d
[WebKit-https.git] / WebCore / ksvg2 / svg / SVGStyleElement.cpp
1 /*
2     Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
3                   2004, 2005 Rob Buis <buis@kde.org>
4     Copyright (C) 2006 Apple Computer, Inc.
5
6     This file is part of the KDE project
7
8     This library is free software; you can redistribute it and/or
9     modify it under the terms of the GNU Library General Public
10     License as published by the Free Software Foundation; either
11     version 2 of the License, or (at your option) any later version.
12
13     This library is distributed in the hope that it will be useful,
14     but WITHOUT ANY WARRANTY; without even the implied warranty of
15     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16     Library General Public License for more details.
17
18     You should have received a copy of the GNU Library General Public License
19     along with this library; see the file COPYING.LIB.  If not, write to
20     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21     Boston, MA 02111-1307, USA.
22 */
23
24 #include "config.h"
25 #ifdef SVG_SUPPORT
26 #include "SVGStyleElement.h"
27
28 #include "CSSStyleSheet.h"
29 #include "Document.h"
30 #include "ExceptionCode.h"
31 #include "MediaList.h"
32 #include "MediaQueryEvaluator.h"
33 #include "PlatformString.h"
34
35 namespace WebCore {
36
37 SVGStyleElement::SVGStyleElement(const QualifiedName& tagName, Document *doc) : SVGElement(tagName, doc)
38 {
39     m_loading = false;
40 }
41
42 SVGStyleElement::~SVGStyleElement()
43 {
44 }
45
46 AtomicString SVGStyleElement::xmlspace() const
47 {
48     return tryGetAttribute("xml:space");
49 }
50
51 void SVGStyleElement::setXmlspace(const AtomicString&, ExceptionCode& ec)
52 {
53     ec = NO_MODIFICATION_ALLOWED_ERR;
54 }
55
56 AtomicString SVGStyleElement::type() const
57 {
58     return tryGetAttribute("type", "text/css");
59 }
60
61 void SVGStyleElement::setType(const AtomicString&, ExceptionCode& ec)
62 {
63     ec = NO_MODIFICATION_ALLOWED_ERR;
64 }
65
66 AtomicString SVGStyleElement::media() const
67 {
68     return tryGetAttribute("media", "all");
69 }
70
71 void SVGStyleElement::setMedia(const AtomicString&, ExceptionCode& ec)
72 {
73     ec = NO_MODIFICATION_ALLOWED_ERR;
74 }
75
76 AtomicString SVGStyleElement::title() const
77 {
78     return tryGetAttribute("title");
79 }
80
81 void SVGStyleElement::setTitle(const AtomicString&, ExceptionCode& ec)
82 {
83     ec = NO_MODIFICATION_ALLOWED_ERR;
84 }
85
86 CSSStyleSheet *SVGStyleElement::sheet()
87 {
88     return m_sheet.get();
89 }
90
91 void SVGStyleElement::childrenChanged()
92 {
93     SVGElement::childrenChanged();
94
95     if(m_sheet)
96         m_sheet = 0;
97
98     // FIXME: this code should be shared with HTMLStyleElement::childrenChanged()
99     m_loading = false;
100     MediaQueryEvaluator screenEval("screen", true);
101     MediaQueryEvaluator printEval("print", true);   
102     RefPtr<MediaList> mediaList = new MediaList((CSSStyleSheet*)0, media());
103     if ((type().isEmpty() || type() == "text/css") && (screenEval.eval(mediaList.get()) || printEval.eval(mediaList.get()))) {
104         ownerDocument()->addPendingSheet();
105
106         m_loading = true;
107  
108         m_sheet = new CSSStyleSheet(this, String(), document()->inputEncoding());
109         m_sheet->parseString(textContent()); // SVG css is always parsed in strict mode
110         
111         m_sheet->setMedia(mediaList.get());
112         m_loading = false;
113     }
114
115     if(!isLoading() && m_sheet)
116         document()->stylesheetLoaded();
117 }
118
119 bool SVGStyleElement::isLoading() const
120 {
121     return false;
122 }
123
124 }
125
126 // vim:ts=4:noet
127 #endif // SVG_SUPPORT