void SVGImageElement::didAttachRenderers() { if (RenderSVGImage* imageObj = toRenderSVGImage(renderer())) { if (imageObj->imageResource().hasImage()) return; imageObj->imageResource().setCachedImage(m_imageLoader.image()); } }
bool SVGImageElement::currentFrameHasSingleSecurityOrigin() const { if (RenderSVGImage* renderSVGImage = toRenderSVGImage(renderer())) { if (renderSVGImage->imageResource()->hasImage()) { if (Image* image = renderSVGImage->imageResource()->cachedImage()->image()) return image->currentFrameHasSingleSecurityOrigin(); } } return true; }
void SVGImageElement::svgAttributeChanged(const QualifiedName& attrName) { if (!isSupportedAttribute(attrName)) { SVGGraphicsElement::svgAttributeChanged(attrName); return; } SVGElementInstance::InvalidationGuard invalidationGuard(this); if (attrName == SVGNames::widthAttr || attrName == SVGNames::heightAttr) { invalidateSVGPresentationAttributeStyle(); return; } bool isLengthAttribute = attrName == SVGNames::xAttr || attrName == SVGNames::yAttr || attrName == SVGNames::widthAttr || attrName == SVGNames::heightAttr; if (isLengthAttribute) updateRelativeLengthsInformation(); if (SVGURIReference::isKnownAttribute(attrName)) { m_imageLoader.updateFromElementIgnoringPreviousError(); return; } auto renderer = this->renderer(); if (!renderer) return; if (isLengthAttribute) { if (toRenderSVGImage(renderer)->updateImageViewport()) RenderSVGResource::markForLayoutAndParentResourceInvalidation(*renderer); return; } if (attrName == SVGNames::preserveAspectRatioAttr || SVGLangSpace::isKnownAttribute(attrName) || SVGExternalResourcesRequired::isKnownAttribute(attrName)) { RenderSVGResource::markForLayoutAndParentResourceInvalidation(*renderer); return; } ASSERT_NOT_REACHED(); }
RenderImageResource* ImageLoader::renderImageResource() { RenderObject* renderer = m_element->renderer(); if (!renderer) return 0; // We don't return style generated image because it doesn't belong to the ImageLoader. // See <https://bugs.webkit.org/show_bug.cgi?id=42840> if (renderer->isImage() && !static_cast<RenderImage*>(renderer)->isGeneratedContent()) return toRenderImage(renderer)->imageResource(); if (renderer->isSVGImage()) return toRenderSVGImage(renderer)->imageResource(); if (renderer->isVideo()) return toRenderVideo(renderer)->imageResource(); return 0; }
RenderImageResource* ImageLoader::renderImageResource() { auto renderer = element().renderer(); if (!renderer) return nullptr; // We don't return style generated image because it doesn't belong to the ImageLoader. // See <https://bugs.webkit.org/show_bug.cgi?id=42840> if (renderer->isRenderImage() && !toRenderImage(*renderer).isGeneratedContent()) return &toRenderImage(*renderer).imageResource(); if (renderer->isSVGImage()) return &toRenderSVGImage(renderer)->imageResource(); #if ENABLE(VIDEO) if (renderer->isVideo()) return &toRenderVideo(*renderer).imageResource(); #endif return nullptr; }
RenderImageResource* ImageLoader::renderImageResource() { RenderObject* renderer = m_element->renderer(); if (!renderer) return 0; if (renderer->isImage()) return toRenderImage(renderer)->imageResource(); #if ENABLE(SVG) if (renderer->isSVGImage()) return toRenderSVGImage(renderer)->imageResource(); #endif #if ENABLE(VIDEO) if (renderer->isVideo()) return toRenderVideo(renderer)->imageResource(); #endif return 0; }
void write(TextStream& ts, const RenderObject& o, int indent, RenderAsTextBehavior behavior) { #if ENABLE(SVG) if (o.isSVGPath()) { write(ts, *toRenderSVGPath(&o), indent); return; } if (o.isSVGGradientStop()) { writeSVGGradientStop(ts, *toRenderSVGGradientStop(&o), indent); return; } if (o.isSVGResourceContainer()) { writeSVGResourceContainer(ts, o, indent); return; } if (o.isSVGContainer()) { writeSVGContainer(ts, o, indent); return; } if (o.isSVGRoot()) { write(ts, *toRenderSVGRoot(&o), indent); return; } if (o.isSVGText()) { writeSVGText(ts, *toRenderBlock(&o), indent); return; } if (o.isSVGInlineText()) { writeSVGInlineText(ts, *toRenderText(&o), indent); return; } if (o.isSVGImage()) { writeSVGImage(ts, *toRenderSVGImage(&o), indent); return; } #endif writeIndent(ts, indent); RenderTreeAsText::writeRenderObject(ts, o, behavior); ts << "\n"; if (o.isText() && !o.isBR()) { const RenderText& text = *toRenderText(&o); for (InlineTextBox* box = text.firstTextBox(); box; box = box->nextTextBox()) { writeIndent(ts, indent + 1); writeTextRun(ts, text, *box); } } for (RenderObject* child = o.firstChild(); child; child = child->nextSibling()) { if (child->hasLayer()) continue; write(ts, *child, indent + 1, behavior); } if (o.isWidget()) { Widget* widget = toRenderWidget(&o)->widget(); if (widget && widget->isFrameView()) { FrameView* view = static_cast<FrameView*>(widget); RenderView* root = view->frame()->contentRenderer(); if (root) { view->layout(); RenderLayer* l = root->layer(); if (l) writeLayers(ts, l, l, IntRect(l->x(), l->y(), l->width(), l->height()), indent + 1, behavior); } } } }