mirror of
https://github.com/servo/servo.git
synced 2025-08-02 20:20:14 +01:00
Move EventState to rust-selectors.
This commit is contained in:
parent
f7f27a8146
commit
79ac365a68
20 changed files with 114 additions and 169 deletions
|
@ -32,7 +32,7 @@ use dom::customevent::CustomEvent;
|
|||
use dom::documentfragment::DocumentFragment;
|
||||
use dom::documenttype::DocumentType;
|
||||
use dom::domimplementation::DOMImplementation;
|
||||
use dom::element::{Element, ElementCreator, EventState};
|
||||
use dom::element::{Element, ElementCreator};
|
||||
use dom::event::{Event, EventBubbles, EventCancelable};
|
||||
use dom::eventtarget::{EventTarget};
|
||||
use dom::htmlanchorelement::HTMLAnchorElement;
|
||||
|
@ -85,6 +85,7 @@ use net_traits::{AsyncResponseTarget, PendingAsyncLoad};
|
|||
use num::ToPrimitive;
|
||||
use script_task::{MainThreadScriptMsg, Runnable};
|
||||
use script_traits::{MouseButton, UntrustedNodeAddress};
|
||||
use selectors::states::*;
|
||||
use std::ascii::AsciiExt;
|
||||
use std::borrow::ToOwned;
|
||||
use std::boxed::FnBox;
|
||||
|
@ -174,8 +175,8 @@ pub struct Document {
|
|||
/// This field is set to the document itself for inert documents.
|
||||
/// https://html.spec.whatwg.org/multipage/#appropriate-template-contents-owner-document
|
||||
appropriate_template_contents_owner_document: MutNullableHeap<JS<Document>>,
|
||||
// The collection of EventStates that have been changed since the last restyle.
|
||||
event_state_changes: DOMRefCell<HashMap<JS<Element>, EventState>>,
|
||||
// The collection of ElementStates that have been changed since the last restyle.
|
||||
element_state_changes: DOMRefCell<HashMap<JS<Element>, ElementState>>,
|
||||
}
|
||||
|
||||
impl PartialEq for Document {
|
||||
|
@ -305,7 +306,7 @@ impl Document {
|
|||
|
||||
pub fn needs_reflow(&self) -> bool {
|
||||
self.GetDocumentElement().is_some() &&
|
||||
(self.upcast::<Node>().get_has_dirty_descendants() || !self.event_state_changes.borrow().is_empty())
|
||||
(self.upcast::<Node>().get_has_dirty_descendants() || !self.element_state_changes.borrow().is_empty())
|
||||
}
|
||||
|
||||
/// Returns the first `base` element in the DOM that has an `href` attribute.
|
||||
|
@ -1185,7 +1186,7 @@ pub enum DocumentSource {
|
|||
#[allow(unsafe_code)]
|
||||
pub trait LayoutDocumentHelpers {
|
||||
unsafe fn is_html_document_for_layout(&self) -> bool;
|
||||
unsafe fn drain_event_state_changes(&self) -> Vec<(LayoutJS<Element>, EventState)>;
|
||||
unsafe fn drain_element_state_changes(&self) -> Vec<(LayoutJS<Element>, ElementState)>;
|
||||
}
|
||||
|
||||
#[allow(unsafe_code)]
|
||||
|
@ -1197,8 +1198,8 @@ impl LayoutDocumentHelpers for LayoutJS<Document> {
|
|||
|
||||
#[inline]
|
||||
#[allow(unrooted_must_root)]
|
||||
unsafe fn drain_event_state_changes(&self) -> Vec<(LayoutJS<Element>, EventState)> {
|
||||
let mut changes = (*self.unsafe_get()).event_state_changes.borrow_mut_for_layout();
|
||||
unsafe fn drain_element_state_changes(&self) -> Vec<(LayoutJS<Element>, ElementState)> {
|
||||
let mut changes = (*self.unsafe_get()).element_state_changes.borrow_mut_for_layout();
|
||||
let drain = changes.drain();
|
||||
let layout_drain = drain.map(|(k, v)| (k.to_layout(), v));
|
||||
Vec::from_iter(layout_drain)
|
||||
|
@ -1268,7 +1269,7 @@ impl Document {
|
|||
reflow_timeout: Cell::new(None),
|
||||
base_element: Default::default(),
|
||||
appropriate_template_contents_owner_document: Default::default(),
|
||||
event_state_changes: DOMRefCell::new(HashMap::new()),
|
||||
element_state_changes: DOMRefCell::new(HashMap::new()),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1334,12 +1335,12 @@ impl Document {
|
|||
self.idmap.borrow().get(&id).map(|ref elements| (*elements)[0].root())
|
||||
}
|
||||
|
||||
pub fn record_event_state_change(&self, el: &Element, which: EventState) {
|
||||
let mut map = self.event_state_changes.borrow_mut();
|
||||
pub fn record_element_state_change(&self, el: &Element, which: ElementState) {
|
||||
let mut map = self.element_state_changes.borrow_mut();
|
||||
let empty;
|
||||
{
|
||||
let states = map.entry(JS::from_ref(el))
|
||||
.or_insert(EventState::empty());
|
||||
.or_insert(ElementState::empty());
|
||||
states.toggle(which);
|
||||
empty = states.is_empty();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue