OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org> | 2 * Copyright (C) 2004, 2005, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org> |
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Rob Buis <buis@kde.org> |
4 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. | 4 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. |
5 * | 5 * |
6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
10 * | 10 * |
11 * This library is distributed in the hope that it will be useful, | 11 * This library is distributed in the hope that it will be useful, |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 * Library General Public License for more details. | 14 * Library General Public License for more details. |
15 * | 15 * |
16 * You should have received a copy of the GNU Library General Public License | 16 * You should have received a copy of the GNU Library General Public License |
17 * along with this library; see the file COPYING.LIB. If not, write to | 17 * along with this library; see the file COPYING.LIB. If not, write to |
18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
19 * Boston, MA 02110-1301, USA. | 19 * Boston, MA 02110-1301, USA. |
20 */ | 20 */ |
21 | 21 |
22 #include "config.h" | 22 #include "config.h" |
23 #include "core/layout/svg/LayoutSVGResourceMarker.h" | 23 #include "core/layout/svg/LayoutSVGResourceMarker.h" |
24 | 24 |
| 25 #include "core/layout/svg/LayoutSVGContainer.h" |
25 #include "core/layout/svg/SVGLayoutSupport.h" | 26 #include "core/layout/svg/SVGLayoutSupport.h" |
26 #include "core/rendering/svg/RenderSVGContainer.h" | |
27 #include "wtf/TemporaryChange.h" | 27 #include "wtf/TemporaryChange.h" |
28 | 28 |
29 namespace blink { | 29 namespace blink { |
30 | 30 |
31 LayoutSVGResourceMarker::LayoutSVGResourceMarker(SVGMarkerElement* node) | 31 LayoutSVGResourceMarker::LayoutSVGResourceMarker(SVGMarkerElement* node) |
32 : LayoutSVGResourceContainer(node) | 32 : LayoutSVGResourceContainer(node) |
33 { | 33 { |
34 } | 34 } |
35 | 35 |
36 LayoutSVGResourceMarker::~LayoutSVGResourceMarker() | 36 LayoutSVGResourceMarker::~LayoutSVGResourceMarker() |
37 { | 37 { |
38 } | 38 } |
39 | 39 |
40 void LayoutSVGResourceMarker::layout() | 40 void LayoutSVGResourceMarker::layout() |
41 { | 41 { |
42 ASSERT(needsLayout()); | 42 ASSERT(needsLayout()); |
43 if (m_isInLayout) | 43 if (m_isInLayout) |
44 return; | 44 return; |
45 | 45 |
46 TemporaryChange<bool> inLayoutChange(m_isInLayout, true); | 46 TemporaryChange<bool> inLayoutChange(m_isInLayout, true); |
47 | 47 |
48 // RenderSVGHiddenContainer overwrites layout(). We need the | 48 // RenderSVGHiddenContainer overwrites layout(). We need the |
49 // layouting of RenderSVGContainer for calculating local | 49 // layouting of LayoutSVGContainer for calculating local |
50 // transformations and paint invalidation. | 50 // transformations and paint invalidation. |
51 RenderSVGContainer::layout(); | 51 LayoutSVGContainer::layout(); |
52 | 52 |
53 clearInvalidationMask(); | 53 clearInvalidationMask(); |
54 } | 54 } |
55 | 55 |
56 void LayoutSVGResourceMarker::removeAllClientsFromCache(bool markForInvalidation
) | 56 void LayoutSVGResourceMarker::removeAllClientsFromCache(bool markForInvalidation
) |
57 { | 57 { |
58 markAllClientsForInvalidation(markForInvalidation ? LayoutAndBoundariesInval
idation : ParentOnlyInvalidation); | 58 markAllClientsForInvalidation(markForInvalidation ? LayoutAndBoundariesInval
idation : ParentOnlyInvalidation); |
59 } | 59 } |
60 | 60 |
61 void LayoutSVGResourceMarker::removeClientFromCache(LayoutObject* client, bool m
arkForInvalidation) | 61 void LayoutSVGResourceMarker::removeClientFromCache(LayoutObject* client, bool m
arkForInvalidation) |
62 { | 62 { |
63 ASSERT(client); | 63 ASSERT(client); |
64 markClientForInvalidation(client, markForInvalidation ? BoundariesInvalidati
on : ParentOnlyInvalidation); | 64 markClientForInvalidation(client, markForInvalidation ? BoundariesInvalidati
on : ParentOnlyInvalidation); |
65 } | 65 } |
66 | 66 |
67 FloatRect LayoutSVGResourceMarker::markerBoundaries(const AffineTransform& marke
rTransformation) const | 67 FloatRect LayoutSVGResourceMarker::markerBoundaries(const AffineTransform& marke
rTransformation) const |
68 { | 68 { |
69 FloatRect coordinates = RenderSVGContainer::paintInvalidationRectInLocalCoor
dinates(); | 69 FloatRect coordinates = LayoutSVGContainer::paintInvalidationRectInLocalCoor
dinates(); |
70 | 70 |
71 // Map paint invalidation rect into parent coordinate space, in which the ma
rker boundaries have to be evaluated | 71 // Map paint invalidation rect into parent coordinate space, in which the ma
rker boundaries have to be evaluated |
72 coordinates = localToParentTransform().mapRect(coordinates); | 72 coordinates = localToParentTransform().mapRect(coordinates); |
73 | 73 |
74 return markerTransformation.mapRect(coordinates); | 74 return markerTransformation.mapRect(coordinates); |
75 } | 75 } |
76 | 76 |
77 const AffineTransform& LayoutSVGResourceMarker::localToParentTransform() const | 77 const AffineTransform& LayoutSVGResourceMarker::localToParentTransform() const |
78 { | 78 { |
79 m_localToParentTransform = AffineTransform::translation(m_viewport.x(), m_vi
ewport.y()) * viewportTransform(); | 79 m_localToParentTransform = AffineTransform::translation(m_viewport.x(), m_vi
ewport.y()) * viewportTransform(); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 SVGMarkerElement* marker = toSVGMarkerElement(element()); | 147 SVGMarkerElement* marker = toSVGMarkerElement(element()); |
148 ASSERT(marker); | 148 ASSERT(marker); |
149 | 149 |
150 SVGLengthContext lengthContext(marker); | 150 SVGLengthContext lengthContext(marker); |
151 float w = marker->markerWidth()->currentValue()->value(lengthContext); | 151 float w = marker->markerWidth()->currentValue()->value(lengthContext); |
152 float h = marker->markerHeight()->currentValue()->value(lengthContext); | 152 float h = marker->markerHeight()->currentValue()->value(lengthContext); |
153 m_viewport = FloatRect(0, 0, w, h); | 153 m_viewport = FloatRect(0, 0, w, h); |
154 } | 154 } |
155 | 155 |
156 } | 156 } |
OLD | NEW |