1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 06:57:44 +00:00

LibWeb: Add ComputedCSSSstyleDeclaration and support 2 properties :^)

getComputedStyle(element) now returns a ComputedCSSStyleDeclaration
object, which is a live view of the computed style of a given element.

This works by ComputedCSSStyleDeclaration being a wrapper around an
element pointer. When you ask it for a CSS property, it gets the latest
computed style values from the element and returns them as a
CSS::StyleProperty object.

This first cut adds support for computed 'color' and 'display'.

In case the element doesn't have a corresponding node in the layout
tree, we fall back to using specified style instead. This is achieved by
performing an on-the-fly style resolution for the individual element and
then grabbing the requested property from that resolved style.
This commit is contained in:
Andreas Kling 2021-09-12 20:05:29 +02:00
parent caa9e1f622
commit 8b27bc078c
4 changed files with 146 additions and 4 deletions

View file

@ -6,6 +6,7 @@
#include <LibGUI/DisplayLink.h>
#include <LibJS/Runtime/FunctionObject.h>
#include <LibWeb/CSS/ComputedCSSStyleDeclaration.h>
#include <LibWeb/DOM/Document.h>
#include <LibWeb/DOM/Event.h>
#include <LibWeb/DOM/EventDispatcher.h>
@ -189,10 +190,7 @@ Page const* Window::page() const
NonnullRefPtr<CSS::CSSStyleDeclaration> Window::get_computed_style(DOM::Element& element) const
{
dbgln("Generating CSS computed style for {} @ {:p}", element.node_name(), &element);
Vector<CSS::StyleProperty> properties;
HashMap<String, CSS::StyleProperty> custom_properties;
return CSS::PropertyOwningCSSStyleDeclaration::create(move(properties), move(custom_properties));
return CSS::ComputedCSSStyleDeclaration::create(element);
}
NonnullRefPtr<CSS::MediaQueryList> Window::match_media(String media)