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

LibWeb: Convert Layout::Node to new pixel units

This commit is contained in:
Sam Atkins 2022-11-08 11:31:24 +00:00 committed by Linus Groh
parent 65cdf89a8b
commit 5d8e3f5122
7 changed files with 18 additions and 18 deletions

View file

@ -138,7 +138,7 @@ NonnullRefPtr<Gfx::Font> StyleProperties::font_fallback(bool monospace, bool bol
return Platform::FontPlugin::the().default_font(); return Platform::FontPlugin::the().default_font();
} }
float StyleProperties::line_height(Layout::Node const& layout_node) const CSSPixels StyleProperties::line_height(Layout::Node const& layout_node) const
{ {
auto line_height = property(CSS::PropertyID::LineHeight); auto line_height = property(CSS::PropertyID::LineHeight);

View file

@ -106,7 +106,7 @@ public:
m_font = move(font); m_font = move(font);
} }
float line_height(Layout::Node const&) const; CSSPixels line_height(Layout::Node const&) const;
bool operator==(StyleProperties const&) const; bool operator==(StyleProperties const&) const;

View file

@ -447,7 +447,7 @@ CSSPixelPoint BrowsingContext::to_top_level_position(CSSPixelPoint a_position)
return {}; return {};
if (!ancestor->container()->layout_node()) if (!ancestor->container()->layout_node())
return {}; return {};
position.translate_by(ancestor->container()->layout_node()->box_type_agnostic_position().to_type<CSSPixels>()); position.translate_by(ancestor->container()->layout_node()->box_type_agnostic_position());
} }
return position; return position;
} }

View file

@ -170,7 +170,7 @@ int HTMLElement::offset_top() const
return 0; return 0;
auto position = layout_node()->box_type_agnostic_position(); auto position = layout_node()->box_type_agnostic_position();
auto parent_position = parent_element()->layout_node()->box_type_agnostic_position(); auto parent_position = parent_element()->layout_node()->box_type_agnostic_position();
return position.y() - parent_position.y(); return position.y().value() - parent_position.y().value();
} }
// https://drafts.csswg.org/cssom-view/#dom-htmlelement-offsetleft // https://drafts.csswg.org/cssom-view/#dom-htmlelement-offsetleft
@ -183,7 +183,7 @@ int HTMLElement::offset_left() const
return 0; return 0;
auto position = layout_node()->box_type_agnostic_position(); auto position = layout_node()->box_type_agnostic_position();
auto parent_position = parent_element()->layout_node()->box_type_agnostic_position(); auto parent_position = parent_element()->layout_node()->box_type_agnostic_position();
return position.x() - parent_position.x(); return position.x().value() - parent_position.x().value();
} }
// https://drafts.csswg.org/cssom-view/#dom-htmlelement-offsetwidth // https://drafts.csswg.org/cssom-view/#dom-htmlelement-offsetwidth

View file

