From c6ab60dbfc6da7b4f800c9e40893c8b58413960c Mon Sep 17 00:00:00 2001 From: Jack Moffitt Date: Thu, 28 Aug 2014 09:34:23 -0600 Subject: Cargoify servo --- components/compositing/windowing.rs | 83 +++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 components/compositing/windowing.rs (limited to 'components/compositing/windowing.rs') diff --git a/components/compositing/windowing.rs b/components/compositing/windowing.rs new file mode 100644 index 00000000000..77b921bacba --- /dev/null +++ b/components/compositing/windowing.rs @@ -0,0 +1,83 @@ +/* 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/. */ + +//! Abstract windowing methods. The concrete implementations of these can be found in `platform/`. + +use geom::point::TypedPoint2D; +use geom::scale_factor::ScaleFactor; +use geom::size::TypedSize2D; +use layers::geometry::DevicePixel; +use servo_msg::compositor_msg::{ReadyState, RenderState}; +use servo_util::geometry::ScreenPx; +use std::rc::Rc; + +pub enum MouseWindowEvent { + MouseWindowClickEvent(uint, TypedPoint2D), + MouseWindowMouseDownEvent(uint, TypedPoint2D), + MouseWindowMouseUpEvent(uint, TypedPoint2D), +} + +pub enum WindowNavigateMsg { + Forward, + Back, +} + +/// Events that the windowing system sends to Servo. +pub enum WindowEvent { + /// Sent when no message has arrived. + /// + /// FIXME: This is a bogus event and is only used because we don't have the new + /// scheduler integrated with the platform event loop. + IdleWindowEvent, + /// Sent when part of the window is marked dirty and needs to be redrawn. + RefreshWindowEvent, + /// Sent when the window is resized. + ResizeWindowEvent(TypedSize2D), + /// Sent when a new URL is to be loaded. + LoadUrlWindowEvent(String), + /// Sent when a mouse hit test is to be performed. + MouseWindowEventClass(MouseWindowEvent), + /// Sent when a mouse move. + MouseWindowMoveEventClass(TypedPoint2D), + /// Sent when the user scrolls. Includes the current cursor position. + ScrollWindowEvent(TypedPoint2D, TypedPoint2D), + /// Sent when the user zooms. + ZoomWindowEvent(f32), + /// Simulated "pinch zoom" gesture for non-touch platforms (e.g. ctrl-scrollwheel). + PinchZoomWindowEvent(f32), + /// Sent when the user uses chrome navigation (i.e. backspace or shift-backspace). + NavigationWindowEvent(WindowNavigateMsg), + /// Sent when rendering is finished. + FinishedWindowEvent, + /// Sent when the user quits the application + QuitWindowEvent, +} + +/// Methods for an abstract Application. +pub trait ApplicationMethods { + fn new() -> Self; +} + +pub trait WindowMethods { + /// Creates a new window. + fn new(app: &A, is_foreground: bool) -> Rc; + /// Returns the size of the window in hardware pixels. + fn framebuffer_size(&self) -> TypedSize2D; + /// Returns the size of the window in density-independent "px" units. + fn size(&self) -> TypedSize2D; + /// Presents the window to the screen (perhaps by page flipping). + fn present(&self); + + /// Spins the event loop and returns the next event. + fn recv(&self) -> WindowEvent; + + /// Sets the ready state of the current page. + fn set_ready_state(&self, ready_state: ReadyState); + /// Sets the render state of the current page. + fn set_render_state(&self, render_state: RenderState); + + /// Returns the hidpi factor of the monitor. + fn hidpi_factor(&self) -> ScaleFactor; +} + -- cgit v1.2.3