makepad_widgets/
debug_view.rs

1use crate::makepad_draw::*;
2
3
4live_design!{
5    import makepad_draw::shader::std::*;
6    
7    DrawRect = {{DrawRect}} {
8        fn pixel(self) -> vec4 {
9            let sdf = Sdf2d::viewport(self.pos * self.rect_size)
10            sdf.rect(0., 0., self.rect_size.x, self.rect_size.y);
11            sdf.stroke(self.color, 1.0);
12            return sdf.result;
13            //return vec4(self.color.xyz * self.color.w, self.color.w)
14        }
15        draw_depth: 20.0
16    }
17    
18    DebugView = {{DebugView}} {  
19        label: {
20            text_style: {
21                font_size: 6
22            },
23            color: #a
24        }
25    }
26}
27
28#[derive(Live, LiveHook)]
29#[repr(C)]
30pub struct DrawRect {
31    #[deref] draw_super: DrawQuad,
32    #[live] color: Vec4,
33}
34
35
36#[derive(Live, LiveHook)]
37pub struct DebugView {
38    #[live] draw_list: DrawList2d,
39    #[live] rect: DrawRect,
40    #[live] label: DrawText
41}
42
43impl DebugView {
44    pub fn handle_event(&mut self, cx: &mut Cx, _event: &Event) {
45        if cx.debug.has_data() {
46            self.draw_list.redraw(cx);
47        }
48    }
49    
50    pub fn draw(&mut self, cx: &mut Cx2d) {
51        if !self.draw_list.begin(cx, Walk::default()).is_redrawing() {
52            return
53        }
54        let debug = cx.debug.clone();
55        let rects = debug.take_rects();
56        for (rect, color) in rects {
57            self.rect.color = color;
58            self.rect.draw_abs(cx, rect);
59        }
60        
61        let points = debug.take_points();
62        let point_size = dvec2(1.0, 1.0);
63        for (point, color) in points {
64            self.rect.color = color;
65            let rect = Rect {pos: point - 0.5 * point_size, size: point_size};
66            self.rect.draw_abs(cx, rect);
67        }
68        
69        let labels = debug.take_labels();
70        let point_size = dvec2(1.0, 1.0);
71        for (point, color, label) in labels {
72            self.rect.color = color;
73            let rect = Rect {pos: point - 0.5 * point_size, size: point_size};
74            self.rect.draw_abs(cx, rect);
75            self.label.draw_abs(cx, point, &label);
76        }
77        
78        self.draw_list.end(cx);
79        
80    }
81}
82