layers/api/
engine.rs

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
use std::sync::Arc;

use crate::{
    engine::{
        self,
        Engine,
        // pointer::{ButtonState, PointerHandler},
    },
    layers::layer::Layer,
};

/// C api to the Engine
#[no_mangle]
pub extern "C" fn create_engine(width: f32, height: f32) -> *const engine::Engine {
    let engine = Engine::create(width, height);
    Arc::into_raw(engine)
}

// FIXME
// #[no_mangle]
// pub extern "C" fn engine_update(engine: *const engine::Engine, delta: f32) -> bool {
//     let engine = unsafe { &*engine };
//     engine.update(delta)
// }

#[no_mangle]
pub extern "C" fn engine_add_layer_to_scene(engine: *const engine::Engine, layer: *const Layer) {
    let engine = unsafe { &*engine };
    let layer = unsafe { &*layer };

    engine.append_layer(&layer.id, None);
}

#[no_mangle]
pub extern "C" fn engine_create_layer(engine: *const engine::Engine) -> *const Layer {
    let engine = unsafe { &*engine };
    let layer = Arc::new(engine.new_layer());
    Arc::into_raw(layer)
}

// #[no_mangle]
// pub extern "C" fn engine_handle_pointer_button(
//     engine: *const engine::EngineApi,
//     state: ButtonState,
// ) {
//     let engine = unsafe { &*engine };
//     match state {
//         ButtonState::Pressed => {
//             engine.on_pointer_down(0);
//         }
//         ButtonState::Released => {
//             engine.on_pointer_up(0);
//         }
//     };
// }