mirror of
https://github.com/servo/servo.git
synced 2025-08-04 13:10:20 +01:00
Auto merge of #17839 - heycam:opacity-smil, r=hiro
style: allow out-of-range opacity values for SMIL animations From https://bugzilla.mozilla.org/show_bug.cgi?id=1371150. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/17839) <!-- Reviewable:end -->
This commit is contained in:
commit
bf16b146e8
8 changed files with 45 additions and 4 deletions
|
@ -650,6 +650,7 @@ impl Expression {
|
||||||
in_media_query: true,
|
in_media_query: true,
|
||||||
// TODO: pass the correct value here.
|
// TODO: pass the correct value here.
|
||||||
quirks_mode: quirks_mode,
|
quirks_mode: quirks_mode,
|
||||||
|
for_smil_animation: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
let required_value = match self.value {
|
let required_value = match self.value {
|
||||||
|
|
|
@ -2996,6 +2996,7 @@ where
|
||||||
cached_system_font: None,
|
cached_system_font: None,
|
||||||
in_media_query: false,
|
in_media_query: false,
|
||||||
quirks_mode: quirks_mode,
|
quirks_mode: quirks_mode,
|
||||||
|
for_smil_animation: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
let ignore_colors = !device.use_document_colors();
|
let ignore_colors = !device.use_document_colors();
|
||||||
|
|
|
@ -246,6 +246,7 @@ impl Range<specified::Length> {
|
||||||
in_media_query: true,
|
in_media_query: true,
|
||||||
cached_system_font: None,
|
cached_system_font: None,
|
||||||
quirks_mode: quirks_mode,
|
quirks_mode: quirks_mode,
|
||||||
|
for_smil_animation: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
match *self {
|
match *self {
|
||||||
|
|
|
@ -709,6 +709,7 @@ impl MaybeNew for ViewportConstraints {
|
||||||
cached_system_font: None,
|
cached_system_font: None,
|
||||||
in_media_query: false,
|
in_media_query: false,
|
||||||
quirks_mode: quirks_mode,
|
quirks_mode: quirks_mode,
|
||||||
|
for_smil_animation: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
// DEVICE-ADAPT § 9.3 Resolving 'extend-to-zoom'
|
// DEVICE-ADAPT § 9.3 Resolving 'extend-to-zoom'
|
||||||
|
|
|
@ -95,6 +95,12 @@ pub struct Context<'a> {
|
||||||
|
|
||||||
/// The quirks mode of this context.
|
/// The quirks mode of this context.
|
||||||
pub quirks_mode: QuirksMode,
|
pub quirks_mode: QuirksMode,
|
||||||
|
|
||||||
|
/// Whether this computation is being done for a SMIL animation.
|
||||||
|
///
|
||||||
|
/// This is used to allow certain properties to generate out-of-range
|
||||||
|
/// values, which SMIL allows.
|
||||||
|
pub for_smil_animation: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Context<'a> {
|
impl<'a> Context<'a> {
|
||||||
|
|
|
@ -566,7 +566,14 @@ impl ToComputedValue for Opacity {
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_computed_value(&self, context: &Context) -> CSSFloat {
|
fn to_computed_value(&self, context: &Context) -> CSSFloat {
|
||||||
self.0.to_computed_value(context).min(1.0).max(0.0)
|
let value = self.0.to_computed_value(context);
|
||||||
|
if context.for_smil_animation {
|
||||||
|
// SMIL expects to be able to interpolate between out-of-range
|
||||||
|
// opacity values.
|
||||||
|
value
|
||||||
|
} else {
|
||||||
|
value.min(1.0).max(0.0)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -2907,6 +2907,7 @@ fn create_context<'a>(
|
||||||
style: &'a ComputedValues,
|
style: &'a ComputedValues,
|
||||||
parent_style: Option<&'a ComputedValues>,
|
parent_style: Option<&'a ComputedValues>,
|
||||||
pseudo: Option<&'a PseudoElement>,
|
pseudo: Option<&'a PseudoElement>,
|
||||||
|
for_smil_animation: bool,
|
||||||
) -> Context<'a> {
|
) -> Context<'a> {
|
||||||
Context {
|
Context {
|
||||||
is_root_element: false,
|
is_root_element: false,
|
||||||
|
@ -2920,6 +2921,7 @@ fn create_context<'a>(
|
||||||
cached_system_font: None,
|
cached_system_font: None,
|
||||||
in_media_query: false,
|
in_media_query: false,
|
||||||
quirks_mode: per_doc_data.stylist.quirks_mode(),
|
quirks_mode: per_doc_data.stylist.quirks_mode(),
|
||||||
|
for_smil_animation,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2989,7 +2991,14 @@ pub extern "C" fn Servo_GetComputedKeyframeValues(keyframes: RawGeckoKeyframeLis
|
||||||
let parent_style = parent_data.as_ref().map(|d| d.styles.primary()).map(|x| &**x);
|
let parent_style = parent_data.as_ref().map(|d| d.styles.primary()).map(|x| &**x);
|
||||||
|
|
||||||
let pseudo = style.pseudo();
|
let pseudo = style.pseudo();
|
||||||
let mut context = create_context(&data, &metrics, &style, parent_style, pseudo.as_ref());
|
let mut context = create_context(
|
||||||
|
&data,
|
||||||
|
&metrics,
|
||||||
|
&style,
|
||||||
|
parent_style,
|
||||||
|
pseudo.as_ref(),
|
||||||
|
/* for_smil_animation = */ false,
|
||||||
|
);
|
||||||
|
|
||||||
let global_style_data = &*GLOBAL_STYLE_DATA;
|
let global_style_data = &*GLOBAL_STYLE_DATA;
|
||||||
let guard = global_style_data.shared_lock.read();
|
let guard = global_style_data.shared_lock.read();
|
||||||
|
@ -3069,7 +3078,14 @@ pub extern "C" fn Servo_GetAnimationValues(declarations: RawServoDeclarationBloc
|
||||||
let parent_style = parent_data.as_ref().map(|d| d.styles.primary()).map(|x| &**x);
|
let parent_style = parent_data.as_ref().map(|d| d.styles.primary()).map(|x| &**x);
|
||||||
|
|
||||||
let pseudo = style.pseudo();
|
let pseudo = style.pseudo();
|
||||||
let mut context = create_context(&data, &metrics, &style, parent_style, pseudo.as_ref());
|
let mut context = create_context(
|
||||||
|
&data,
|
||||||
|
&metrics,
|
||||||
|
&style,
|
||||||
|
parent_style,
|
||||||
|
pseudo.as_ref(),
|
||||||
|
/* for_smil_animation = */ true
|
||||||
|
);
|
||||||
|
|
||||||
let default_values = data.default_computed_values();
|
let default_values = data.default_computed_values();
|
||||||
let global_style_data = &*GLOBAL_STYLE_DATA;
|
let global_style_data = &*GLOBAL_STYLE_DATA;
|
||||||
|
@ -3098,7 +3114,14 @@ pub extern "C" fn Servo_AnimationValue_Compute(element: RawGeckoElementBorrowed,
|
||||||
let parent_style = parent_data.as_ref().map(|d| d.styles.primary()).map(|x| &**x);
|
let parent_style = parent_data.as_ref().map(|d| d.styles.primary()).map(|x| &**x);
|
||||||
|
|
||||||
let pseudo = style.pseudo();
|
let pseudo = style.pseudo();
|
||||||
let mut context = create_context(&data, &metrics, style, parent_style, pseudo.as_ref());
|
let mut context = create_context(
|
||||||
|
&data,
|
||||||
|
&metrics,
|
||||||
|
style,
|
||||||
|
parent_style,
|
||||||
|
pseudo.as_ref(),
|
||||||
|
/* for_smil_animation = */ false
|
||||||
|
);
|
||||||
|
|
||||||
let default_values = data.default_computed_values();
|
let default_values = data.default_computed_values();
|
||||||
let global_style_data = &*GLOBAL_STYLE_DATA;
|
let global_style_data = &*GLOBAL_STYLE_DATA;
|
||||||
|
|
|
@ -60,6 +60,7 @@ fn assert_computed_serialization<C, F, T>(f: F, input: &'static str, output: &st
|
||||||
font_metrics_provider: &ServoMetricsProvider,
|
font_metrics_provider: &ServoMetricsProvider,
|
||||||
in_media_query: false,
|
in_media_query: false,
|
||||||
quirks_mode: QuirksMode::NoQuirks,
|
quirks_mode: QuirksMode::NoQuirks,
|
||||||
|
for_smil_animation: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
let parsed = parse(f, input).unwrap();
|
let parsed = parse(f, input).unwrap();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue