mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Reframe less on restyles that involve nonexistent first-letter frames in Gecko.
Gecko bug 1324618 part 9 servo bits: https://bugzilla.mozilla.org/show_bug.cgi?id=1324618
This commit is contained in:
parent
40dd807df3
commit
d40e27d6e5
3 changed files with 29 additions and 0 deletions
|
@ -77,6 +77,12 @@ impl PseudoElement {
|
|||
matches!(*self, PseudoElement::Before | PseudoElement::After)
|
||||
}
|
||||
|
||||
/// Whether this pseudo-element is ::first-letter.
|
||||
#[inline]
|
||||
pub fn is_first_letter(&self) -> bool {
|
||||
*self == PseudoElement::FirstLetter
|
||||
}
|
||||
|
||||
/// Whether this pseudo-element is lazily-cascaded.
|
||||
#[inline]
|
||||
pub fn is_lazy(&self) -> bool {
|
||||
|
|
|
@ -1507,9 +1507,25 @@ pub trait MatchMethods : TElement {
|
|||
// triggering any change.
|
||||
return StyleDifference::new(RestyleDamage::empty(), StyleChange::Unchanged)
|
||||
}
|
||||
// FIXME(bz): This will keep reframing replaced elements. Do we
|
||||
// need this at all? Seems like if we add/remove ::before or
|
||||
// ::after styles we would get reframed over in match_pseudos and if
|
||||
// that part didn't change and we had no frame for the
|
||||
// ::before/::after then we don't care. Need to double-check that
|
||||
// we handle the "content" and "display" properties changing
|
||||
// correctly, though.
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1376352
|
||||
return StyleDifference::new(RestyleDamage::reconstruct(), StyleChange::Changed)
|
||||
}
|
||||
|
||||
if pseudo.map_or(false, |p| p.is_first_letter()) {
|
||||
// No one cares about this pseudo, and we've checked above that
|
||||
// we're not switching from a "cares" to a "doesn't care" state
|
||||
// or vice versa.
|
||||
return StyleDifference::new(RestyleDamage::empty(),
|
||||
StyleChange::Unchanged)
|
||||
}
|
||||
|
||||
// Something else. Be conservative for now.
|
||||
warn!("Reframing due to lack of old style source: {:?}, pseudo: {:?}",
|
||||
self, pseudo);
|
||||
|
|
|
@ -38,6 +38,7 @@ pub enum PseudoElement {
|
|||
After = 0,
|
||||
Before,
|
||||
Selection,
|
||||
// If/when :first-letter is added, update is_first_letter accordingly.
|
||||
// Non-eager pseudos.
|
||||
DetailsSummary,
|
||||
DetailsContent,
|
||||
|
@ -110,6 +111,12 @@ impl PseudoElement {
|
|||
matches!(*self, PseudoElement::After | PseudoElement::Before)
|
||||
}
|
||||
|
||||
/// Whether the current pseudo element is :first-letter
|
||||
#[inline]
|
||||
pub fn is_first_letter(&self) -> bool {
|
||||
false
|
||||
}
|
||||
|
||||
/// Whether this pseudo-element is eagerly-cascaded.
|
||||
#[inline]
|
||||
pub fn is_eager(&self) -> bool {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue