mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
This patch is generated by running `cargo +nightly fmt` under `servo/components/style/` and `servo/ports/geckolib` against mozilla-central https://hg.mozilla.org/mozilla-central/rev/b193f2e7a6a5d1f042c957ea4acd5c89bf210512 My nightly version is: 1.58.0-nightly (c9c4b5d72 2021-11-17) Manually remove the redundant braces in author_styles.rs to fix a warning. Differential Revision: https://phabricator.services.mozilla.com/D131556
79 lines
2.6 KiB
Rust
79 lines
2.6 KiB
Rust
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
|
|
//! A set of author stylesheets and their computed representation, such as the
|
|
//! ones used for ShadowRoot.
|
|
|
|
use crate::dom::TElement;
|
|
#[cfg(feature = "gecko")]
|
|
use crate::gecko_bindings::sugar::ownership::{HasBoxFFI, HasFFI, HasSimpleFFI};
|
|
use crate::invalidation::media_queries::ToMediaListKey;
|
|
use crate::shared_lock::SharedRwLockReadGuard;
|
|
use crate::stylesheet_set::AuthorStylesheetSet;
|
|
use crate::stylesheets::StylesheetInDocument;
|
|
use crate::stylist::CascadeData;
|
|
use crate::stylist::Stylist;
|
|
use servo_arc::Arc;
|
|
|
|
/// A set of author stylesheets and their computed representation, such as the
|
|
/// ones used for ShadowRoot.
|
|
#[derive(MallocSizeOf)]
|
|
pub struct AuthorStyles<S>
|
|
where
|
|
S: StylesheetInDocument + PartialEq + 'static,
|
|
{
|
|
/// The sheet collection, which holds the sheet pointers, the invalidations,
|
|
/// and all that stuff.
|
|
pub stylesheets: AuthorStylesheetSet<S>,
|
|
/// The actual cascade data computed from the stylesheets.
|
|
#[ignore_malloc_size_of = "Measured as part of the stylist"]
|
|
pub data: Arc<CascadeData>,
|
|
}
|
|
|
|
lazy_static! {
|
|
static ref EMPTY_CASCADE_DATA: Arc<CascadeData> = Arc::new_leaked(CascadeData::new());
|
|
}
|
|
|
|
impl<S> AuthorStyles<S>
|
|
where
|
|
S: StylesheetInDocument + PartialEq + 'static,
|
|
{
|
|
/// Create an empty AuthorStyles.
|
|
#[inline]
|
|
pub fn new() -> Self {
|
|
Self {
|
|
stylesheets: AuthorStylesheetSet::new(),
|
|
data: EMPTY_CASCADE_DATA.clone(),
|
|
}
|
|
}
|
|
|
|
/// Flush the pending sheet changes, updating `data` as appropriate.
|
|
///
|
|
/// TODO(emilio): Need a host element and a snapshot map to do invalidation
|
|
/// properly.
|
|
#[inline]
|
|
pub fn flush<E>(&mut self, stylist: &mut Stylist, guard: &SharedRwLockReadGuard)
|
|
where
|
|
E: TElement,
|
|
S: ToMediaListKey,
|
|
{
|
|
let flusher = self
|
|
.stylesheets
|
|
.flush::<E>(/* host = */ None, /* snapshot_map = */ None);
|
|
|
|
let result = stylist.rebuild_author_data(&self.data, flusher.sheets, guard);
|
|
if let Ok(Some(new_data)) = result {
|
|
self.data = new_data;
|
|
}
|
|
}
|
|
}
|
|
|
|
#[cfg(feature = "gecko")]
|
|
unsafe impl HasFFI for AuthorStyles<crate::gecko::data::GeckoStyleSheet> {
|
|
type FFIType = crate::gecko_bindings::structs::RawServoAuthorStyles;
|
|
}
|
|
#[cfg(feature = "gecko")]
|
|
unsafe impl HasSimpleFFI for AuthorStyles<crate::gecko::data::GeckoStyleSheet> {}
|
|
#[cfg(feature = "gecko")]
|
|
unsafe impl HasBoxFFI for AuthorStyles<crate::gecko::data::GeckoStyleSheet> {}
|