Files
servo/components/script/stylesheet_set.rs
Oriol Brufau 1d0a8b05fb Upgrade Stylo to 2025-11-01 (#40522)
This continues #39612

Changelog:
- Upstream:
b98470a5cb...d71fd89b78
- Servo fixups:
4714bab122...7481d7f7af

Stylo tracking issue: https://github.com/servo/stylo/issues/264

---------

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-11-11 02:59:38 +00:00

82 lines
2.7 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/. */
use style::media_queries::Device;
use style::shared_lock::SharedRwLockReadGuard;
use style::stylesheet_set::{AuthorStylesheetSet, DocumentStylesheetSet};
use style::stylesheets::{CustomMediaMap, StylesheetInDocument};
/// Functionality common to DocumentStylesheetSet and AuthorStylesheetSet.
pub(crate) enum StylesheetSetRef<'a, S>
where
S: StylesheetInDocument + PartialEq + 'static,
{
/// Author stylesheet set.
Author(&'a mut AuthorStylesheetSet<S>),
/// Document stylesheet set.
Document(&'a mut DocumentStylesheetSet<S>),
}
impl<S> StylesheetSetRef<'_, S>
where
S: StylesheetInDocument + PartialEq + 'static,
{
/// Appends a new stylesheet to the current set.
///
/// No device implies not computing invalidations.
pub(crate) fn append_stylesheet(
&mut self,
device: Option<&Device>,
sheet: S,
guard: &SharedRwLockReadGuard,
) {
let custom_media = &CustomMediaMap::default();
match self {
StylesheetSetRef::Author(set) => {
set.append_stylesheet(device, custom_media, sheet, guard)
},
StylesheetSetRef::Document(set) => {
set.append_stylesheet(device, custom_media, sheet, guard)
},
}
}
/// Insert a given stylesheet before another stylesheet in the document.
pub(crate) fn insert_stylesheet_before(
&mut self,
device: Option<&Device>,
sheet: S,
before_sheet: S,
guard: &SharedRwLockReadGuard,
) {
let custom_media = &CustomMediaMap::default();
match self {
StylesheetSetRef::Author(set) => {
set.insert_stylesheet_before(device, custom_media, sheet, before_sheet, guard)
},
StylesheetSetRef::Document(set) => {
set.insert_stylesheet_before(device, custom_media, sheet, before_sheet, guard)
},
}
}
/// Remove a given stylesheet from the set.
pub(crate) fn remove_stylesheet(
&mut self,
device: Option<&Device>,
sheet: S,
guard: &SharedRwLockReadGuard,
) {
let custom_media = &CustomMediaMap::default();
match self {
StylesheetSetRef::Author(set) => {
set.remove_stylesheet(device, custom_media, sheet, guard)
},
StylesheetSetRef::Document(set) => {
set.remove_stylesheet(device, custom_media, sheet, guard)
},
}
}
}