Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(751)

Side by Side Diff: Source/core/layout/svg/SVGResourcesCache.cpp

Issue 908243002: Move rendering/svg/RenderSVGResource* to layout/svg. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 2 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
3 * 3 *
4 * This library is free software; you can redistribute it and/or 4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public 5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either 6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version. 7 * version 2 of the License, or (at your option) any later version.
8 * 8 *
9 * This library is distributed in the hope that it will be useful, 9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details. 12 * Library General Public License for more details.
13 * 13 *
14 * You should have received a copy of the GNU Library General Public License 14 * You should have received a copy of the GNU Library General Public License
15 * along with this library; see the file COPYING.LIB. If not, write to 15 * along with this library; see the file COPYING.LIB. If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA. 17 * Boston, MA 02110-1301, USA.
18 */ 18 */
19 19
20 #include "config.h" 20 #include "config.h"
21 #include "core/layout/svg/SVGResourcesCache.h" 21 #include "core/layout/svg/SVGResourcesCache.h"
22 22
23 #include "core/HTMLNames.h" 23 #include "core/HTMLNames.h"
24 #include "core/layout/svg/LayoutSVGResourceContainer.h"
24 #include "core/layout/svg/SVGResources.h" 25 #include "core/layout/svg/SVGResources.h"
25 #include "core/layout/svg/SVGResourcesCycleSolver.h" 26 #include "core/layout/svg/SVGResourcesCycleSolver.h"
26 #include "core/rendering/svg/RenderSVGResourceContainer.h"
27 #include "core/svg/SVGDocumentExtensions.h" 27 #include "core/svg/SVGDocumentExtensions.h"
28 28
29 namespace blink { 29 namespace blink {
30 30
31 SVGResourcesCache::SVGResourcesCache() 31 SVGResourcesCache::SVGResourcesCache()
32 { 32 {
33 } 33 }
34 34
35 SVGResourcesCache::~SVGResourcesCache() 35 SVGResourcesCache::~SVGResourcesCache()
36 { 36 {
(...skipping 12 matching lines...) Expand all
49 return; 49 return;
50 50
51 // Put object in cache. 51 // Put object in cache.
52 SVGResources* resources = m_cache.set(object, newResources.release()).stored Value->value.get(); 52 SVGResources* resources = m_cache.set(object, newResources.release()).stored Value->value.get();
53 53
54 // Run cycle-detection _afterwards_, so self-references can be caught as wel l. 54 // Run cycle-detection _afterwards_, so self-references can be caught as wel l.
55 SVGResourcesCycleSolver solver(object, resources); 55 SVGResourcesCycleSolver solver(object, resources);
56 solver.resolveCycles(); 56 solver.resolveCycles();
57 57
58 // Walk resources and register the render object at each resources. 58 // Walk resources and register the render object at each resources.
59 HashSet<RenderSVGResourceContainer*> resourceSet; 59 HashSet<LayoutSVGResourceContainer*> resourceSet;
60 resources->buildSetOfResources(resourceSet); 60 resources->buildSetOfResources(resourceSet);
61 61
62 for (auto* resourceContainer : resourceSet) 62 for (auto* resourceContainer : resourceSet)
63 resourceContainer->addClient(object); 63 resourceContainer->addClient(object);
64 } 64 }
65 65
66 void SVGResourcesCache::removeResourcesFromLayoutObject(LayoutObject* object) 66 void SVGResourcesCache::removeResourcesFromLayoutObject(LayoutObject* object)
67 { 67 {
68 OwnPtr<SVGResources> resources = m_cache.take(object); 68 OwnPtr<SVGResources> resources = m_cache.take(object);
69 if (!resources) 69 if (!resources)
70 return; 70 return;
71 71
72 // Walk resources and register the render object at each resources. 72 // Walk resources and register the render object at each resources.
73 HashSet<RenderSVGResourceContainer*> resourceSet; 73 HashSet<LayoutSVGResourceContainer*> resourceSet;
74 resources->buildSetOfResources(resourceSet); 74 resources->buildSetOfResources(resourceSet);
75 75
76 for (auto* resourceContainer : resourceSet) 76 for (auto* resourceContainer : resourceSet)
77 resourceContainer->removeClient(object); 77 resourceContainer->removeClient(object);
78 } 78 }
79 79
80 static inline SVGResourcesCache* resourcesCacheFromLayoutObject(const LayoutObje ct* renderer) 80 static inline SVGResourcesCache* resourcesCacheFromLayoutObject(const LayoutObje ct* renderer)
81 { 81 {
82 Document& document = renderer->document(); 82 Document& document = renderer->document();
83 83
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 127
128 // Dynamic changes of CSS properties like 'clip-path' may require us to reco mpute the associated resources for a renderer. 128 // Dynamic changes of CSS properties like 'clip-path' may require us to reco mpute the associated resources for a renderer.
129 // FIXME: Avoid passing in a useless StyleDifference, but instead compare ol dStyle/newStyle to see which resources changed 129 // FIXME: Avoid passing in a useless StyleDifference, but instead compare ol dStyle/newStyle to see which resources changed
130 // to be able to selectively rebuild individual resources, instead of all of them. 130 // to be able to selectively rebuild individual resources, instead of all of them.
131 if (rendererCanHaveResources(renderer)) { 131 if (rendererCanHaveResources(renderer)) {
132 SVGResourcesCache* cache = resourcesCacheFromLayoutObject(renderer); 132 SVGResourcesCache* cache = resourcesCacheFromLayoutObject(renderer);
133 cache->removeResourcesFromLayoutObject(renderer); 133 cache->removeResourcesFromLayoutObject(renderer);
134 cache->addResourcesFromLayoutObject(renderer, newStyle); 134 cache->addResourcesFromLayoutObject(renderer, newStyle);
135 } 135 }
136 136
137 RenderSVGResourceContainer::markForLayoutAndParentResourceInvalidation(rende rer, false); 137 LayoutSVGResourceContainer::markForLayoutAndParentResourceInvalidation(rende rer, false);
138 } 138 }
139 139
140 void SVGResourcesCache::clientWasAddedToTree(LayoutObject* renderer, const Layou tStyle& newStyle) 140 void SVGResourcesCache::clientWasAddedToTree(LayoutObject* renderer, const Layou tStyle& newStyle)
141 { 141 {
142 if (!renderer->node()) 142 if (!renderer->node())
143 return; 143 return;
144 RenderSVGResourceContainer::markForLayoutAndParentResourceInvalidation(rende rer, false); 144 LayoutSVGResourceContainer::markForLayoutAndParentResourceInvalidation(rende rer, false);
145 145
146 if (!rendererCanHaveResources(renderer)) 146 if (!rendererCanHaveResources(renderer))
147 return; 147 return;
148 SVGResourcesCache* cache = resourcesCacheFromLayoutObject(renderer); 148 SVGResourcesCache* cache = resourcesCacheFromLayoutObject(renderer);
149 cache->addResourcesFromLayoutObject(renderer, newStyle); 149 cache->addResourcesFromLayoutObject(renderer, newStyle);
150 } 150 }
151 151
152 void SVGResourcesCache::clientWillBeRemovedFromTree(LayoutObject* renderer) 152 void SVGResourcesCache::clientWillBeRemovedFromTree(LayoutObject* renderer)
153 { 153 {
154 if (!renderer->node()) 154 if (!renderer->node())
155 return; 155 return;
156 RenderSVGResourceContainer::markForLayoutAndParentResourceInvalidation(rende rer, false); 156 LayoutSVGResourceContainer::markForLayoutAndParentResourceInvalidation(rende rer, false);
157 157
158 if (!rendererCanHaveResources(renderer)) 158 if (!rendererCanHaveResources(renderer))
159 return; 159 return;
160 SVGResourcesCache* cache = resourcesCacheFromLayoutObject(renderer); 160 SVGResourcesCache* cache = resourcesCacheFromLayoutObject(renderer);
161 cache->removeResourcesFromLayoutObject(renderer); 161 cache->removeResourcesFromLayoutObject(renderer);
162 } 162 }
163 163
164 void SVGResourcesCache::clientDestroyed(LayoutObject* renderer) 164 void SVGResourcesCache::clientDestroyed(LayoutObject* renderer)
165 { 165 {
166 ASSERT(renderer); 166 ASSERT(renderer);
167 167
168 SVGResources* resources = SVGResourcesCache::cachedResourcesForLayoutObject( renderer); 168 SVGResources* resources = SVGResourcesCache::cachedResourcesForLayoutObject( renderer);
169 if (resources) 169 if (resources)
170 resources->removeClientFromCache(renderer); 170 resources->removeClientFromCache(renderer);
171 171
172 SVGResourcesCache* cache = resourcesCacheFromLayoutObject(renderer); 172 SVGResourcesCache* cache = resourcesCacheFromLayoutObject(renderer);
173 cache->removeResourcesFromLayoutObject(renderer); 173 cache->removeResourcesFromLayoutObject(renderer);
174 } 174 }
175 175
176 void SVGResourcesCache::resourceDestroyed(RenderSVGResourceContainer* resource) 176 void SVGResourcesCache::resourceDestroyed(LayoutSVGResourceContainer* resource)
177 { 177 {
178 ASSERT(resource); 178 ASSERT(resource);
179 SVGResourcesCache* cache = resourcesCacheFromLayoutObject(resource); 179 SVGResourcesCache* cache = resourcesCacheFromLayoutObject(resource);
180 180
181 // The resource itself may have clients, that need to be notified. 181 // The resource itself may have clients, that need to be notified.
182 cache->removeResourcesFromLayoutObject(resource); 182 cache->removeResourcesFromLayoutObject(resource);
183 183
184 for (auto& objectResources : cache->m_cache) { 184 for (auto& objectResources : cache->m_cache) {
185 objectResources.value->resourceDestroyed(resource); 185 objectResources.value->resourceDestroyed(resource);
186 186
187 // Mark users of destroyed resources as pending resolution based on the id of the old resource. 187 // Mark users of destroyed resources as pending resolution based on the id of the old resource.
188 Element* resourceElement = resource->element(); 188 Element* resourceElement = resource->element();
189 Element* clientElement = toElement(objectResources.key->node()); 189 Element* clientElement = toElement(objectResources.key->node());
190 SVGDocumentExtensions& extensions = clientElement->document().accessSVGE xtensions(); 190 SVGDocumentExtensions& extensions = clientElement->document().accessSVGE xtensions();
191 191
192 extensions.addPendingResource(resourceElement->fastGetAttribute(HTMLName s::idAttr), clientElement); 192 extensions.addPendingResource(resourceElement->fastGetAttribute(HTMLName s::idAttr), clientElement);
193 } 193 }
194 } 194 }
195 195
196 } 196 }
OLDNEW
« no previous file with comments | « Source/core/layout/svg/SVGResourcesCache.h ('k') | Source/core/layout/svg/SVGResourcesCycleSolver.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698