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}