aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/screen.rs
diff options
context:
space:
mode:
authorShing Lyu <shing.lyu@gmail.com>2017-09-27 10:32:51 +0200
committerShing Lyu <shing.lyu@gmail.com>2017-11-13 21:32:10 +0100
commitc120234f0e8c71e4f9c217796266492ac2a013fa (patch)
tree12f51a708aa58d2a8a3188ae2a7afc5e99648061 /components/script/dom/screen.rs
parent657b2339a1e68f3a9c4525f35db023d3f149ffac (diff)
downloadservo-c120234f0e8c71e4f9c217796266492ac2a013fa.tar.gz
servo-c120234f0e8c71e4f9c217796266492ac2a013fa.zip
Enable screen.availHeight/availWidth/Height/Width
Diffstat (limited to 'components/script/dom/screen.rs')
-rw-r--r--components/script/dom/screen.rs48
1 files changed, 45 insertions, 3 deletions
diff --git a/components/script/dom/screen.rs b/components/script/dom/screen.rs
index cfb827db6f0..bec082e9729 100644
--- a/components/script/dom/screen.rs
+++ b/components/script/dom/screen.rs
@@ -4,31 +4,73 @@
use dom::bindings::codegen::Bindings::ScreenBinding;
use dom::bindings::codegen::Bindings::ScreenBinding::ScreenMethods;
+use dom::bindings::inheritance::Castable;
+use dom::bindings::num::Finite;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
-use dom::bindings::root::DomRoot;
+use dom::bindings::root::{Dom, DomRoot};
+use dom::globalscope::GlobalScope;
use dom::window::Window;
use dom_struct::dom_struct;
+use euclid::Size2D;
+use ipc_channel::ipc;
+use script_traits::ScriptMsg;
#[dom_struct]
pub struct Screen {
reflector_: Reflector,
+ window: Dom<Window>,
}
impl Screen {
- fn new_inherited() -> Screen {
+ fn new_inherited(window: &Window) -> Screen {
Screen {
reflector_: Reflector::new(),
+ window: Dom::from_ref(&window),
}
}
pub fn new(window: &Window) -> DomRoot<Screen> {
- reflect_dom_object(Box::new(Screen::new_inherited()),
+ reflect_dom_object(Box::new(Screen::new_inherited(window)),
window,
ScreenBinding::Wrap)
}
+
+ fn screen_size(&self) -> Size2D<u32> {
+ let (send, recv) = ipc::channel::<(Size2D<u32>)>().unwrap();
+ self.window.upcast::<GlobalScope>()
+ .script_to_constellation_chan().send(ScriptMsg::GetScreenSize(send)).unwrap();
+ recv.recv().unwrap_or((Size2D::zero()))
+ }
+
+ fn screen_avail_size(&self) -> Size2D<u32> {
+ let (send, recv) = ipc::channel::<(Size2D<u32>)>().unwrap();
+ self.window.upcast::<GlobalScope>()
+ .script_to_constellation_chan().send(ScriptMsg::GetScreenAvailSize(send)).unwrap();
+ recv.recv().unwrap_or((Size2D::zero()))
+ }
}
impl ScreenMethods for Screen {
+ // https://drafts.csswg.org/cssom-view/#dom-screen-availwidth
+ fn AvailWidth(&self) -> Finite<f64> {
+ Finite::wrap(self.screen_avail_size().width as f64)
+ }
+
+ // https://drafts.csswg.org/cssom-view/#dom-screen-availheight
+ fn AvailHeight(&self) -> Finite<f64> {
+ Finite::wrap(self.screen_avail_size().height as f64)
+ }
+
+ // https://drafts.csswg.org/cssom-view/#dom-screen-width
+ fn Width(&self) -> Finite<f64> {
+ Finite::wrap(self.screen_size().width as f64)
+ }
+
+ // https://drafts.csswg.org/cssom-view/#dom-screen-height
+ fn Height(&self) -> Finite<f64> {
+ Finite::wrap(self.screen_size().height as f64)
+ }
+
// https://drafts.csswg.org/cssom-view/#dom-screen-colordepth
fn ColorDepth(&self) -> u32 {
24