bly_cairo/
lib.rs

1//! Cairo backend for Bly
2
3use bly_ac::{Backend, Point2};
4use std::ffi::{c_ulong, c_void};
5
6mod util;
7mod xlib;
8
9pub fn create_xlib_backend(window: c_ulong) -> CairoBackend {
10    xlib::create_backend(window)
11}
12
13pub struct CairoBackend {
14    backend: Box<dyn Backend>,
15}
16
17impl Backend for CairoBackend {
18    unsafe fn begin_draw(&mut self) {
19        self.backend.begin_draw();
20    }
21
22    unsafe fn flush(&mut self) {
23        self.backend.flush();
24    }
25
26    unsafe fn get_display_size(&mut self) -> (u32, u32) {
27        self.backend.get_display_size()
28    }
29
30    unsafe fn clear(&mut self, r: f32, g: f32, b: f32, a: f32) {
31        self.backend.clear(r, g, b, a);
32    }
33
34    unsafe fn draw_ellipse(
35        &mut self,
36        point: Point2<f32>,
37        radius: f32,
38        r: f32,
39        g: f32,
40        b: f32,
41        a: f32,
42    ) {
43        self.backend.draw_ellipse(point, radius, r, g, b, a);
44    }
45
46    unsafe fn draw_rect(
47        &mut self,
48        point1: Point2<f32>,
49        point2: Point2<f32>,
50        r: f32,
51        g: f32,
52        b: f32,
53        a: f32,
54    ) {
55        self.backend.draw_rect(point1, point2, r, g, b, a);
56    }
57
58    unsafe fn draw_rounded_rect(
59        &mut self,
60        point1: Point2<f32>,
61        point2: Point2<f32>,
62        radius: f32,
63        r: f32,
64        g: f32,
65        b: f32,
66        a: f32,
67    ) {
68        self.backend
69            .draw_rounded_rect(point1, point2, radius, r, g, b, a);
70    }
71
72    unsafe fn draw_line(
73        &mut self,
74        point1: Point2<f32>,
75        point2: Point2<f32>,
76        stroke: f32,
77        r: f32,
78        g: f32,
79        b: f32,
80        a: f32,
81    ) {
82        self.backend.draw_line(point1, point2, stroke, r, g, b, a);
83    }
84}