Fill extra layers in background style struct before handing off to Gecko

This commit is contained in:
Manish Goregaokar 2016-08-22 18:40:56 +05:30
parent 12f272587e
commit a98c0fc037
3 changed files with 24 additions and 0 deletions

View file

@ -1178,6 +1178,24 @@ fn static_assert() {
}
}
pub fn fill_arrays(&mut self) {
use gecko_bindings::bindings::Gecko_FillAllBackgroundLists;
use std::cmp;
let mut max_len = 1;
% for member in "mRepeat mClip mOrigin mAttachment mPositionX mPositionY mImage".split():
max_len = cmp::max(max_len, self.gecko.mImage.${member}Count);
% endfor
// XXXManishearth Gecko does an optimization here where it only
// fills things in if any of the properties have been set
unsafe {
// While we could do this manually, we'd need to also manually
// run all the copy constructors, so we just delegate to gecko
Gecko_FillAllBackgroundLists(&mut self.gecko.mImage, max_len);
}
}
</%self:impl_trait>
<%self:impl_trait style_struct_name="List" skip_longhands="list-style-type" skip_additionals="*">

View file

@ -2034,6 +2034,10 @@ pub fn cascade(viewport_size: Size2D<Au>,
}
% endfor
% if product == "gecko":
style.mutate_background().fill_arrays();
% endif
// The initial value of outline width may be changed at computed value time.
if style.get_outline().clone_outline_style().none_or_hidden() &&
style.get_outline().outline_has_nonzero_width() {