From d69763b0c1b1d1c0e636ea6faac3fbf03524f615 Mon Sep 17 00:00:00 2001 From: Cameron McCormack Date: Sun, 1 May 2016 18:35:49 +1000 Subject: [PATCH] Generate geckolib setters for properties with simple predefined types. --- components/style/properties/data.py | 3 ++- components/style/properties/helpers.mako.rs | 2 +- ports/geckolib/properties.mako.rs | 22 ++++++++++++++++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/components/style/properties/data.py b/components/style/properties/data.py index d8327955fd5..6be3ec6e8b4 100644 --- a/components/style/properties/data.py +++ b/components/style/properties/data.py @@ -46,10 +46,11 @@ class Keyword(object): class Longhand(object): def __init__(self, style_struct, name, derived_from=None, keyword=None, - custom_cascade=False, experimental=False, internal=False, + predefined_type=None, custom_cascade=False, experimental=False, internal=False, need_clone=False, gecko_ffi_name=None): self.name = name self.keyword = keyword + self.predefined_type = predefined_type self.ident = to_rust_ident(name) self.camel_case = to_camel_case(self.ident) self.style_struct = style_struct diff --git a/components/style/properties/helpers.mako.rs b/components/style/properties/helpers.mako.rs index 73ff84cadd5..fcf30e83d87 100644 --- a/components/style/properties/helpers.mako.rs +++ b/components/style/properties/helpers.mako.rs @@ -17,7 +17,7 @@ <%def name="predefined_type(name, type, initial_value, parse_method='parse', **kwargs)"> - <%call expr="longhand(name, **kwargs)"> + <%call expr="longhand(name, predefined_type=type, **kwargs)"> #[allow(unused_imports)] use app_units::Au; pub type SpecifiedValue = specified::${type}; diff --git a/ports/geckolib/properties.mako.rs b/ports/geckolib/properties.mako.rs index f18659c0ea0..ad2d3648176 100644 --- a/ports/geckolib/properties.mako.rs +++ b/ports/geckolib/properties.mako.rs @@ -128,6 +128,12 @@ pub struct ${style_struct.gecko_struct_name} { } +<%def name="impl_simple_setter(ident, gecko_ffi_name)"> + fn set_${ident}(&mut self, v: longhands::${ident}::computed_value::T) { + ${set_gecko_property(gecko_ffi_name, "v")} + } + + <%def name="impl_simple_copy(ident, gecko_ffi_name)"> fn copy_${ident}_from(&mut self, other: &Self) { self.gecko.${gecko_ffi_name} = other.gecko.${gecko_ffi_name}; @@ -186,6 +192,11 @@ def set_gecko_property(ffi_name, expr): % endif +<%def name="impl_simple(ident, gecko_ffi_name)"> +<%call expr="impl_simple_setter(ident, gecko_ffi_name)"> +<%call expr="impl_simple_copy(ident, gecko_ffi_name)"> + + <%def name="impl_app_units(ident, gecko_ffi_name, need_clone)"> fn set_${ident}(&mut self, v: longhands::${ident}::computed_value::T) { self.gecko.${gecko_ffi_name} = v.0; @@ -284,8 +295,14 @@ impl Debug for ${style_struct.gecko_ffi_name} { # These are booleans. force_stub += ["page-break-after", "page-break-before"] + simple_types = [] + keyword_longhands = [x for x in longhands if x.keyword and not x.name in force_stub] - stub_longhands = [x for x in longhands if x not in keyword_longhands] + simple_longhands = [x for x in longhands + if x.predefined_type in simple_types and not x.name in force_stub] + + autogenerated_longhands = keyword_longhands + simple_longhands + stub_longhands = [x for x in longhands if x not in autogenerated_longhands] %> impl ${style_struct.trait_name} for ${style_struct.gecko_struct_name} { /* @@ -299,6 +316,9 @@ impl ${style_struct.trait_name} for ${style_struct.gecko_struct_name} { % for longhand in keyword_longhands: <%call expr="impl_keyword(longhand.ident, longhand.gecko_ffi_name, longhand.keyword, longhand.need_clone)"> % endfor + % for longhand in simple_longhands: + <%call expr="impl_simple(longhand.ident, longhand.gecko_ffi_name)"> + % endfor /* * Stubs.