mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
style: Use a single system font definition rather than two
Follow the pattern we use for system colors. Differential Revision: https://phabricator.services.mozilla.com/D108822
This commit is contained in:
parent
7da6d525ac
commit
4d2ccaf445
5 changed files with 171 additions and 200 deletions
|
@ -554,7 +554,7 @@
|
||||||
keyword = keyword=Keyword(name, values, **keyword_kwargs)
|
keyword = keyword=Keyword(name, values, **keyword_kwargs)
|
||||||
%>
|
%>
|
||||||
<%call expr="longhand(name, keyword=Keyword(name, values, **keyword_kwargs), **kwargs)">
|
<%call expr="longhand(name, keyword=Keyword(name, values, **keyword_kwargs), **kwargs)">
|
||||||
use crate::properties::longhands::system_font::SystemFont;
|
use crate::values::specified::font::SystemFont;
|
||||||
|
|
||||||
pub mod computed_value {
|
pub mod computed_value {
|
||||||
#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
|
#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
|
||||||
|
|
|
@ -288,208 +288,153 @@ ${helpers.predefined_type(
|
||||||
)}
|
)}
|
||||||
|
|
||||||
% if engine == "gecko":
|
% if engine == "gecko":
|
||||||
pub mod system_font {
|
pub mod system_font {
|
||||||
//! We deal with system fonts here
|
//! We deal with system fonts here
|
||||||
//!
|
//!
|
||||||
//! System fonts can only be set as a group via the font shorthand.
|
//! System fonts can only be set as a group via the font shorthand.
|
||||||
//! They resolve at compute time (not parse time -- this lets the
|
//! They resolve at compute time (not parse time -- this lets the
|
||||||
//! browser respond to changes to the OS font settings).
|
//! browser respond to changes to the OS font settings).
|
||||||
//!
|
//!
|
||||||
//! While Gecko handles these as a separate property and keyword
|
//! While Gecko handles these as a separate property and keyword
|
||||||
//! values on each property indicating that the font should be picked
|
//! values on each property indicating that the font should be picked
|
||||||
//! from the -x-system-font property, we avoid this. Instead,
|
//! from the -x-system-font property, we avoid this. Instead,
|
||||||
//! each font longhand has a special SystemFont variant which contains
|
//! each font longhand has a special SystemFont variant which contains
|
||||||
//! the specified system font. When the cascade function (in helpers)
|
//! the specified system font. When the cascade function (in helpers)
|
||||||
//! detects that a value has a system font, it will resolve it, and
|
//! detects that a value has a system font, it will resolve it, and
|
||||||
//! cache it on the ComputedValues. After this, it can be just fetched
|
//! cache it on the ComputedValues. After this, it can be just fetched
|
||||||
//! whenever a font longhand on the same element needs the system font.
|
//! whenever a font longhand on the same element needs the system font.
|
||||||
//!
|
//!
|
||||||
//! When a longhand property is holding a SystemFont, it's serialized
|
//! When a longhand property is holding a SystemFont, it's serialized
|
||||||
//! to an empty string as if its value comes from a shorthand with
|
//! to an empty string as if its value comes from a shorthand with
|
||||||
//! variable reference. We may want to improve this behavior at some
|
//! variable reference. We may want to improve this behavior at some
|
||||||
//! point. See also https://github.com/w3c/csswg-drafts/issues/1586.
|
//! point. See also https://github.com/w3c/csswg-drafts/issues/1586.
|
||||||
|
|
||||||
use cssparser::{Parser, ToCss};
|
use crate::values::computed::font::GenericFontFamily;
|
||||||
use crate::values::computed::font::GenericFontFamily;
|
use crate::properties::longhands;
|
||||||
use crate::properties::longhands;
|
use std::hash::{Hash, Hasher};
|
||||||
use std::fmt;
|
use crate::values::computed::{ToComputedValue, Context};
|
||||||
use std::hash::{Hash, Hasher};
|
use crate::values::specified::font::SystemFont;
|
||||||
use style_traits::ParseError;
|
|
||||||
use crate::values::computed::{ToComputedValue, Context};
|
|
||||||
|
|
||||||
<%
|
<%
|
||||||
system_fonts = """caption icon menu message-box small-caption status-bar
|
kw_font_props = """font_variant_caps
|
||||||
-moz-window -moz-document -moz-workspace -moz-desktop
|
font_kerning font_variant_position font_variant_ligatures
|
||||||
-moz-info -moz-dialog -moz-button -moz-pull-down-menu
|
font_variant_east_asian font_variant_numeric
|
||||||
-moz-list -moz-field""".split()
|
font_optical_sizing""".split()
|
||||||
kw_font_props = """font_variant_caps
|
kw_cast = """font_variant_caps font_kerning font_variant_position
|
||||||
font_kerning font_variant_position font_variant_ligatures
|
font_optical_sizing""".split()
|
||||||
font_variant_east_asian font_variant_numeric
|
%>
|
||||||
font_optical_sizing""".split()
|
|
||||||
kw_cast = """font_variant_caps font_kerning font_variant_position
|
|
||||||
font_optical_sizing""".split()
|
|
||||||
%>
|
|
||||||
#[derive(Clone, Copy, Debug, Eq, Hash, MallocSizeOf, PartialEq,
|
|
||||||
SpecifiedValueInfo, ToCss, ToShmem)]
|
|
||||||
pub enum SystemFont {
|
|
||||||
% for font in system_fonts:
|
|
||||||
${to_camel_case(font)},
|
|
||||||
% endfor
|
|
||||||
}
|
|
||||||
|
|
||||||
// ComputedValues are compared at times
|
// ComputedValues are compared at times
|
||||||
// so we need these impls. We don't want to
|
// so we need these impls. We don't want to
|
||||||
// add Eq to Number (which contains a float)
|
// add Eq to Number (which contains a float)
|
||||||
// so instead we have an eq impl which skips the
|
// so instead we have an eq impl which skips the
|
||||||
// cached values
|
// cached values
|
||||||
impl PartialEq for ComputedSystemFont {
|
impl PartialEq for ComputedSystemFont {
|
||||||
fn eq(&self, other: &Self) -> bool {
|
fn eq(&self, other: &Self) -> bool {
|
||||||
self.system_font == other.system_font
|
self.system_font == other.system_font
|
||||||
}
|
|
||||||
}
|
|
||||||
impl Eq for ComputedSystemFont {}
|
|
||||||
|
|
||||||
impl Hash for ComputedSystemFont {
|
|
||||||
fn hash<H: Hasher>(&self, hasher: &mut H) {
|
|
||||||
self.system_font.hash(hasher)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ToComputedValue for SystemFont {
|
|
||||||
type ComputedValue = ComputedSystemFont;
|
|
||||||
|
|
||||||
fn to_computed_value(&self, cx: &Context) -> Self::ComputedValue {
|
|
||||||
use crate::gecko_bindings::bindings;
|
|
||||||
use crate::gecko_bindings::structs::{LookAndFeel_FontID, nsFont};
|
|
||||||
use std::mem;
|
|
||||||
use crate::values::computed::Percentage;
|
|
||||||
use crate::values::specified::font::KeywordInfo;
|
|
||||||
use crate::values::computed::font::{FontFamily, FontSize, FontStretch, FontStyle, FontFamilyList};
|
|
||||||
use crate::values::generics::NonNegative;
|
|
||||||
|
|
||||||
let id = match *self {
|
|
||||||
% for font in system_fonts:
|
|
||||||
SystemFont::${to_camel_case(font)} => {
|
|
||||||
LookAndFeel_FontID::${to_camel_case(font.replace("-moz-", ""))}
|
|
||||||
}
|
|
||||||
% endfor
|
|
||||||
};
|
|
||||||
|
|
||||||
let mut system = mem::MaybeUninit::<nsFont>::uninit();
|
|
||||||
let system = unsafe {
|
|
||||||
bindings::Gecko_nsFont_InitSystem(
|
|
||||||
system.as_mut_ptr(),
|
|
||||||
id as i32,
|
|
||||||
cx.style().get_font().gecko(),
|
|
||||||
cx.device().document()
|
|
||||||
);
|
|
||||||
&mut *system.as_mut_ptr()
|
|
||||||
};
|
|
||||||
let font_weight = longhands::font_weight::computed_value::T::from_gecko_weight(system.weight);
|
|
||||||
let font_stretch = FontStretch(NonNegative(Percentage(unsafe {
|
|
||||||
bindings::Gecko_FontStretch_ToFloat(system.stretch)
|
|
||||||
})));
|
|
||||||
let font_style = FontStyle::from_gecko(system.style);
|
|
||||||
let ret = ComputedSystemFont {
|
|
||||||
font_family: FontFamily {
|
|
||||||
families: FontFamilyList::SharedFontList(
|
|
||||||
unsafe { system.fontlist.mFontlist.mBasePtr.to_safe() }
|
|
||||||
),
|
|
||||||
is_system_font: true,
|
|
||||||
},
|
|
||||||
font_size: FontSize {
|
|
||||||
size: NonNegative(cx.maybe_zoom_text(system.size.0)),
|
|
||||||
keyword_info: KeywordInfo::none()
|
|
||||||
},
|
|
||||||
font_weight,
|
|
||||||
font_stretch,
|
|
||||||
font_style,
|
|
||||||
font_size_adjust: longhands::font_size_adjust::computed_value
|
|
||||||
::T::from_gecko_adjust(system.sizeAdjust),
|
|
||||||
% for kwprop in kw_font_props:
|
|
||||||
${kwprop}: longhands::${kwprop}::computed_value::T::from_gecko_keyword(
|
|
||||||
system.${to_camel_case_lower(kwprop.replace('font_', ''))}
|
|
||||||
% if kwprop in kw_cast:
|
|
||||||
as u32
|
|
||||||
% endif
|
|
||||||
),
|
|
||||||
% endfor
|
|
||||||
font_language_override: longhands::font_language_override::computed_value
|
|
||||||
::T(system.languageOverride),
|
|
||||||
font_feature_settings: longhands::font_feature_settings::get_initial_value(),
|
|
||||||
font_variation_settings: longhands::font_variation_settings::get_initial_value(),
|
|
||||||
font_variant_alternates: longhands::font_variant_alternates::get_initial_value(),
|
|
||||||
system_font: *self,
|
|
||||||
default_font_type: system.fontlist.mDefaultFontType,
|
|
||||||
};
|
|
||||||
unsafe { bindings::Gecko_nsFont_Destroy(system); }
|
|
||||||
ret
|
|
||||||
}
|
|
||||||
|
|
||||||
fn from_computed_value(_: &ComputedSystemFont) -> Self {
|
|
||||||
unreachable!()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
/// Compute and cache a system font
|
|
||||||
///
|
|
||||||
/// Must be called before attempting to compute a system font
|
|
||||||
/// specified value
|
|
||||||
pub fn resolve_system_font(system: SystemFont, context: &mut Context) {
|
|
||||||
// Checking if context.cached_system_font.is_none() isn't enough,
|
|
||||||
// if animating from one system font to another the cached system font
|
|
||||||
// may change
|
|
||||||
if Some(system) != context.cached_system_font.as_ref().map(|x| x.system_font) {
|
|
||||||
let computed = system.to_computed_value(context);
|
|
||||||
context.cached_system_font = Some(computed);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
|
||||||
pub struct ComputedSystemFont {
|
|
||||||
% for name in SYSTEM_FONT_LONGHANDS:
|
|
||||||
pub ${name}: longhands::${name}::computed_value::T,
|
|
||||||
% endfor
|
|
||||||
pub system_font: SystemFont,
|
|
||||||
pub default_font_type: GenericFontFamily,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl SystemFont {
|
|
||||||
pub fn parse<'i, 't>(input: &mut Parser<'i, 't>) -> Result<Self, ParseError<'i>> {
|
|
||||||
try_match_ident_ignore_ascii_case! { input,
|
|
||||||
% for font in system_fonts:
|
|
||||||
"${font}" => Ok(SystemFont::${to_camel_case(font)}),
|
|
||||||
% endfor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ToCss for SystemFont {
|
|
||||||
fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write {
|
|
||||||
// We may want to do something better in the future, see
|
|
||||||
// w3c/csswg-drafts#1586.
|
|
||||||
dest.write_str("-moz-use-system-font")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
% else:
|
impl Eq for ComputedSystemFont {}
|
||||||
pub mod system_font {
|
|
||||||
use cssparser::Parser;
|
|
||||||
|
|
||||||
// We don't parse system fonts, but in the interest of not littering
|
impl Hash for ComputedSystemFont {
|
||||||
// a lot of code with `if engine == "gecko"` conditionals, we have a
|
fn hash<H: Hasher>(&self, hasher: &mut H) {
|
||||||
// dummy system font module that does nothing
|
self.system_font.hash(hasher)
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, Eq, Hash, MallocSizeOf, PartialEq, SpecifiedValueInfo, ToCss, ToShmem)]
|
|
||||||
/// void enum for system font, can never exist
|
|
||||||
pub enum SystemFont {}
|
|
||||||
impl SystemFont {
|
|
||||||
pub fn parse(_: &mut Parser) -> Result<Self, ()> {
|
|
||||||
Err(())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl ToComputedValue for SystemFont {
|
||||||
|
type ComputedValue = ComputedSystemFont;
|
||||||
|
|
||||||
|
fn to_computed_value(&self, cx: &Context) -> Self::ComputedValue {
|
||||||
|
use crate::gecko_bindings::bindings;
|
||||||
|
use crate::gecko_bindings::structs::nsFont;
|
||||||
|
use std::mem;
|
||||||
|
use crate::values::computed::Percentage;
|
||||||
|
use crate::values::specified::font::KeywordInfo;
|
||||||
|
use crate::values::computed::font::{FontFamily, FontSize, FontStretch, FontStyle, FontFamilyList};
|
||||||
|
use crate::values::generics::NonNegative;
|
||||||
|
|
||||||
|
let mut system = mem::MaybeUninit::<nsFont>::uninit();
|
||||||
|
let system = unsafe {
|
||||||
|
bindings::Gecko_nsFont_InitSystem(
|
||||||
|
system.as_mut_ptr(),
|
||||||
|
*self,
|
||||||
|
cx.style().get_font().gecko(),
|
||||||
|
cx.device().document()
|
||||||
|
);
|
||||||
|
&mut *system.as_mut_ptr()
|
||||||
|
};
|
||||||
|
let font_weight = longhands::font_weight::computed_value::T::from_gecko_weight(system.weight);
|
||||||
|
let font_stretch = FontStretch(NonNegative(Percentage(unsafe {
|
||||||
|
bindings::Gecko_FontStretch_ToFloat(system.stretch)
|
||||||
|
})));
|
||||||
|
let font_style = FontStyle::from_gecko(system.style);
|
||||||
|
let ret = ComputedSystemFont {
|
||||||
|
font_family: FontFamily {
|
||||||
|
families: FontFamilyList::SharedFontList(
|
||||||
|
unsafe { system.fontlist.mFontlist.mBasePtr.to_safe() }
|
||||||
|
),
|
||||||
|
is_system_font: true,
|
||||||
|
},
|
||||||
|
font_size: FontSize {
|
||||||
|
size: NonNegative(cx.maybe_zoom_text(system.size.0)),
|
||||||
|
keyword_info: KeywordInfo::none()
|
||||||
|
},
|
||||||
|
font_weight,
|
||||||
|
font_stretch,
|
||||||
|
font_style,
|
||||||
|
font_size_adjust: longhands::font_size_adjust::computed_value
|
||||||
|
::T::from_gecko_adjust(system.sizeAdjust),
|
||||||
|
% for kwprop in kw_font_props:
|
||||||
|
${kwprop}: longhands::${kwprop}::computed_value::T::from_gecko_keyword(
|
||||||
|
system.${to_camel_case_lower(kwprop.replace('font_', ''))}
|
||||||
|
% if kwprop in kw_cast:
|
||||||
|
as u32
|
||||||
|
% endif
|
||||||
|
),
|
||||||
|
% endfor
|
||||||
|
font_language_override: longhands::font_language_override::computed_value
|
||||||
|
::T(system.languageOverride),
|
||||||
|
font_feature_settings: longhands::font_feature_settings::get_initial_value(),
|
||||||
|
font_variation_settings: longhands::font_variation_settings::get_initial_value(),
|
||||||
|
font_variant_alternates: longhands::font_variant_alternates::get_initial_value(),
|
||||||
|
system_font: *self,
|
||||||
|
default_font_type: system.fontlist.mDefaultFontType,
|
||||||
|
};
|
||||||
|
unsafe { bindings::Gecko_nsFont_Destroy(system); }
|
||||||
|
ret
|
||||||
|
}
|
||||||
|
|
||||||
|
fn from_computed_value(_: &ComputedSystemFont) -> Self {
|
||||||
|
unreachable!()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
/// Compute and cache a system font
|
||||||
|
///
|
||||||
|
/// Must be called before attempting to compute a system font
|
||||||
|
/// specified value
|
||||||
|
pub fn resolve_system_font(system: SystemFont, context: &mut Context) {
|
||||||
|
// Checking if context.cached_system_font.is_none() isn't enough,
|
||||||
|
// if animating from one system font to another the cached system font
|
||||||
|
// may change
|
||||||
|
if Some(system) != context.cached_system_font.as_ref().map(|x| x.system_font) {
|
||||||
|
let computed = system.to_computed_value(context);
|
||||||
|
context.cached_system_font = Some(computed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub struct ComputedSystemFont {
|
||||||
|
% for name in SYSTEM_FONT_LONGHANDS:
|
||||||
|
pub ${name}: longhands::${name}::computed_value::T,
|
||||||
|
% endfor
|
||||||
|
pub system_font: SystemFont,
|
||||||
|
pub default_font_type: GenericFontFamily,
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
% endif
|
% endif
|
||||||
|
|
||||||
${helpers.single_keyword(
|
${helpers.single_keyword(
|
||||||
|
|
|
@ -32,7 +32,6 @@ use crate::computed_value_flags::*;
|
||||||
use crate::hash::FxHashMap;
|
use crate::hash::FxHashMap;
|
||||||
use crate::media_queries::Device;
|
use crate::media_queries::Device;
|
||||||
use crate::parser::ParserContext;
|
use crate::parser::ParserContext;
|
||||||
use crate::properties::longhands::system_font::SystemFont;
|
|
||||||
use crate::selector_parser::PseudoElement;
|
use crate::selector_parser::PseudoElement;
|
||||||
#[cfg(feature = "servo")] use servo_config::prefs;
|
#[cfg(feature = "servo")] use servo_config::prefs;
|
||||||
use style_traits::{CssWriter, KeywordsCollectFn, ParseError, ParsingMode};
|
use style_traits::{CssWriter, KeywordsCollectFn, ParseError, ParsingMode};
|
||||||
|
@ -44,6 +43,7 @@ use crate::values::generics::text::LineHeight;
|
||||||
use crate::values::{computed, resolved};
|
use crate::values::{computed, resolved};
|
||||||
use crate::values::computed::NonNegativeLength;
|
use crate::values::computed::NonNegativeLength;
|
||||||
use crate::values::serialize_atom_name;
|
use crate::values::serialize_atom_name;
|
||||||
|
use crate::values::specified::font::SystemFont;
|
||||||
use crate::rule_tree::StrongRuleNode;
|
use crate::rule_tree::StrongRuleNode;
|
||||||
use crate::Zero;
|
use crate::Zero;
|
||||||
use crate::str::{CssString, CssStringWriter};
|
use crate::str::{CssString, CssStringWriter};
|
||||||
|
|
|
@ -34,11 +34,11 @@
|
||||||
use crate::parser::Parse;
|
use crate::parser::Parse;
|
||||||
use crate::properties::longhands::{font_family, font_style, font_weight, font_stretch};
|
use crate::properties::longhands::{font_family, font_style, font_weight, font_stretch};
|
||||||
use crate::properties::longhands::font_variant_caps;
|
use crate::properties::longhands::font_variant_caps;
|
||||||
#[cfg(feature = "gecko")]
|
|
||||||
use crate::properties::longhands::system_font::SystemFont;
|
|
||||||
use crate::values::specified::text::LineHeight;
|
use crate::values::specified::text::LineHeight;
|
||||||
use crate::values::specified::FontSize;
|
use crate::values::specified::FontSize;
|
||||||
use crate::values::specified::font::{FontStretch, FontStretchKeyword};
|
use crate::values::specified::font::{FontStretch, FontStretchKeyword};
|
||||||
|
#[cfg(feature = "gecko")]
|
||||||
|
use crate::values::specified::font::SystemFont;
|
||||||
|
|
||||||
<%
|
<%
|
||||||
gecko_sub_properties = "kerning language_override size_adjust \
|
gecko_sub_properties = "kerning language_override size_adjust \
|
||||||
|
@ -289,7 +289,7 @@
|
||||||
% for p in subprops_for_value_info:
|
% for p in subprops_for_value_info:
|
||||||
${p}::collect_completion_keywords(f);
|
${p}::collect_completion_keywords(f);
|
||||||
% endfor
|
% endfor
|
||||||
<longhands::system_font::SystemFont as SpecifiedValueInfo>::collect_completion_keywords(f);
|
<SystemFont as SpecifiedValueInfo>::collect_completion_keywords(f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</%helpers:shorthand>
|
</%helpers:shorthand>
|
||||||
|
|
|
@ -9,7 +9,6 @@ use crate::context::QuirksMode;
|
||||||
#[cfg(feature = "gecko")]
|
#[cfg(feature = "gecko")]
|
||||||
use crate::gecko_bindings::bindings;
|
use crate::gecko_bindings::bindings;
|
||||||
use crate::parser::{Parse, ParserContext};
|
use crate::parser::{Parse, ParserContext};
|
||||||
use crate::properties::longhands::system_font::SystemFont;
|
|
||||||
use crate::values::computed::font::{FamilyName, FontFamilyList, FontStyleAngle, SingleFontFamily};
|
use crate::values::computed::font::{FamilyName, FontFamilyList, FontStyleAngle, SingleFontFamily};
|
||||||
use crate::values::computed::{font as computed, Length, NonNegativeLength};
|
use crate::values::computed::{font as computed, Length, NonNegativeLength};
|
||||||
use crate::values::computed::{Angle as ComputedAngle, Percentage as ComputedPercentage};
|
use crate::values::computed::{Angle as ComputedAngle, Percentage as ComputedPercentage};
|
||||||
|
@ -65,6 +64,33 @@ macro_rules! system_font_methods {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// System fonts.
|
||||||
|
#[repr(u8)]
|
||||||
|
#[derive(
|
||||||
|
Clone, Copy, Debug, Eq, Hash, MallocSizeOf, Parse, PartialEq, SpecifiedValueInfo, ToCss, ToShmem
|
||||||
|
)]
|
||||||
|
#[allow(missing_docs)]
|
||||||
|
pub enum SystemFont {
|
||||||
|
Caption,
|
||||||
|
Icon,
|
||||||
|
Menu,
|
||||||
|
MessageBox,
|
||||||
|
SmallCaption,
|
||||||
|
StatusBar,
|
||||||
|
MozWindow,
|
||||||
|
MozDocument,
|
||||||
|
MozWorkspace,
|
||||||
|
MozDesktop,
|
||||||
|
MozInfo,
|
||||||
|
MozDialog,
|
||||||
|
MozButton,
|
||||||
|
MozPullDownMenu,
|
||||||
|
MozList,
|
||||||
|
MozField,
|
||||||
|
#[css(skip)]
|
||||||
|
End, // Just for indexing purposes.
|
||||||
|
}
|
||||||
|
|
||||||
const DEFAULT_SCRIPT_MIN_SIZE_PT: u32 = 8;
|
const DEFAULT_SCRIPT_MIN_SIZE_PT: u32 = 8;
|
||||||
const DEFAULT_SCRIPT_SIZE_MULTIPLIER: f64 = 0.71;
|
const DEFAULT_SCRIPT_SIZE_MULTIPLIER: f64 = 0.71;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue