diff options
author | Emilio Cobos Álvarez <ecoal95@gmail.com> | 2015-10-03 21:09:54 +0200 |
---|---|---|
committer | Emilio Cobos Álvarez <ecoal95@gmail.com> | 2015-10-08 00:29:31 +0200 |
commit | 7030f098231a98f492ad691700d0c79c82cfb372 (patch) | |
tree | 0f25b0ea260621d1952310198a2489b11265b410 /components/script/dom/webglcontextevent.rs | |
parent | 217c7da41304142ffaf7c02a3eb888b0f150c59d (diff) | |
download | servo-7030f098231a98f492ad691700d0c79c82cfb372.tar.gz servo-7030f098231a98f492ad691700d0c79c82cfb372.zip |
webgl: Implement WebGLContextEvent and use it on context creation error
spec: https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15
Diffstat (limited to 'components/script/dom/webglcontextevent.rs')
-rw-r--r-- | components/script/dom/webglcontextevent.rs | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/components/script/dom/webglcontextevent.rs b/components/script/dom/webglcontextevent.rs new file mode 100644 index 00000000000..2eed623c44d --- /dev/null +++ b/components/script/dom/webglcontextevent.rs @@ -0,0 +1,87 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +use dom::bindings::codegen::Bindings::EventBinding::EventMethods; +use dom::bindings::codegen::Bindings::WebGLContextEventBinding; +use dom::bindings::codegen::Bindings::WebGLContextEventBinding::WebGLContextEventInit; +use dom::bindings::codegen::Bindings::WebGLContextEventBinding::WebGLContextEventMethods; +use dom::bindings::codegen::InheritTypes::{WebGLContextEventDerived, EventCast}; +use dom::bindings::error::Fallible; +use dom::bindings::global::GlobalRef; +use dom::bindings::js::{Root, RootedReference}; +use dom::bindings::utils::reflect_dom_object; +use dom::event::{Event, EventBubbles, EventCancelable, EventTypeId}; +use util::str::DOMString; + +#[dom_struct] +pub struct WebGLContextEvent { + event: Event, + status_message: DOMString, +} + +impl WebGLContextEventMethods for WebGLContextEvent { + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15 + fn StatusMessage(&self) -> DOMString { + self.status_message.clone() + } +} + +impl WebGLContextEventDerived for Event { + fn is_webglcontextevent(&self) -> bool { + *self.type_id() == EventTypeId::WebGLContextEvent + } +} + +impl WebGLContextEvent { + pub fn new_inherited(type_id: EventTypeId, status_message: DOMString) -> WebGLContextEvent { + WebGLContextEvent { + event: Event::new_inherited(type_id), + status_message: status_message, + } + } + + pub fn new(global: GlobalRef, + type_: DOMString, + bubbles: EventBubbles, + cancelable: EventCancelable, + status_message: DOMString) -> Root<WebGLContextEvent> { + let event = reflect_dom_object( + box WebGLContextEvent::new_inherited(EventTypeId::WebGLContextEvent, status_message), + global, + WebGLContextEventBinding::Wrap); + + { + let parent = EventCast::from_ref(event.r()); + parent.InitEvent(type_, bubbles == EventBubbles::Bubbles, cancelable == EventCancelable::Cancelable); + } + + event + } + + pub fn Constructor(global: GlobalRef, + type_: DOMString, + init: &WebGLContextEventInit) -> Fallible<Root<WebGLContextEvent>> { + let status_message = match init.statusMessage.as_ref() { + Some(message) => message.clone(), + None => "".to_owned(), + }; + + let bubbles = if init.parent.bubbles { + EventBubbles::Bubbles + } else { + EventBubbles::DoesNotBubble + }; + + let cancelable = if init.parent.cancelable { + EventCancelable::Cancelable + } else { + EventCancelable::NotCancelable + }; + + Ok(WebGLContextEvent::new(global, type_, + bubbles, + cancelable, + status_message)) + } +} |