| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org> | 3 * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org> |
| 4 * Copyright (C) 2007 Rob Buis <buis@kde.org> | 4 * Copyright (C) 2007 Rob Buis <buis@kde.org> |
| 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 * |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 220 | 220 |
| 221 if (m_pendingResources.contains(id)) | 221 if (m_pendingResources.contains(id)) |
| 222 m_pendingResources.get(id)->add(element); | 222 m_pendingResources.get(id)->add(element); |
| 223 else { | 223 else { |
| 224 SVGPendingElements* set = new SVGPendingElements; | 224 SVGPendingElements* set = new SVGPendingElements; |
| 225 set->add(element); | 225 set->add(element); |
| 226 | 226 |
| 227 m_pendingResources.add(id, set); | 227 m_pendingResources.add(id, set); |
| 228 } | 228 } |
| 229 | 229 |
| 230 element->setHasPendingResources(true); | 230 element->setHasPendingResources(); |
| 231 } | 231 } |
| 232 | 232 |
| 233 bool SVGDocumentExtensions::hasPendingResources(const AtomicString& id) const | 233 bool SVGDocumentExtensions::hasPendingResources(const AtomicString& id) const |
| 234 { | 234 { |
| 235 if (id.isEmpty()) | 235 if (id.isEmpty()) |
| 236 return false; | 236 return false; |
| 237 | 237 |
| 238 return m_pendingResources.contains(id); | 238 return m_pendingResources.contains(id); |
| 239 } | 239 } |
| 240 | 240 |
| 241 bool SVGDocumentExtensions::isElementInPendingResources(SVGStyledElement* elemen
t) const |
| 242 { |
| 243 ASSERT(element); |
| 244 |
| 245 if (m_pendingResources.isEmpty()) |
| 246 return false; |
| 247 |
| 248 HashMap<AtomicString, SVGPendingElements*>::const_iterator end = m_pendingRe
sources.end(); |
| 249 for (HashMap<AtomicString, SVGPendingElements*>::const_iterator it = m_pendi
ngResources.begin(); it != end; ++it) { |
| 250 SVGPendingElements* elements = it->second; |
| 251 ASSERT(elements); |
| 252 |
| 253 if (elements->contains(element)) |
| 254 return true; |
| 255 } |
| 256 return false; |
| 257 } |
| 258 |
| 241 void SVGDocumentExtensions::removeElementFromPendingResources(SVGStyledElement*
element) | 259 void SVGDocumentExtensions::removeElementFromPendingResources(SVGStyledElement*
element) |
| 242 { | 260 { |
| 243 ASSERT(element); | 261 ASSERT(element); |
| 244 | 262 |
| 245 if (m_pendingResources.isEmpty() || !element->hasPendingResources()) | 263 if (m_pendingResources.isEmpty() || !element->hasPendingResources()) |
| 246 return; | 264 return; |
| 247 | 265 |
| 248 element->setHasPendingResources(false); | |
| 249 | |
| 250 Vector<AtomicString> toBeRemoved; | 266 Vector<AtomicString> toBeRemoved; |
| 251 HashMap<AtomicString, SVGPendingElements*>::iterator end = m_pendingResource
s.end(); | 267 HashMap<AtomicString, SVGPendingElements*>::iterator end = m_pendingResource
s.end(); |
| 252 for (HashMap<AtomicString, SVGPendingElements*>::iterator it = m_pendingReso
urces.begin(); it != end; ++it) { | 268 for (HashMap<AtomicString, SVGPendingElements*>::iterator it = m_pendingReso
urces.begin(); it != end; ++it) { |
| 253 SVGPendingElements* elements = it->second; | 269 SVGPendingElements* elements = it->second; |
| 254 ASSERT(elements); | 270 ASSERT(elements); |
| 255 ASSERT(!elements->isEmpty()); | 271 ASSERT(!elements->isEmpty()); |
| 256 | 272 |
| 257 elements->remove(element); | 273 elements->remove(element); |
| 258 if (elements->isEmpty()) | 274 if (elements->isEmpty()) |
| 259 toBeRemoved.append(it->first); | 275 toBeRemoved.append(it->first); |
| 260 } | 276 } |
| 261 | 277 |
| 278 element->clearHasPendingResourcesIfPossible(); |
| 279 |
| 262 if (toBeRemoved.isEmpty()) | 280 if (toBeRemoved.isEmpty()) |
| 263 return; | 281 return; |
| 264 | 282 |
| 265 Vector<AtomicString>::iterator endVector = toBeRemoved.end(); | 283 Vector<AtomicString>::iterator endVector = toBeRemoved.end(); |
| 266 for (Vector<AtomicString>::iterator it = toBeRemoved.begin(); it != endVecto
r; ++it) | 284 for (Vector<AtomicString>::iterator it = toBeRemoved.begin(); it != endVecto
r; ++it) |
| 267 m_pendingResources.remove(*it); | 285 m_pendingResources.remove(*it); |
| 268 } | 286 } |
| 269 | 287 |
| 270 PassOwnPtr<SVGDocumentExtensions::SVGPendingElements> SVGDocumentExtensions::rem
ovePendingResource(const AtomicString& id) | 288 PassOwnPtr<SVGDocumentExtensions::SVGPendingElements> SVGDocumentExtensions::rem
ovePendingResource(const AtomicString& id) |
| 271 { | 289 { |
| 272 ASSERT(m_pendingResources.contains(id)); | 290 ASSERT(m_pendingResources.contains(id)); |
| 273 | 291 |
| 274 OwnPtr<SVGPendingElements> set = adoptPtr(m_pendingResources.get(id)); | 292 OwnPtr<SVGPendingElements> set = adoptPtr(m_pendingResources.get(id)); |
| 275 m_pendingResources.remove(id); | 293 m_pendingResources.remove(id); |
| 276 return set.release(); | 294 return set.release(); |
| 277 } | 295 } |
| 278 | 296 |
| 279 } | 297 } |
| 280 | 298 |
| 281 #endif | 299 #endif |
| OLD | NEW |