Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Staticize CASCADE_PROPERTIES, (temporarily) fix stylo path for animations, and introduce the long-term path to follow #11972

Merged
merged 5 commits into from Jul 3, 2016
Prev

style: remove is_servo(), as_servo() and as_servo_mut()

This commit adds a need_index prop to the style system, and autogenerates
iterators, and a get_xxx_mod(i) function from a get_xxx_prop() and
get_xxx_at(index) functions.

This allows us to (finally!) take rid of the as_servo() hack. There are a few
unimplemented clones, but I'm just too lazy for that right now.
  • Loading branch information
emilio committed Jul 1, 2016
commit 30963dd74da5e9a0e2fd7c8d56ec23aa474e8dd3
@@ -405,11 +405,6 @@ pub fn maybe_start_animations<Impl: SelectorImplExt>(context: &SharedStyleContex
{
let mut had_animations = false;

// FIXME(emilio): Implement animations for geckolib.
if !new_style.is_servo() {
return false;
}

let box_style = new_style.get_box();
for (i, name) in box_style.animation_name_iter().enumerate() {
debug!("maybe_start_animations: name={}", name);
@@ -57,7 +57,6 @@ def __init__(self, style_struct, name, animatable=None, derived_from=None, keywo
self.experimental = ("layout.%s.enabled" % name) if experimental else None
self.custom_cascade = custom_cascade
self.internal = internal
self.need_clone = need_clone
self.need_index = need_index
self.gecko_ffi_name = gecko_ffi_name or "m" + self.camel_case
self.derived_from = (derived_from or "").split()
@@ -72,6 +71,12 @@ def __init__(self, style_struct, name, animatable=None, derived_from=None, keywo
assert animatable == "True" or animatable == "False"
self.animatable = animatable == "True"

# NB: Animatable implies clone because a property animation requires a
# copy of the computed value.
#
# See components/style/helpers/animated_properties.mako.rs.
self.need_clone = need_clone or self.animatable


class Shorthand(object):
def __init__(self, name, sub_properties, experimental=False, internal=False):
@@ -127,22 +127,17 @@ impl AnimatedProperty {
}
}

// NB: Transition properties need clone
pub fn from_transition_property<C: ComputedValues>(transition_property: &TransitionProperty,
old_style: &C,
new_style: &C) -> AnimatedProperty {
// TODO: Generalise this for GeckoLib, adding clone_xxx to the
// appropiate longhands.
let old_style = old_style.as_servo();
let new_style = new_style.as_servo();
match *transition_property {
TransitionProperty::All => panic!("Can't use TransitionProperty::All here."),
% for prop in data.longhands:
% if prop.animatable:
TransitionProperty::${prop.camel_case} => {
AnimatedProperty::${prop.camel_case}(
old_style.get_${prop.style_struct.ident.strip("_")}().${prop.ident}.clone(),
new_style.get_${prop.style_struct.ident.strip("_")}().${prop.ident}.clone())
old_style.get_${prop.style_struct.ident.strip("_")}().clone_${prop.ident}(),
new_style.get_${prop.style_struct.ident.strip("_")}().clone_${prop.ident}())
}
% endif
% endfor
@@ -1246,14 +1246,6 @@ pub trait ComputedValues : Debug + Clone + Send + Sync + 'static {
type Concrete${style_struct.trait_name}: style_struct_traits::${style_struct.trait_name};
% endfor

// Temporary bailout case for stuff we haven't made work with the trait
// yet - panics for non-Servo implementations.
//
// Used only for animations. Don't use it in other places.
fn is_servo(&self) -> bool;
fn as_servo<'a>(&'a self) -> &'a ServoComputedValues;
fn as_servo_mut<'a>(&'a mut self) -> &'a mut ServoComputedValues;

fn new(custom_properties: Option<Arc<::custom_properties::ComputedValuesMap>>,
shareable: bool,
writing_mode: WritingMode,
@@ -1302,13 +1294,6 @@ impl ComputedValues for ServoComputedValues {
type Concrete${style_struct.trait_name} = style_structs::${style_struct.servo_struct_name};
% endfor

#[inline]
fn is_servo(&self) -> bool { true }
#[inline]
fn as_servo<'a>(&'a self) -> &'a ServoComputedValues { self }
#[inline]
fn as_servo_mut<'a>(&'a mut self) -> &'a mut ServoComputedValues { self }

fn new(custom_properties: Option<Arc<::custom_properties::ComputedValuesMap>>,
shareable: bool,
writing_mode: WritingMode,
@@ -1194,6 +1194,11 @@ pub mod specified {
pub fn radians(self) -> f32 {
self.0
}

#[inline]
pub fn from_radians(r: f32) -> Self {
Angle(r)
}
}

const RAD_PER_DEG: CSSFloat = PI / 180.0;
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.