mirror of
https://github.com/servo/servo.git
synced 2025-07-13 10:23:40 +01:00
Add insertRule/deleteRule support for stylo
This commit is contained in:
parent
22c8df150a
commit
bddd467c0e
4 changed files with 54 additions and 3 deletions
|
@ -277,7 +277,6 @@ COMPILATION_TARGETS = {
|
||||||
"StyleBasicShape",
|
"StyleBasicShape",
|
||||||
"StyleBasicShapeType",
|
"StyleBasicShapeType",
|
||||||
"StyleClipPath",
|
"StyleClipPath",
|
||||||
"nscoord",
|
|
||||||
"nsCSSKeyword",
|
"nsCSSKeyword",
|
||||||
"nsCSSShadowArray",
|
"nsCSSShadowArray",
|
||||||
"nsCSSValue",
|
"nsCSSValue",
|
||||||
|
@ -331,6 +330,8 @@ COMPILATION_TARGETS = {
|
||||||
"nsStyleVariables",
|
"nsStyleVariables",
|
||||||
"nsStyleVisibility",
|
"nsStyleVisibility",
|
||||||
"nsStyleXUL",
|
"nsStyleXUL",
|
||||||
|
"nscoord",
|
||||||
|
"nsresult",
|
||||||
],
|
],
|
||||||
"array_types": {
|
"array_types": {
|
||||||
"uintptr_t": "usize",
|
"uintptr_t": "usize",
|
||||||
|
|
|
@ -14,11 +14,12 @@ use gecko_bindings::bindings::{Gecko_CreateGradient, Gecko_SetGradientImageValue
|
||||||
use gecko_bindings::bindings::{RawServoStyleSheet, RawServoDeclarationBlock, RawServoStyleRule};
|
use gecko_bindings::bindings::{RawServoStyleSheet, RawServoDeclarationBlock, RawServoStyleRule};
|
||||||
use gecko_bindings::bindings::{ServoComputedValues, ServoCssRules};
|
use gecko_bindings::bindings::{ServoComputedValues, ServoCssRules};
|
||||||
use gecko_bindings::structs::{nsStyleCoord_CalcValue, nsStyleImage};
|
use gecko_bindings::structs::{nsStyleCoord_CalcValue, nsStyleImage};
|
||||||
|
use gecko_bindings::structs::nsresult;
|
||||||
use gecko_bindings::sugar::ns_style_coord::{CoordDataValue, CoordDataMut};
|
use gecko_bindings::sugar::ns_style_coord::{CoordDataValue, CoordDataMut};
|
||||||
use gecko_bindings::sugar::ownership::{HasArcFFI, HasFFI};
|
use gecko_bindings::sugar::ownership::{HasArcFFI, HasFFI};
|
||||||
use parking_lot::RwLock;
|
use parking_lot::RwLock;
|
||||||
use properties::{ComputedValues, PropertyDeclarationBlock};
|
use properties::{ComputedValues, PropertyDeclarationBlock};
|
||||||
use stylesheets::{CssRules, Stylesheet, StyleRule};
|
use stylesheets::{CssRules, RulesMutateError, Stylesheet, StyleRule};
|
||||||
use values::computed::{CalcLengthOrPercentage, Gradient, Image, LengthOrPercentage, LengthOrPercentageOrAuto};
|
use values::computed::{CalcLengthOrPercentage, Gradient, Image, LengthOrPercentage, LengthOrPercentageOrAuto};
|
||||||
|
|
||||||
unsafe impl HasFFI for Stylesheet {
|
unsafe impl HasFFI for Stylesheet {
|
||||||
|
@ -497,3 +498,14 @@ pub mod basic_shape {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<RulesMutateError> for nsresult {
|
||||||
|
fn from(other: RulesMutateError) -> Self {
|
||||||
|
match other {
|
||||||
|
RulesMutateError::Syntax => nsresult::NS_ERROR_DOM_SYNTAX_ERR,
|
||||||
|
RulesMutateError::IndexSize => nsresult::NS_ERROR_DOM_INDEX_SIZE_ERR,
|
||||||
|
RulesMutateError::HierarchyRequest => nsresult::NS_ERROR_DOM_HIERARCHY_REQUEST_ERR,
|
||||||
|
RulesMutateError::InvalidState => nsresult::NS_ERROR_DOM_INVALID_STATE_ERR,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -71,7 +71,6 @@ use gecko_bindings::structs::SheetParsingMode;
|
||||||
use gecko_bindings::structs::StyleBasicShape;
|
use gecko_bindings::structs::StyleBasicShape;
|
||||||
use gecko_bindings::structs::StyleBasicShapeType;
|
use gecko_bindings::structs::StyleBasicShapeType;
|
||||||
use gecko_bindings::structs::StyleClipPath;
|
use gecko_bindings::structs::StyleClipPath;
|
||||||
use gecko_bindings::structs::nscoord;
|
|
||||||
use gecko_bindings::structs::nsCSSKeyword;
|
use gecko_bindings::structs::nsCSSKeyword;
|
||||||
use gecko_bindings::structs::nsCSSShadowArray;
|
use gecko_bindings::structs::nsCSSShadowArray;
|
||||||
use gecko_bindings::structs::nsCSSValue;
|
use gecko_bindings::structs::nsCSSValue;
|
||||||
|
@ -200,6 +199,8 @@ unsafe impl Sync for nsStyleVisibility {}
|
||||||
use gecko_bindings::structs::nsStyleXUL;
|
use gecko_bindings::structs::nsStyleXUL;
|
||||||
unsafe impl Send for nsStyleXUL {}
|
unsafe impl Send for nsStyleXUL {}
|
||||||
unsafe impl Sync for nsStyleXUL {}
|
unsafe impl Sync for nsStyleXUL {}
|
||||||
|
use gecko_bindings::structs::nscoord;
|
||||||
|
use gecko_bindings::structs::nsresult;
|
||||||
|
|
||||||
#[repr(i32)]
|
#[repr(i32)]
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
|
||||||
|
@ -1025,6 +1026,17 @@ extern "C" {
|
||||||
index: u32)
|
index: u32)
|
||||||
-> RawServoStyleRuleStrong;
|
-> RawServoStyleRuleStrong;
|
||||||
}
|
}
|
||||||
|
extern "C" {
|
||||||
|
pub fn Servo_CssRules_InsertRule(rules: ServoCssRulesBorrowed,
|
||||||
|
sheet: RawServoStyleSheetBorrowed,
|
||||||
|
rule: *const nsACString_internal,
|
||||||
|
index: u32, nested: bool,
|
||||||
|
rule_type: *mut u16) -> nsresult;
|
||||||
|
}
|
||||||
|
extern "C" {
|
||||||
|
pub fn Servo_CssRules_DeleteRule(rules: ServoCssRulesBorrowed, index: u32)
|
||||||
|
-> nsresult;
|
||||||
|
}
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn Servo_StyleRule_Debug(rule: RawServoStyleRuleBorrowed,
|
pub fn Servo_StyleRule_Debug(rule: RawServoStyleRuleBorrowed,
|
||||||
result: *mut nsACString_internal);
|
result: *mut nsACString_internal);
|
||||||
|
|
|
@ -43,6 +43,7 @@ use style::gecko_bindings::bindings::nsTArrayBorrowed_uintptr_t;
|
||||||
use style::gecko_bindings::structs;
|
use style::gecko_bindings::structs;
|
||||||
use style::gecko_bindings::structs::{SheetParsingMode, nsIAtom};
|
use style::gecko_bindings::structs::{SheetParsingMode, nsIAtom};
|
||||||
use style::gecko_bindings::structs::{nsRestyleHint, nsChangeHint};
|
use style::gecko_bindings::structs::{nsRestyleHint, nsChangeHint};
|
||||||
|
use style::gecko_bindings::structs::nsresult;
|
||||||
use style::gecko_bindings::sugar::ownership::{FFIArcHelpers, HasArcFFI, HasBoxFFI};
|
use style::gecko_bindings::sugar::ownership::{FFIArcHelpers, HasArcFFI, HasBoxFFI};
|
||||||
use style::gecko_bindings::sugar::ownership::{HasSimpleFFI, Strong};
|
use style::gecko_bindings::sugar::ownership::{HasSimpleFFI, Strong};
|
||||||
use style::gecko_bindings::sugar::refptr::{GeckoArcPrincipal, GeckoArcURI};
|
use style::gecko_bindings::sugar::refptr::{GeckoArcPrincipal, GeckoArcURI};
|
||||||
|
@ -332,6 +333,31 @@ pub extern "C" fn Servo_CssRules_GetStyleRuleAt(rules: ServoCssRulesBorrowed, in
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "C" fn Servo_CssRules_InsertRule(rules: ServoCssRulesBorrowed, sheet: RawServoStyleSheetBorrowed,
|
||||||
|
rule: *const nsACString, index: u32, nested: bool,
|
||||||
|
rule_type: *mut u16) -> nsresult {
|
||||||
|
let rules = RwLock::<CssRules>::as_arc(&rules);
|
||||||
|
let sheet = Stylesheet::as_arc(&sheet);
|
||||||
|
let rule = unsafe { rule.as_ref().unwrap().as_str_unchecked() };
|
||||||
|
match rules.write().insert_rule(rule, sheet, index as usize, nested) {
|
||||||
|
Ok(new_rule) => {
|
||||||
|
*unsafe { rule_type.as_mut().unwrap() } = new_rule.rule_type() as u16;
|
||||||
|
nsresult::NS_OK
|
||||||
|
}
|
||||||
|
Err(err) => err.into()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "C" fn Servo_CssRules_DeleteRule(rules: ServoCssRulesBorrowed, index: u32) -> nsresult {
|
||||||
|
let rules = RwLock::<CssRules>::as_arc(&rules);
|
||||||
|
match rules.write().remove_rule(index as usize) {
|
||||||
|
Ok(_) => nsresult::NS_OK,
|
||||||
|
Err(err) => err.into()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn Servo_CssRules_AddRef(rules: ServoCssRulesBorrowed) -> () {
|
pub extern "C" fn Servo_CssRules_AddRef(rules: ServoCssRulesBorrowed) -> () {
|
||||||
unsafe { RwLock::<CssRules>::addref(rules) };
|
unsafe { RwLock::<CssRules>::addref(rules) };
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue