bool RenderLayerCompositor::updateBacking(RenderLayer* layer, CompositingChangeRepaint shouldRepaint) { bool layerChanged = false; if (needsToBeComposited(layer)) { enableCompositingMode(); // 3D transforms turn off the testing of overlap. if (requiresCompositingForTransform(layer->renderer())) setCompositingConsultsOverlap(false); if (!layer->backing()) { // If we need to repaint, do so before making backing if (shouldRepaint == CompositingChangeRepaintNow) repaintOnCompositingChange(layer); layer->ensureBacking(); layerChanged = true; } } else { if (layer->backing()) { // If we're removing backing on a reflection, clear the source GraphicsLayer's pointer to // its replica GraphicsLayer. In practice this should never happen because reflectee and reflection // are both either composited, or not composited. if (layer->isReflection()) { RenderLayer* sourceLayer = toRenderBoxModelObject(layer->renderer()->parent())->layer(); if (RenderLayerBacking* backing = sourceLayer->backing()) { ASSERT(backing->graphicsLayer()->replicaLayer() == layer->backing()->graphicsLayer()); backing->graphicsLayer()->setReplicatedByLayer(0); } } layer->clearBacking(); layerChanged = true; // The layer's cached repaints rects are relative to the repaint container, so change when // compositing changes; we need to update them here. layer->computeRepaintRects(); // If we need to repaint, do so now that we've removed the backing if (shouldRepaint == CompositingChangeRepaintNow) repaintOnCompositingChange(layer); } } #if ENABLE(VIDEO) if (layerChanged && layer->renderer()->isVideo()) { // If it's a video, give the media player a chance to hook up to the layer. RenderVideo* video = toRenderVideo(layer->renderer()); video->acceleratedRenderingStateChanged(); } #endif return layerChanged; }
bool RenderLayerCompositor::requiresCompositingForVideo(RenderObject* renderer) const { #if ENABLE(VIDEO) if (renderer->isVideo()) { RenderVideo* video = toRenderVideo(renderer); return canAccelerateVideoRendering(video); } #else UNUSED_PARAM(renderer); #endif return false; }
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 MediaControlTextTrackContainerElement::updateSizes() { HTMLMediaElement* mediaElement = toParentMediaElement(this); if (!mediaElement) return; if (!document()->page()) return; IntRect videoBox; if (m_textTrackRepresentation) videoBox = m_textTrackRepresentation->bounds(); else { if (!mediaElement->renderer() || !mediaElement->renderer()->isVideo()) return; videoBox = toRenderVideo(mediaElement->renderer())->videoBox(); } if (m_videoDisplaySize == videoBox) return; m_videoDisplaySize = videoBox; if (m_textTrackRepresentation) { setInlineStyleProperty(CSSPropertyWidth, String::number(m_videoDisplaySize.size().width()) + "px"); setInlineStyleProperty(CSSPropertyHeight, String::number(m_videoDisplaySize.size().height()) + "px"); } float smallestDimension = std::min(m_videoDisplaySize.size().height(), m_videoDisplaySize.size().width()); float fontSize = smallestDimension * (document()->page()->group().captionFontSizeScale()); if (fontSize != m_fontSize) { m_fontSize = fontSize; setInlineStyleProperty(CSSPropertyFontSize, String::number(fontSize) + "px"); } }