OLD | NEW |
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 "core/layout/svg/SVGResourcesCache.h" | 20 #include "core/layout/svg/SVGResourcesCache.h" |
21 | 21 |
22 #include "core/HTMLNames.h" | 22 #include "core/HTMLNames.h" |
23 #include "core/layout/svg/LayoutSVGResourceContainer.h" | 23 #include "core/layout/svg/LayoutSVGResourceContainer.h" |
24 #include "core/layout/svg/SVGResources.h" | 24 #include "core/layout/svg/SVGResources.h" |
25 #include "core/layout/svg/SVGResourcesCycleSolver.h" | 25 #include "core/layout/svg/SVGResourcesCycleSolver.h" |
26 #include "core/svg/SVGDocumentExtensions.h" | 26 #include "core/svg/SVGDocumentExtensions.h" |
| 27 #include <memory> |
27 | 28 |
28 namespace blink { | 29 namespace blink { |
29 | 30 |
30 SVGResourcesCache::SVGResourcesCache() | 31 SVGResourcesCache::SVGResourcesCache() |
31 { | 32 { |
32 } | 33 } |
33 | 34 |
34 SVGResourcesCache::~SVGResourcesCache() | 35 SVGResourcesCache::~SVGResourcesCache() |
35 { | 36 { |
36 } | 37 } |
37 | 38 |
38 void SVGResourcesCache::addResourcesFromLayoutObject(LayoutObject* object, const
ComputedStyle& style) | 39 void SVGResourcesCache::addResourcesFromLayoutObject(LayoutObject* object, const
ComputedStyle& style) |
39 { | 40 { |
40 ASSERT(object); | 41 ASSERT(object); |
41 ASSERT(!m_cache.contains(object)); | 42 ASSERT(!m_cache.contains(object)); |
42 | 43 |
43 const SVGComputedStyle& svgStyle = style.svgStyle(); | 44 const SVGComputedStyle& svgStyle = style.svgStyle(); |
44 | 45 |
45 // Build a list of all resources associated with the passed LayoutObject. | 46 // Build a list of all resources associated with the passed LayoutObject. |
46 OwnPtr<SVGResources> newResources = SVGResources::buildResources(object, svg
Style); | 47 std::unique_ptr<SVGResources> newResources = SVGResources::buildResources(ob
ject, svgStyle); |
47 if (!newResources) | 48 if (!newResources) |
48 return; | 49 return; |
49 | 50 |
50 // Put object in cache. | 51 // Put object in cache. |
51 SVGResources* resources = m_cache.set(object, std::move(newResources)).store
dValue->value.get(); | 52 SVGResources* resources = m_cache.set(object, std::move(newResources)).store
dValue->value.get(); |
52 | 53 |
53 // 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. |
54 SVGResourcesCycleSolver solver(object, resources); | 55 SVGResourcesCycleSolver solver(object, resources); |
55 solver.resolveCycles(); | 56 solver.resolveCycles(); |
56 | 57 |
57 // Walk resources and register the layout object as a client of each resourc
e. | 58 // Walk resources and register the layout object as a client of each resourc
e. |
58 HashSet<LayoutSVGResourceContainer*> resourceSet; | 59 HashSet<LayoutSVGResourceContainer*> resourceSet; |
59 resources->buildSetOfResources(resourceSet); | 60 resources->buildSetOfResources(resourceSet); |
60 | 61 |
61 for (auto* resourceContainer : resourceSet) | 62 for (auto* resourceContainer : resourceSet) |
62 resourceContainer->addClient(object); | 63 resourceContainer->addClient(object); |
63 } | 64 } |
64 | 65 |
65 void SVGResourcesCache::removeResourcesFromLayoutObject(LayoutObject* object) | 66 void SVGResourcesCache::removeResourcesFromLayoutObject(LayoutObject* object) |
66 { | 67 { |
67 OwnPtr<SVGResources> resources = m_cache.take(object); | 68 std::unique_ptr<SVGResources> resources = m_cache.take(object); |
68 if (!resources) | 69 if (!resources) |
69 return; | 70 return; |
70 | 71 |
71 // Walk resources and unregister the layout object as a client of each resou
rce. | 72 // Walk resources and unregister the layout object as a client of each resou
rce. |
72 HashSet<LayoutSVGResourceContainer*> resourceSet; | 73 HashSet<LayoutSVGResourceContainer*> resourceSet; |
73 resources->buildSetOfResources(resourceSet); | 74 resources->buildSetOfResources(resourceSet); |
74 | 75 |
75 for (auto* resourceContainer : resourceSet) | 76 for (auto* resourceContainer : resourceSet) |
76 resourceContainer->removeClient(object); | 77 resourceContainer->removeClient(object); |
77 } | 78 } |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 ASSERT(layoutObject); | 163 ASSERT(layoutObject); |
163 | 164 |
164 SVGResources* resources = cachedResourcesForLayoutObject(layoutObject); | 165 SVGResources* resources = cachedResourcesForLayoutObject(layoutObject); |
165 if (resources) | 166 if (resources) |
166 resources->removeClientFromCache(layoutObject); | 167 resources->removeClientFromCache(layoutObject); |
167 SVGResourcesCache& cache = resourcesCache(layoutObject->document()); | 168 SVGResourcesCache& cache = resourcesCache(layoutObject->document()); |
168 cache.removeResourcesFromLayoutObject(layoutObject); | 169 cache.removeResourcesFromLayoutObject(layoutObject); |
169 } | 170 } |
170 | 171 |
171 } // namespace blink | 172 } // namespace blink |
OLD | NEW |