rg3d_ui/
utils.rs

1use crate::{
2    border::BorderBuilder,
3    core::{algebra::Vector2, pool::Handle},
4    formatted_text::WrapMode,
5    text::TextBuilder,
6    vector_image::{Primitive, VectorImageBuilder},
7    widget::WidgetBuilder,
8    Brush, BuildContext, HorizontalAlignment, UiNode, VerticalAlignment, BRUSH_BRIGHT,
9};
10use rg3d_core::color::Color;
11
12pub enum ArrowDirection {
13    Top,
14    Bottom,
15    Left,
16    Right,
17}
18
19pub fn make_arrow(
20    ctx: &mut BuildContext,
21    orientation: ArrowDirection,
22    size: f32,
23) -> Handle<UiNode> {
24    VectorImageBuilder::new(
25        WidgetBuilder::new()
26            .with_foreground(BRUSH_BRIGHT)
27            .with_horizontal_alignment(HorizontalAlignment::Center)
28            .with_vertical_alignment(VerticalAlignment::Center),
29    )
30    .with_primitives(vec![match orientation {
31        ArrowDirection::Top => Primitive::Triangle {
32            points: [
33                Vector2::new(size * 0.5, 0.0),
34                Vector2::new(size, size),
35                Vector2::new(0.0, size),
36            ],
37        },
38        ArrowDirection::Bottom => Primitive::Triangle {
39            points: [
40                Vector2::new(0.0, 0.0),
41                Vector2::new(size, 0.0),
42                Vector2::new(size * 0.5, size),
43            ],
44        },
45        ArrowDirection::Right => Primitive::Triangle {
46            points: [
47                Vector2::new(0.0, 0.0),
48                Vector2::new(size, size * 0.5),
49                Vector2::new(0.0, size),
50            ],
51        },
52        ArrowDirection::Left => Primitive::Triangle {
53            points: [
54                Vector2::new(0.0, size * 0.5),
55                Vector2::new(size, 0.0),
56                Vector2::new(size, size),
57            ],
58        },
59    }])
60    .build(ctx)
61}
62
63pub fn make_simple_tooltip(ctx: &mut BuildContext, text: &str) -> Handle<UiNode> {
64    BorderBuilder::new(
65        WidgetBuilder::new()
66            .with_visibility(false)
67            .with_foreground(Brush::Solid(Color::opaque(160, 160, 160)))
68            .with_max_size(Vector2::new(250.0, f32::INFINITY))
69            .with_child(
70                TextBuilder::new(WidgetBuilder::new())
71                    .with_wrap(WrapMode::Word)
72                    .with_text(text)
73                    .build(ctx),
74            ),
75    )
76    .build(ctx)
77}