From 6d065eaef57fb1d3c15bfcc2925c7b868d9f5343 Mon Sep 17 00:00:00 2001 From: Yuri Kobets Date: Sun, 5 Nov 2023 17:04:28 +0300 Subject: flex layout - the first implementation --- src/css_properties.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/css_properties.cpp') diff --git a/src/css_properties.cpp b/src/css_properties.cpp index 2696ae28..99b6cd92 100644 --- a/src/css_properties.cpp +++ b/src/css_properties.cpp @@ -405,8 +405,8 @@ void litehtml::css_properties::compute_flex(const element* el, const document::p { m_flex_grow = el->get_number_property(_flex_grow_, false, 0, offset(m_flex_grow)); m_flex_shrink = el->get_number_property(_flex_shrink_, false, 1, offset(m_flex_shrink)); - m_flex_align_self = (flex_align_self) el->get_enum_property(_align_self_, false, flex_align_self_auto, offset(m_flex_align_self)); - m_flex_basis = el->get_length_property(_flex_shrink_, false, css_length::predef_value(flex_basis_auto), offset(m_flex_basis)); + m_flex_align_self = (flex_align_items) el->get_enum_property(_align_self_, false, flex_align_items_auto, offset(m_flex_align_self)); + m_flex_basis = el->get_length_property(_flex_basis_, false, css_length::predef_value(flex_basis_auto), offset(m_flex_basis)); doc->cvt_units(m_flex_basis, get_font_size()); if(m_display == display_inline || m_display == display_inline_block) { -- cgit v1.2.3 From efe03ce82764bc82a5936308561486b95eff11d3 Mon Sep 17 00:00:00 2001 From: Yuri Kobets Date: Wed, 20 Dec 2023 01:16:57 +0300 Subject: Some fixes * fixed possible stuck in flex rendering * fixed crash in font css parsing * some fixes in render_item::get_element_by_point --- src/css_properties.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/css_properties.cpp') diff --git a/src/css_properties.cpp b/src/css_properties.cpp index 99b6cd92..7122e4ba 100644 --- a/src/css_properties.cpp +++ b/src/css_properties.cpp @@ -391,7 +391,7 @@ void litehtml::css_properties::compute_background(const element* el, const docum void litehtml::css_properties::compute_flex(const element* el, const document::ptr& doc) { - if (m_display == display_flex) + if (m_display == display_flex || m_display == display_inline_flex) { m_flex_direction = (flex_direction) el->get_enum_property(_flex_direction_, false, flex_direction_row, offset(m_flex_direction)); m_flex_wrap = (flex_wrap) el->get_enum_property(_flex_wrap_, false, flex_wrap_nowrap, offset(m_flex_wrap)); @@ -401,7 +401,7 @@ void litehtml::css_properties::compute_flex(const element* el, const document::p m_flex_align_content = (flex_align_content) el->get_enum_property(_align_content_, false, flex_align_content_stretch, offset(m_flex_align_content)); } auto parent = el->parent(); - if (parent && parent->css().m_display == display_flex) + if (parent && (parent->css().m_display == display_flex || parent->css().m_display == display_inline_flex)) { m_flex_grow = el->get_number_property(_flex_grow_, false, 0, offset(m_flex_grow)); m_flex_shrink = el->get_number_property(_flex_shrink_, false, 1, offset(m_flex_shrink)); -- cgit v1.2.3 From 90b3dff03c1c57e75753c7b829b5699b823f74ab Mon Sep 17 00:00:00 2001 From: Yuri Kobets Date: Thu, 21 Dec 2023 02:24:11 +0300 Subject: added support for start, end values for align_items css property --- src/css_properties.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/css_properties.cpp') diff --git a/src/css_properties.cpp b/src/css_properties.cpp index 7122e4ba..3db20071 100644 --- a/src/css_properties.cpp +++ b/src/css_properties.cpp @@ -397,7 +397,7 @@ void litehtml::css_properties::compute_flex(const element* el, const document::p m_flex_wrap = (flex_wrap) el->get_enum_property(_flex_wrap_, false, flex_wrap_nowrap, offset(m_flex_wrap)); m_flex_justify_content = (flex_justify_content) el->get_enum_property(_justify_content_, false, flex_justify_content_flex_start, offset(m_flex_justify_content)); - m_flex_align_items = (flex_align_items) el->get_enum_property(_align_items_, false, flex_align_items_stretch, offset(m_flex_align_items)); + m_flex_align_items = (flex_align_items) el->get_enum_property(_align_items_, false, flex_align_items_flex_normal, offset(m_flex_align_items)); m_flex_align_content = (flex_align_content) el->get_enum_property(_align_content_, false, flex_align_content_stretch, offset(m_flex_align_content)); } auto parent = el->parent(); -- cgit v1.2.3 From bf940939d8da6fb9b7390cbc2db90dde9a7ce0a4 Mon Sep 17 00:00:00 2001 From: Yuri Kobets Date: Sat, 23 Dec 2023 03:49:38 +0300 Subject: flex: added order property support --- src/css_properties.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/css_properties.cpp') diff --git a/src/css_properties.cpp b/src/css_properties.cpp index 3db20071..1dc16dab 100644 --- a/src/css_properties.cpp +++ b/src/css_properties.cpp @@ -240,6 +240,8 @@ void litehtml::css_properties::compute(const element* el, const document::ptr& d doc->container()->load_image(m_list_style_image.c_str(), m_list_style_image_baseurl.c_str(), true); } + m_order = el->get_int_property(_order_, false, 0, offset(m_order)); + compute_background(el, doc); compute_flex(el, doc); } -- cgit v1.2.3 From 76ffcfa84110bc787da6d2ea6b8cb7e9bbd5ddc1 Mon Sep 17 00:00:00 2001 From: Yuri Kobets Date: Thu, 28 Dec 2023 02:54:09 +0300 Subject: flex: more flex tests passed --- src/css_properties.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/css_properties.cpp') diff --git a/src/css_properties.cpp b/src/css_properties.cpp index 1dc16dab..9df08e35 100644 --- a/src/css_properties.cpp +++ b/src/css_properties.cpp @@ -409,6 +409,11 @@ void litehtml::css_properties::compute_flex(const element* el, const document::p m_flex_shrink = el->get_number_property(_flex_shrink_, false, 1, offset(m_flex_shrink)); m_flex_align_self = (flex_align_items) el->get_enum_property(_align_self_, false, flex_align_items_auto, offset(m_flex_align_self)); m_flex_basis = el->get_length_property(_flex_basis_, false, css_length::predef_value(flex_basis_auto), offset(m_flex_basis)); + if(!m_flex_basis.is_predefined() && m_flex_basis.units() == css_units_none) + { + // flex-basis property must contain units + m_flex_basis.predef(flex_basis_auto); + } doc->cvt_units(m_flex_basis, get_font_size()); if(m_display == display_inline || m_display == display_inline_block) { -- cgit v1.2.3 From 2289e1be28a001c96f92468516f3c8b3fa86bf62 Mon Sep 17 00:00:00 2001 From: Yuri Kobets Date: Sun, 7 Jan 2024 01:12:13 +0300 Subject: flex: "flex-basis: 0" is valid value --- src/css_properties.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/css_properties.cpp') diff --git a/src/css_properties.cpp b/src/css_properties.cpp index 9df08e35..d0236110 100644 --- a/src/css_properties.cpp +++ b/src/css_properties.cpp @@ -409,7 +409,7 @@ void litehtml::css_properties::compute_flex(const element* el, const document::p m_flex_shrink = el->get_number_property(_flex_shrink_, false, 1, offset(m_flex_shrink)); m_flex_align_self = (flex_align_items) el->get_enum_property(_align_self_, false, flex_align_items_auto, offset(m_flex_align_self)); m_flex_basis = el->get_length_property(_flex_basis_, false, css_length::predef_value(flex_basis_auto), offset(m_flex_basis)); - if(!m_flex_basis.is_predefined() && m_flex_basis.units() == css_units_none) + if(!m_flex_basis.is_predefined() && m_flex_basis.units() == css_units_none && m_flex_basis.val() != 0) { // flex-basis property must contain units m_flex_basis.predef(flex_basis_auto); -- cgit v1.2.3 From f5cdc4f24087ee68f3bad3ffbc1cd28cc9a3f4ad Mon Sep 17 00:00:00 2001 From: Yuri Kobets Date: Sun, 7 Jan 2024 18:15:26 +0300 Subject: flex: support for 'align-self: inherit' --- src/css_properties.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/css_properties.cpp') diff --git a/src/css_properties.cpp b/src/css_properties.cpp index d0236110..a3b458eb 100644 --- a/src/css_properties.cpp +++ b/src/css_properties.cpp @@ -402,12 +402,12 @@ void litehtml::css_properties::compute_flex(const element* el, const document::p m_flex_align_items = (flex_align_items) el->get_enum_property(_align_items_, false, flex_align_items_flex_normal, offset(m_flex_align_items)); m_flex_align_content = (flex_align_content) el->get_enum_property(_align_content_, false, flex_align_content_stretch, offset(m_flex_align_content)); } + m_flex_align_self = (flex_align_items) el->get_enum_property(_align_self_, false, flex_align_items_auto, offset(m_flex_align_self)); auto parent = el->parent(); if (parent && (parent->css().m_display == display_flex || parent->css().m_display == display_inline_flex)) { m_flex_grow = el->get_number_property(_flex_grow_, false, 0, offset(m_flex_grow)); m_flex_shrink = el->get_number_property(_flex_shrink_, false, 1, offset(m_flex_shrink)); - m_flex_align_self = (flex_align_items) el->get_enum_property(_align_self_, false, flex_align_items_auto, offset(m_flex_align_self)); m_flex_basis = el->get_length_property(_flex_basis_, false, css_length::predef_value(flex_basis_auto), offset(m_flex_basis)); if(!m_flex_basis.is_predefined() && m_flex_basis.units() == css_units_none && m_flex_basis.val() != 0) { -- cgit v1.2.3