mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
style: Implement @import layer|layer(<name>)
This works modulo the existing nested layer order bug. Will be covered by WPT /css/css-cascade/layer-import.html once the feature is enabled (I can probably enable it right away for those tests, but I'd rather fix the obvious bugs first). Differential Revision: https://phabricator.services.mozilla.com/D124538
This commit is contained in:
parent
3dc3fb9412
commit
6bc198b757
4 changed files with 98 additions and 25 deletions
|
@ -2329,15 +2329,36 @@ impl CascadeData {
|
|||
continue;
|
||||
}
|
||||
|
||||
|
||||
fn maybe_register_layer(data: &mut CascadeData, layer: &LayerName) -> u32 {
|
||||
// TODO: Measure what's more common / expensive, if
|
||||
// layer.clone() or the double hash lookup in the insert
|
||||
// case.
|
||||
if let Some(order) = data.layer_order.get(layer) {
|
||||
return *order;
|
||||
}
|
||||
let order = data.next_layer_order;
|
||||
data.layer_order.insert(layer.clone(), order);
|
||||
data.next_layer_order += 1;
|
||||
order
|
||||
}
|
||||
|
||||
let mut layer_names_to_pop = 0;
|
||||
let mut children_layer_order = current_layer_order;
|
||||
match *rule {
|
||||
CssRule::Import(ref lock) => {
|
||||
let import_rule = lock.read_with(guard);
|
||||
if rebuild_kind.should_rebuild_invalidation() {
|
||||
let import_rule = lock.read_with(guard);
|
||||
self.effective_media_query_results
|
||||
.saw_effective(import_rule);
|
||||
}
|
||||
if let Some(ref layer) = import_rule.layer {
|
||||
for name in layer.name.layer_names() {
|
||||
current_layer.0.push(name.clone());
|
||||
children_layer_order = maybe_register_layer(self, ¤t_layer);
|
||||
layer_names_to_pop += 1;
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
CssRule::Media(ref lock) => {
|
||||
|
@ -2349,19 +2370,6 @@ impl CascadeData {
|
|||
CssRule::Layer(ref lock) => {
|
||||
use crate::stylesheets::layer_rule::LayerRuleKind;
|
||||
|
||||
fn maybe_register_layer(data: &mut CascadeData, layer: &LayerName) -> u32 {
|
||||
// TODO: Measure what's more common / expensive, if
|
||||
// layer.clone() or the double hash lookup in the insert
|
||||
// case.
|
||||
if let Some(order) = data.layer_order.get(layer) {
|
||||
return *order;
|
||||
}
|
||||
let order = data.next_layer_order;
|
||||
data.layer_order.insert(layer.clone(), order);
|
||||
data.next_layer_order += 1;
|
||||
order
|
||||
}
|
||||
|
||||
let layer_rule = lock.read_with(guard);
|
||||
match layer_rule.kind {
|
||||
LayerRuleKind::Block { ref name, .. } => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue