From 5fd398ec06e34566d8b7fb3af53474f3d6b718d0 Mon Sep 17 00:00:00 2001 From: Ravi Shankar Date: Fri, 7 Oct 2016 22:15:20 +0530 Subject: [PATCH 1/3] Change 'image_rendering' enum variants to snake cases --- components/gfx/paint_context.rs | 4 +-- components/layout/display_list_builder.rs | 2 +- components/layout/webrender_helpers.rs | 6 ++--- .../properties/longhand/inherited_box.mako.rs | 25 ++++++++++--------- 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/components/gfx/paint_context.rs b/components/gfx/paint_context.rs index e671a12344e..51a1bf2795f 100644 --- a/components/gfx/paint_context.rs +++ b/components/gfx/paint_context.rs @@ -222,8 +222,8 @@ impl<'a> PaintContext<'a> { // conforming implementation of `crisp-edges`, but it is not the best we could do. // Something like Scale2x would be ideal. let draw_surface_filter = match image_rendering { - image_rendering::T::Auto => Filter::Linear, - image_rendering::T::CrispEdges | image_rendering::T::Pixelated => Filter::Point, + image_rendering::T::auto => Filter::Linear, + image_rendering::T::crispedges | image_rendering::T::pixelated => Filter::Point, }; let draw_surface_options = DrawSurfaceOptions::new(draw_surface_filter, true); diff --git a/components/layout/display_list_builder.rs b/components/layout/display_list_builder.rs index c62518a9977..91b70ebed34 100644 --- a/components/layout/display_list_builder.rs +++ b/components/layout/display_list_builder.rs @@ -1331,7 +1331,7 @@ impl FragmentDisplayListBuilding for Fragment { }, stretch_size: stacking_relative_content_box.size, tile_spacing: Size2D::zero(), - image_rendering: image_rendering::T::Auto, + image_rendering: image_rendering::T::auto, }) } CanvasData::WebGL(context_id) => { diff --git a/components/layout/webrender_helpers.rs b/components/layout/webrender_helpers.rs index e18eeeb5fb9..9ec470e1b7f 100644 --- a/components/layout/webrender_helpers.rs +++ b/components/layout/webrender_helpers.rs @@ -218,9 +218,9 @@ trait ToImageRendering { impl ToImageRendering for image_rendering::T { fn to_image_rendering(&self) -> webrender_traits::ImageRendering { match *self { - image_rendering::T::CrispEdges => webrender_traits::ImageRendering::CrispEdges, - image_rendering::T::Auto => webrender_traits::ImageRendering::Auto, - image_rendering::T::Pixelated => webrender_traits::ImageRendering::Pixelated, + image_rendering::T::crispedges => webrender_traits::ImageRendering::CrispEdges, + image_rendering::T::auto => webrender_traits::ImageRendering::Auto, + image_rendering::T::pixelated => webrender_traits::ImageRendering::Pixelated, } } } diff --git a/components/style/properties/longhand/inherited_box.mako.rs b/components/style/properties/longhand/inherited_box.mako.rs index 26abe0bb5d8..b267abd77b0 100644 --- a/components/style/properties/longhand/inherited_box.mako.rs +++ b/components/style/properties/longhand/inherited_box.mako.rs @@ -45,20 +45,21 @@ ${helpers.single_keyword("color-adjust", use cssparser::ToCss; use std::fmt; + #[allow(non_camel_case_types)] #[derive(Copy, Clone, Debug, PartialEq)] #[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))] pub enum T { - Auto, - CrispEdges, - Pixelated, + auto, + crispedges, + pixelated, } impl ToCss for T { fn to_css(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { match *self { - T::Auto => dest.write_str("auto"), - T::CrispEdges => dest.write_str("crisp-edges"), - T::Pixelated => dest.write_str("pixelated"), + T::auto => dest.write_str("auto"), + T::crispedges => dest.write_str("crisp-edges"), + T::pixelated => dest.write_str("pixelated"), } } } @@ -71,7 +72,7 @@ ${helpers.single_keyword("color-adjust", #[inline] pub fn get_initial_value() -> computed_value::T { - computed_value::T::Auto + computed_value::T::auto } pub fn parse(_: &ParserContext, input: &mut Parser) -> Result { @@ -79,11 +80,11 @@ ${helpers.single_keyword("color-adjust", // `auto`. match_ignore_ascii_case! { try!(input.expect_ident()), - "auto" => Ok(computed_value::T::Auto), - "optimizespeed" => Ok(computed_value::T::Auto), - "optimizequality" => Ok(computed_value::T::Auto), - "crisp-edges" => Ok(computed_value::T::CrispEdges), - "pixelated" => Ok(computed_value::T::Pixelated), + "auto" => Ok(computed_value::T::auto), + "optimizespeed" => Ok(computed_value::T::auto), + "optimizequality" => Ok(computed_value::T::auto), + "crisp-edges" => Ok(computed_value::T::crispedges), + "pixelated" => Ok(computed_value::T::pixelated), _ => Err(()) } } From 710157c61763f6c2adf4b069d636c3ba3df70bdf Mon Sep 17 00:00:00 2001 From: Ravi Shankar Date: Fri, 7 Oct 2016 17:59:19 +0530 Subject: [PATCH 2/3] Add support for 'image-rendering' in geckolib --- components/style/properties/gecko.mako.rs | 13 ++++++++- .../properties/longhand/inherited_box.mako.rs | 27 ++++++++++++++----- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs index acc3ee86fa6..dec820cd180 100644 --- a/components/style/properties/gecko.mako.rs +++ b/components/style/properties/gecko.mako.rs @@ -219,7 +219,7 @@ def set_gecko_property(ffi_name, expr): // FIXME(bholley): Align binary representations and ditch |match| for cast + static_asserts let result = match v { % for value in keyword.values_for('gecko'): - Keyword::${to_rust_ident(value)} => structs::${keyword.gecko_constant(value)} ${keyword.maybe_cast("u8")}, + Keyword::${to_rust_ident(value)} => structs::${keyword.gecko_constant(value)} ${keyword.maybe_cast("u8")}, % endfor }; ${set_gecko_property(gecko_ffi_name, "result")} @@ -1445,6 +1445,17 @@ fn static_assert() { +<%self:impl_trait style_struct_name="InheritedBox" + skip_longhands="image-rendering"> + + <% render_keyword = Keyword("image-rendering", + "auto optimizequality optimizespeed crispedges") %> + + ${impl_keyword('image_rendering', 'mImageRendering', render_keyword, need_clone=False)} + + + + <%self:impl_trait style_struct_name="InheritedText" skip_longhands="text-align text-shadow line-height letter-spacing word-spacing"> diff --git a/components/style/properties/longhand/inherited_box.mako.rs b/components/style/properties/longhand/inherited_box.mako.rs index b267abd77b0..4a5368ddbc6 100644 --- a/components/style/properties/longhand/inherited_box.mako.rs +++ b/components/style/properties/longhand/inherited_box.mako.rs @@ -40,7 +40,7 @@ ${helpers.single_keyword("color-adjust", "economy exact", products="gecko", animatable=False)} -<%helpers:longhand name="image-rendering" products="servo" animatable="False"> +<%helpers:longhand name="image-rendering" animatable="False"> pub mod computed_value { use cssparser::ToCss; use std::fmt; @@ -51,7 +51,12 @@ ${helpers.single_keyword("color-adjust", pub enum T { auto, crispedges, - pixelated, + % if product == "gecko": + optimizequality, + optimizespeed, + % else: + pixelated, // firefox doesn't support it (https://bugzilla.mozilla.org/show_bug.cgi?id=856337) + % endif } impl ToCss for T { @@ -59,7 +64,12 @@ ${helpers.single_keyword("color-adjust", match *self { T::auto => dest.write_str("auto"), T::crispedges => dest.write_str("crisp-edges"), - T::pixelated => dest.write_str("pixelated"), + % if product == "gecko": + T::optimizequality => dest.write_str("optimizeQuality"), + T::optimizespeed => dest.write_str("optimizeSpeed"), + % else: + T::pixelated => dest.write_str("pixelated"), + % endif } } } @@ -81,10 +91,15 @@ ${helpers.single_keyword("color-adjust", match_ignore_ascii_case! { try!(input.expect_ident()), "auto" => Ok(computed_value::T::auto), - "optimizespeed" => Ok(computed_value::T::auto), - "optimizequality" => Ok(computed_value::T::auto), "crisp-edges" => Ok(computed_value::T::crispedges), - "pixelated" => Ok(computed_value::T::pixelated), + % if product == "gecko": + "optimizequality" => Ok(computed_value::T::optimizequality), + "optimizespeed" => Ok(computed_value::T::optimizespeed), + % else: + "optimizequality" => Ok(computed_value::T::auto), + "optimizespeed" => Ok(computed_value::T::auto), + "pixelated" => Ok(computed_value::T::pixelated), + % endif _ => Err(()) } } From e7a9e46c2737d078a035f850eb5031bfe1e1bf51 Mon Sep 17 00:00:00 2001 From: Ravi Shankar Date: Fri, 7 Oct 2016 20:55:26 +0530 Subject: [PATCH 3/3] Make use of existing helper for font-stretch --- components/style/properties/gecko.mako.rs | 31 ++++++++--------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs index dec820cd180..356402593e2 100644 --- a/components/style/properties/gecko.mako.rs +++ b/components/style/properties/gecko.mako.rs @@ -212,14 +212,15 @@ def set_gecko_property(ffi_name, expr): return "self.gecko.%s = %s;" % (ffi_name, expr) %> -<%def name="impl_keyword_setter(ident, gecko_ffi_name, keyword)"> +<%def name="impl_keyword_setter(ident, gecko_ffi_name, keyword, cast_type='u8')"> #[allow(non_snake_case)] pub fn set_${ident}(&mut self, v: longhands::${ident}::computed_value::T) { use properties::longhands::${ident}::computed_value::T as Keyword; // FIXME(bholley): Align binary representations and ditch |match| for cast + static_asserts let result = match v { % for value in keyword.values_for('gecko'): - Keyword::${to_rust_ident(value)} => structs::${keyword.gecko_constant(value)} ${keyword.maybe_cast("u8")}, + Keyword::${to_rust_ident(value)} => + structs::${keyword.gecko_constant(value)} ${keyword.maybe_cast(cast_type)}, % endfor }; ${set_gecko_property(gecko_ffi_name, "result")} @@ -278,8 +279,8 @@ def set_gecko_property(ffi_name, expr): } -<%def name="impl_keyword(ident, gecko_ffi_name, keyword, need_clone)"> -<%call expr="impl_keyword_setter(ident, gecko_ffi_name, keyword)"> +<%def name="impl_keyword(ident, gecko_ffi_name, keyword, need_clone, **kwargs)"> +<%call expr="impl_keyword_setter(ident, gecko_ffi_name, keyword, **kwargs)"> <%call expr="impl_simple_copy(ident, gecko_ffi_name)"> %if need_clone: <%call expr="impl_keyword_clone(ident, gecko_ffi_name, keyword)"> @@ -790,23 +791,13 @@ fn static_assert() { Au(self.gecko.mSize) } - pub fn set_font_stretch(&mut self, v: longhands::font_stretch::computed_value::T) { - use computed_values::font_stretch::T; + <% stretch_keyword = Keyword("font-stretch", + "normal ultra-condensed extra-condensed condensed " + + "semi-condensed semi-expanded expanded " + + "extra-expanded ultra-expanded", + gecko_constant_prefix='NS_FONT_STRETCH') %> - self.gecko.mFont.stretch = match v { - T::normal => structs::NS_FONT_STRETCH_NORMAL as i16, - T::ultra_condensed => structs::NS_FONT_STRETCH_ULTRA_CONDENSED as i16, - T::extra_condensed => structs::NS_FONT_STRETCH_EXTRA_CONDENSED as i16, - T::condensed => structs::NS_FONT_STRETCH_CONDENSED as i16, - T::semi_condensed => structs::NS_FONT_STRETCH_SEMI_CONDENSED as i16, - T::semi_expanded => structs::NS_FONT_STRETCH_SEMI_EXPANDED as i16, - T::expanded => structs::NS_FONT_STRETCH_EXPANDED as i16, - T::extra_expanded => structs::NS_FONT_STRETCH_EXTRA_EXPANDED as i16, - T::ultra_expanded => structs::NS_FONT_STRETCH_ULTRA_EXPANDED as i16, - }; - } - - ${impl_simple_copy('font_stretch', 'mFont.stretch')} + ${impl_keyword('font_stretch', 'mFont.stretch', stretch_keyword, need_clone=False, cast_type='i16')} pub fn set_font_weight(&mut self, v: longhands::font_weight::computed_value::T) { self.gecko.mFont.weight = v as u16;