aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webglcontextevent.rs
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <ecoal95@gmail.com>2015-10-03 21:09:54 +0200
committerEmilio Cobos Álvarez <ecoal95@gmail.com>2015-10-08 00:29:31 +0200
commit7030f098231a98f492ad691700d0c79c82cfb372 (patch)
tree0f25b0ea260621d1952310198a2489b11265b410 /components/script/dom/webglcontextevent.rs
parent217c7da41304142ffaf7c02a3eb888b0f150c59d (diff)
downloadservo-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.rs87
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))
+ }
+}