paiagram/interface/widgets/
buttons.rs1use bevy::math::ops::sqrt;
2use egui::{Color32, Frame, Painter, Pos2, Rect, Response, Shape, Stroke, Style, Ui};
3
4pub fn circle_button_shape(
5 painter: &mut Painter,
6 center: Pos2,
7 diameter: f32,
8 stroke: Stroke,
9 fill_color: Color32,
10) {
11 painter.circle(center, diameter / 2.0, fill_color, stroke);
12}
13
14pub fn triangle_button_shape(
15 painter: &mut Painter,
16 center: Pos2,
17 base: f32,
18 stroke: Stroke,
19 fill_color: Color32,
20) {
21 let dx = base / 4.0 * sqrt(3.0);
22 let a = Pos2 {
23 x: center.x - dx,
24 y: center.y - base / 2.0,
25 };
26 let b = Pos2 {
27 x: center.x + dx,
28 y: center.y,
29 };
30 let c = Pos2 {
31 x: a.x,
32 y: center.y + base / 2.0,
33 };
34 painter.add(Shape::convex_polygon(vec![a, b, c], fill_color, stroke));
35}
36
37pub fn double_triangle(
38 painter: &mut Painter,
39 center: Pos2,
40 base: f32,
41 stroke: Stroke,
42 fill_color: Color32,
43) {
44 triangle_button_shape(painter, center, base, stroke, fill_color);
45 triangle_button_shape(
46 painter,
47 Pos2 {
48 x: center.x + 5.0,
49 y: center.y,
50 },
51 base,
52 stroke,
53 fill_color,
54 );
55}
56
57pub fn dash_button_shape(
58 painter: &mut Painter,
59 center: Pos2,
60 base: f32,
61 stroke: Stroke,
62 fill_color: Color32,
63) {
64 let a = Pos2 {
65 x: center.x - base / 2.0 - base / 2.0 / sqrt(3.0),
66 y: center.y - base / 2.0,
67 };
68 let b = Pos2 {
69 x: a.x + base,
70 y: a.y,
71 };
72 let c = Pos2 {
73 x: center.x + base / 2.0,
74 y: center.y,
75 };
76 let d = Pos2 {
77 x: b.x,
78 y: center.y + base / 2.0,
79 };
80 let e = Pos2 { x: a.x, y: d.y };
81 let f = Pos2 {
82 x: center.x - base / 2.0,
83 y: center.y,
84 };
85 painter.add(Shape::convex_polygon(
86 vec![a, b, c, f],
87 fill_color,
88 Stroke::NONE,
89 ));
90 painter.add(Shape::convex_polygon(
91 vec![f, c, d, e],
92 fill_color,
93 Stroke::NONE,
94 ));
95 painter.line_segment(
96 [c, f],
97 Stroke {
98 width: 2.0,
99 color: fill_color,
100 },
101 );
102 painter.add(Shape::closed_line(vec![a, b, c, d, e, f], stroke));
103}