Skip to content

Commit

Permalink
Fill extra layers in background style struct before handing off to Gecko
Browse files Browse the repository at this point in the history
  • Loading branch information
Manishearth committed Aug 22, 2016
1 parent 12f2725 commit a98c0fc
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 0 deletions.
18 changes: 18 additions & 0 deletions components/style/properties/gecko.mako.rs
Expand Up @@ -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="*">
Expand Down
4 changes: 4 additions & 0 deletions components/style/properties/properties.mako.rs
Expand Up @@ -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() {
Expand Down
2 changes: 2 additions & 0 deletions ports/geckolib/gecko_bindings/bindings.rs
Expand Up @@ -333,6 +333,8 @@ extern "C" {
pub fn Gecko_DestroyClipPath(clip: *mut StyleClipPath);
pub fn Gecko_NewBasicShape(type_: StyleBasicShapeType)
-> *mut StyleBasicShape;
pub fn Gecko_FillAllBackgroundLists(layers: *mut nsStyleImageLayers,
maxLen: u32);
pub fn Gecko_AddRefCalcArbitraryThread(aPtr: *mut Calc);
pub fn Gecko_ReleaseCalcArbitraryThread(aPtr: *mut Calc);
pub fn Gecko_Construct_nsStyleFont(ptr: *mut nsStyleFont);
Expand Down

0 comments on commit a98c0fc

Please sign in to comment.