Bug 1365370 - stylo: Use correct counts when copying from image layers. r?Manishearth
MozReview-Commit-ID: wLyEM2BC6W
--- a/servo/components/style/properties/gecko.mako.rs
+++ b/servo/components/style/properties/gecko.mako.rs
@@ -2615,29 +2615,28 @@ fn static_assert() {
<%def name="simple_image_array_property(name, shorthand, field_name)">
<%
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;
+ let count = other.gecko.${image_layers_field}.${field_name}Count;
unsafe {
Gecko_EnsureImageLayersLength(&mut self.gecko.${image_layers_field},
- other.gecko.${image_layers_field}.mLayers.len(),
+ count as usize,
LayerType::${shorthand.title()});
}
for (layer, other) in self.gecko.${image_layers_field}.mLayers.iter_mut()
.zip(other.gecko.${image_layers_field}.mLayers.iter())
- .take(other.gecko.${image_layers_field}
- .${field_name}Count as usize) {
+ .take(count as usize) {
layer.${field_name} = other.${field_name};
}
- self.gecko.${image_layers_field}.${field_name}Count =
- other.gecko.${image_layers_field}.${field_name}Count;
+ self.gecko.${image_layers_field}.${field_name}Count = count;
}
pub fn set_${shorthand}_${name}<I>(&mut self, v: I)
where I: IntoIterator<Item=longhands::${shorthand}_${name}::computed_value::single_value::T>,
I::IntoIter: ExactSizeIterator
{
use gecko_bindings::structs::nsStyleImageLayers_LayerType as LayerType;
@@ -2720,33 +2719,31 @@ fn static_assert() {
% endif
}
</%self:simple_image_array_property>
% for orientation in ["x", "y"]:
pub fn copy_${shorthand}_position_${orientation}_from(&mut self, other: &Self) {
use gecko_bindings::structs::nsStyleImageLayers_LayerType as LayerType;
- self.gecko.${image_layers_field}.mPosition${orientation.upper()}Count
- = cmp::min(1, other.gecko.${image_layers_field}.mPosition${orientation.upper()}Count);
- self.gecko.${image_layers_field}.mLayers.mFirstElement.mPosition =
- other.gecko.${image_layers_field}.mLayers.mFirstElement.mPosition;
+ let count = other.gecko.${image_layers_field}.mPosition${orientation.upper()}Count;
+
unsafe {
Gecko_EnsureImageLayersLength(&mut self.gecko.${image_layers_field},
- other.gecko.${image_layers_field}.mLayers.len(),
+ 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()) {
+ .zip(other.gecko.${image_layers_field}.mLayers.iter())
+ .take(count as usize) {
layer.mPosition.m${orientation.upper()}Position
= other.mPosition.m${orientation.upper()}Position;
}
- self.gecko.${image_layers_field}.mPosition${orientation.upper()}Count
- = other.gecko.${image_layers_field}.mPosition${orientation.upper()}Count;
+ self.gecko.${image_layers_field}.mPosition${orientation.upper()}Count = count;
}
pub fn clone_${shorthand}_position_${orientation}(&self)
-> longhands::${shorthand}_position_${orientation}::computed_value::T {
longhands::${shorthand}_position_${orientation}::computed_value::T(
self.gecko.${image_layers_field}.mLayers.iter()
.take(self.gecko.${image_layers_field}.mPosition${orientation.upper()}Count as usize)
.map(|position| position.mPosition.m${orientation.upper()}Position.into())