PassRefPtr<Image> MediaControlTextTrackContainerElement::createTextTrackRepresentationImage() { if (!hasChildNodes()) return nullptr; Frame* frame = document().frame(); if (!frame) return nullptr; document().updateLayout(); auto renderer = this->renderer(); if (!renderer) return nullptr; if (!renderer->hasLayer()) return nullptr; RenderLayer* layer = toRenderLayerModelObject(renderer)->layer(); float deviceScaleFactor = 1; if (Page* page = document().page()) deviceScaleFactor = page->deviceScaleFactor(); IntRect paintingRect = IntRect(IntPoint(), layer->size()); OwnPtr<ImageBuffer> buffer(ImageBuffer::create(paintingRect.size(), deviceScaleFactor, ColorSpaceDeviceRGB)); if (!buffer) return nullptr; layer->paint(buffer->context(), paintingRect, PaintBehaviorFlattenCompositingLayers, nullptr, nullptr, RenderLayer::PaintLayerPaintingCompositingAllPhases); return buffer->copyImage(); }
void MediaControlTextTrackContainerElement::paintTextTrackRepresentation(GraphicsContext* context, const IntRect& contextRect) { if (!hasChildNodes()) return; RenderObject* renderer = this->renderer(); if (!renderer) return; Frame* frame = document()->frame(); if (!frame) return; document()->updateLayout(); LayoutRect topLevelRect; IntRect paintingRect = pixelSnappedIntRect(renderer->paintingRootRect(topLevelRect)); // Translate the renderer painting rect into graphics context coordinates. FloatSize translation(-paintingRect.x(), -paintingRect.y()); // But anchor to the bottom of the graphics context rect. translation.expand(max(0, contextRect.width() - paintingRect.width()), max(0, contextRect.height() - paintingRect.height())); context->translate(translation); RenderLayer* layer = frame->contentRenderer()->layer(); layer->paint(context, paintingRect, PaintBehaviorFlattenCompositingLayers, renderer, 0, RenderLayer::PaintLayerPaintingCompositingAllPhases); }