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

LibHTML: Add support for <body bgcolor="#rrggbb" text="#rrggbb">

This patch implements basic support for presentational hints, which are
old-school HTML attributes that affect style.

You add support for a presentational hint attribute by overriding
Element::apply_presentational_hints(StyleProperties&) and setting all
of the corresponding CSS properties as appropriate.

To make the background color fill the entire document, not just the
bounds of the <body> element's LayoutNode, we special-case it in the
HtmlView::paint_event() code for now. I'm not entirely sure what the
nicest solution would be, but I'm sure we'll discover it eventually.
This commit is contained in:
Andreas Kling 2019-10-04 21:05:52 +02:00
parent a7ca719c4e
commit 9808d35554
12 changed files with 94 additions and 5 deletions

View file

@ -1,6 +1,7 @@
#include <LibHTML/CSS/StyleResolver.h>
#include <LibHTML/DOM/Document.h>
#include <LibHTML/DOM/Element.h>
#include <LibHTML/DOM/HTMLBodyElement.h>
#include <LibHTML/DOM/HTMLHeadElement.h>
#include <LibHTML/DOM/HTMLHtmlElement.h>
#include <LibHTML/DOM/HTMLTitleElement.h>
@ -52,6 +53,14 @@ const HTMLHeadElement* Document::head() const
return static_cast<const HTMLHeadElement*>(html->first_child_with_tag_name("head"));
}
const HTMLBodyElement* Document::body() const
{
auto* html = document_element();
if (!html)
return nullptr;
return static_cast<const HTMLBodyElement*>(html->first_child_with_tag_name("body"));
}
String Document::title() const
{
auto* head_element = head();
@ -73,3 +82,20 @@ void Document::attach_to_frame(Badge<Frame>, Frame& frame)
void Document::detach_from_frame(Badge<Frame>, Frame&)
{
}
Color Document::background_color() const
{
auto* body_element = body();
if (!body_element)
return Color::White;
auto* body_layout_node = body_element->layout_node();
if (!body_layout_node)
return Color::White;
auto background_color = body_layout_node->style().property("background-color");
if (!background_color.has_value() || !background_color.value()->is_color())
return Color::White;
return background_color.value()->to_color();
}