|
|
|
|
| 5 |
//! Selector matching. |
5 |
//! Selector matching. |
| 6 |
|
6 |
|
| 7 |
use {Atom, LocalName}; |
7 |
use {Atom, LocalName}; |
| 8 |
use data::ComputedStyle; |
8 |
use data::ComputedStyle; |
| 9 |
use dom::PresentationalHintsSynthetizer; |
9 |
use dom::PresentationalHintsSynthetizer; |
| 10 |
use element_state::*; |
10 |
use element_state::*; |
| 11 |
use error_reporting::StdoutErrorReporter; |
11 |
use error_reporting::StdoutErrorReporter; |
| 12 |
use keyframes::KeyframesAnimation; |
12 |
use keyframes::KeyframesAnimation; |
| 13 |
use media_queries::{Device, MediaType}; |
13 |
use media_queries::Device; |
|
|
14 |
#[cfg(feature = "servo")] |
| 15 |
use media_queries::MediaType; |
| 14 |
use parking_lot::RwLock; |
16 |
use parking_lot::RwLock; |
| 15 |
use properties::{self, CascadeFlags, ComputedValues, INHERIT_ALL, Importance}; |
17 |
use properties::{self, CascadeFlags, ComputedValues, INHERIT_ALL, Importance}; |
| 16 |
use properties::{PropertyDeclaration, PropertyDeclarationBlock}; |
18 |
use properties::{PropertyDeclaration, PropertyDeclarationBlock}; |
| 17 |
use quickersort::sort_by; |
19 |
use quickersort::sort_by; |
| 18 |
use restyle_hints::{RestyleHint, DependencySet}; |
20 |
use restyle_hints::{RestyleHint, DependencySet}; |
| 19 |
use rule_tree::{RuleTree, StrongRuleNode, StyleSource}; |
21 |
use rule_tree::{RuleTree, StrongRuleNode, StyleSource}; |
| 20 |
use selector_parser::{ElementExt, SelectorImpl, PseudoElement, Snapshot}; |
22 |
use selector_parser::{ElementExt, SelectorImpl, PseudoElement, Snapshot}; |
| 21 |
use selectors::Element; |
23 |
use selectors::Element; |
|
Lines 29-44
use std::borrow::Borrow;
|
Link Here
|
|---|
|
| 29 |
use std::collections::HashMap; |
31 |
use std::collections::HashMap; |
| 30 |
use std::fmt; |
32 |
use std::fmt; |
| 31 |
use std::hash::BuildHasherDefault; |
33 |
use std::hash::BuildHasherDefault; |
| 32 |
use std::hash::Hash; |
34 |
use std::hash::Hash; |
| 33 |
use std::slice; |
35 |
use std::slice; |
| 34 |
use std::sync::Arc; |
36 |
use std::sync::Arc; |
| 35 |
use style_traits::viewport::ViewportConstraints; |
37 |
use style_traits::viewport::ViewportConstraints; |
| 36 |
use stylesheets::{CssRule, Origin, StyleRule, Stylesheet, UserAgentStylesheets}; |
38 |
use stylesheets::{CssRule, Origin, StyleRule, Stylesheet, UserAgentStylesheets}; |
|
|
39 |
#[cfg(feature = "servo")] |
| 37 |
use viewport::{self, MaybeNew, ViewportRule}; |
40 |
use viewport::{self, MaybeNew, ViewportRule}; |
| 38 |
|
41 |
|
| 39 |
pub type FnvHashMap<K, V> = HashMap<K, V, BuildHasherDefault<::fnv::FnvHasher>>; |
42 |
pub type FnvHashMap<K, V> = HashMap<K, V, BuildHasherDefault<::fnv::FnvHasher>>; |
| 40 |
|
43 |
|
| 41 |
/// This structure holds all the selectors and device characteristics |
44 |
/// This structure holds all the selectors and device characteristics |
| 42 |
/// for a given document. The selectors are converted into `Rule`s |
45 |
/// for a given document. The selectors are converted into `Rule`s |
| 43 |
/// (defined in rust-selectors), and introduced in a `SelectorMap` |
46 |
/// (defined in rust-selectors), and introduced in a `SelectorMap` |
| 44 |
/// depending on the pseudo-element (see `PerPseudoElementSelectorMap`), |
47 |
/// depending on the pseudo-element (see `PerPseudoElementSelectorMap`), |
|
|
| 376 |
default, |
379 |
default, |
| 377 |
None, |
380 |
None, |
| 378 |
Box::new(StdoutErrorReporter), |
381 |
Box::new(StdoutErrorReporter), |
| 379 |
CascadeFlags::empty()); |
382 |
CascadeFlags::empty()); |
| 380 |
|
383 |
|
| 381 |
Some(ComputedStyle::new(rule_node, Arc::new(computed))) |
384 |
Some(ComputedStyle::new(rule_node, Arc::new(computed))) |
| 382 |
} |
385 |
} |
| 383 |
|
386 |
|
|
|
387 |
#[cfg(feature = "servo")] |
| 384 |
pub fn set_device(&mut self, mut device: Device, stylesheets: &[Arc<Stylesheet>]) { |
388 |
pub fn set_device(&mut self, mut device: Device, stylesheets: &[Arc<Stylesheet>]) { |
| 385 |
let cascaded_rule = ViewportRule { |
389 |
let cascaded_rule = ViewportRule { |
| 386 |
declarations: viewport::Cascade::from_stylesheets(stylesheets, &device).finish(), |
390 |
declarations: viewport::Cascade::from_stylesheets(stylesheets, &device).finish(), |
| 387 |
}; |
391 |
}; |
| 388 |
|
392 |
|
| 389 |
self.viewport_constraints = ViewportConstraints::maybe_new(device.viewport_size, &cascaded_rule); |
393 |
self.viewport_constraints = ViewportConstraints::maybe_new(device.viewport_size, &cascaded_rule); |
| 390 |
if let Some(ref constraints) = self.viewport_constraints { |
394 |
if let Some(ref constraints) = self.viewport_constraints { |
| 391 |
device = Device::new(MediaType::Screen, constraints.size); |
395 |
device = Device::new(MediaType::Screen, constraints.size); |