• 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
  • graphics
SVGResourceMarker.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org>
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25 
26 #include "config.h"
27 
28 #if ENABLE(SVG)
29 #include "SVGResourceMarker.h"
30 
31 #include "AffineTransform.h"
32 #include "GraphicsContext.h"
33 #include "RenderSVGViewportContainer.h"
34 #include "TextStream.h"
35 
36 namespace WebCore {
37 
38 SVGResourceMarker::SVGResourceMarker()
39  : SVGResource()
40  , m_refX(0.0)
41  , m_refY(0.0)
42  , m_angle(-1) // just like using setAutoAngle()
43  , m_marker(0)
44  , m_useStrokeWidth(true)
45 {
46 }
47 
48 SVGResourceMarker::~SVGResourceMarker()
49 {
50 }
51 
52 void SVGResourceMarker::setMarker(RenderSVGViewportContainer* marker)
53 {
54  m_marker = marker;
55 }
56 
57 void SVGResourceMarker::setRef(double refX, double refY)
58 {
59  m_refX = refX;
60  m_refY = refY;
61 }
62 
63 void SVGResourceMarker::draw(GraphicsContext* context, const FloatRect& rect, double x, double y, double strokeWidth, double angle)
64 {
65  if (!m_marker)
66  return;
67 
68  static HashSet<SVGResourceMarker*> currentlyDrawingMarkers;
69 
70  // avoid drawing circular marker references
71  if (currentlyDrawingMarkers.contains(this))
72  return;
73 
74  currentlyDrawingMarkers.add(this);
75 
76  AffineTransform transform;
77  transform.translate(x, y);
78  transform.rotate(m_angle > -1 ? m_angle : angle);
79 
80  // refX and refY are given in coordinates relative to the viewport established by the marker, yet they affect
81  // the translation performed on the viewport itself.
82  AffineTransform viewportTransform;
83  if (m_useStrokeWidth)
84  viewportTransform.scale(strokeWidth, strokeWidth);
85  viewportTransform *= m_marker->viewportTransform();
86  double refX, refY;
87  viewportTransform.map(m_refX, m_refY, &refX, &refY);
88  transform.translate(-refX, -refY);
89 
90  if (m_useStrokeWidth)
91  transform.scale(strokeWidth, strokeWidth);
92 
93  // FIXME: PaintInfo should be passed into this method instead of being created here
94  // FIXME: bounding box fractions are lost
95  RenderObject::PaintInfo info(context, enclosingIntRect(rect), PaintPhaseForeground, 0, 0, 0);
96 
97  context->save();
98  context->concatCTM(transform);
99  m_marker->setDrawsContents(true);
100  m_marker->paint(info, 0, 0);
101  m_marker->setDrawsContents(false);
102  context->restore();
103 
104  m_cachedBounds = transform.mapRect(m_marker->absoluteClippedOverflowRect());
105 
106  currentlyDrawingMarkers.remove(this);
107 }
108 
109 FloatRect SVGResourceMarker::cachedBounds() const
110 {
111  return m_cachedBounds;
112 }
113 
114 TextStream& SVGResourceMarker::externalRepresentation(TextStream& ts) const
115 {
116  ts << "[type=MARKER]"
117  << " [angle=";
118 
119  if (angle() == -1)
120  ts << "auto" << "]";
121  else
122  ts << angle() << "]";
123 
124  ts << " [ref x=" << refX() << " y=" << refY() << "]";
125  return ts;
126 }
127 
128 SVGResourceMarker* getMarkerById(Document* document, const AtomicString& id)
129 {
130  SVGResource* resource = getResourceById(document, id);
131  if (resource && resource->isMarker())
132  return static_cast<SVGResourceMarker*>(resource);
133 
134  return 0;
135 }
136 
137 } // namespace WebCore
138 
139 #endif
WebCore::enclosingIntRect
IntRect enclosingIntRect(const FloatRect &rect)
Definition: FloatRect.cpp:112
AffineTransform.h
SVGResourceMarker.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