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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
use std::ffi::c_void;

use crate::*;

#[no_mangle]
pub unsafe extern "C" fn bfr_create_surface(
    loader: extern "C" fn(*const libc::c_char) -> *const c_void,
) -> *mut Renderer {
    let renderer = Box::new(Renderer::new(|s| loader(s.as_ptr() as *const libc::c_char)));
    Box::into_raw(renderer)
}

#[no_mangle]
pub unsafe extern "C" fn bfr_resize(renderer: *mut Renderer, width: i32, height: i32) {
    (*renderer).resize(width, height);
}

#[no_mangle]
pub unsafe extern "C" fn bfr_destroy(renderer: *mut Renderer) {
    (*renderer).clean();

    // free renderer
    libc::free(renderer as *mut libc::c_void);
}

#[no_mangle]
pub unsafe extern "C" fn bfr_flush(renderer: *mut Renderer) {
    (*renderer).flush();
}

#[no_mangle]
pub unsafe extern "C" fn bfr_circle(renderer: *mut Renderer, x: f32, y: f32, r: f32, color: Color) {
    (*renderer).circle(x, y, r, color);
}

#[no_mangle]
pub unsafe extern "C" fn bfr_color8(r: u8, g: u8, b: u8, a: u8) -> Color {
    Color::from_8(r, g, b, a)
}

#[no_mangle]
pub unsafe extern "C" fn bfr_colorf(r: f32, g: f32, b: f32, a: f32) -> Color {
    Color::from_f(r, g, b, a)
}

#[no_mangle]
pub unsafe extern "C" fn bfr_set_clear_color(renderer: *mut Renderer, color: Color) {
    (*renderer).set_clear_color(color);
}

#[no_mangle]
pub unsafe extern "C" fn bfr_rect(
    renderer: *mut Renderer,
    x: f32,
    y: f32,
    width: f32,
    height: f32,
    angle: f32,
    color: Color,
) {
    (*renderer).rect(x, y, width, height, angle, color);
}

// transforms

#[no_mangle]
pub unsafe extern "C" fn bfr_translate(renderer: *mut Renderer, x: f32, y: f32) {
    (*renderer).translate(x, y);
}

#[no_mangle]
pub unsafe extern "C" fn bfr_scale(renderer: *mut Renderer, x: f32, y: f32) {
    (*renderer).scale(x, y);
}

#[no_mangle]
pub unsafe extern "C" fn bfr_rotate(renderer: *mut Renderer, x: f32) {
    (*renderer).rotate(x);
}

#[no_mangle]
pub unsafe extern "C" fn bfr_save(renderer: *mut Renderer) {
    (*renderer).save();
}

#[no_mangle]
pub unsafe extern "C" fn bfr_restore(renderer: *mut Renderer) {
    (*renderer).restore();
}

#[no_mangle]
pub unsafe extern "C" fn bfr_reset(renderer: *mut Renderer) {
    (*renderer).reset();
}

#[no_mangle]
pub unsafe extern "C" fn bfr_polygon(renderer: *mut Renderer, x: f32, y: f32, r: f32, sides: u8, color: Color) {
    (*renderer).polygon(x, y, r, sides, color);
}