makepad_widgets/
debug_view.rs1use crate::makepad_draw::*;
2
3
4live_design!{
5 use 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 }
16
17 DebugView = {{DebugView}} {
18 label: {
19 text_style: {
20 font_size: 6
21 },
22 color: #a
23 }
24 }
25}
26
27#[derive(Live, LiveHook, LiveRegister)]
28#[repr(C)]
29pub struct DrawRect {
30 #[deref] draw_super: DrawQuad,
31 #[live] color: Vec4,
32}
33
34
35#[derive(Live, LiveHook, LiveRegister)]
36pub struct DebugView {
37 #[live] draw_list: DrawList2d,
38 #[live] rect: DrawRect,
39 #[live] label: DrawText
40}
41
42impl DebugView {
43 pub fn handle_event(&mut self, cx: &mut Cx, _event: &Event) {
44 if cx.debug.has_data() {
45 self.draw_list.redraw(cx);
46 }
47 }
48
49 pub fn draw(&mut self, cx: &mut Cx2d) {
50 if cx.debug.has_data() {
51 self.draw_list.redraw(cx);
52 self.draw_list.begin_always(cx);
53 }
54 else{
55 if !self.draw_list.begin(cx, Walk::default()).is_redrawing() {
56 return
57 }
58 }
59 let debug = cx.debug.clone();
60 let rects = debug.take_rects();
61 for (rect, color) in rects {
62 self.rect.color = color;
63 self.rect.draw_abs(cx, rect);
64 }
65
66 let points = debug.take_points();
67 let point_size = dvec2(1.0, 1.0);
68 for (point, color) in points {
69 self.rect.color = color;
70 let rect = Rect {pos: point - 0.5 * point_size, size: point_size};
71 self.rect.draw_abs(cx, rect);
72 }
73
74 let labels = debug.take_labels();
75 let point_size = dvec2(1.0, 1.0);
76 for (point, color, label) in labels {
77 self.rect.color = color;
78 let rect = Rect {pos: point - 0.5 * point_size, size: point_size};
79 self.rect.draw_abs(cx, rect);
80 self.label.draw_abs(cx, point, &label);
81 }
82
83 let debug = cx.debug.clone();
84 let areas = debug.take_areas();
85 for (area, tl, br, color) in areas {
86 self.rect.color = color;
87 let rect = area.rect(cx);
88 let rect = Rect{pos: rect.pos - tl, size: rect.size + tl + br};
89 self.rect.draw_abs(cx, rect);
90 }
91
92 self.draw_list.end(cx);
93
94 }
95}
96