style: Allow FontMetricsProvider to produce ex height and zero width independently.

We are always able to produce an x height, but depending on whether the
glyph exists, we sometimes can't produce a zero glyph width.

Differential Revision: https://phabricator.services.mozilla.com/D23424
This commit is contained in:
Cameron McCormack 2019-03-21 04:50:43 +00:00 committed by Emilio Cobos Álvarez
parent 39df092bce
commit d5f208e18c
3 changed files with 29 additions and 38 deletions

View file

@ -20,7 +20,7 @@ use crate::context::{PostAnimationTasks, QuirksMode, SharedStyleContext, UpdateA
use crate::data::ElementData;
use crate::dom::{LayoutIterator, NodeInfo, OpaqueNode, TDocument, TElement, TNode, TShadowRoot};
use crate::element_state::{DocumentState, ElementState};
use crate::font_metrics::{FontMetrics, FontMetricsProvider, FontMetricsQueryResult};
use crate::font_metrics::{FontMetrics, FontMetricsProvider};
use crate::gecko::data::GeckoStyleSheet;
use crate::gecko::selector_parser::{NonTSPseudoClass, PseudoElement, SelectorImpl};
use crate::gecko::snapshot_helpers;
@ -1035,10 +1035,10 @@ impl FontMetricsProvider for GeckoFontMetricsProvider {
&self,
context: &crate::values::computed::Context,
base_size: FontBaseSize,
) -> FontMetricsQueryResult {
) -> FontMetrics {
let pc = match context.device().pres_context() {
Some(pc) => pc,
None => return FontMetricsQueryResult::NotAvailable,
None => return Default::default(),
};
let size = base_size.resolve(context);
@ -1066,11 +1066,14 @@ impl FontMetricsProvider for GeckoFontMetricsProvider {
!context.in_media_query,
)
};
let metrics = FontMetrics {
x_height: Au(gecko_metrics.mXSize),
zero_advance_measure: Au(gecko_metrics.mChSize),
};
FontMetricsQueryResult::Available(metrics)
FontMetrics {
x_height: Some(Au(gecko_metrics.mXSize)),
zero_advance_measure: if gecko_metrics.mChSize >= 0 {
Some(Au(gecko_metrics.mChSize))
} else {
None
},
}
}
}