From c50402946bbae8f0cc883bafee3372b4250db14c Mon Sep 17 00:00:00 2001 From: Cameron McCormack Date: Tue, 11 Oct 2016 10:53:48 +0800 Subject: [PATCH 1/2] Regenerate bindings. MozReview-Commit-ID: 6Msio9WdI5M --- components/style/gecko_bindings/bindings.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/components/style/gecko_bindings/bindings.rs b/components/style/gecko_bindings/bindings.rs index 4906c1b3ba5..54777842e55 100644 --- a/components/style/gecko_bindings/bindings.rs +++ b/components/style/gecko_bindings/bindings.rs @@ -500,12 +500,9 @@ extern "C" { } extern "C" { pub fn Gecko_EnsureImageLayersLength(layers: *mut nsStyleImageLayers, - len: usize); -} -extern "C" { - pub fn Gecko_InitializeImageLayer(layer: *mut nsStyleImageLayers_Layer, - layer_type: - nsStyleImageLayers_LayerType); + len: usize, + layer_type: + nsStyleImageLayers_LayerType); } extern "C" { pub fn Gecko_ResetStyleCoord(unit: *mut nsStyleUnit, From 1a244693986290d615831ec2b593126b698a0b42 Mon Sep 17 00:00:00 2001 From: Cameron McCormack Date: Tue, 11 Oct 2016 11:01:55 +0800 Subject: [PATCH 2/2] Avoid initializing image layers after repeat/origin values have been written. MozReview-Commit-ID: LeetT5lKKKB --- components/style/properties/gecko.mako.rs | 28 +++++++++++++++-------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs index add67265fdf..c6c57cda861 100644 --- a/components/style/properties/gecko.mako.rs +++ b/components/style/properties/gecko.mako.rs @@ -23,7 +23,7 @@ use gecko_bindings::bindings::{Gecko_SetNullImageValue, Gecko_SetGradientImageVa use gecko_bindings::bindings::{Gecko_EnsureImageLayersLength, Gecko_CreateGradient}; use gecko_bindings::bindings::{Gecko_CopyImageValueFrom, Gecko_CopyFontFamilyFrom}; use gecko_bindings::bindings::{Gecko_FontFamilyList_AppendGeneric, Gecko_FontFamilyList_AppendNamed}; -use gecko_bindings::bindings::{Gecko_FontFamilyList_Clear, Gecko_InitializeImageLayer}; +use gecko_bindings::bindings::{Gecko_FontFamilyList_Clear}; use gecko_bindings::bindings::ServoComputedValuesBorrowedOrNull; use gecko_bindings::structs; use gecko_bindings::sugar::ns_style_coord::{CoordDataValue, CoordData, CoordDataMut}; @@ -949,9 +949,12 @@ fn static_assert() { image_layers_field = "mImage" if shorthand == "background" else "mMask" %> pub fn copy_${shorthand}_${name}_from(&mut self, other: &Self) { + use gecko_bindings::structs::nsStyleImageLayers_LayerType as LayerType; + unsafe { Gecko_EnsureImageLayersLength(&mut self.gecko.${image_layers_field}, - other.gecko.${image_layers_field}.mLayers.len()); + other.gecko.${image_layers_field}.mLayers.len(), + LayerType::${shorthand.title()}); } for (layer, other) in self.gecko.${image_layers_field}.mLayers.iter_mut() .zip(other.gecko.${image_layers_field}.mLayers.iter()) @@ -965,8 +968,11 @@ fn static_assert() { pub fn set_${shorthand}_${name}(&mut self, v: longhands::${shorthand}_${name}::computed_value::T) { + use gecko_bindings::structs::nsStyleImageLayers_LayerType as LayerType; + unsafe { - Gecko_EnsureImageLayersLength(&mut self.gecko.${image_layers_field}, v.0.len()); + Gecko_EnsureImageLayersLength(&mut self.gecko.${image_layers_field}, v.0.len(), + LayerType::${shorthand.title()}); } self.gecko.${image_layers_field}.${field_name}Count = v.0.len() as u32; @@ -1032,6 +1038,8 @@ fn static_assert() { pub fn copy_${shorthand}_position_from(&mut self, other: &Self) { + use gecko_bindings::structs::nsStyleImageLayers_LayerType as LayerType; + self.gecko.${image_layers_field}.mPositionXCount = cmp::min(1, other.gecko.${image_layers_field}.mPositionXCount); self.gecko.${image_layers_field}.mPositionYCount @@ -1040,7 +1048,8 @@ fn static_assert() { other.gecko.${image_layers_field}.mLayers.mFirstElement.mPosition; unsafe { Gecko_EnsureImageLayersLength(&mut self.gecko.${image_layers_field}, - other.gecko.${image_layers_field}.mLayers.len()); + other.gecko.${image_layers_field}.mLayers.len(), + LayerType::${shorthand.title()}); } for (layer, other) in self.gecko.${image_layers_field}.mLayers.iter_mut() .zip(other.gecko.${image_layers_field}.mLayers.iter()) @@ -1077,8 +1086,11 @@ fn static_assert() { pub fn set_${shorthand}_position(&mut self, v: longhands::${shorthand}_position::computed_value::T) { + use gecko_bindings::structs::nsStyleImageLayers_LayerType as LayerType; + unsafe { - Gecko_EnsureImageLayersLength(&mut self.gecko.${image_layers_field}, v.0.len()); + Gecko_EnsureImageLayersLength(&mut self.gecko.${image_layers_field}, v.0.len(), + LayerType::${shorthand.title()}); } self.gecko.${image_layers_field}.mPositionXCount = v.0.len() as u32; @@ -1344,10 +1356,8 @@ fn static_assert() { Gecko_SetNullImageValue(&mut image.mImage) } // XXXManishearth clear mSourceURI for masks - Gecko_EnsureImageLayersLength(&mut self.gecko.${image_layers_field}, images.0.len()); - for image in &mut self.gecko.${image_layers_field}.mLayers { - Gecko_InitializeImageLayer(image, LayerType::${shorthand.title()}); - } + Gecko_EnsureImageLayersLength(&mut self.gecko.${image_layers_field}, images.0.len(), + LayerType::${shorthand.title()}); } self.gecko.${image_layers_field}.mImageCount = images.0.len() as u32;