mirror of
https://github.com/servo/servo.git
synced 2025-08-12 08:55:32 +01:00
Bug 1349651 - stylo: Implement HasAuthorSpecifiedRules.
This commit is contained in:
parent
121662aa57
commit
32d37795a2
8 changed files with 376 additions and 28 deletions
|
@ -9,6 +9,7 @@
|
|||
#![allow(non_snake_case, missing_docs)]
|
||||
|
||||
use gecko_bindings::bindings::{RawServoMediaList, RawServoMediaRule, RawServoNamespaceRule, RawServoPageRule};
|
||||
use gecko_bindings::bindings::{RawServoRuleNode, RawServoRuleNodeStrong};
|
||||
use gecko_bindings::bindings::{RawServoStyleSheet, RawServoImportRule, RawServoSupportsRule};
|
||||
use gecko_bindings::bindings::{ServoComputedValues, ServoCssRules};
|
||||
use gecko_bindings::structs::{RawServoDeclarationBlock, RawServoStyleRule};
|
||||
|
@ -17,7 +18,9 @@ use gecko_bindings::sugar::ownership::{HasArcFFI, HasFFI};
|
|||
use media_queries::MediaList;
|
||||
use properties::{ComputedValues, PropertyDeclarationBlock};
|
||||
use properties::animated_properties::AnimationValue;
|
||||
use rule_tree::StrongRuleNode;
|
||||
use shared_lock::Locked;
|
||||
use std::{mem, ptr};
|
||||
use stylesheets::{CssRules, Stylesheet, StyleRule, ImportRule, MediaRule};
|
||||
use stylesheets::{NamespaceRule, PageRule, SupportsRule};
|
||||
|
||||
|
@ -75,3 +78,28 @@ impl_arc_ffi!(Locked<PageRule> => RawServoPageRule
|
|||
|
||||
impl_arc_ffi!(Locked<SupportsRule> => RawServoSupportsRule
|
||||
[Servo_SupportsRule_AddRef, Servo_SupportsRule_Release]);
|
||||
|
||||
// RuleNode is a Arc-like type but it does not use Arc.
|
||||
|
||||
impl StrongRuleNode {
|
||||
pub fn into_strong(self) -> RawServoRuleNodeStrong {
|
||||
let ptr = self.ptr();
|
||||
mem::forget(self);
|
||||
unsafe { mem::transmute(ptr) }
|
||||
}
|
||||
|
||||
pub fn from_ffi<'a>(ffi: &'a &RawServoRuleNode) -> &'a Self {
|
||||
unsafe { &*(ffi as *const &RawServoRuleNode as *const StrongRuleNode) }
|
||||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn Servo_RuleNode_AddRef(obj: &RawServoRuleNode) {
|
||||
mem::forget(StrongRuleNode::from_ffi(&obj).clone());
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn Servo_RuleNode_Release(obj: &RawServoRuleNode) {
|
||||
let ptr = StrongRuleNode::from_ffi(&obj);
|
||||
ptr::read(ptr as *const StrongRuleNode);
|
||||
}
|
||||
|
|
|
@ -250,6 +250,11 @@ pub type RawServoSupportsRuleBorrowed<'a> = &'a RawServoSupportsRule;
|
|||
pub type RawServoSupportsRuleBorrowedOrNull<'a> = Option<&'a RawServoSupportsRule>;
|
||||
enum RawServoSupportsRuleVoid { }
|
||||
pub struct RawServoSupportsRule(RawServoSupportsRuleVoid);
|
||||
pub type RawServoRuleNodeStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoRuleNode>;
|
||||
pub type RawServoRuleNodeBorrowed<'a> = &'a RawServoRuleNode;
|
||||
pub type RawServoRuleNodeBorrowedOrNull<'a> = Option<&'a RawServoRuleNode>;
|
||||
enum RawServoRuleNodeVoid { }
|
||||
pub struct RawServoRuleNode(RawServoRuleNodeVoid);
|
||||
pub type RawServoStyleSetOwned = ::gecko_bindings::sugar::ownership::Owned<RawServoStyleSet>;
|
||||
pub type RawServoStyleSetOwnedOrNull = ::gecko_bindings::sugar::ownership::OwnedOrNull<RawServoStyleSet>;
|
||||
pub type RawServoStyleSetBorrowed<'a> = &'a RawServoStyleSet;
|
||||
|
@ -411,6 +416,12 @@ extern "C" {
|
|||
extern "C" {
|
||||
pub fn Servo_SupportsRule_Release(ptr: RawServoSupportsRuleBorrowed);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn Servo_RuleNode_AddRef(ptr: RawServoRuleNodeBorrowed);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn Servo_RuleNode_Release(ptr: RawServoRuleNodeBorrowed);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn Servo_StyleSet_Drop(ptr: RawServoStyleSetOwned);
|
||||
}
|
||||
|
@ -2183,6 +2194,18 @@ extern "C" {
|
|||
set: RawServoStyleSetBorrowed)
|
||||
-> ServoComputedValuesStrong;
|
||||
}
|
||||
extern "C" {
|
||||
pub fn Servo_ResolveRuleNode(element: RawGeckoElementBorrowed,
|
||||
pseudo_tag: *mut nsIAtom,
|
||||
set: RawServoStyleSetBorrowed)
|
||||
-> RawServoRuleNodeStrong;
|
||||
}
|
||||
extern "C" {
|
||||
pub fn Servo_HasAuthorSpecifiedRules(rule_node: RawServoRuleNodeBorrowed,
|
||||
element: RawGeckoElementBorrowed,
|
||||
rule_type_mask: u32,
|
||||
author_colors_allowed: bool) -> bool;
|
||||
}
|
||||
extern "C" {
|
||||
pub fn Servo_ResolveStyleLazily(element: RawGeckoElementBorrowed,
|
||||
pseudo_tag: *mut nsIAtom,
|
||||
|
|
|
@ -1126,6 +1126,10 @@ pub mod root {
|
|||
pub const kNameSpaceID_disabled_SVG: ::std::os::raw::c_uint = 12;
|
||||
pub const kNameSpaceID_LastBuiltin: ::std::os::raw::c_uint = 12;
|
||||
pub const kNameSpaceID_Wildcard: ::std::os::raw::c_int = -2147483648;
|
||||
pub const NS_AUTHOR_SPECIFIED_BACKGROUND: ::std::os::raw::c_uint = 1;
|
||||
pub const NS_AUTHOR_SPECIFIED_BORDER: ::std::os::raw::c_uint = 2;
|
||||
pub const NS_AUTHOR_SPECIFIED_PADDING: ::std::os::raw::c_uint = 4;
|
||||
pub const NS_AUTHOR_SPECIFIED_TEXT_SHADOW: ::std::os::raw::c_uint = 8;
|
||||
pub const NS_STYLE_INHERIT_MASK: ::std::os::raw::c_uint = 16777215;
|
||||
pub const NS_STYLE_HAS_TEXT_DECORATION_LINES: ::std::os::raw::c_uint =
|
||||
16777216;
|
||||
|
|
|
@ -1126,6 +1126,10 @@ pub mod root {
|
|||
pub const kNameSpaceID_disabled_SVG: ::std::os::raw::c_uint = 12;
|
||||
pub const kNameSpaceID_LastBuiltin: ::std::os::raw::c_uint = 12;
|
||||
pub const kNameSpaceID_Wildcard: ::std::os::raw::c_int = -2147483648;
|
||||
pub const NS_AUTHOR_SPECIFIED_BACKGROUND: ::std::os::raw::c_uint = 1;
|
||||
pub const NS_AUTHOR_SPECIFIED_BORDER: ::std::os::raw::c_uint = 2;
|
||||
pub const NS_AUTHOR_SPECIFIED_PADDING: ::std::os::raw::c_uint = 4;
|
||||
pub const NS_AUTHOR_SPECIFIED_TEXT_SHADOW: ::std::os::raw::c_uint = 8;
|
||||
pub const NS_STYLE_INHERIT_MASK: ::std::os::raw::c_uint = 16777215;
|
||||
pub const NS_STYLE_HAS_TEXT_DECORATION_LINES: ::std::os::raw::c_uint =
|
||||
16777216;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue