LibWeb: Handle Auto resolution within Page::preferred_color_scheme

Handling this here means we don't have to it within individual callers
This commit is contained in:
Callum Law 2025-07-19 18:56:36 +12:00 committed by Sam Atkins
parent a19a6deaa4
commit e0e00220fe
3 changed files with 9 additions and 9 deletions

View File

@ -370,9 +370,8 @@ Optional<CSS::MediaFeatureValue> Window::query_media_feature(CSS::MediaFeatureID
return CSS::MediaFeatureValue(CSS::Keyword::Light);
case CSS::PreferredColorScheme::Dark:
return CSS::MediaFeatureValue(CSS::Keyword::Dark);
case CSS::PreferredColorScheme::Auto:
default:
return CSS::MediaFeatureValue(page().palette().is_dark() ? CSS::Keyword::Dark : CSS::Keyword::Light);
VERIFY_NOT_REACHED();
}
}
case CSS::MediaFeatureID::PrefersContrast:

View File

@ -375,12 +375,7 @@ void NodeWithStyle::apply_style(CSS::ComputedProperties const& computed_style)
auto& computed_values = mutable_computed_values();
// NOTE: color-scheme must be set first to ensure system colors can be resolved correctly.
auto preferred_color_scheme = document().page().preferred_color_scheme();
// FIXME: We can't just check for Auto because page().preferred_color_scheme() returns garbage data after startup.
if (preferred_color_scheme != CSS::PreferredColorScheme::Dark && preferred_color_scheme != CSS::PreferredColorScheme::Light) {
preferred_color_scheme = document().page().palette().is_dark() ? CSS::PreferredColorScheme::Dark : CSS::PreferredColorScheme::Light;
}
computed_values.set_color_scheme(computed_style.color_scheme(preferred_color_scheme, document().supported_color_schemes()));
computed_values.set_color_scheme(computed_style.color_scheme(document().page().preferred_color_scheme(), document().supported_color_schemes()));
// NOTE: We have to be careful that font-related properties get set in the right order.
// m_font is used by Length::to_px() when resolving sizes against this layout node.

View File

@ -116,7 +116,13 @@ CSSPixelRect Page::web_exposed_screen_area() const
CSS::PreferredColorScheme Page::preferred_color_scheme() const
{
return m_client->preferred_color_scheme();
auto preferred_color_scheme = m_client->preferred_color_scheme();
// FIXME: We can't just check for Auto because page().preferred_color_scheme() returns garbage data after startup.
if (preferred_color_scheme != CSS::PreferredColorScheme::Dark && preferred_color_scheme != CSS::PreferredColorScheme::Light)
preferred_color_scheme = palette().is_dark() ? CSS::PreferredColorScheme::Dark : CSS::PreferredColorScheme::Light;
return preferred_color_scheme;
}
CSS::PreferredContrast Page::preferred_contrast() const