OLD | NEW |
1 /* | 1 /* |
2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) | 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) |
3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) | 3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) |
4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) | 4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) |
5 Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com) | 5 Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com) |
6 Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. | 6 Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. |
7 | 7 |
8 This library is free software; you can redistribute it and/or | 8 This library is free software; you can redistribute it and/or |
9 modify it under the terms of the GNU Library General Public | 9 modify it under the terms of the GNU Library General Public |
10 License as published by the Free Software Foundation; either | 10 License as published by the Free Software Foundation; either |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 return errorOccurred() && m_shouldPaintBrokenImage; | 157 return errorOccurred() && m_shouldPaintBrokenImage; |
158 } | 158 } |
159 | 159 |
160 #if ENABLE(SVG) | 160 #if ENABLE(SVG) |
161 inline Image* CachedImage::lookupOrCreateImageForRenderer(const RenderObject* re
nderer) | 161 inline Image* CachedImage::lookupOrCreateImageForRenderer(const RenderObject* re
nderer) |
162 { | 162 { |
163 if (!m_image) | 163 if (!m_image) |
164 return 0; | 164 return 0; |
165 if (!m_image->isSVGImage()) | 165 if (!m_image->isSVGImage()) |
166 return m_image.get(); | 166 return m_image.get(); |
167 Image* useImage = m_svgImageCache->lookupOrCreateBitmapImageForRenderer(rend
erer); | 167 Image* useImage = m_svgImageCache->imageForRenderer(renderer); |
168 if (useImage == Image::nullImage()) | 168 if (useImage == Image::nullImage()) |
169 return m_image.get(); | 169 return m_image.get(); |
170 return useImage; | 170 return useImage; |
171 } | 171 } |
172 #else | 172 #else |
173 inline Image* CachedImage::lookupOrCreateImageForRenderer(const RenderObject*) | 173 inline Image* CachedImage::lookupOrCreateImageForRenderer(const RenderObject*) |
174 { | 174 { |
175 return m_image.get(); | 175 return m_image.get(); |
176 } | 176 } |
177 #endif | 177 #endif |
(...skipping 30 matching lines...) Expand all Loading... |
208 return lookupOrCreateImageForRenderer(renderer); | 208 return lookupOrCreateImageForRenderer(renderer); |
209 | 209 |
210 return Image::nullImage(); | 210 return Image::nullImage(); |
211 } | 211 } |
212 | 212 |
213 void CachedImage::setContainerSizeForRenderer(const CachedImageClient* renderer,
const IntSize& containerSize, float containerZoom) | 213 void CachedImage::setContainerSizeForRenderer(const CachedImageClient* renderer,
const IntSize& containerSize, float containerZoom) |
214 { | 214 { |
215 if (containerSize.isEmpty()) | 215 if (containerSize.isEmpty()) |
216 return; | 216 return; |
217 ASSERT(renderer); | 217 ASSERT(renderer); |
| 218 ASSERT(containerZoom); |
218 if (!m_image) { | 219 if (!m_image) { |
219 m_pendingContainerSizeRequests.set(renderer, SizeAndZoom(containerSize,
containerZoom)); | 220 m_pendingContainerSizeRequests.set(renderer, SizeAndZoom(containerSize,
containerZoom)); |
220 return; | 221 return; |
221 } | 222 } |
222 #if ENABLE(SVG) | 223 #if ENABLE(SVG) |
223 if (!m_image->isSVGImage()) { | 224 if (!m_image->isSVGImage()) { |
224 m_image->setContainerSize(containerSize); | 225 m_image->setContainerSize(containerSize); |
225 return; | 226 return; |
226 } | 227 } |
227 | 228 |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 { | 306 { |
306 if (!m_loader || m_loader->reachedTerminalState()) | 307 if (!m_loader || m_loader->reachedTerminalState()) |
307 return; | 308 return; |
308 | 309 |
309 m_shouldPaintBrokenImage = m_loader->frameLoader()->client()->shouldPaintBro
kenImage(m_resourceRequest.url()); | 310 m_shouldPaintBrokenImage = m_loader->frameLoader()->client()->shouldPaintBro
kenImage(m_resourceRequest.url()); |
310 } | 311 } |
311 | 312 |
312 void CachedImage::clear() | 313 void CachedImage::clear() |
313 { | 314 { |
314 destroyDecodedData(); | 315 destroyDecodedData(); |
315 #if ENABLE(SVG) | |
316 m_svgImageCache.clear(); | |
317 #endif | |
318 clearImage(); | 316 clearImage(); |
319 m_pendingContainerSizeRequests.clear(); | 317 m_pendingContainerSizeRequests.clear(); |
320 setEncodedSize(0); | 318 setEncodedSize(0); |
321 } | 319 } |
322 | 320 |
323 inline void CachedImage::createImage() | 321 inline void CachedImage::createImage() |
324 { | 322 { |
325 // Create the image if it doesn't yet exist. | 323 // Create the image if it doesn't yet exist. |
326 if (m_image) | 324 if (m_image) |
327 return; | 325 return; |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
477 { | 475 { |
478 if (!image || image != m_image) | 476 if (!image || image != m_image) |
479 return; | 477 return; |
480 notifyObservers(); | 478 notifyObservers(); |
481 } | 479 } |
482 | 480 |
483 void CachedImage::changedInRect(const Image* image, const IntRect& rect) | 481 void CachedImage::changedInRect(const Image* image, const IntRect& rect) |
484 { | 482 { |
485 if (!image || image != m_image) | 483 if (!image || image != m_image) |
486 return; | 484 return; |
487 #if ENABLE(SVG) | |
488 // We have to update the cached ImageBuffers if the underlying content chang
ed. | |
489 if (image->isSVGImage()) { | |
490 m_svgImageCache->imageContentChanged(); | |
491 return; | |
492 } | |
493 #endif | |
494 notifyObservers(&rect); | 485 notifyObservers(&rect); |
495 } | 486 } |
496 | 487 |
497 void CachedImage::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const | 488 void CachedImage::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const |
498 { | 489 { |
499 MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CachedResou
rceImage); | 490 MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CachedResou
rceImage); |
500 memoryObjectInfo->setClassName("CachedImage"); | 491 memoryObjectInfo->setClassName("CachedImage"); |
501 CachedResource::reportMemoryUsage(memoryObjectInfo); | 492 CachedResource::reportMemoryUsage(memoryObjectInfo); |
502 info.addMember(m_pendingContainerSizeRequests, "pendingContainerSizeRequests
"); | 493 info.addMember(m_pendingContainerSizeRequests, "pendingContainerSizeRequests
"); |
503 info.addMember(m_image, "m_image"); | 494 info.addMember(m_image, "m_image"); |
504 #if ENABLE(SVG) | 495 #if ENABLE(SVG) |
505 info.addMember(m_svgImageCache, "svgImageCache"); | 496 info.addMember(m_svgImageCache, "svgImageCache"); |
506 #endif | 497 #endif |
507 } | 498 } |
508 | 499 |
509 bool CachedImage::currentFrameKnownToBeOpaque(const RenderObject* renderer) | 500 bool CachedImage::currentFrameKnownToBeOpaque(const RenderObject* renderer) |
510 { | 501 { |
511 Image* image = imageForRenderer(renderer); | 502 Image* image = imageForRenderer(renderer); |
512 if (image->isBitmapImage()) | 503 if (image->isBitmapImage()) |
513 image->nativeImageForCurrentFrame(); // force decode | 504 image->nativeImageForCurrentFrame(); // force decode |
514 return image->currentFrameKnownToBeOpaque(); | 505 return image->currentFrameKnownToBeOpaque(); |
515 } | 506 } |
516 | 507 |
517 } // namespace WebCore | 508 } // namespace WebCore |
OLD | NEW |