Auto merge of #10889 - heycam:insert-sheet, r=bholley

Add Servo_InsertStyleSheetBefore.

r? @bholley
Will be used by https://bugzilla.mozilla.org/show_bug.cgi?id=1268390.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/10889)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2016-04-28 22:37:40 -07:00
commit 78ae9a5da0
2 changed files with 19 additions and 0 deletions

View file

@ -76,6 +76,9 @@ extern "C" {
set: *mut RawServoStyleSet); set: *mut RawServoStyleSet);
pub fn Servo_PrependStyleSheet(sheet: *mut RawServoStyleSheet, pub fn Servo_PrependStyleSheet(sheet: *mut RawServoStyleSheet,
set: *mut RawServoStyleSet); set: *mut RawServoStyleSet);
pub fn Servo_InsertStyleSheetBefore(sheet: *mut RawServoStyleSheet,
reference: *mut RawServoStyleSheet,
set: *mut RawServoStyleSet);
pub fn Servo_RemoveStyleSheet(sheet: *mut RawServoStyleSheet, pub fn Servo_RemoveStyleSheet(sheet: *mut RawServoStyleSheet,
set: *mut RawServoStyleSet); set: *mut RawServoStyleSet);
pub fn Servo_StyleSheetHasRules(sheet: *mut RawServoStyleSheet) -> bool; pub fn Servo_StyleSheetHasRules(sheet: *mut RawServoStyleSheet) -> bool;

View file

@ -143,6 +143,22 @@ pub extern "C" fn Servo_PrependStyleSheet(raw_sheet: *mut RawServoStyleSheet,
}) })
} }
#[no_mangle]
pub extern "C" fn Servo_InsertStyleSheetBefore(raw_sheet: *mut RawServoStyleSheet,
raw_reference: *mut RawServoStyleSheet,
raw_data: *mut RawServoStyleSet) {
type Helpers = ArcHelpers<RawServoStyleSheet, Stylesheet>;
let data = PerDocumentStyleData::borrow_mut_from_raw(raw_data);
Helpers::with(raw_sheet, |sheet| {
Helpers::with(raw_reference, |reference| {
data.stylesheets.retain(|x| !arc_ptr_eq(x, sheet));
let index = data.stylesheets.iter().position(|x| arc_ptr_eq(x, reference)).unwrap();
data.stylesheets.insert(index, sheet.clone());
data.stylesheets_changed = true;
})
})
}
#[no_mangle] #[no_mangle]
pub extern "C" fn Servo_RemoveStyleSheet(raw_sheet: *mut RawServoStyleSheet, pub extern "C" fn Servo_RemoveStyleSheet(raw_sheet: *mut RawServoStyleSheet,
raw_data: *mut RawServoStyleSet) { raw_data: *mut RawServoStyleSet) {