aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ports/geckolib/build.rs3
-rw-r--r--ports/geckolib/properties.mako.rs55
2 files changed, 54 insertions, 4 deletions
diff --git a/ports/geckolib/build.rs b/ports/geckolib/build.rs
index 59cbdec434a..b9f1a4d3676 100644
--- a/ports/geckolib/build.rs
+++ b/ports/geckolib/build.rs
@@ -62,7 +62,8 @@ try:
style_template.render(PRODUCT='gecko')
geckolib_template = Template(filename=os.environ['GECKOLIB_TEMPLATE'], input_encoding='utf8')
- output = geckolib_template.render(STYLE_STRUCTS = style_template.module.STYLE_STRUCTS)
+ output = geckolib_template.render(STYLE_STRUCTS = style_template.module.STYLE_STRUCTS,
+ to_rust_ident = style_template.module.to_rust_ident)
print(output.encode('utf8'))
except:
sys.stderr.write(exceptions.text_error_template().render().encode('utf8'))
diff --git a/ports/geckolib/properties.mako.rs b/ports/geckolib/properties.mako.rs
index 9beada1cc43..3a5cc57b052 100644
--- a/ports/geckolib/properties.mako.rs
+++ b/ports/geckolib/properties.mako.rs
@@ -13,6 +13,7 @@ use bindings::Gecko_CopyConstruct_${style_struct.gecko_ffi_name};
use bindings::Gecko_Destroy_${style_struct.gecko_ffi_name};
% endif
% endfor
+use gecko_style_structs;
use heapsize::HeapSizeOf;
use std::fmt::{self, Debug};
use std::mem::zeroed;
@@ -165,6 +166,37 @@ impl Debug for ${style_struct.gecko_ffi_name} {
</%def>
<%def name="raw_impl_trait(style_struct, skip_longhands=None, skip_additionals=None)">
+<%
+ longhands = [x for x in style_struct.longhands
+ if not (skip_longhands and x.name in skip_longhands)]
+
+ #
+ # Make a list of types we can't auto-generate.
+ #
+ force_stub = [];
+ # These are currently being shuffled to a different style struct on the gecko side.
+ force_stub += ["backface-visibility", "transform-box", "transform-style"]
+ # These live in nsStyleImageLayers in gecko. Need to figure out what to do about that.
+ force_stub += ["background-repeat", "background-attachment", "background-clip", "background-origin"];
+ # These live in an nsFont member in Gecko. Should be straightforward to do manually.
+ force_stub += ["font-kerning", "font-stretch", "font-style", "font-variant"]
+ # These have unusual representations in gecko.
+ force_stub += ["list-style-type", "text-overflow"]
+ # Enum class instead of NS_STYLE_...
+ force_stub += ["box-sizing"]
+ # Inconsistent constant naming in gecko
+ force_stub += ["unicode-bidi"]
+ # Need to figure out why servo has sideways-left computed value and gecko doesn't
+ force_stub += ["text-orientation"]
+ # Automatic mapping generates NS_STYLE_TEXT_DECORATION_STYLE__MOZ_NONE instead of
+ # NS_STYLE_TEXT_DECORATION_STYLE__NONE
+ force_stub += ["text-decoration-style"]
+ # These are booleans.
+ force_stub += ["page-break-after", "page-break-before"]
+
+ 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]
+%>
impl ${style_struct.trait_name} for ${style_struct.gecko_struct_name} {
/*
* Manually-Implemented Methods.
@@ -174,9 +206,26 @@ impl ${style_struct.trait_name} for ${style_struct.gecko_struct_name} {
/*
* Auto-Generated Methods.
*/
- <% longhands = [x for x in style_struct.longhands
- if not (skip_longhands and x.name in skip_longhands)] %>
- % for longhand in longhands:
+ % for longhand in keyword_longhands:
+ fn set_${longhand.ident}(&mut self, v: longhands::${longhand.ident}::computed_value::T) {
+ use gecko_style_structs as gss;
+ use style::properties::longhands::${longhand.ident}::computed_value::T as Keyword;
+ // FIXME(bholley): Align binary representations and ditch |match| for cast + static_asserts
+ self.gecko.${longhand.gecko_ffi_name} = match v {
+ % for value in longhand.keyword.values_for('gecko'):
+ Keyword::${to_rust_ident(value)} => gss::${longhand.keyword.gecko_constant(value)} as u8,
+ % endfor
+ };
+ }
+ fn copy_${longhand.ident}_from(&mut self, other: &Self) {
+ self.gecko.${longhand.gecko_ffi_name} = other.gecko.${longhand.gecko_ffi_name};
+ }
+ % endfor
+
+ /*
+ * Stubs.
+ */
+ % for longhand in stub_longhands:
fn set_${longhand.ident}(&mut self, _: longhands::${longhand.ident}::computed_value::T) {
unimplemented!()
}