| 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 |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 // Stash all resources into a HashSet for the ease of traversing. | 105 // Stash all resources into a HashSet for the ease of traversing. |
| 106 HashSet<RenderSVGResourceContainer*> localResources; | 106 HashSet<RenderSVGResourceContainer*> localResources; |
| 107 m_resources->buildSetOfResources(localResources); | 107 m_resources->buildSetOfResources(localResources); |
| 108 ASSERT(!localResources.isEmpty()); | 108 ASSERT(!localResources.isEmpty()); |
| 109 | 109 |
| 110 // Add all parent resource containers to the HashSet. | 110 // Add all parent resource containers to the HashSet. |
| 111 HashSet<RenderSVGResourceContainer*> parentResources; | 111 HashSet<RenderSVGResourceContainer*> parentResources; |
| 112 RenderObject* parent = m_renderer->parent(); | 112 RenderObject* parent = m_renderer->parent(); |
| 113 while (parent) { | 113 while (parent) { |
| 114 if (parent->isSVGResourceContainer()) | 114 if (parent->isSVGResourceContainer()) |
| 115 parentResources.add(parent->toRenderSVGResourceContainer()); | 115 parentResources.add(toRenderSVGResourceContainer(parent)); |
| 116 parent = parent->parent(); | 116 parent = parent->parent(); |
| 117 } | 117 } |
| 118 | 118 |
| 119 #if DEBUG_CYCLE_DETECTION > 0 | 119 #if DEBUG_CYCLE_DETECTION > 0 |
| 120 fprintf(stderr, "\nDetecting wheter any resources references any of followin
g objects:\n"); | 120 fprintf(stderr, "\nDetecting wheter any resources references any of followin
g objects:\n"); |
| 121 { | 121 { |
| 122 fprintf(stderr, "Local resources:\n"); | 122 fprintf(stderr, "Local resources:\n"); |
| 123 HashSet<RenderSVGResourceContainer*>::iterator end = localResources.end(
); | 123 HashSet<RenderSVGResourceContainer*>::iterator end = localResources.end(
); |
| 124 for (HashSet<RenderSVGResourceContainer*>::iterator it = localResources.
begin(); it != end; ++it) | 124 for (HashSet<RenderSVGResourceContainer*>::iterator it = localResources.
begin(); it != end; ++it) |
| 125 fprintf(stderr, "|> %s: object=%p (node=%p)\n", (*it)->renderName(),
*it, (*it)->node()); | 125 fprintf(stderr, "|> %s: object=%p (node=%p)\n", (*it)->renderName(),
*it, (*it)->node()); |
| 126 | 126 |
| 127 fprintf(stderr, "Parent resources:\n"); | 127 fprintf(stderr, "Parent resources:\n"); |
| 128 end = parentResources.end(); | 128 end = parentResources.end(); |
| 129 for (HashSet<RenderSVGResourceContainer*>::iterator it = parentResources
.begin(); it != end; ++it) | 129 for (HashSet<RenderSVGResourceContainer*>::iterator it = parentResources
.begin(); it != end; ++it) |
| 130 fprintf(stderr, "|> %s: object=%p (node=%p)\n", (*it)->renderName(),
*it, (*it)->node()); | 130 fprintf(stderr, "|> %s: object=%p (node=%p)\n", (*it)->renderName(),
*it, (*it)->node()); |
| 131 } | 131 } |
| 132 #endif | 132 #endif |
| 133 | 133 |
| 134 // Build combined set of local and parent resources. | 134 // Build combined set of local and parent resources. |
| 135 m_allResources = localResources; | 135 m_allResources = localResources; |
| 136 HashSet<RenderSVGResourceContainer*>::iterator end = parentResources.end(); | 136 HashSet<RenderSVGResourceContainer*>::iterator end = parentResources.end(); |
| 137 for (HashSet<RenderSVGResourceContainer*>::iterator it = parentResources.beg
in(); it != end; ++it) | 137 for (HashSet<RenderSVGResourceContainer*>::iterator it = parentResources.beg
in(); it != end; ++it) |
| 138 m_allResources.add(*it); | 138 m_allResources.add(*it); |
| 139 | 139 |
| 140 // If we're a resource, add ourselves to the HashSet. | 140 // If we're a resource, add ourselves to the HashSet. |
| 141 if (m_renderer->isSVGResourceContainer()) | 141 if (m_renderer->isSVGResourceContainer()) |
| 142 m_allResources.add(m_renderer->toRenderSVGResourceContainer()); | 142 m_allResources.add(toRenderSVGResourceContainer(m_renderer)); |
| 143 | 143 |
| 144 ASSERT(!m_allResources.isEmpty()); | 144 ASSERT(!m_allResources.isEmpty()); |
| 145 | 145 |
| 146 // The job of this function is to determine wheter any of the 'resources' as
sociated with the given 'renderer' | 146 // The job of this function is to determine wheter any of the 'resources' as
sociated with the given 'renderer' |
| 147 // references us (or wheter any of its kids references us) -> that's a cycle
, we need to find and break it. | 147 // references us (or wheter any of its kids references us) -> that's a cycle
, we need to find and break it. |
| 148 end = localResources.end(); | 148 end = localResources.end(); |
| 149 for (HashSet<RenderSVGResourceContainer*>::iterator it = localResources.begi
n(); it != end; ++it) { | 149 for (HashSet<RenderSVGResourceContainer*>::iterator it = localResources.begi
n(); it != end; ++it) { |
| 150 RenderSVGResourceContainer* resource = *it; | 150 RenderSVGResourceContainer* resource = *it; |
| 151 if (parentResources.contains(resource) || resourceContainsCycles(resourc
e)) | 151 if (parentResources.contains(resource) || resourceContainsCycles(resourc
e)) |
| 152 breakCycle(resource); | 152 breakCycle(resource); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 ASSERT(resourceLeadingToCycle == m_resources->clipper()); | 199 ASSERT(resourceLeadingToCycle == m_resources->clipper()); |
| 200 m_resources->resetClipper(); | 200 m_resources->resetClipper(); |
| 201 break; | 201 break; |
| 202 case SolidColorResourceType: | 202 case SolidColorResourceType: |
| 203 ASSERT_NOT_REACHED(); | 203 ASSERT_NOT_REACHED(); |
| 204 break; | 204 break; |
| 205 } | 205 } |
| 206 } | 206 } |
| 207 | 207 |
| 208 } | 208 } |
| OLD | NEW |