1use 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}