style/stylesheets/
view_transition_rule.rs1use crate::derives::*;
10use crate::error_reporting::ContextualParseError;
11use crate::parser::ParserContext;
12use crate::properties::view_transition::{DescriptorParser, Descriptors};
13use crate::shared_lock::DeepCloneWithLock;
14use crate::shared_lock::{SharedRwLock, SharedRwLockReadGuard, ToCssWithGuard};
15use cssparser::{Parser, RuleBodyParser, SourceLocation};
16use std::fmt::{self, Write};
17use style_traits::{CssStringWriter, CssWriter, ToCss};
18
19#[derive(Clone, Debug, MallocSizeOf, ToShmem)]
21pub struct ViewTransitionRule {
22 pub descriptors: Descriptors,
24 pub source_location: SourceLocation,
26}
27
28impl ViewTransitionRule {
29 pub fn parse(context: &ParserContext, input: &mut Parser, location: SourceLocation) -> Self {
31 let mut rule = ViewTransitionRule {
32 descriptors: Descriptors::default(),
33 source_location: location,
34 };
35
36 let mut parser = DescriptorParser {
37 context,
38 descriptors: &mut rule.descriptors,
39 };
40 let iter = RuleBodyParser::new(input, &mut parser);
41
42 for declaration in iter {
43 if let Err((error, slice, location)) = declaration {
44 let error = ContextualParseError::UnsupportedViewTransitionDescriptor(slice, error);
45 context.log_css_error(location, error);
46 }
47 }
48
49 rule
50 }
51}
52
53impl ToCssWithGuard for ViewTransitionRule {
54 fn to_css(&self, _guard: &SharedRwLockReadGuard, dest: &mut CssStringWriter) -> fmt::Result {
55 dest.write_str("@view-transition { ")?;
56 self.descriptors.to_css(&mut CssWriter::new(dest))?;
57 dest.write_str("}")
58 }
59}
60
61impl DeepCloneWithLock for ViewTransitionRule {
62 fn deep_clone_with_lock(&self, _lock: &SharedRwLock, _guard: &SharedRwLockReadGuard) -> Self {
63 self.clone()
64 }
65}
66
67#[derive(Clone, Copy, Debug, Default, MallocSizeOf, Parse, PartialEq, ToCss, ToShmem)]
69#[repr(u8)]
70pub enum NavigationType {
71 #[default]
73 None,
74 Auto,
76}
77
78pub use crate::values::specified::animation::ViewTransitionClass as TransitionTypes;