Make EventTypeId reflect DOM inheritance hierarchy

This commit is contained in:
wilmoz 2015-08-18 13:24:17 -05:00
parent 50e1c967e4
commit d3c60af5c6
4 changed files with 22 additions and 13 deletions

View file

@ -10,6 +10,7 @@ use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JS, MutNullableHeap, Root};
use dom::bindings::utils::{Reflector, reflect_dom_object};
use dom::eventtarget::{EventTarget, EventTargetHelpers};
use dom::uievent::{UIEventTypeId};
use util::str::DOMString;
use std::borrow::ToOwned;
@ -32,12 +33,10 @@ pub enum EventPhase {
pub enum EventTypeId {
CustomEvent,
HTMLEvent,
KeyboardEvent,
MessageEvent,
MouseEvent,
ProgressEvent,
StorageEvent,
UIEvent,
UIEvent(UIEventTypeId),
ErrorEvent,
CloseEvent
}

View file

@ -11,7 +11,7 @@ use dom::bindings::global::GlobalRef;
use dom::bindings::js::{Root, RootedReference};
use dom::bindings::utils::{Reflectable, reflect_dom_object};
use dom::event::{Event, EventTypeId};
use dom::uievent::UIEvent;
use dom::uievent::{UIEvent, UIEventTypeId};
use dom::window::Window;
use msg::constellation_msg;
use msg::constellation_msg::{Key, KeyModifiers};
@ -43,14 +43,14 @@ pub struct KeyboardEvent {
impl KeyboardEventDerived for Event {
fn is_keyboardevent(&self) -> bool {
*self.type_id() == EventTypeId::KeyboardEvent
*self.type_id() == EventTypeId::UIEvent(UIEventTypeId::KeyboardEvent)
}
}
impl KeyboardEvent {
fn new_inherited() -> KeyboardEvent {
KeyboardEvent {
uievent: UIEvent::new_inherited(EventTypeId::KeyboardEvent),
uievent: UIEvent::new_inherited(UIEventTypeId::KeyboardEvent),
key: Cell::new(None),
key_string: RefCell::new("".to_owned()),
code: RefCell::new("".to_owned()),

View file

@ -12,7 +12,7 @@ use dom::bindings::js::{JS, MutNullableHeap, Root, RootedReference};
use dom::bindings::utils::reflect_dom_object;
use dom::event::{Event, EventTypeId, EventBubbles, EventCancelable};
use dom::eventtarget::EventTarget;
use dom::uievent::UIEvent;
use dom::uievent::{UIEvent, UIEventTypeId};
use dom::window::Window;
use util::opts;
use util::str::DOMString;
@ -37,14 +37,14 @@ pub struct MouseEvent {
impl MouseEventDerived for Event {
fn is_mouseevent(&self) -> bool {
*self.type_id() == EventTypeId::MouseEvent
*self.type_id() == EventTypeId::UIEvent(UIEventTypeId::MouseEvent)
}
}
impl MouseEvent {
fn new_inherited() -> MouseEvent {
MouseEvent {
uievent: UIEvent::new_inherited(EventTypeId::MouseEvent),
uievent: UIEvent::new_inherited(UIEventTypeId::MouseEvent),
screen_x: Cell::new(0),
screen_y: Cell::new(0),
client_x: Cell::new(0),

View file

@ -19,6 +19,13 @@ use util::str::DOMString;
use std::cell::Cell;
use std::default::Default;
#[derive(JSTraceable, PartialEq, HeapSizeOf)]
pub enum UIEventTypeId {
MouseEvent,
KeyboardEvent,
UIEvent,
}
// https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html#interface-UIEvent
#[dom_struct]
#[derive(HeapSizeOf)]
@ -30,21 +37,24 @@ pub struct UIEvent {
impl UIEventDerived for Event {
fn is_uievent(&self) -> bool {
*self.type_id() == EventTypeId::UIEvent
match *self.type_id() {
EventTypeId::UIEvent(_) => true,
_ => false
}
}
}
impl UIEvent {
pub fn new_inherited(type_id: EventTypeId) -> UIEvent {
pub fn new_inherited(type_id: UIEventTypeId) -> UIEvent {
UIEvent {
event: Event::new_inherited(type_id),
event: Event::new_inherited(EventTypeId::UIEvent(type_id)),
view: Default::default(),
detail: Cell::new(0),
}
}
pub fn new_uninitialized(window: &Window) -> Root<UIEvent> {
reflect_dom_object(box UIEvent::new_inherited(EventTypeId::UIEvent),
reflect_dom_object(box UIEvent::new_inherited(UIEventTypeId::UIEvent),
GlobalRef::Window(window),
UIEventBinding::Wrap)
}