makepad_widgets/
debug_view.rs1use 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 }
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