aboutsummaryrefslogtreecommitdiffstats
path: root/src/servo/platform/common/shared_gl_windowing.rs
blob: a859696a75e5d863cc176b895a9b2264b66eb32d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/* 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/. */

//! A windowing implementation using shared OpenGL textures.
///
/// In this setup, Servo renders to an OpenGL texture and uses IPC to share that texture with
/// another application. It also uses IPC to handle events.
///
/// This is designed for sandboxing scenarios which the OpenGL graphics driver is either sandboxed
/// along with the Servo process or trusted. If the OpenGL driver itself is untrusted, then this
/// windowing implementation is not appropriate.

use windowing::{CompositeCallback, ResizeCallback};

use geom::size::Size2D;
use sharegl::base::ShareContext;
use sharegl::platform::Context;

/// A structure responsible for setting up and tearing down the entire windowing system.
pub struct Application;

impl ApplicationMethods for Application {
    pub fn new() -> Application {
        Application
    }
}

/// The type of a window.
pub struct Window(Context);

impl WindowingMethods<Application> for Window {
    /// Creates a new window.
    pub fn new(_: &Application) -> @mut Window {
        let share_context: Context = ShareContext::new(Size2D(800, 600));
        println(fmt!("Sharing ID is %d", share_context.id()));
        @mut Window(share_context)
    }

    /// Returns the size of the window.
    pub fn size(&mut self) -> Size2D<f32> {
        Size2D(800.0, 600.0)
    }

    /// Presents the window to the screen (perhaps by page flipping).
    pub fn present(&mut self) {
        (*self).flush();
    }

    /// Registers a callback to run when a composite event occurs.
    pub fn set_composite_callback(&mut self, _: CompositeCallback) {}

    /// Registers a callback to run when a resize event occurs.
    pub fn set_resize_callback(&mut self, _: ResizeCallback) {}

    /// Returns the next event.
    pub fn check_loop(@mut self) {}
}