• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdelibs API Reference
  • KDE Home
  • Contact Us
 

KHTML

  • sources
  • kde-4.12
  • kdelibs
  • khtml
  • svg
SVGTextElement.cpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2004, 2005, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org>
3  2004, 2005, 2006, 2008 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., 51 Franklin Street, Fifth Floor,
20  Boston, MA 02110-1301, USA.
21 */
22 
23 #include "config.h"
24 #include "wtf/Platform.h"
25 
26 #if ENABLE(SVG)
27 #include "SVGTextElement.h"
28 
29 #include "AffineTransform.h"
30 #include "FloatRect.h"
31 #include "RenderSVGText.h"
32 #include "SVGLengthList.h"
33 #include "SVGRenderStyle.h"
34 #include "SVGTSpanElement.h"
35 #include "SVGTransformList.h"
36 
37 namespace WebCore {
38 
39 SVGTextElement::SVGTextElement(const QualifiedName& tagName, Document* doc)
40  : SVGTextPositioningElement(tagName, doc)
41  , SVGTransformable()
42  , m_transform(SVGTransformList::create(SVGNames::transformAttr))
43 {
44 }
45 
46 SVGTextElement::~SVGTextElement()
47 {
48 }
49 
50 ANIMATED_PROPERTY_DEFINITIONS(SVGTextElement, SVGTransformList*, TransformList, transformList, Transform, transform, SVGNames::transformAttr, m_transform.get())
51 
52 void SVGTextElement::parseMappedAttribute(MappedAttribute* attr)
53 {
54  if (attr->name() == SVGNames::transformAttr) {
55  SVGTransformList* localTransforms = transformBaseValue();
56 
57  ExceptionCode ec = 0;
58  localTransforms->clear(ec);
59 
60  if (!SVGTransformable::parseTransformAttribute(localTransforms, attr->value()))
61  localTransforms->clear(ec);
62  else {
63  setTransformBaseValue(localTransforms);
64  if (renderer())
65  renderer()->setNeedsLayout(true); // should be in setTransformBaseValue
66  }
67  } else
68  SVGTextPositioningElement::parseMappedAttribute(attr);
69 }
70 
71 SVGElement* SVGTextElement::nearestViewportElement() const
72 {
73  return SVGTransformable::nearestViewportElement(this);
74 }
75 
76 SVGElement* SVGTextElement::farthestViewportElement() const
77 {
78  return SVGTransformable::farthestViewportElement(this);
79 }
80 
81 FloatRect SVGTextElement::getBBox() const
82 {
83  return SVGTransformable::getBBox(this);
84 }
85 
86 AffineTransform SVGTextElement::getScreenCTM() const
87 {
88  return SVGTransformable::getScreenCTM(this);
89 }
90 
91 AffineTransform SVGTextElement::getCTM() const
92 {
93  return SVGTransformable::getCTM(this);
94 }
95 
96 AffineTransform SVGTextElement::animatedLocalTransform() const
97 {
98  return m_supplementalTransform ? transform()->concatenate().matrix() * *m_supplementalTransform : transform()->concatenate().matrix();
99 }
100 
101 AffineTransform* SVGTextElement::supplementalTransform()
102 {
103  if (!m_supplementalTransform)
104  m_supplementalTransform.set(new AffineTransform());
105  return m_supplementalTransform.get();
106 }
107 
108 RenderObject* SVGTextElement::createRenderer(RenderArena* arena, RenderStyle* style)
109 {
110  Q_UNUSED(style);
111  kDebug() << "create renderer for <text>" << endl;
112  return new (arena) RenderSVGText(this);
113 }
114 
115 bool SVGTextElement::childShouldCreateRenderer(Node* child) const
116 {
117  if (child->isTextNode()
118 #if ENABLE(SVG_FONTS)
119  || child->hasTagName(SVGNames::altGlyphTag)
120 #endif
121  || child->hasTagName(SVGNames::tspanTag) || child->hasTagName(SVGNames::trefTag) || child->hasTagName(SVGNames::aTag) || child->hasTagName(SVGNames::textPathTag))
122  return true;
123  return false;
124 }
125 
126 void SVGTextElement::svgAttributeChanged(const QualifiedName& attrName)
127 {
128  SVGTextPositioningElement::svgAttributeChanged(attrName);
129 
130  if (!renderer())
131  return;
132 
133  if (SVGTextPositioningElement::isKnownAttribute(attrName))
134  renderer()->setNeedsLayout(true);
135 }
136 
137 }
138 
139 #endif // ENABLE(SVG)
SVGTextElement.h
WebCore::SVGNames::textPathTag
DOM::QualifiedName textPathTag
Definition: SVGNames.cpp:95
WebCore::SVGNames::trefTag
DOM::QualifiedName trefTag
Definition: SVGNames.cpp:97
SVGTSpanElement.h
WebCore::SVGNames::transformAttr
DOM::QualifiedName transformAttr
Definition: SVGNames.cpp:312
WebCore::SVGNames::aTag
DOM::QualifiedName aTag
Definition: SVGNames.cpp:21
kDebug
static QDebug kDebug(bool cond, int area=KDE_DEFAULT_DEBUG_AREA)
AffineTransform.h
FloatRect.h
create
KAction * create(StandardAction id, const QObject *recvr, const char *slot, QObject *parent)
SVGTransformList.h
WebCore::SVGNames::tspanTag
DOM::QualifiedName tspanTag
Definition: SVGNames.cpp:98
WebCore::SVGNames::altGlyphTag
DOM::QualifiedName altGlyphTag
Definition: SVGNames.cpp:22
SVGLengthList.h
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:51:22 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KHTML

Skip menu "KHTML"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdelibs API Reference

Skip menu "kdelibs API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  • kjsembed
  •   WTF
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Nepomuk-Core
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal