From fc10c6477930b874dc5d1965e3570eb5aaef4bb0 Mon Sep 17 00:00:00 2001 From: Jonathan Kew Date: Fri, 7 Oct 2022 23:00:46 +0000 Subject: [PATCH] style: Connect CSS font-palette features to rendering via the presContext Differential Revision: https://phabricator.services.mozilla.com/D157959 --- .../stylesheets/font_palette_values_rule.rs | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/components/style/stylesheets/font_palette_values_rule.rs b/components/style/stylesheets/font_palette_values_rule.rs index 95d62443321..a5422ce7250 100644 --- a/components/style/stylesheets/font_palette_values_rule.rs +++ b/components/style/stylesheets/font_palette_values_rule.rs @@ -8,6 +8,11 @@ use crate::error_reporting::ContextualParseError; use crate::parser::{Parse, ParserContext}; +use crate::gecko_bindings::bindings::Gecko_AppendPaletteValueHashEntry; +use crate::gecko_bindings::bindings::{Gecko_SetFontPaletteBase, Gecko_SetFontPaletteOverride}; +use crate::gecko_bindings::structs::gfx::FontPaletteValueSet; +use crate::gecko_bindings::structs::gfx::FontPaletteValueSet_PaletteValues_kLight; +use crate::gecko_bindings::structs::gfx::FontPaletteValueSet_PaletteValues_kDark; use crate::shared_lock::{SharedRwLockReadGuard, ToCssWithGuard}; use crate::str::CssStringWriter; use crate::values::computed::font::FamilyName; @@ -152,6 +157,38 @@ impl FontPaletteValuesRule { } Ok(()) } + + /// Convert to Gecko FontPaletteValueSet. + pub fn to_gecko_palette_value_set(&self, dest: *mut FontPaletteValueSet) { + for ref family in self.family_names.iter() { + let family = family.name.to_ascii_lowercase(); + let palette_values = unsafe { + Gecko_AppendPaletteValueHashEntry( + dest, + family.as_ptr(), + self.name.0.as_ptr() + ) + }; + if let Some(base_palette) = &self.base_palette { + unsafe { + Gecko_SetFontPaletteBase(palette_values, match &base_palette { + FontPaletteBase::Light => FontPaletteValueSet_PaletteValues_kLight, + FontPaletteBase::Dark => FontPaletteValueSet_PaletteValues_kDark, + FontPaletteBase::Index(i) => i.0.value() as i32, + }); + } + } + for c in &self.override_colors { + if let SpecifiedColor::Numeric { parsed, authored: _ } = &c.color { + unsafe { + Gecko_SetFontPaletteOverride(palette_values, + c.index.0.value(), + *parsed); + } + } + } + } + } } impl ToCssWithGuard for FontPaletteValuesRule {