KHTML
SVGImageLoader.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "config.h"
00024 #if ENABLE(SVG)
00025
00026 #include "Attr.h"
00027 #include "DocLoader.h"
00028 #include "Document.h"
00029
00030 #include "SVGImageElement.h"
00031 #include "SVGLength.h"
00032 #include "SVGNames.h"
00033
00034 #include "RenderImage.h"
00035
00036 namespace WebCore {
00037
00038 SVGImageLoader::SVGImageLoader(SVGImageElement* node)
00039 : HTMLImageLoader(node)
00040 {
00041 }
00042
00043 SVGImageLoader::~SVGImageLoader()
00044 {
00045 }
00046
00047
00048 void SVGImageLoader::updateFromElement()
00049 {
00050 SVGImageElement *imageElement = static_cast<SVGImageElement *>(element());
00051 WebCore::Document* doc = imageElement->ownerDocument();
00052
00053 CachedImage *newImage = 0;
00054 if (!imageElement->href().isEmpty()) {
00055 KURL uri = imageElement->baseURI();
00056 if (!uri.isEmpty())
00057 uri = KURL(uri, imageElement->href());
00058 else
00059 uri = KURL(imageElement->href());
00060 newImage = doc->docLoader()->requestImage(uri.string());
00061 }
00062
00063 CachedImage* oldImage = image();
00064 if (newImage != oldImage) {
00065 setLoadingImage(newImage);
00066 if (newImage)
00067 newImage->addClient(this);
00068 if (oldImage)
00069 oldImage->removeClient(this);
00070 }
00071
00072 if (RenderImage* renderer = static_cast<RenderImage*>(imageElement->renderer()))
00073 renderer->resetAnimation();
00074 }
00075
00076 void SVGImageLoader::dispatchLoadEvent()
00077 {
00078 if (!haveFiredLoadEvent() && image()) {
00079 setHaveFiredLoadEvent(true);
00080 if (image()->errorOccurred()) {
00081
00082 } else if (static_cast<SVGImageElement*>(element())->externalResourcesRequiredBaseValue())
00083 static_cast<SVGElement*>(element())->sendSVGLoadEventIfPossible(true);
00084 }
00085 }
00086
00087 }
00088
00089 #endif // ENABLE(SVG)