paiagram/interface/widgets/
buttons.rs

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