mirror of
https://github.com/servo/servo.git
synced 2025-07-24 07:40:27 +01:00
stylo: Remove usage of ServoComputedValues from binding functions
This commit is contained in:
parent
9776d070ea
commit
3c3e4399da
7 changed files with 71 additions and 46 deletions
|
@ -889,6 +889,12 @@ impl<'a, T> ArcBorrow<'a, T> {
|
||||||
arc
|
arc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// For constructing from a reference known to be Arc-backed,
|
||||||
|
/// e.g. if we obtain such a reference over FFI
|
||||||
|
pub unsafe fn from_ref(r: &'a T) -> Self {
|
||||||
|
ArcBorrow(r)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn with_arc<F, U>(&self, f: F) -> U where F: FnOnce(&Arc<T>) -> U, T: 'static {
|
pub fn with_arc<F, U>(&self, f: F) -> U where F: FnOnce(&Arc<T>) -> U, T: 'static {
|
||||||
// Synthesize transient Arc, which never touches the refcount.
|
// Synthesize transient Arc, which never touches the refcount.
|
||||||
let transient = unsafe { NoDrop::new(Arc::from_raw(self.0)) };
|
let transient = unsafe { NoDrop::new(Arc::from_raw(self.0)) };
|
||||||
|
|
|
@ -13,13 +13,14 @@ use gecko_bindings::bindings::{RawServoKeyframe, RawServoKeyframesRule};
|
||||||
use gecko_bindings::bindings::{RawServoMediaRule, RawServoNamespaceRule, RawServoPageRule};
|
use gecko_bindings::bindings::{RawServoMediaRule, RawServoNamespaceRule, RawServoPageRule};
|
||||||
use gecko_bindings::bindings::{RawServoRuleNode, RawServoRuleNodeStrong, RawServoDocumentRule};
|
use gecko_bindings::bindings::{RawServoRuleNode, RawServoRuleNodeStrong, RawServoDocumentRule};
|
||||||
use gecko_bindings::bindings::ServoCssRules;
|
use gecko_bindings::bindings::ServoCssRules;
|
||||||
use gecko_bindings::structs::{RawServoAnimationValue, RawServoDeclarationBlock, RawServoStyleRule, RawServoMediaList};
|
use gecko_bindings::structs::{RawServoAnimationValue, RawServoDeclarationBlock, RawServoStyleRule};
|
||||||
use gecko_bindings::structs::{RawServoStyleSheetContents, ServoStyleContext};
|
use gecko_bindings::structs::{RawServoMediaList, RawServoStyleSheetContents};
|
||||||
use gecko_bindings::sugar::ownership::{HasArcFFI, HasFFI};
|
use gecko_bindings::sugar::ownership::{HasArcFFI, HasFFI, Strong};
|
||||||
use media_queries::MediaList;
|
use media_queries::MediaList;
|
||||||
use properties::{ComputedValues, PropertyDeclarationBlock};
|
use properties::{ComputedValues, PropertyDeclarationBlock};
|
||||||
use properties::animated_properties::AnimationValue;
|
use properties::animated_properties::AnimationValue;
|
||||||
use rule_tree::StrongRuleNode;
|
use rule_tree::StrongRuleNode;
|
||||||
|
use servo_arc::{Arc, ArcBorrow};
|
||||||
use shared_lock::Locked;
|
use shared_lock::Locked;
|
||||||
use std::{mem, ptr};
|
use std::{mem, ptr};
|
||||||
use stylesheets::{CssRules, StylesheetContents, StyleRule, ImportRule, KeyframesRule, MediaRule};
|
use stylesheets::{CssRules, StylesheetContents, StyleRule, ImportRule, KeyframesRule, MediaRule};
|
||||||
|
@ -51,9 +52,6 @@ impl_arc_ffi!(Locked<CssRules> => ServoCssRules
|
||||||
impl_arc_ffi!(StylesheetContents => RawServoStyleSheetContents
|
impl_arc_ffi!(StylesheetContents => RawServoStyleSheetContents
|
||||||
[Servo_StyleSheetContents_AddRef, Servo_StyleSheetContents_Release]);
|
[Servo_StyleSheetContents_AddRef, Servo_StyleSheetContents_Release]);
|
||||||
|
|
||||||
impl_arc_ffi!(ComputedValues => ServoStyleContext
|
|
||||||
[Servo_StyleContext_AddRef, Servo_StyleContext_Release]);
|
|
||||||
|
|
||||||
impl_arc_ffi!(Locked<PropertyDeclarationBlock> => RawServoDeclarationBlock
|
impl_arc_ffi!(Locked<PropertyDeclarationBlock> => RawServoDeclarationBlock
|
||||||
[Servo_DeclarationBlock_AddRef, Servo_DeclarationBlock_Release]);
|
[Servo_DeclarationBlock_AddRef, Servo_DeclarationBlock_Release]);
|
||||||
|
|
||||||
|
@ -114,3 +112,28 @@ pub unsafe extern "C" fn Servo_RuleNode_Release(obj: &RawServoRuleNode) {
|
||||||
let ptr = StrongRuleNode::from_ffi(&obj);
|
let ptr = StrongRuleNode::from_ffi(&obj);
|
||||||
ptr::read(ptr as *const StrongRuleNode);
|
ptr::read(ptr as *const StrongRuleNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ServoStyleContext is not an opaque type on any side of FFI.
|
||||||
|
// This means that doing the HasArcFFI type trick is actually unsound,
|
||||||
|
// since it gives us a way to construct an Arc<ServoStyleContext> from
|
||||||
|
// an &ServoStyleContext, which in general is not allowed. So we
|
||||||
|
// implement the restricted set of arc type functionality we need.
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn Servo_StyleContext_AddRef(obj: &ComputedValues) {
|
||||||
|
mem::forget(ArcBorrow::from_ref(obj).clone_arc());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn Servo_StyleContext_Release(obj: &ComputedValues) {
|
||||||
|
ArcBorrow::from_ref(obj).with_arc(|a: &Arc<ComputedValues>| {
|
||||||
|
let _: Arc<ComputedValues> = ptr::read(a);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
impl From<Arc<ComputedValues>> for Strong<ComputedValues> {
|
||||||
|
fn from(arc: Arc<ComputedValues>) -> Self {
|
||||||
|
unsafe { mem::transmute(Arc::into_raw_offset(arc)) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ use gecko_bindings::structs::nsStyleTransformMatrix;
|
||||||
use gecko_bindings::structs::nsTArray;
|
use gecko_bindings::structs::nsTArray;
|
||||||
type nsACString_internal = nsACString;
|
type nsACString_internal = nsACString;
|
||||||
type nsAString_internal = nsAString;
|
type nsAString_internal = nsAString;
|
||||||
pub type ServoStyleContextBorrowed<'a> = &'a ServoStyleContext;
|
pub type ServoStyleContextBorrowed<'a> = &'a ::properties::ComputedValues;
|
||||||
pub type ServoStyleContextBorrowedOrNull<'a> = Option<&'a ::properties::ComputedValues>;
|
pub type ServoStyleContextBorrowedOrNull<'a> = Option<&'a ::properties::ComputedValues>;
|
||||||
pub type ServoComputedValuesBorrowed<'a> = &'a ServoComputedValues;
|
pub type ServoComputedValuesBorrowed<'a> = &'a ServoComputedValues;
|
||||||
pub type ServoComputedValuesBorrowedOrNull<'a> = Option<&'a ServoComputedValues>;
|
pub type ServoComputedValuesBorrowedOrNull<'a> = Option<&'a ServoComputedValues>;
|
||||||
|
@ -2322,7 +2322,7 @@ extern "C" {
|
||||||
}
|
}
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn Servo_ComputedValues_SpecifiesAnimationsOrTransitions(computed_values:
|
pub fn Servo_ComputedValues_SpecifiesAnimationsOrTransitions(computed_values:
|
||||||
ServoComputedValuesBorrowed)
|
ServoStyleContextBorrowed)
|
||||||
-> bool;
|
-> bool;
|
||||||
}
|
}
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -2705,7 +2705,7 @@ extern "C" {
|
||||||
}
|
}
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn Servo_ComputedValues_GetStyleBits(values:
|
pub fn Servo_ComputedValues_GetStyleBits(values:
|
||||||
ServoComputedValuesBorrowed)
|
ServoStyleContextBorrowed)
|
||||||
-> u64;
|
-> u64;
|
||||||
}
|
}
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -2717,7 +2717,7 @@ extern "C" {
|
||||||
}
|
}
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn Servo_ComputedValues_GetStyleRuleList(values:
|
pub fn Servo_ComputedValues_GetStyleRuleList(values:
|
||||||
ServoComputedValuesBorrowed,
|
ServoStyleContextBorrowed,
|
||||||
rules:
|
rules:
|
||||||
RawGeckoServoStyleRuleListBorrowedMut);
|
RawGeckoServoStyleRuleListBorrowedMut);
|
||||||
}
|
}
|
||||||
|
@ -2804,17 +2804,17 @@ extern "C" {
|
||||||
}
|
}
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn Servo_GetCustomPropertyValue(computed_values:
|
pub fn Servo_GetCustomPropertyValue(computed_values:
|
||||||
ServoComputedValuesBorrowed,
|
ServoStyleContextBorrowed,
|
||||||
name: *const nsAString,
|
name: *const nsAString,
|
||||||
value: *mut nsAString) -> bool;
|
value: *mut nsAString) -> bool;
|
||||||
}
|
}
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn Servo_GetCustomPropertiesCount(computed_values:
|
pub fn Servo_GetCustomPropertiesCount(computed_values:
|
||||||
ServoComputedValuesBorrowed)
|
ServoStyleContextBorrowed)
|
||||||
-> u32;
|
-> u32;
|
||||||
}
|
}
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn Servo_GetCustomPropertyNameAt(arg1: ServoComputedValuesBorrowed,
|
pub fn Servo_GetCustomPropertyNameAt(arg1: ServoStyleContextBorrowed,
|
||||||
index: u32, name: *mut nsAString)
|
index: u32, name: *mut nsAString)
|
||||||
-> bool;
|
-> bool;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@ pub type ServoRuleNode = Option<::rule_tree::StrongRuleNode>;
|
||||||
pub type ServoVisitedStyle = Option<::servo_arc::RawOffsetArc<::properties::ComputedValues>>;
|
pub type ServoVisitedStyle = Option<::servo_arc::RawOffsetArc<::properties::ComputedValues>>;
|
||||||
pub type ServoComputedValueFlags = ::properties::computed_value_flags::ComputedValueFlags;
|
pub type ServoComputedValueFlags = ::properties::computed_value_flags::ComputedValueFlags;
|
||||||
pub type ServoRawOffsetArc<T> = ::servo_arc::RawOffsetArc<T>;
|
pub type ServoRawOffsetArc<T> = ::servo_arc::RawOffsetArc<T>;
|
||||||
pub type ServoStyleContextStrong = ::gecko_bindings::sugar::ownership::Strong<ServoStyleContext>;
|
pub type ServoStyleContextStrong = ::gecko_bindings::sugar::ownership::Strong<::properties::ComputedValues>;
|
||||||
|
|
||||||
#[allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
|
#[allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
|
||||||
pub mod root {
|
pub mod root {
|
||||||
|
|
|
@ -16,7 +16,7 @@ pub type ServoRuleNode = Option<::rule_tree::StrongRuleNode>;
|
||||||
pub type ServoVisitedStyle = Option<::servo_arc::RawOffsetArc<::properties::ComputedValues>>;
|
pub type ServoVisitedStyle = Option<::servo_arc::RawOffsetArc<::properties::ComputedValues>>;
|
||||||
pub type ServoComputedValueFlags = ::properties::computed_value_flags::ComputedValueFlags;
|
pub type ServoComputedValueFlags = ::properties::computed_value_flags::ComputedValueFlags;
|
||||||
pub type ServoRawOffsetArc<T> = ::servo_arc::RawOffsetArc<T>;
|
pub type ServoRawOffsetArc<T> = ::servo_arc::RawOffsetArc<T>;
|
||||||
pub type ServoStyleContextStrong = ::gecko_bindings::sugar::ownership::Strong<ServoStyleContext>;
|
pub type ServoStyleContextStrong = ::gecko_bindings::sugar::ownership::Strong<::properties::ComputedValues>;
|
||||||
|
|
||||||
#[allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
|
#[allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
|
||||||
pub mod root {
|
pub mod root {
|
||||||
|
|
|
@ -227,7 +227,8 @@ impl ComputedValuesInner {
|
||||||
) -> Arc<ComputedValues> {
|
) -> Arc<ComputedValues> {
|
||||||
let arc = unsafe {
|
let arc = unsafe {
|
||||||
let arc: Arc<ComputedValues> = Arc::new(uninitialized());
|
let arc: Arc<ComputedValues> = Arc::new(uninitialized());
|
||||||
bindings::Gecko_ServoStyleContext_Init(&arc.0 as *const _ as *mut _, parent, pres_context,
|
bindings::Gecko_ServoStyleContext_Init(&arc.0 as *const _ as *mut _,
|
||||||
|
parent, pres_context,
|
||||||
&self, pseudo_ty, pseudo_tag);
|
&self, pseudo_ty, pseudo_tag);
|
||||||
// We're simulating a move by having C++ do a memcpy and then forgetting
|
// We're simulating a move by having C++ do a memcpy and then forgetting
|
||||||
// it on this end.
|
// it on this end.
|
||||||
|
|
|
@ -8,7 +8,7 @@ use cssparser::ToCss as ParserToCss;
|
||||||
use env_logger::LogBuilder;
|
use env_logger::LogBuilder;
|
||||||
use selectors::Element;
|
use selectors::Element;
|
||||||
use selectors::matching::{MatchingContext, MatchingMode, matches_selector};
|
use selectors::matching::{MatchingContext, MatchingMode, matches_selector};
|
||||||
use servo_arc::{Arc, RawOffsetArc};
|
use servo_arc::{Arc, ArcBorrow, RawOffsetArc};
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::fmt::Write;
|
use std::fmt::Write;
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
|
@ -666,10 +666,10 @@ pub extern "C" fn Servo_StyleSet_GetBaseComputedValuesForElement(raw_data: RawSe
|
||||||
use style::style_resolver::StyleResolverForElement;
|
use style::style_resolver::StyleResolverForElement;
|
||||||
|
|
||||||
debug_assert!(!snapshots.is_null());
|
debug_assert!(!snapshots.is_null());
|
||||||
let computed_values = ComputedValues::as_arc(&computed_values);
|
let computed_values = unsafe { ArcBorrow::from_ref(computed_values) };
|
||||||
|
|
||||||
let rules = match computed_values.rules {
|
let rules = match computed_values.rules {
|
||||||
None => return computed_values.clone().into_strong(),
|
None => return computed_values.clone_arc().into(),
|
||||||
Some(ref rules) => rules,
|
Some(ref rules) => rules,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -678,14 +678,14 @@ pub extern "C" fn Servo_StyleSet_GetBaseComputedValuesForElement(raw_data: RawSe
|
||||||
doc_data.stylist.rule_tree().remove_animation_rules(rules);
|
doc_data.stylist.rule_tree().remove_animation_rules(rules);
|
||||||
|
|
||||||
if without_animations == *rules {
|
if without_animations == *rules {
|
||||||
return computed_values.clone().into_strong();
|
return computed_values.clone_arc().into();
|
||||||
}
|
}
|
||||||
|
|
||||||
let element = GeckoElement(element);
|
let element = GeckoElement(element);
|
||||||
|
|
||||||
let element_data = match element.borrow_data() {
|
let element_data = match element.borrow_data() {
|
||||||
Some(data) => data,
|
Some(data) => data,
|
||||||
None => return computed_values.clone().into_strong(),
|
None => return computed_values.clone_arc().into(),
|
||||||
};
|
};
|
||||||
let styles = &element_data.styles;
|
let styles = &element_data.styles;
|
||||||
|
|
||||||
|
@ -695,7 +695,7 @@ pub extern "C" fn Servo_StyleSet_GetBaseComputedValuesForElement(raw_data: RawSe
|
||||||
.pseudos
|
.pseudos
|
||||||
.get(&pseudo)
|
.get(&pseudo)
|
||||||
.expect("GetBaseComputedValuesForElement for an unexisting pseudo?")
|
.expect("GetBaseComputedValuesForElement for an unexisting pseudo?")
|
||||||
.clone().into_strong();
|
.clone().into();
|
||||||
}
|
}
|
||||||
|
|
||||||
let global_style_data = &*GLOBAL_STYLE_DATA;
|
let global_style_data = &*GLOBAL_STYLE_DATA;
|
||||||
|
@ -721,7 +721,7 @@ pub extern "C" fn Servo_StyleSet_GetBaseComputedValuesForElement(raw_data: RawSe
|
||||||
|
|
||||||
StyleResolverForElement::new(element, &mut context, RuleInclusion::All)
|
StyleResolverForElement::new(element, &mut context, RuleInclusion::All)
|
||||||
.cascade_style_and_visited_with_default_parents(inputs)
|
.cascade_style_and_visited_with_default_parents(inputs)
|
||||||
.into_strong()
|
.into()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
@ -734,8 +734,7 @@ pub extern "C" fn Servo_ComputedValues_ExtractAnimationValue(computed_values: Se
|
||||||
None => return Strong::null(),
|
None => return Strong::null(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let computed_values = ComputedValues::as_arc(&computed_values);
|
Arc::new(AnimationValue::from_computed_values(&property, &computed_values)).into_strong()
|
||||||
Arc::new(AnimationValue::from_computed_values(&property, computed_values)).into_strong()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
@ -1526,7 +1525,7 @@ pub extern "C" fn Servo_ComputedValues_GetForAnonymousBox(parent_style_or_null:
|
||||||
&pseudo,
|
&pseudo,
|
||||||
parent_style_or_null.map(|x| &*x),
|
parent_style_or_null.map(|x| &*x),
|
||||||
cascade_flags, &metrics
|
cascade_flags, &metrics
|
||||||
).into_strong()
|
).into()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
@ -1550,7 +1549,7 @@ pub extern "C" fn Servo_ResolvePseudoStyle(element: RawGeckoElementBorrowed,
|
||||||
return if is_probe {
|
return if is_probe {
|
||||||
Strong::null()
|
Strong::null()
|
||||||
} else {
|
} else {
|
||||||
doc_data.default_computed_values().clone().into_strong()
|
doc_data.default_computed_values().clone().into()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1571,7 +1570,7 @@ pub extern "C" fn Servo_ResolvePseudoStyle(element: RawGeckoElementBorrowed,
|
||||||
);
|
);
|
||||||
|
|
||||||
match style {
|
match style {
|
||||||
Some(s) => s.into_strong(),
|
Some(s) => s.into(),
|
||||||
None => {
|
None => {
|
||||||
debug_assert!(is_probe);
|
debug_assert!(is_probe);
|
||||||
Strong::null()
|
Strong::null()
|
||||||
|
@ -1584,13 +1583,12 @@ pub extern "C" fn Servo_SetExplicitStyle(element: RawGeckoElementBorrowed,
|
||||||
style: ServoStyleContextBorrowed)
|
style: ServoStyleContextBorrowed)
|
||||||
{
|
{
|
||||||
let element = GeckoElement(element);
|
let element = GeckoElement(element);
|
||||||
let style = ComputedValues::as_arc(&style);
|
|
||||||
debug!("Servo_SetExplicitStyle: {:?}", element);
|
debug!("Servo_SetExplicitStyle: {:?}", element);
|
||||||
// We only support this API for initial styling. There's no reason it couldn't
|
// We only support this API for initial styling. There's no reason it couldn't
|
||||||
// work for other things, we just haven't had a reason to do so.
|
// work for other things, we just haven't had a reason to do so.
|
||||||
debug_assert!(element.get_data().is_none());
|
debug_assert!(element.get_data().is_none());
|
||||||
let mut data = unsafe { element.ensure_data() };
|
let mut data = unsafe { element.ensure_data() };
|
||||||
data.styles.primary = Some(style.clone_arc());
|
data.styles.primary = Some(unsafe { ArcBorrow::from_ref(style) }.clone_arc());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
@ -1730,11 +1728,11 @@ pub extern "C" fn Servo_ComputedValues_Inherit(
|
||||||
).build()
|
).build()
|
||||||
};
|
};
|
||||||
|
|
||||||
style.into_strong()
|
style.into()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn Servo_ComputedValues_GetStyleBits(values: ServoComputedValuesBorrowed) -> u64 {
|
pub extern "C" fn Servo_ComputedValues_GetStyleBits(values: ServoStyleContextBorrowed) -> u64 {
|
||||||
use style::properties::computed_value_flags::*;
|
use style::properties::computed_value_flags::*;
|
||||||
let flags = values.flags;
|
let flags = values.flags;
|
||||||
let mut result = 0;
|
let mut result = 0;
|
||||||
|
@ -1748,7 +1746,7 @@ pub extern "C" fn Servo_ComputedValues_GetStyleBits(values: ServoComputedValuesB
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn Servo_ComputedValues_SpecifiesAnimationsOrTransitions(values: ServoComputedValuesBorrowed)
|
pub extern "C" fn Servo_ComputedValues_SpecifiesAnimationsOrTransitions(values: ServoStyleContextBorrowed)
|
||||||
-> bool {
|
-> bool {
|
||||||
let b = values.get_box();
|
let b = values.get_box();
|
||||||
b.specifies_animations() || b.specifies_transitions()
|
b.specifies_animations() || b.specifies_transitions()
|
||||||
|
@ -1763,7 +1761,7 @@ pub extern "C" fn Servo_ComputedValues_EqualCustomProperties(
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn Servo_ComputedValues_GetStyleRuleList(values: ServoComputedValuesBorrowed,
|
pub extern "C" fn Servo_ComputedValues_GetStyleRuleList(values: ServoStyleContextBorrowed,
|
||||||
rules: RawGeckoServoStyleRuleListBorrowedMut) {
|
rules: RawGeckoServoStyleRuleListBorrowedMut) {
|
||||||
if let Some(ref rule_node) = values.rules {
|
if let Some(ref rule_node) = values.rules {
|
||||||
let mut result = vec![];
|
let mut result = vec![];
|
||||||
|
@ -2804,7 +2802,7 @@ pub extern "C" fn Servo_ResolveStyle(element: RawGeckoElementBorrowed,
|
||||||
};
|
};
|
||||||
debug_assert!(element.has_current_styles_for_traversal(&*data, flags),
|
debug_assert!(element.has_current_styles_for_traversal(&*data, flags),
|
||||||
"Resolving style on element without current styles");
|
"Resolving style on element without current styles");
|
||||||
data.styles.primary().clone().into_strong()
|
data.styles.primary().clone().into()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
@ -2853,7 +2851,7 @@ pub extern "C" fn Servo_ResolveStyleLazily(element: RawGeckoElementBorrowed,
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if let Some(result) = styles {
|
if let Some(result) = styles {
|
||||||
return result.into_strong();
|
return result.into();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2870,7 +2868,7 @@ pub extern "C" fn Servo_ResolveStyleLazily(element: RawGeckoElementBorrowed,
|
||||||
};
|
};
|
||||||
|
|
||||||
let styles = resolve_style(&mut context, element, rule_inclusion);
|
let styles = resolve_style(&mut context, element, rule_inclusion);
|
||||||
finish(&styles).into_strong()
|
finish(&styles).into()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "gecko_debug")]
|
#[cfg(feature = "gecko_debug")]
|
||||||
|
@ -2919,7 +2917,6 @@ pub extern "C" fn Servo_GetComputedKeyframeValues(keyframes: RawGeckoKeyframeLis
|
||||||
|
|
||||||
let data = PerDocumentStyleData::from_ffi(raw_data).borrow();
|
let data = PerDocumentStyleData::from_ffi(raw_data).borrow();
|
||||||
let metrics = get_metrics_provider_for_product();
|
let metrics = get_metrics_provider_for_product();
|
||||||
let style = ComputedValues::as_arc(&style);
|
|
||||||
|
|
||||||
let element = GeckoElement(element);
|
let element = GeckoElement(element);
|
||||||
let parent_element = element.inheritance_parent();
|
let parent_element = element.inheritance_parent();
|
||||||
|
@ -2927,7 +2924,7 @@ pub extern "C" fn Servo_GetComputedKeyframeValues(keyframes: RawGeckoKeyframeLis
|
||||||
let parent_style = parent_data.as_ref().map(|d| d.styles.primary()).map(|x| &**x);
|
let parent_style = parent_data.as_ref().map(|d| d.styles.primary()).map(|x| &**x);
|
||||||
|
|
||||||
let pseudo = style.pseudo();
|
let pseudo = style.pseudo();
|
||||||
let mut context = create_context(&data, &metrics, style, parent_style, pseudo.as_ref());
|
let mut context = create_context(&data, &metrics, &style, parent_style, pseudo.as_ref());
|
||||||
|
|
||||||
let global_style_data = &*GLOBAL_STYLE_DATA;
|
let global_style_data = &*GLOBAL_STYLE_DATA;
|
||||||
let guard = global_style_data.shared_lock.read();
|
let guard = global_style_data.shared_lock.read();
|
||||||
|
@ -3001,7 +2998,6 @@ pub extern "C" fn Servo_GetAnimationValues(declarations: RawServoDeclarationBloc
|
||||||
animation_values: RawGeckoServoAnimationValueListBorrowedMut) {
|
animation_values: RawGeckoServoAnimationValueListBorrowedMut) {
|
||||||
let data = PerDocumentStyleData::from_ffi(raw_data).borrow();
|
let data = PerDocumentStyleData::from_ffi(raw_data).borrow();
|
||||||
let metrics = get_metrics_provider_for_product();
|
let metrics = get_metrics_provider_for_product();
|
||||||
let style = ComputedValues::as_arc(&style);
|
|
||||||
|
|
||||||
let element = GeckoElement(element);
|
let element = GeckoElement(element);
|
||||||
let parent_element = element.inheritance_parent();
|
let parent_element = element.inheritance_parent();
|
||||||
|
@ -3009,7 +3005,7 @@ pub extern "C" fn Servo_GetAnimationValues(declarations: RawServoDeclarationBloc
|
||||||
let parent_style = parent_data.as_ref().map(|d| d.styles.primary()).map(|x| &**x);
|
let parent_style = parent_data.as_ref().map(|d| d.styles.primary()).map(|x| &**x);
|
||||||
|
|
||||||
let pseudo = style.pseudo();
|
let pseudo = style.pseudo();
|
||||||
let mut context = create_context(&data, &metrics, style, parent_style, pseudo.as_ref());
|
let mut context = create_context(&data, &metrics, &style, parent_style, pseudo.as_ref());
|
||||||
|
|
||||||
let default_values = data.default_computed_values();
|
let default_values = data.default_computed_values();
|
||||||
let global_style_data = &*GLOBAL_STYLE_DATA;
|
let global_style_data = &*GLOBAL_STYLE_DATA;
|
||||||
|
@ -3031,7 +3027,6 @@ pub extern "C" fn Servo_AnimationValue_Compute(element: RawGeckoElementBorrowed,
|
||||||
-> RawServoAnimationValueStrong {
|
-> RawServoAnimationValueStrong {
|
||||||
let data = PerDocumentStyleData::from_ffi(raw_data).borrow();
|
let data = PerDocumentStyleData::from_ffi(raw_data).borrow();
|
||||||
let metrics = get_metrics_provider_for_product();
|
let metrics = get_metrics_provider_for_product();
|
||||||
let style = ComputedValues::as_arc(&style);
|
|
||||||
|
|
||||||
let element = GeckoElement(element);
|
let element = GeckoElement(element);
|
||||||
let parent_element = element.inheritance_parent();
|
let parent_element = element.inheritance_parent();
|
||||||
|
@ -3293,7 +3288,7 @@ pub extern "C" fn Servo_StyleSet_ResolveForDeclarations(
|
||||||
&guards,
|
&guards,
|
||||||
parent_style,
|
parent_style,
|
||||||
declarations.clone_arc(),
|
declarations.clone_arc(),
|
||||||
).into_strong()
|
).into()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
@ -3350,7 +3345,7 @@ pub extern "C" fn Servo_StyleSet_HasStateDependency(
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn Servo_GetCustomPropertyValue(computed_values: ServoComputedValuesBorrowed,
|
pub extern "C" fn Servo_GetCustomPropertyValue(computed_values: ServoStyleContextBorrowed,
|
||||||
name: *const nsAString,
|
name: *const nsAString,
|
||||||
value: *mut nsAString) -> bool {
|
value: *mut nsAString) -> bool {
|
||||||
let custom_properties = match computed_values.custom_properties() {
|
let custom_properties = match computed_values.custom_properties() {
|
||||||
|
@ -3369,7 +3364,7 @@ pub extern "C" fn Servo_GetCustomPropertyValue(computed_values: ServoComputedVal
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn Servo_GetCustomPropertiesCount(computed_values: ServoComputedValuesBorrowed) -> u32 {
|
pub extern "C" fn Servo_GetCustomPropertiesCount(computed_values: ServoStyleContextBorrowed) -> u32 {
|
||||||
match computed_values.custom_properties() {
|
match computed_values.custom_properties() {
|
||||||
Some(p) => p.len() as u32,
|
Some(p) => p.len() as u32,
|
||||||
None => 0,
|
None => 0,
|
||||||
|
@ -3377,7 +3372,7 @@ pub extern "C" fn Servo_GetCustomPropertiesCount(computed_values: ServoComputedV
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn Servo_GetCustomPropertyNameAt(computed_values: ServoComputedValuesBorrowed,
|
pub extern "C" fn Servo_GetCustomPropertyNameAt(computed_values: ServoStyleContextBorrowed,
|
||||||
index: u32,
|
index: u32,
|
||||||
name: *mut nsAString) -> bool {
|
name: *mut nsAString) -> bool {
|
||||||
let custom_properties = match computed_values.custom_properties() {
|
let custom_properties = match computed_values.custom_properties() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue