mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
Unify common code for implementing a rule type.
This commit is contained in:
parent
de421216ad
commit
f5e24fc0b3
1 changed files with 45 additions and 50 deletions
|
@ -33,8 +33,8 @@ use style::gecko_bindings::bindings;
|
|||
use style::gecko_bindings::bindings::{RawGeckoKeyframeListBorrowed, RawGeckoKeyframeListBorrowedMut};
|
||||
use style::gecko_bindings::bindings::{RawServoDeclarationBlockBorrowed, RawServoDeclarationBlockStrong};
|
||||
use style::gecko_bindings::bindings::{RawServoMediaListBorrowed, RawServoMediaListStrong};
|
||||
use style::gecko_bindings::bindings::{RawServoMediaRuleBorrowed, RawServoMediaRuleStrong};
|
||||
use style::gecko_bindings::bindings::{RawServoStyleRuleBorrowed, RawServoStyleRuleStrong};
|
||||
use style::gecko_bindings::bindings::{RawServoMediaRule, RawServoMediaRuleBorrowed};
|
||||
use style::gecko_bindings::bindings::{RawServoStyleRule, RawServoStyleRuleBorrowed};
|
||||
use style::gecko_bindings::bindings::{RawServoStyleSetBorrowed, RawServoStyleSetOwned};
|
||||
use style::gecko_bindings::bindings::{RawServoStyleSheetBorrowed, ServoComputedValuesBorrowed};
|
||||
use style::gecko_bindings::bindings::{RawServoStyleSheetStrong, ServoComputedValuesStrong};
|
||||
|
@ -510,30 +510,6 @@ pub extern "C" fn Servo_CssRules_ListTypes(rules: ServoCssRulesBorrowed,
|
|||
result.iter_mut().zip(iter).fold((), |_, (r, v)| *r = v);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn Servo_CssRules_GetStyleRuleAt(rules: ServoCssRulesBorrowed, index: u32)
|
||||
-> RawServoStyleRuleStrong {
|
||||
let rules = RwLock::<CssRules>::as_arc(&rules).read();
|
||||
match rules.0[index as usize] {
|
||||
CssRule::Style(ref rule) => rule.clone().into_strong(),
|
||||
_ => {
|
||||
unreachable!("GetStyleRuleAt should only be called on a style rule");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn Servo_CssRules_GetMediaRuleAt(rules: ServoCssRulesBorrowed, index: u32)
|
||||
-> RawServoMediaRuleStrong {
|
||||
let rules = RwLock::<CssRules>::as_arc(&rules).read();
|
||||
match rules.0[index as usize] {
|
||||
CssRule::Media(ref rule) => rule.clone().into_strong(),
|
||||
_ => {
|
||||
unreachable!("GetMediaRuleAt should only be called on a media rule");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn Servo_CssRules_InsertRule(rules: ServoCssRulesBorrowed, sheet: RawServoStyleSheetBorrowed,
|
||||
rule: *const nsACString, index: u32, nested: bool,
|
||||
|
@ -559,11 +535,49 @@ pub extern "C" fn Servo_CssRules_DeleteRule(rules: ServoCssRulesBorrowed, index:
|
|||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn Servo_StyleRule_Debug(rule: RawServoStyleRuleBorrowed, result: *mut nsACString) {
|
||||
let rule = RwLock::<StyleRule>::as_arc(&rule);
|
||||
let result = unsafe { result.as_mut().unwrap() };
|
||||
write!(result, "{:?}", *rule.read()).unwrap();
|
||||
macro_rules! impl_basic_rule_funcs {
|
||||
{ ($name:ident, $rule_type:ty, $raw_type:ty),
|
||||
getter: $getter:ident,
|
||||
debug: $debug:ident,
|
||||
to_css: $to_css:ident,
|
||||
} => {
|
||||
#[no_mangle]
|
||||
pub extern "C" fn $getter(rules: ServoCssRulesBorrowed, index: u32) -> Strong<$raw_type> {
|
||||
let rules = RwLock::<CssRules>::as_arc(&rules).read();
|
||||
match rules.0[index as usize] {
|
||||
CssRule::$name(ref rule) => rule.clone().into_strong(),
|
||||
_ => {
|
||||
unreachable!(concat!(stringify!($getter), "should only be called ",
|
||||
"on a ", stringify!($name), " rule"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn $debug(rule: &$raw_type, result: *mut nsACString) {
|
||||
let rule = RwLock::<$rule_type>::as_arc(&rule);
|
||||
let result = unsafe { result.as_mut().unwrap() };
|
||||
write!(result, "{:?}", *rule.read()).unwrap();
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn $to_css(rule: &$raw_type, result: *mut nsAString) {
|
||||
let rule = RwLock::<$rule_type>::as_arc(&rule);
|
||||
rule.read().to_css(unsafe { result.as_mut().unwrap() }).unwrap();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl_basic_rule_funcs! { (Style, StyleRule, RawServoStyleRule),
|
||||
getter: Servo_CssRules_GetStyleRuleAt,
|
||||
debug: Servo_StyleRule_Debug,
|
||||
to_css: Servo_StyleRule_GetCssText,
|
||||
}
|
||||
|
||||
impl_basic_rule_funcs! { (Media, MediaRule, RawServoMediaRule),
|
||||
getter: Servo_CssRules_GetMediaRuleAt,
|
||||
debug: Servo_MediaRule_Debug,
|
||||
to_css: Servo_MediaRule_GetCssText,
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
|
@ -580,25 +594,12 @@ pub extern "C" fn Servo_StyleRule_SetStyle(rule: RawServoStyleRuleBorrowed,
|
|||
rule.write().block = declarations.clone();
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn Servo_StyleRule_GetCssText(rule: RawServoStyleRuleBorrowed, result: *mut nsAString) {
|
||||
let rule = RwLock::<StyleRule>::as_arc(&rule);
|
||||
rule.read().to_css(unsafe { result.as_mut().unwrap() }).unwrap();
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn Servo_StyleRule_GetSelectorText(rule: RawServoStyleRuleBorrowed, result: *mut nsAString) {
|
||||
let rule = RwLock::<StyleRule>::as_arc(&rule);
|
||||
rule.read().selectors.to_css(unsafe { result.as_mut().unwrap() }).unwrap();
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn Servo_MediaRule_Debug(rule: RawServoMediaRuleBorrowed, result: *mut nsACString) {
|
||||
let rule = RwLock::<MediaRule>::as_arc(&rule);
|
||||
let result = unsafe { result.as_mut().unwrap() };
|
||||
write!(result, "{:?}", *rule.read()).unwrap();
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn Servo_MediaRule_GetMedia(rule: RawServoMediaRuleBorrowed) -> RawServoMediaListStrong {
|
||||
let rule = RwLock::<MediaRule>::as_arc(&rule);
|
||||
|
@ -611,12 +612,6 @@ pub extern "C" fn Servo_MediaRule_GetRules(rule: RawServoMediaRuleBorrowed) -> S
|
|||
rule.read().rules.clone().into_strong()
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn Servo_MediaRule_GetCssText(rule: RawServoMediaRuleBorrowed, result: *mut nsAString) {
|
||||
let rule = RwLock::<MediaRule>::as_arc(&rule);
|
||||
rule.read().to_css(unsafe { result.as_mut().unwrap() }).unwrap();
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn Servo_ComputedValues_GetForAnonymousBox(parent_style_or_null: ServoComputedValuesBorrowedOrNull,
|
||||
pseudo_tag: *mut nsIAtom,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue