LibHTML: Fetch the box edge values needed for block width computation.

This commit is contained in:
Andreas Kling 2019-07-24 07:34:07 +02:00
parent af23b38418
commit f88c5860df
4 changed files with 42 additions and 2 deletions

View file

@ -29,6 +29,13 @@ public:
return String::format("%d [Length/Absolute]", m_value);
}
int to_px() const
{
if (is_auto())
return 0;
return m_value;
}
private:
Type m_type { Type::Auto };
int m_value { 0 };

View file

@ -1,10 +1,11 @@
#pragma once
#include <AK/AKString.h>
#include <AK/HashMap.h>
#include <AK/NonnullRefPtr.h>
#include <AK/AKString.h>
#include <LibHTML/TreeNode.h>
#include <AK/Optional.h>
#include <LibHTML/CSS/StyleValue.h>
#include <LibHTML/TreeNode.h>
class Node;
@ -50,6 +51,14 @@ public:
m_property_values.set(name, move(value));
}
Optional<NonnullRefPtr<StyleValue>> property(const String& name) const
{
auto it = m_property_values.find(name);
if (it == m_property_values.end())
return {};
return it->value;
}
Display display() const;
protected:

View file

@ -1,3 +1,4 @@
#include <LibHTML/CSS/StyledNode.h>
#include <LibHTML/DOM/Element.h>
#include <LibHTML/Layout/LayoutBlock.h>
@ -29,6 +30,26 @@ void LayoutBlock::layout()
void LayoutBlock::compute_width()
{
if (!styled_node()) {
// I guess the size is "auto" in this case.
return;
}
auto auto_value= LengthStyleValue::create({});
auto& styled_node = *this->styled_node();
auto width = styled_node.property("width").value_or(auto_value);
auto zero_value = LengthStyleValue::create(Length(0, Length::Type::Absolute));
auto margin_left = styled_node.property("margin-left").value_or(zero_value);
auto margin_right = styled_node.property("margin-right").value_or(zero_value);
auto border_left = styled_node.property("border-left").value_or(zero_value);
auto border_right = styled_node.property("border-right").value_or(zero_value);
auto padding_left = styled_node.property("padding-left").value_or(zero_value);
auto padding_right = styled_node.property("padding-right").value_or(zero_value);
dbg() << " Left: " << margin_left->to_string() << "+" << border_left->to_string() << "+" << padding_left->to_string();
dbg() << "Right: " << margin_right->to_string() << "+" << border_right->to_string() << "+" << padding_right->to_string();
}
void LayoutBlock::compute_height()

View file

@ -49,6 +49,9 @@ public:
virtual LayoutNode& inline_wrapper() { return *this; }
StyledNode* styled_node() { return m_styled_node; }
const StyledNode* styled_node() const { return m_styled_node; }
protected:
explicit LayoutNode(const Node*, const StyledNode*);