Bug 1365100 - stylo: Fix inheritance of multiple background images. r?Manishearth
MozReview-Commit-ID: 3ru09WpyFzc
--- a/layout/reftests/backgrounds/reftest.list
+++ b/layout/reftests/backgrounds/reftest.list
@@ -1,16 +1,16 @@
include gradient/reftest.list
include vector/reftest.list
== layers-stacking-order.xhtml layers-stacking-order-ref.xhtml
== layers-layer-count-cascade-1.xhtml layers-layer-count-1-ref.xhtml
== layers-layer-count-inheritance-1.xhtml layers-layer-count-1-ref.xhtml
== layers-layer-count-cascade-2.xhtml layers-layer-count-2-ref.xhtml
-fails-if(stylo) == layers-layer-count-inheritance-2.xhtml layers-layer-count-2-ref.xhtml
+== layers-layer-count-inheritance-2.xhtml layers-layer-count-2-ref.xhtml
fuzzy-if(Android,9,600000) fuzzy-if(skiaContent,1,5000) == viewport-translucent-color-1.html viewport-translucent-color-ref.html
fuzzy-if(skiaContent,1,5000) == viewport-translucent-color-2.html viewport-translucent-color-ref.html
fuzzy-if(skiaContent,1,5000) == viewport-translucent-color-3.html viewport-translucent-color-ref.html
!= viewport-translucent-color-ref.html about:blank
fuzzy-if(skiaContent,1,10000) == iframe-translucent-color-1.html iframe-translucent-color-ref.html
fuzzy-if(skiaContent,1,1024) == translucent-color-1.html translucent-color-ref.html
fuzzy-if(skiaContent,1,1024) == translucent-color-2.html translucent-color-ref.html
fuzzy-if(skiaContent,1,1024) == translucent-color-3.html translucent-color-ref.html
--- a/servo/components/style/properties/gecko.mako.rs
+++ b/servo/components/style/properties/gecko.mako.rs
@@ -2845,19 +2845,31 @@ fn static_assert() {
height: to_servo(layer.mSize.mHeight._base, layer.mSize.mHeightType),
})
}).collect()
)
}
pub fn copy_${shorthand}_image_from(&mut self, other: &Self) {
+ use gecko_bindings::structs::nsStyleImageLayers_LayerType as LayerType;
unsafe {
- Gecko_CopyImageValueFrom(&mut self.gecko.${image_layers_field}.mLayers.mFirstElement.mImage,
- &other.gecko.${image_layers_field}.mLayers.mFirstElement.mImage);
+ let count = other.gecko.${image_layers_field}.mImageCount;
+ unsafe {
+ Gecko_EnsureImageLayersLength(&mut self.gecko.${image_layers_field},
+ count as usize,
+ LayerType::${shorthand.capitalize()});
+ }
+
+ for (layer, other) in self.gecko.${image_layers_field}.mLayers.iter_mut()
+ .zip(other.gecko.${image_layers_field}.mLayers.iter())
+ .take(count as usize) {
+ Gecko_CopyImageValueFrom(&mut layer.mImage, &other.mImage);
+ }
+ self.gecko.${image_layers_field}.mImageCount = count;
}
}
#[allow(unused_variables)]
pub fn set_${shorthand}_image<I>(&mut self, images: I, cacheable: &mut bool)
where I: IntoIterator<Item = longhands::${shorthand}_image::computed_value::single_value::T>,
I::IntoIter: ExactSizeIterator
{