mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
style: Document Gecko's data module.
This commit is contained in:
parent
ee48599d1b
commit
dba73dc618
1 changed files with 22 additions and 1 deletions
|
@ -2,6 +2,8 @@
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
//! Data needed to style a Gecko document.
|
||||||
|
|
||||||
use animation::Animation;
|
use animation::Animation;
|
||||||
use atomic_refcell::{AtomicRef, AtomicRefCell, AtomicRefMut};
|
use atomic_refcell::{AtomicRef, AtomicRefCell, AtomicRefMut};
|
||||||
use dom::OpaqueNode;
|
use dom::OpaqueNode;
|
||||||
|
@ -21,6 +23,8 @@ use style_traits::ViewportPx;
|
||||||
use stylesheets::Stylesheet;
|
use stylesheets::Stylesheet;
|
||||||
use stylist::Stylist;
|
use stylist::Stylist;
|
||||||
|
|
||||||
|
/// The container for data that a Servo-backed Gecko document needs to style
|
||||||
|
/// itself.
|
||||||
pub struct PerDocumentStyleDataImpl {
|
pub struct PerDocumentStyleDataImpl {
|
||||||
/// Rule processor.
|
/// Rule processor.
|
||||||
pub stylist: Arc<Stylist>,
|
pub stylist: Arc<Stylist>,
|
||||||
|
@ -32,20 +36,33 @@ pub struct PerDocumentStyleDataImpl {
|
||||||
pub stylesheets_changed: bool,
|
pub stylesheets_changed: bool,
|
||||||
|
|
||||||
// FIXME(bholley): Hook these up to something.
|
// FIXME(bholley): Hook these up to something.
|
||||||
|
/// Unused. Will go away when we actually implement transitions and
|
||||||
|
/// animations properly.
|
||||||
pub new_animations_sender: Sender<Animation>,
|
pub new_animations_sender: Sender<Animation>,
|
||||||
|
/// Unused. Will go away when we actually implement transitions and
|
||||||
|
/// animations properly.
|
||||||
pub new_animations_receiver: Receiver<Animation>,
|
pub new_animations_receiver: Receiver<Animation>,
|
||||||
|
/// Unused. Will go away when we actually implement transitions and
|
||||||
|
/// animations properly.
|
||||||
pub running_animations: Arc<RwLock<HashMap<OpaqueNode, Vec<Animation>>>>,
|
pub running_animations: Arc<RwLock<HashMap<OpaqueNode, Vec<Animation>>>>,
|
||||||
|
/// Unused. Will go away when we actually implement transitions and
|
||||||
|
/// animations properly.
|
||||||
pub expired_animations: Arc<RwLock<HashMap<OpaqueNode, Vec<Animation>>>>,
|
pub expired_animations: Arc<RwLock<HashMap<OpaqueNode, Vec<Animation>>>>,
|
||||||
|
|
||||||
// FIXME(bholley): This shouldn't be per-document.
|
/// The worker thread pool.
|
||||||
|
/// FIXME(bholley): This shouldn't be per-document.
|
||||||
pub work_queue: Option<rayon::ThreadPool>,
|
pub work_queue: Option<rayon::ThreadPool>,
|
||||||
|
|
||||||
|
/// The number of threads of the work queue.
|
||||||
pub num_threads: usize,
|
pub num_threads: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The data itself is an `AtomicRefCell`, which guarantees the proper semantics
|
||||||
|
/// and unexpected races while trying to mutate it.
|
||||||
pub struct PerDocumentStyleData(AtomicRefCell<PerDocumentStyleDataImpl>);
|
pub struct PerDocumentStyleData(AtomicRefCell<PerDocumentStyleDataImpl>);
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
|
/// The number of layout threads, computed statically.
|
||||||
pub static ref NUM_THREADS: usize = {
|
pub static ref NUM_THREADS: usize = {
|
||||||
match env::var("STYLO_THREADS").map(|s| s.parse::<usize>().expect("invalid STYLO_THREADS")) {
|
match env::var("STYLO_THREADS").map(|s| s.parse::<usize>().expect("invalid STYLO_THREADS")) {
|
||||||
Ok(num) => num,
|
Ok(num) => num,
|
||||||
|
@ -55,6 +72,7 @@ lazy_static! {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PerDocumentStyleData {
|
impl PerDocumentStyleData {
|
||||||
|
/// Create a dummy `PerDocumentStyleData`.
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
// FIXME(bholley): Real window size.
|
// FIXME(bholley): Real window size.
|
||||||
let window_size: TypedSize2D<f32, ViewportPx> = TypedSize2D::new(800.0, 600.0);
|
let window_size: TypedSize2D<f32, ViewportPx> = TypedSize2D::new(800.0, 600.0);
|
||||||
|
@ -81,16 +99,19 @@ impl PerDocumentStyleData {
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get an immutable reference to this style data.
|
||||||
pub fn borrow(&self) -> AtomicRef<PerDocumentStyleDataImpl> {
|
pub fn borrow(&self) -> AtomicRef<PerDocumentStyleDataImpl> {
|
||||||
self.0.borrow()
|
self.0.borrow()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get an mutable reference to this style data.
|
||||||
pub fn borrow_mut(&self) -> AtomicRefMut<PerDocumentStyleDataImpl> {
|
pub fn borrow_mut(&self) -> AtomicRefMut<PerDocumentStyleDataImpl> {
|
||||||
self.0.borrow_mut()
|
self.0.borrow_mut()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PerDocumentStyleDataImpl {
|
impl PerDocumentStyleDataImpl {
|
||||||
|
/// Recreate the style data if the stylesheets have changed.
|
||||||
pub fn flush_stylesheets(&mut self) {
|
pub fn flush_stylesheets(&mut self) {
|
||||||
// The stylist wants to be flushed if either the stylesheets change or the
|
// The stylist wants to be flushed if either the stylesheets change or the
|
||||||
// device dimensions change. When we add support for media queries, we'll
|
// device dimensions change. When we add support for media queries, we'll
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue