mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-26 17:55:07 +02:00
This tightens the implementation of video element sizing to the spec by implementing two spec concepts: - The media resource's natural width and height, and - The video element's natural width and height. The element's natural dimensions change based on the representation, which has many inputs, so update checks are triggered from many locations. The resize event is fired when the media resource's natural dimensions change, and the layout is invalidated if the element's natural dimensions change. Tests for a few important resize triggers have been added.
53 lines
1.4 KiB
C++
53 lines
1.4 KiB
C++
/*
|
|
* Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <LibGfx/Bitmap.h>
|
|
#include <LibWeb/HTML/HTMLVideoElement.h>
|
|
#include <LibWeb/Layout/VideoBox.h>
|
|
#include <LibWeb/Painting/VideoPaintable.h>
|
|
|
|
namespace Web::Layout {
|
|
|
|
GC_DEFINE_ALLOCATOR(VideoBox);
|
|
|
|
VideoBox::VideoBox(DOM::Document& document, DOM::Element& element, GC::Ref<CSS::ComputedProperties> style)
|
|
: ReplacedBox(document, element, style)
|
|
{
|
|
}
|
|
|
|
HTML::HTMLVideoElement& VideoBox::dom_node()
|
|
{
|
|
return static_cast<HTML::HTMLVideoElement&>(*ReplacedBox::dom_node());
|
|
}
|
|
|
|
HTML::HTMLVideoElement const& VideoBox::dom_node() const
|
|
{
|
|
return static_cast<HTML::HTMLVideoElement const&>(*ReplacedBox::dom_node());
|
|
}
|
|
|
|
bool VideoBox::can_have_children() const
|
|
{
|
|
// If we allow children when controls are disabled, innerText may be non-empty.
|
|
return dom_node().shadow_root() != nullptr;
|
|
}
|
|
|
|
CSS::SizeWithAspectRatio VideoBox::natural_size() const
|
|
{
|
|
auto natural_size = dom_node().natural_element_size();
|
|
if (!natural_size.has_value())
|
|
return {};
|
|
if (natural_size->is_empty())
|
|
return { 0, 0, {} };
|
|
return { natural_size->width(), natural_size->height(), natural_size->width() / natural_size->height() };
|
|
}
|
|
|
|
GC::Ptr<Painting::Paintable> VideoBox::create_paintable() const
|
|
{
|
|
return Painting::VideoPaintable::create(*this);
|
|
}
|
|
|
|
}
|