@ -181,7 +181,7 @@ void LineBuilder::update_last_line()
auto const typographic_height = font_metrics.ascent + font_metrics.descent; auto const typographic_height = font_metrics.ascent + font_metrics.descent;
auto const leading = line_height - typographic_height; auto const leading = line_height - typographic_height;
auto const half_leading = leading / 2; auto const half_leading = leading / 2;
return font_metrics.ascent + half_leading; return CSSPixels(font_metrics.ascent) + half_leading;
}(); }();
auto line_box_baseline = [&] { auto line_box_baseline = [&] {
@ -190,7 +190,7 @@ void LineBuilder::update_last_line()
auto const& font = fragment.layout_node().font(); auto const& font = fragment.layout_node().font();
auto const line_height = fragment.layout_node().line_height(); auto const line_height = fragment.layout_node().line_height();
auto const font_metrics = font.pixel_metrics(); auto const font_metrics = font.pixel_metrics();
auto const typographic_height = font_metrics.ascent + font_metrics.descent; auto const typographic_height = CSSPixels(font_metrics.ascent + font_metrics.descent);
auto const leading = line_height - typographic_height; auto const leading = line_height - typographic_height;
auto const half_leading = leading / 2; auto const half_leading = leading / 2;
@ -198,7 +198,7 @@ void LineBuilder::update_last_line()
CSSPixels fragment_baseline = 0; CSSPixels fragment_baseline = 0;
if (fragment.layout_node().is_text_node()) { if (fragment.layout_node().is_text_node()) {
fragment_baseline = font_metrics.ascent + half_leading; fragment_baseline = CSSPixels(font_metrics.ascent) + half_leading;
} else { } else {
auto const& box = verify_cast<Layout::Box>(fragment.layout_node()); auto const& box = verify_cast<Layout::Box>(fragment.layout_node());
fragment_baseline = box_baseline(m_layout_state, box); fragment_baseline = box_baseline(m_layout_state, box);

View file

@ -164,16 +164,16 @@ void Node::set_needs_display()
}); });
} }
Gfx::FloatPoint Node::box_type_agnostic_position() const CSSPixelPoint Node::box_type_agnostic_position() const
{ {
if (is<Box>(*this)) if (is<Box>(*this))
return verify_cast<Box>(*this).paint_box()->absolute_position().to_type<float>(); return verify_cast<Box>(*this).paint_box()->absolute_position();
VERIFY(is_inline()); VERIFY(is_inline());
Gfx::FloatPoint position; CSSPixelPoint position;
if (auto* block = containing_block()) { if (auto* block = containing_block()) {
block->paint_box()->for_each_fragment([&](auto& fragment) { block->paint_box()->for_each_fragment([&](auto& fragment) {
if (&fragment.layout_node() == this || is_ancestor_of(fragment.layout_node())) { if (&fragment.layout_node() == this || is_ancestor_of(fragment.layout_node())) {
position = fragment.absolute_rect().location().template to_type<float>(); position = fragment.absolute_rect().location();
return IterationDecision::Break; return IterationDecision::Break;
} }
return IterationDecision::Continue; return IterationDecision::Continue;

View file

@ -110,8 +110,8 @@ public:
bool can_contain_boxes_with_position_absolute() const; bool can_contain_boxes_with_position_absolute() const;
Gfx::Font const& font() const; Gfx::Font const& font() const;
const CSS::ImmutableComputedValues& computed_values() const; CSS::ImmutableComputedValues const& computed_values() const;
float line_height() const; CSSPixels line_height() const;
NodeWithStyle* parent(); NodeWithStyle* parent();
NodeWithStyle const* parent() const; NodeWithStyle const* parent() const;
@ -128,7 +128,7 @@ public:
bool children_are_inline() const { return m_children_are_inline; } bool children_are_inline() const { return m_children_are_inline; }
void set_children_are_inline(bool value) { m_children_are_inline = value; } void set_children_are_inline(bool value) { m_children_are_inline = value; }
Gfx::FloatPoint box_type_agnostic_position() const; CSSPixelPoint box_type_agnostic_position() const;
enum class SelectionState { enum class SelectionState {
None, // No selection None, // No selection
@ -177,7 +177,7 @@ public:
void apply_style(const CSS::StyleProperties&); void apply_style(const CSS::StyleProperties&);
Gfx::Font const& font() const { return *m_font; } Gfx::Font const& font() const { return *m_font; }
float line_height() const { return m_line_height; } CSSPixels line_height() const { return m_line_height; }
Vector<CSS::BackgroundLayerData> const& background_layers() const { return computed_values().background_layers(); } Vector<CSS::BackgroundLayerData> const& background_layers() const { return computed_values().background_layers(); }
const CSS::AbstractImageStyleValue* list_style_image() const { return m_list_style_image; } const CSS::AbstractImageStyleValue* list_style_image() const { return m_list_style_image; }
@ -190,7 +190,7 @@ protected:
private: private:
CSS::ComputedValues m_computed_values; CSS::ComputedValues m_computed_values;
RefPtr<Gfx::Font> m_font; RefPtr<Gfx::Font> m_font;
float m_line_height { 0 }; CSSPixels m_line_height { 0 };
RefPtr<CSS::AbstractImageStyleValue> m_list_style_image; RefPtr<CSS::AbstractImageStyleValue> m_list_style_image;
}; };
@ -230,7 +230,7 @@ inline const CSS::ImmutableComputedValues& Node::computed_values() const
return parent()->computed_values(); return parent()->computed_values();
} }
inline float Node::line_height() const inline CSSPixels Node::line_height() const
{ {
if (m_has_style) if (m_has_style)
return static_cast<NodeWithStyle const*>(this)->line_height(); return static_cast<NodeWithStyle const*>(this)->line_height();