Add a utility function to convert PseudoElement to nsIAtom*.

MozReview-Commit-ID: 14qYFpiW0iG
This commit is contained in:
Hiroyuki Ikezoe 2017-03-10 11:08:57 +09:00
parent d8f08b80e0
commit 22de4dc7a6
2 changed files with 10 additions and 3 deletions

View file

@ -7,11 +7,13 @@
use cssparser::ToCss; use cssparser::ToCss;
use element_state::ElementState; use element_state::ElementState;
use gecko_bindings::structs::CSSPseudoClassType; use gecko_bindings::structs::CSSPseudoClassType;
use gecko_bindings::structs::nsIAtom;
use selector_parser::{SelectorParser, PseudoElementCascadeType}; use selector_parser::{SelectorParser, PseudoElementCascadeType};
use selector_parser::{attr_equals_selector_is_shareable, attr_exists_selector_is_shareable}; use selector_parser::{attr_equals_selector_is_shareable, attr_exists_selector_is_shareable};
use selectors::parser::AttrSelector; use selectors::parser::AttrSelector;
use std::borrow::Cow; use std::borrow::Cow;
use std::fmt; use std::fmt;
use std::ptr;
use string_cache::{Atom, Namespace, WeakAtom, WeakNamespace}; use string_cache::{Atom, Namespace, WeakAtom, WeakNamespace};
/// A representation of a CSS pseudo-element. /// A representation of a CSS pseudo-element.
@ -111,6 +113,12 @@ impl PseudoElement {
None None
} }
/// Returns null or nsIAtom pointer corresponding to a given PseudoElement.
#[inline]
pub fn ns_atom_or_null_from_opt(pseudo: Option<&PseudoElement>) -> *mut nsIAtom {
pseudo.map(|p| p.as_atom().as_ptr()).unwrap_or(ptr::null_mut())
}
} }
impl ToCss for PseudoElement { impl ToCss for PseudoElement {

View file

@ -416,7 +416,7 @@ impl<'le> TElement for GeckoElement<'le> {
} }
fn get_animation_rules(&self, pseudo: Option<&PseudoElement>) -> AnimationRules { fn get_animation_rules(&self, pseudo: Option<&PseudoElement>) -> AnimationRules {
let atom_ptr = pseudo.map(|p| p.as_atom().as_ptr()).unwrap_or(ptr::null_mut()); let atom_ptr = PseudoElement::ns_atom_or_null_from_opt(pseudo);
unsafe { unsafe {
AnimationRules( AnimationRules(
Gecko_GetAnimationRule(self.0, atom_ptr, CascadeLevel::Animations).into_arc_opt(), Gecko_GetAnimationRule(self.0, atom_ptr, CascadeLevel::Animations).into_arc_opt(),
@ -454,9 +454,8 @@ impl<'le> TElement for GeckoElement<'le> {
_existing_values: &'a Arc<ComputedValues>, _existing_values: &'a Arc<ComputedValues>,
pseudo: Option<&PseudoElement>) pseudo: Option<&PseudoElement>)
-> Option<&'a nsStyleContext> { -> Option<&'a nsStyleContext> {
let atom_ptr = PseudoElement::ns_atom_or_null_from_opt(pseudo);
unsafe { unsafe {
let atom_ptr = pseudo.map(|p| p.as_atom().as_ptr())
.unwrap_or(ptr::null_mut());
let context_ptr = Gecko_GetStyleContext(self.as_node().0, atom_ptr); let context_ptr = Gecko_GetStyleContext(self.as_node().0, atom_ptr);
context_ptr.as_ref() context_ptr.as_ref()
} }