From 888012dcf6cf46c6b82700e41a31e4f3785798c0 Mon Sep 17 00:00:00 2001 From: Xidorn Quan Date: Fri, 11 Aug 2017 20:43:20 +1000 Subject: [PATCH] Make nsStylePosition::mGridTemplate{Columns,Rows} a UniquePtr. --- components/style/gecko/generated/bindings.rs | 14 +- .../style/gecko/generated/structs_debug.rs | 112 ++++++++++++-- .../style/gecko/generated/structs_release.rs | 112 ++++++++++++-- components/style/properties/gecko.mako.rs | 146 ++++++++---------- 4 files changed, 272 insertions(+), 112 deletions(-) diff --git a/components/style/gecko/generated/bindings.rs b/components/style/gecko/generated/bindings.rs index 52ee3dfd615..2f9b9d720ce 100644 --- a/components/style/gecko/generated/bindings.rs +++ b/components/style/gecko/generated/bindings.rs @@ -16,6 +16,7 @@ use gecko_bindings::structs::mozilla::css::URLValue; use gecko_bindings::structs::mozilla::css::URLValueData; use gecko_bindings::structs::mozilla::MallocSizeOf; use gecko_bindings::structs::mozilla::Side; +use gecko_bindings::structs::mozilla::UniquePtr; use gecko_bindings::structs::nsIContent; use gecko_bindings::structs::nsIDocument; use gecko_bindings::structs::nsIDocument_DocumentTheme; @@ -1121,18 +1122,17 @@ extern "C" { length: u32); } extern "C" { - pub fn Gecko_SetStyleGridTemplateArrayLengths(grid_template: - *mut nsStyleGridTemplate, - track_sizes: u32); + pub fn Gecko_SetStyleGridTemplate(grid_template: + *mut UniquePtr, + value: *mut nsStyleGridTemplate); } extern "C" { - pub fn Gecko_SetGridTemplateLineNamesLength(grid_template: - *mut nsStyleGridTemplate, - track_sizes: u32); + pub fn Gecko_CreateStyleGridTemplate(track_sizes: u32, name_size: u32) + -> *mut nsStyleGridTemplate; } extern "C" { pub fn Gecko_CopyStyleGridTemplateValues(grid_template: - *mut nsStyleGridTemplate, + *mut UniquePtr, other: *const nsStyleGridTemplate); } diff --git a/components/style/gecko/generated/structs_debug.rs b/components/style/gecko/generated/structs_debug.rs index ce891a52f81..066370e6486 100644 --- a/components/style/gecko/generated/structs_debug.rs +++ b/components/style/gecko/generated/structs_debug.rs @@ -5195,7 +5195,7 @@ pub mod root { } #[test] fn bindgen_test_layout_GeckoPosition() { - assert_eq!(::std::mem::size_of::() , 520usize , + assert_eq!(::std::mem::size_of::() , 440usize , concat ! ( "Size of: " , stringify ! ( GeckoPosition ) )); assert_eq! (::std::mem::align_of::() , 8usize , @@ -14055,8 +14055,8 @@ pub mod root { pub mFlexGrow: f32, pub mFlexShrink: f32, pub mZIndex: root::nsStyleCoord, - pub mGridTemplateColumns: root::nsStyleGridTemplate, - pub mGridTemplateRows: root::nsStyleGridTemplate, + pub mGridTemplateColumns: root::mozilla::UniquePtr, + pub mGridTemplateRows: root::mozilla::UniquePtr, pub mGridTemplateAreas: root::RefPtr, pub mGridColumnStart: root::nsStyleGridLine, pub mGridColumnEnd: root::nsStyleGridLine, @@ -14068,7 +14068,7 @@ pub mod root { pub const nsStylePosition_kHasFinishStyle: bool = false; #[test] fn bindgen_test_layout_nsStylePosition() { - assert_eq!(::std::mem::size_of::() , 520usize , + assert_eq!(::std::mem::size_of::() , 440usize , concat ! ( "Size of: " , stringify ! ( nsStylePosition ) )); assert_eq! (::std::mem::align_of::() , 8usize , @@ -14232,45 +14232,45 @@ pub mod root { "::" , stringify ! ( mGridTemplateColumns ) )); assert_eq! (unsafe { & ( * ( 0 as * const nsStylePosition ) ) . - mGridTemplateRows as * const _ as usize } , 336usize , + mGridTemplateRows as * const _ as usize } , 296usize , concat ! ( "Alignment of field: " , stringify ! ( nsStylePosition ) , "::" , stringify ! ( mGridTemplateRows ) )); assert_eq! (unsafe { & ( * ( 0 as * const nsStylePosition ) ) . - mGridTemplateAreas as * const _ as usize } , 384usize , + mGridTemplateAreas as * const _ as usize } , 304usize , concat ! ( "Alignment of field: " , stringify ! ( nsStylePosition ) , "::" , stringify ! ( mGridTemplateAreas ) )); assert_eq! (unsafe { & ( * ( 0 as * const nsStylePosition ) ) . - mGridColumnStart as * const _ as usize } , 392usize , + mGridColumnStart as * const _ as usize } , 312usize , concat ! ( "Alignment of field: " , stringify ! ( nsStylePosition ) , "::" , stringify ! ( mGridColumnStart ) )); assert_eq! (unsafe { & ( * ( 0 as * const nsStylePosition ) ) . mGridColumnEnd - as * const _ as usize } , 416usize , concat ! ( + as * const _ as usize } , 336usize , concat ! ( "Alignment of field: " , stringify ! ( nsStylePosition ) , "::" , stringify ! ( mGridColumnEnd ) )); assert_eq! (unsafe { & ( * ( 0 as * const nsStylePosition ) ) . mGridRowStart - as * const _ as usize } , 440usize , concat ! ( + as * const _ as usize } , 360usize , concat ! ( "Alignment of field: " , stringify ! ( nsStylePosition ) , "::" , stringify ! ( mGridRowStart ) )); assert_eq! (unsafe { & ( * ( 0 as * const nsStylePosition ) ) . mGridRowEnd as - * const _ as usize } , 464usize , concat ! ( + * const _ as usize } , 384usize , concat ! ( "Alignment of field: " , stringify ! ( nsStylePosition ) , "::" , stringify ! ( mGridRowEnd ) )); assert_eq! (unsafe { & ( * ( 0 as * const nsStylePosition ) ) . mGridColumnGap - as * const _ as usize } , 488usize , concat ! ( + as * const _ as usize } , 408usize , concat ! ( "Alignment of field: " , stringify ! ( nsStylePosition ) , "::" , stringify ! ( mGridColumnGap ) )); assert_eq! (unsafe { & ( * ( 0 as * const nsStylePosition ) ) . mGridRowGap as - * const _ as usize } , 504usize , concat ! ( + * const _ as usize } , 424usize , concat ! ( "Alignment of field: " , stringify ! ( nsStylePosition ) , "::" , stringify ! ( mGridRowGap ) )); } @@ -33750,6 +33750,50 @@ pub mod root { root::nsCOMPtr ) )); } #[test] + fn __bindgen_test_layout_UniquePtr_open0_nsStyleGridTemplate_DefaultDelete_open1_nsStyleGridTemplate_close1_close0_instantiation() { + assert_eq!(::std::mem::size_of::>() + , 8usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::UniquePtr ) )); + assert_eq!(::std::mem::align_of::>() + , 8usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::UniquePtr ) )); + } + #[test] + fn __bindgen_test_layout_DefaultDelete_open0_nsStyleGridTemplate_close0_instantiation() { + assert_eq!(::std::mem::size_of::() , + 1usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::DefaultDelete ) )); + assert_eq!(::std::mem::align_of::() , + 1usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::DefaultDelete ) )); + } + #[test] + fn __bindgen_test_layout_UniquePtr_open0_nsStyleGridTemplate_DefaultDelete_open1_nsStyleGridTemplate_close1_close0_instantiation_1() { + assert_eq!(::std::mem::size_of::>() + , 8usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::UniquePtr ) )); + assert_eq!(::std::mem::align_of::>() + , 8usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::UniquePtr ) )); + } + #[test] + fn __bindgen_test_layout_DefaultDelete_open0_nsStyleGridTemplate_close0_instantiation_1() { + assert_eq!(::std::mem::size_of::() , + 1usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::DefaultDelete ) )); + assert_eq!(::std::mem::align_of::() , + 1usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::DefaultDelete ) )); + } + #[test] fn __bindgen_test_layout_RefPtr_open0_GridTemplateAreasValue_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( @@ -37769,6 +37813,50 @@ pub mod root { root::nsTArray<::nsstring::nsStringRepr> ) )); } #[test] + fn __bindgen_test_layout_UniquePtr_open0_nsStyleGridTemplate_DefaultDelete_open1_nsStyleGridTemplate_close1_close0_instantiation_2() { + assert_eq!(::std::mem::size_of::>() + , 8usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::UniquePtr ) )); + assert_eq!(::std::mem::align_of::>() + , 8usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::UniquePtr ) )); + } + #[test] + fn __bindgen_test_layout_DefaultDelete_open0_nsStyleGridTemplate_close0_instantiation_2() { + assert_eq!(::std::mem::size_of::() , + 1usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::DefaultDelete ) )); + assert_eq!(::std::mem::align_of::() , + 1usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::DefaultDelete ) )); + } + #[test] + fn __bindgen_test_layout_UniquePtr_open0_nsStyleGridTemplate_DefaultDelete_open1_nsStyleGridTemplate_close1_close0_instantiation_3() { + assert_eq!(::std::mem::size_of::>() + , 8usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::UniquePtr ) )); + assert_eq!(::std::mem::align_of::>() + , 8usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::UniquePtr ) )); + } + #[test] + fn __bindgen_test_layout_DefaultDelete_open0_nsStyleGridTemplate_close0_instantiation_3() { + assert_eq!(::std::mem::size_of::() , + 1usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::DefaultDelete ) )); + assert_eq!(::std::mem::align_of::() , + 1usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::DefaultDelete ) )); + } + #[test] fn __bindgen_test_layout_RefPtr_open0_RawServoMediaList_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( diff --git a/components/style/gecko/generated/structs_release.rs b/components/style/gecko/generated/structs_release.rs index 1ea4be46809..624e6379c4c 100644 --- a/components/style/gecko/generated/structs_release.rs +++ b/components/style/gecko/generated/structs_release.rs @@ -5083,7 +5083,7 @@ pub mod root { } #[test] fn bindgen_test_layout_GeckoPosition() { - assert_eq!(::std::mem::size_of::() , 520usize , + assert_eq!(::std::mem::size_of::() , 440usize , concat ! ( "Size of: " , stringify ! ( GeckoPosition ) )); assert_eq! (::std::mem::align_of::() , 8usize , @@ -13846,8 +13846,8 @@ pub mod root { pub mFlexGrow: f32, pub mFlexShrink: f32, pub mZIndex: root::nsStyleCoord, - pub mGridTemplateColumns: root::nsStyleGridTemplate, - pub mGridTemplateRows: root::nsStyleGridTemplate, + pub mGridTemplateColumns: root::mozilla::UniquePtr, + pub mGridTemplateRows: root::mozilla::UniquePtr, pub mGridTemplateAreas: root::RefPtr, pub mGridColumnStart: root::nsStyleGridLine, pub mGridColumnEnd: root::nsStyleGridLine, @@ -13859,7 +13859,7 @@ pub mod root { pub const nsStylePosition_kHasFinishStyle: bool = false; #[test] fn bindgen_test_layout_nsStylePosition() { - assert_eq!(::std::mem::size_of::() , 520usize , + assert_eq!(::std::mem::size_of::() , 440usize , concat ! ( "Size of: " , stringify ! ( nsStylePosition ) )); assert_eq! (::std::mem::align_of::() , 8usize , @@ -14023,45 +14023,45 @@ pub mod root { "::" , stringify ! ( mGridTemplateColumns ) )); assert_eq! (unsafe { & ( * ( 0 as * const nsStylePosition ) ) . - mGridTemplateRows as * const _ as usize } , 336usize , + mGridTemplateRows as * const _ as usize } , 296usize , concat ! ( "Alignment of field: " , stringify ! ( nsStylePosition ) , "::" , stringify ! ( mGridTemplateRows ) )); assert_eq! (unsafe { & ( * ( 0 as * const nsStylePosition ) ) . - mGridTemplateAreas as * const _ as usize } , 384usize , + mGridTemplateAreas as * const _ as usize } , 304usize , concat ! ( "Alignment of field: " , stringify ! ( nsStylePosition ) , "::" , stringify ! ( mGridTemplateAreas ) )); assert_eq! (unsafe { & ( * ( 0 as * const nsStylePosition ) ) . - mGridColumnStart as * const _ as usize } , 392usize , + mGridColumnStart as * const _ as usize } , 312usize , concat ! ( "Alignment of field: " , stringify ! ( nsStylePosition ) , "::" , stringify ! ( mGridColumnStart ) )); assert_eq! (unsafe { & ( * ( 0 as * const nsStylePosition ) ) . mGridColumnEnd - as * const _ as usize } , 416usize , concat ! ( + as * const _ as usize } , 336usize , concat ! ( "Alignment of field: " , stringify ! ( nsStylePosition ) , "::" , stringify ! ( mGridColumnEnd ) )); assert_eq! (unsafe { & ( * ( 0 as * const nsStylePosition ) ) . mGridRowStart - as * const _ as usize } , 440usize , concat ! ( + as * const _ as usize } , 360usize , concat ! ( "Alignment of field: " , stringify ! ( nsStylePosition ) , "::" , stringify ! ( mGridRowStart ) )); assert_eq! (unsafe { & ( * ( 0 as * const nsStylePosition ) ) . mGridRowEnd as - * const _ as usize } , 464usize , concat ! ( + * const _ as usize } , 384usize , concat ! ( "Alignment of field: " , stringify ! ( nsStylePosition ) , "::" , stringify ! ( mGridRowEnd ) )); assert_eq! (unsafe { & ( * ( 0 as * const nsStylePosition ) ) . mGridColumnGap - as * const _ as usize } , 488usize , concat ! ( + as * const _ as usize } , 408usize , concat ! ( "Alignment of field: " , stringify ! ( nsStylePosition ) , "::" , stringify ! ( mGridColumnGap ) )); assert_eq! (unsafe { & ( * ( 0 as * const nsStylePosition ) ) . mGridRowGap as - * const _ as usize } , 504usize , concat ! ( + * const _ as usize } , 424usize , concat ! ( "Alignment of field: " , stringify ! ( nsStylePosition ) , "::" , stringify ! ( mGridRowGap ) )); } @@ -33258,6 +33258,50 @@ pub mod root { root::nsCOMPtr ) )); } #[test] + fn __bindgen_test_layout_UniquePtr_open0_nsStyleGridTemplate_DefaultDelete_open1_nsStyleGridTemplate_close1_close0_instantiation() { + assert_eq!(::std::mem::size_of::>() + , 8usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::UniquePtr ) )); + assert_eq!(::std::mem::align_of::>() + , 8usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::UniquePtr ) )); + } + #[test] + fn __bindgen_test_layout_DefaultDelete_open0_nsStyleGridTemplate_close0_instantiation() { + assert_eq!(::std::mem::size_of::() , + 1usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::DefaultDelete ) )); + assert_eq!(::std::mem::align_of::() , + 1usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::DefaultDelete ) )); + } + #[test] + fn __bindgen_test_layout_UniquePtr_open0_nsStyleGridTemplate_DefaultDelete_open1_nsStyleGridTemplate_close1_close0_instantiation_1() { + assert_eq!(::std::mem::size_of::>() + , 8usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::UniquePtr ) )); + assert_eq!(::std::mem::align_of::>() + , 8usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::UniquePtr ) )); + } + #[test] + fn __bindgen_test_layout_DefaultDelete_open0_nsStyleGridTemplate_close0_instantiation_1() { + assert_eq!(::std::mem::size_of::() , + 1usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::DefaultDelete ) )); + assert_eq!(::std::mem::align_of::() , + 1usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::DefaultDelete ) )); + } + #[test] fn __bindgen_test_layout_RefPtr_open0_GridTemplateAreasValue_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( @@ -37264,6 +37308,50 @@ pub mod root { root::nsTArray<::nsstring::nsStringRepr> ) )); } #[test] + fn __bindgen_test_layout_UniquePtr_open0_nsStyleGridTemplate_DefaultDelete_open1_nsStyleGridTemplate_close1_close0_instantiation_2() { + assert_eq!(::std::mem::size_of::>() + , 8usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::UniquePtr ) )); + assert_eq!(::std::mem::align_of::>() + , 8usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::UniquePtr ) )); + } + #[test] + fn __bindgen_test_layout_DefaultDelete_open0_nsStyleGridTemplate_close0_instantiation_2() { + assert_eq!(::std::mem::size_of::() , + 1usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::DefaultDelete ) )); + assert_eq!(::std::mem::align_of::() , + 1usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::DefaultDelete ) )); + } + #[test] + fn __bindgen_test_layout_UniquePtr_open0_nsStyleGridTemplate_DefaultDelete_open1_nsStyleGridTemplate_close1_close0_instantiation_3() { + assert_eq!(::std::mem::size_of::>() + , 8usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::UniquePtr ) )); + assert_eq!(::std::mem::align_of::>() + , 8usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::UniquePtr ) )); + } + #[test] + fn __bindgen_test_layout_DefaultDelete_open0_nsStyleGridTemplate_close0_instantiation_3() { + assert_eq!(::std::mem::size_of::() , + 1usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::DefaultDelete ) )); + assert_eq!(::std::mem::align_of::() , + 1usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::DefaultDelete ) )); + } + #[test] fn __bindgen_test_layout_RefPtr_open0_RawServoMediaList_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs index 7785e8aa47a..4941ad855e4 100644 --- a/components/style/properties/gecko.mako.rs +++ b/components/style/properties/gecko.mako.rs @@ -1712,15 +1712,22 @@ fn static_assert() { } } - // Set defaults - ${self_grid}.mRepeatAutoIndex = -1; - ${self_grid}.set_mIsAutoFill(false); - ${self_grid}.set_mIsSubgrid(false); - let max_lines = nsStyleGridLine_kMaxLine as usize - 1; // for accounting the final - match v { + let result = match v { + GridTemplateComponent::None => ptr::null_mut(), GridTemplateComponent::TrackList(track) => { + let mut num_values = track.values.len(); + if let Auto(_) = track.list_type { + num_values += 1; + } + + num_values = cmp::min(num_values, max_lines); + let value = unsafe { + bindings::Gecko_CreateStyleGridTemplate(num_values as u32, + (num_values + 1) as u32).as_mut().unwrap() + }; + let mut auto_idx = usize::MAX; let mut auto_track_size = None; if let Auto(idx) = track.list_type { @@ -1728,100 +1735,83 @@ fn static_assert() { let auto_repeat = track.auto_repeat.as_ref().expect("expected value"); if auto_repeat.count == RepeatCount::AutoFill { - ${self_grid}.set_mIsAutoFill(true); + value.set_mIsAutoFill(true); } - ${self_grid}.mRepeatAutoIndex = idx as i16; + value.mRepeatAutoIndex = idx as i16; // NOTE: Gecko supports only one set of values in // i.e., it can only take repeat(auto-fill, [a] 10px [b]), and no more. - set_line_names(&auto_repeat.line_names[0], &mut ${self_grid}.mRepeatAutoLineNameListBefore); - set_line_names(&auto_repeat.line_names[1], &mut ${self_grid}.mRepeatAutoLineNameListAfter); + set_line_names(&auto_repeat.line_names[0], &mut value.mRepeatAutoLineNameListBefore); + set_line_names(&auto_repeat.line_names[1], &mut value.mRepeatAutoLineNameListAfter); auto_track_size = Some(auto_repeat.track_sizes.get(0).unwrap().clone()); } else { unsafe { bindings::Gecko_ResizeTArrayForStrings( - &mut ${self_grid}.mRepeatAutoLineNameListBefore, 0); + &mut value.mRepeatAutoLineNameListBefore, 0); bindings::Gecko_ResizeTArrayForStrings( - &mut ${self_grid}.mRepeatAutoLineNameListAfter, 0); + &mut value.mRepeatAutoLineNameListAfter, 0); } } - let mut num_values = track.values.len(); - if auto_track_size.is_some() { - num_values += 1; - } - - num_values = cmp::min(num_values, max_lines); - unsafe { - bindings::Gecko_SetStyleGridTemplateArrayLengths(&mut ${self_grid}, num_values as u32); - } - let mut line_names = track.line_names.into_iter(); let mut values_iter = track.values.into_iter(); - let min_max_iter = ${self_grid}.mMinTrackSizingFunctions.iter_mut() - .zip(${self_grid}.mMaxTrackSizingFunctions.iter_mut()); + { + let min_max_iter = value.mMinTrackSizingFunctions.iter_mut() + .zip(value.mMaxTrackSizingFunctions.iter_mut()); + for (i, (gecko_min, gecko_max)) in min_max_iter.enumerate().take(max_lines) { + let name_list = line_names.next().expect("expected line-names"); + set_line_names(&name_list, &mut value.mLineNameLists[i]); + if i == auto_idx { + let track_size = auto_track_size.take() + .expect("expected for "); + track_size.to_gecko_style_coords(gecko_min, gecko_max); + continue + } - for (i, (gecko_min, gecko_max)) in min_max_iter.enumerate().take(max_lines) { - let name_list = line_names.next().expect("expected line-names"); - set_line_names(&name_list, &mut ${self_grid}.mLineNameLists[i]); - if i == auto_idx { - let track_size = auto_track_size.take().expect("expected for "); + let track_size = values_iter.next().expect("expected value"); track_size.to_gecko_style_coords(gecko_min, gecko_max); - continue } - - let track_size = values_iter.next().expect("expected value"); - track_size.to_gecko_style_coords(gecko_min, gecko_max); } let final_names = line_names.next().unwrap(); - set_line_names(&final_names, ${self_grid}.mLineNameLists.last_mut().unwrap()); - }, - GridTemplateComponent::None => { - unsafe { - bindings::Gecko_SetStyleGridTemplateArrayLengths(&mut ${self_grid}, 0); - bindings::Gecko_ResizeTArrayForStrings( - &mut ${self_grid}.mRepeatAutoLineNameListBefore, 0); - bindings::Gecko_ResizeTArrayForStrings( - &mut ${self_grid}.mRepeatAutoLineNameListAfter, 0); - } + set_line_names(&final_names, value.mLineNameLists.last_mut().unwrap()); + + value }, GridTemplateComponent::Subgrid(list) => { - ${self_grid}.set_mIsSubgrid(true); let names_length = match list.fill_idx { Some(_) => list.names.len() - 1, None => list.names.len(), }; let num_values = cmp::min(names_length, max_lines + 1); - - unsafe { - bindings::Gecko_SetStyleGridTemplateArrayLengths(&mut ${self_grid}, 0); - bindings::Gecko_SetGridTemplateLineNamesLength(&mut ${self_grid}, num_values as u32); - bindings::Gecko_ResizeTArrayForStrings( - &mut ${self_grid}.mRepeatAutoLineNameListBefore, 0); - bindings::Gecko_ResizeTArrayForStrings( - &mut ${self_grid}.mRepeatAutoLineNameListAfter, 0); - } + let value = unsafe { + bindings::Gecko_CreateStyleGridTemplate(0, num_values as u32).as_mut().unwrap() + }; + value.set_mIsSubgrid(true); let mut names = list.names.into_vec(); if let Some(idx) = list.fill_idx { - ${self_grid}.set_mIsAutoFill(true); - ${self_grid}.mRepeatAutoIndex = idx as i16; + value.set_mIsAutoFill(true); + value.mRepeatAutoIndex = idx as i16; set_line_names(&names.swap_remove(idx as usize), - &mut ${self_grid}.mRepeatAutoLineNameListBefore); + &mut value.mRepeatAutoLineNameListBefore); } - for (servo_names, gecko_names) in names.iter().zip(${self_grid}.mLineNameLists.iter_mut()) { + for (servo_names, gecko_names) in names.iter().zip(value.mLineNameLists.iter_mut()) { set_line_names(servo_names, gecko_names); } + + value }, - } + }; + + unsafe { bindings::Gecko_SetStyleGridTemplate(&mut ${self_grid}, result); } } pub fn copy_grid_template_${kind}_from(&mut self, other: &Self) { unsafe { bindings::Gecko_CopyStyleGridTemplateValues(&mut ${self_grid}, - &other.gecko.mGridTemplate${kind.title()}); + other.gecko.mGridTemplate${kind.title()}.mPtr); } } @@ -1838,16 +1828,10 @@ fn static_assert() { use values::generics::grid::{GridTemplateComponent, LineNameList, RepeatCount}; use values::generics::grid::{TrackList, TrackListType, TrackRepeat, TrackSize}; - if ${self_grid}.mRepeatAutoLineNameListBefore.len() == 0 && - ${self_grid}.mRepeatAutoLineNameListAfter.len() == 0 && - ${self_grid}.mMinTrackSizingFunctions.len() == 0 && - ${self_grid}.mMaxTrackSizingFunctions.len() == 0 && - ${self_grid}.mLineNameLists.len() == 0 && - ${self_grid}.mRepeatAutoIndex == -1 && - !${self_grid}.mIsAutoFill() && - !${self_grid}.mIsSubgrid() { - return GridTemplateComponent::None; - } + let value = match unsafe { ${self_grid}.mPtr.as_ref() } { + None => return GridTemplateComponent::None, + Some(value) => value, + }; #[inline] fn to_boxed_customident_slice(gecko_names: &nsTArray) -> Box<[CustomIdent]> { @@ -1865,13 +1849,13 @@ fn static_assert() { }).collect() } - let repeat_auto_index = ${self_grid}.mRepeatAutoIndex as usize; - if ${self_grid}.mIsSubgrid() { - let mut names_vec = to_line_names_vec(&${self_grid}.mLineNameLists); - let fill_idx = if ${self_grid}.mIsAutoFill() { + let repeat_auto_index = value.mRepeatAutoIndex as usize; + if value.mIsSubgrid() { + let mut names_vec = to_line_names_vec(&value.mLineNameLists); + let fill_idx = if value.mIsAutoFill() { names_vec.insert( repeat_auto_index, - to_boxed_customident_slice(&${self_grid}.mRepeatAutoLineNameListBefore)); + to_boxed_customident_slice(&value.mRepeatAutoLineNameListBefore)); Some(repeat_auto_index as u32) } else { None @@ -1882,18 +1866,18 @@ fn static_assert() { } else { let mut auto_repeat = None; let mut list_type = TrackListType::Normal; - let line_names = to_line_names_vec(&${self_grid}.mLineNameLists).into_boxed_slice(); - let mut values = Vec::with_capacity(${self_grid}.mMinTrackSizingFunctions.len()); + let line_names = to_line_names_vec(&value.mLineNameLists).into_boxed_slice(); + let mut values = Vec::with_capacity(value.mMinTrackSizingFunctions.len()); - let min_max_iter = ${self_grid}.mMinTrackSizingFunctions.iter() - .zip(${self_grid}.mMaxTrackSizingFunctions.iter()); + let min_max_iter = value.mMinTrackSizingFunctions.iter() + .zip(value.mMaxTrackSizingFunctions.iter()); for (i, (gecko_min, gecko_max)) in min_max_iter.enumerate() { let track_size = TrackSize::from_gecko_style_coords(gecko_min, gecko_max); if i == repeat_auto_index { list_type = TrackListType::Auto(repeat_auto_index as u16); - let count = if ${self_grid}.mIsAutoFill() { + let count = if value.mIsAutoFill() { RepeatCount::AutoFill } else { RepeatCount::AutoFit @@ -1902,9 +1886,9 @@ fn static_assert() { let line_names = { let mut vec: Vec> = Vec::with_capacity(2); vec.push(to_boxed_customident_slice( - &${self_grid}.mRepeatAutoLineNameListBefore)); + &value.mRepeatAutoLineNameListBefore)); vec.push(to_boxed_customident_slice( - &${self_grid}.mRepeatAutoLineNameListAfter)); + &value.mRepeatAutoLineNameListAfter)); vec.into_boxed_slice() };