зеркало из https://github.com/mozilla/gecko-dev.git
servo: Merge #18862 - stylo: Use stylo for Element::Closest (from emilio:stylo-element-closest); r=heycam
Bug: 1407952 Reviewed-by: heycam MozReview-Commit-ID: 3H2piFT2CfF Source-Repo: https://github.com/servo/servo Source-Revision: 20855c23043802e37c619127ba972948130fc58f --HG-- extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear extra : subtree_revision : 1d6a2d391ed4b059bc3deaf1844eb54d047bb611
This commit is contained in:
Родитель
fb43663719
Коммит
70ca353a57
|
@ -6,7 +6,7 @@ use cssparser::{Parser, ParserInput};
|
|||
use cssparser::ToCss as ParserToCss;
|
||||
use env_logger::LogBuilder;
|
||||
use malloc_size_of::MallocSizeOfOps;
|
||||
use selectors::{self, Element};
|
||||
use selectors::{self, Element, NthIndexCache};
|
||||
use selectors::matching::{MatchingContext, MatchingMode, matches_selector};
|
||||
use servo_arc::{Arc, ArcBorrow, RawOffsetArc};
|
||||
use std::cell::RefCell;
|
||||
|
@ -1520,6 +1520,36 @@ pub extern "C" fn Servo_StyleRule_SelectorMatchesElement(rule: RawServoStyleRule
|
|||
})
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn Servo_SelectorList_Closest<'a>(
|
||||
element: RawGeckoElementBorrowed<'a>,
|
||||
selectors: RawServoSelectorListBorrowed,
|
||||
) -> RawGeckoElementBorrowedOrNull<'a> {
|
||||
use std::borrow::Borrow;
|
||||
|
||||
let mut nth_index_cache = NthIndexCache::default();
|
||||
|
||||
let element = GeckoElement(element);
|
||||
let mut context = MatchingContext::new(
|
||||
MatchingMode::Normal,
|
||||
None,
|
||||
Some(&mut nth_index_cache),
|
||||
element.owner_document_quirks_mode(),
|
||||
);
|
||||
context.scope_element = Some(element.opaque());
|
||||
|
||||
let selectors = ::selectors::SelectorList::from_ffi(selectors).borrow();
|
||||
let mut current = Some(element);
|
||||
while let Some(element) = current.take() {
|
||||
if selectors::matching::matches_selector_list(&selectors, &element, &mut context) {
|
||||
return Some(element.0);
|
||||
}
|
||||
current = element.parent_element();
|
||||
}
|
||||
|
||||
return None;
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn Servo_SelectorList_Matches(
|
||||
element: RawGeckoElementBorrowed,
|
||||
|
|
Загрузка…
Ссылка в новой задаче