mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-21 20:15:17 +00:00
LibWeb: Move white-space into LayoutStyle
This commit is contained in:
parent
bc178ee743
commit
6b334e02e6
Notes:
sideshowbarker
2024-07-19 05:24:26 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/6b334e02e66
6 changed files with 45 additions and 5 deletions
|
@ -244,6 +244,25 @@ CSS::TextAlign StyleProperties::text_align() const
|
|||
return CSS::TextAlign::Left;
|
||||
}
|
||||
|
||||
Optional<CSS::WhiteSpace> StyleProperties::white_space() const
|
||||
{
|
||||
auto value = property(CSS::PropertyID::WhiteSpace);
|
||||
if (!value.has_value() || !value.value()->is_string())
|
||||
return {};
|
||||
auto string = value.value()->to_string();
|
||||
if (string == "normal")
|
||||
return CSS::WhiteSpace::Normal;
|
||||
if (string == "nowrap")
|
||||
return CSS::WhiteSpace::Nowrap;
|
||||
if (string == "pre")
|
||||
return CSS::WhiteSpace::Pre;
|
||||
if (string == "pre-line")
|
||||
return CSS::WhiteSpace::PreLine;
|
||||
if (string == "pre-wrap")
|
||||
return CSS::WhiteSpace::PreWrap;
|
||||
return {};
|
||||
}
|
||||
|
||||
CSS::Display StyleProperties::display() const
|
||||
{
|
||||
auto display = string_or_fallback(CSS::PropertyID::Display, "inline");
|
||||
|
|
|
@ -61,6 +61,7 @@ public:
|
|||
Color color_or_fallback(CSS::PropertyID, const Document&, Color fallback) const;
|
||||
CSS::TextAlign text_align() const;
|
||||
CSS::Display display() const;
|
||||
Optional<CSS::WhiteSpace> white_space() const;
|
||||
|
||||
const Gfx::Font& font() const
|
||||
{
|
||||
|
|
|
@ -135,6 +135,14 @@ enum class Display {
|
|||
TableRowGroup,
|
||||
};
|
||||
|
||||
enum class WhiteSpace {
|
||||
Normal,
|
||||
Pre,
|
||||
Nowrap,
|
||||
PreLine,
|
||||
PreWrap,
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
class StyleValue : public RefCounted<StyleValue> {
|
||||
|
|
|
@ -225,6 +225,11 @@ void LayoutNodeWithStyle::apply_style(const StyleProperties& specified_style)
|
|||
|
||||
style.set_position(specified_style.position());
|
||||
style.set_text_align(specified_style.text_align());
|
||||
|
||||
auto white_space = specified_style.white_space();
|
||||
if (white_space.has_value())
|
||||
style.set_white_space(white_space.value());
|
||||
|
||||
style.set_z_index(specified_style.z_index());
|
||||
style.set_width(specified_style.length_or_fallback(CSS::PropertyID::Width, {}));
|
||||
style.set_min_width(specified_style.length_or_fallback(CSS::PropertyID::MinWidth, {}));
|
||||
|
|
|
@ -31,11 +31,17 @@
|
|||
|
||||
namespace Web {
|
||||
|
||||
class InitialValues {
|
||||
public:
|
||||
static CSS::WhiteSpace white_space() { return CSS::WhiteSpace::Normal; }
|
||||
};
|
||||
|
||||
class LayoutStyle {
|
||||
public:
|
||||
Optional<int> z_index() const { return m_z_index; }
|
||||
CSS::TextAlign text_align() const { return m_text_align; }
|
||||
CSS::Position position() const { return m_position; }
|
||||
CSS::WhiteSpace white_space() const { return m_white_space; }
|
||||
const Length& width() const { return m_width; }
|
||||
const Length& min_width() const { return m_min_width; }
|
||||
const Length& max_width() const { return m_max_width; }
|
||||
|
@ -47,6 +53,7 @@ protected:
|
|||
Optional<int> m_z_index;
|
||||
CSS::TextAlign m_text_align;
|
||||
CSS::Position m_position;
|
||||
CSS::WhiteSpace m_white_space { InitialValues::white_space() };
|
||||
Length m_width;
|
||||
Length m_min_width;
|
||||
Length m_max_width;
|
||||
|
@ -63,6 +70,7 @@ public:
|
|||
void set_z_index(Optional<int> value) { m_z_index = value; }
|
||||
void set_text_align(CSS::TextAlign text_align) { m_text_align = text_align; }
|
||||
void set_position(CSS::Position position) { m_position = position; }
|
||||
void set_white_space(CSS::WhiteSpace value) { m_white_space = value; }
|
||||
void set_width(const Length& width) { m_width = width; }
|
||||
void set_min_width(const Length& width) { m_min_width = width; }
|
||||
void set_max_width(const Length& width) { m_max_width = width; }
|
||||
|
|
|
@ -253,21 +253,20 @@ void LayoutText::split_into_lines(LayoutBlock& container, LayoutMode layout_mode
|
|||
bool do_collapse = true;
|
||||
bool do_wrap_lines = true;
|
||||
bool do_wrap_breaks = false;
|
||||
auto white_space_prop = specified_style().string_or_fallback(CSS::PropertyID::WhiteSpace, "normal");
|
||||
|
||||
if (white_space_prop == "nowrap") {
|
||||
if (style().white_space() == CSS::WhiteSpace::Nowrap) {
|
||||
do_collapse = true;
|
||||
do_wrap_lines = false;
|
||||
do_wrap_breaks = false;
|
||||
} else if (white_space_prop == "pre") {
|
||||
} else if (style().white_space() == CSS::WhiteSpace::Pre) {
|
||||
do_collapse = false;
|
||||
do_wrap_lines = false;
|
||||
do_wrap_breaks = true;
|
||||
} else if (white_space_prop == "pre-line") {
|
||||
} else if (style().white_space() == CSS::WhiteSpace::PreLine) {
|
||||
do_collapse = true;
|
||||
do_wrap_lines = true;
|
||||
do_wrap_breaks = true;
|
||||
} else if (white_space_prop == "pre-wrap") {
|
||||
} else if (style().white_space() == CSS::WhiteSpace::PreWrap) {
|
||||
do_collapse = false;
|
||||
do_wrap_lines = true;
|
||||
do_wrap_breaks = true;
|
||||
|
|
Loading…
Add table
Reference in a new issue