1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
use crate::{ core::algebra::Vector2, core::pool::Handle, message::MessageData, node::UINode, vector_image::{Primitive, VectorImageBuilder}, widget::WidgetBuilder, BuildContext, Control, HorizontalAlignment, VerticalAlignment, BRUSH_BRIGHT, }; pub enum ArrowDirection { Top, Bottom, Left, Right, } pub fn make_arrow<M: MessageData, C: Control<M, C>>( ctx: &mut BuildContext<M, C>, orientation: ArrowDirection, size: f32, ) -> Handle<UINode<M, C>> { VectorImageBuilder::new( WidgetBuilder::new() .with_foreground(BRUSH_BRIGHT) .with_horizontal_alignment(HorizontalAlignment::Center) .with_vertical_alignment(VerticalAlignment::Center), ) .with_primitives(vec![match orientation { ArrowDirection::Top => Primitive::Triangle { points: [ Vector2::new(size * 0.5, 0.0), Vector2::new(size, size), Vector2::new(0.0, size), ], }, ArrowDirection::Bottom => Primitive::Triangle { points: [ Vector2::new(0.0, 0.0), Vector2::new(size, 0.0), Vector2::new(size * 0.5, size), ], }, ArrowDirection::Right => Primitive::Triangle { points: [ Vector2::new(0.0, 0.0), Vector2::new(size, size * 0.5), Vector2::new(0.0, size), ], }, ArrowDirection::Left => Primitive::Triangle { points: [ Vector2::new(0.0, size * 0.5), Vector2::new(size, 0.0), Vector2::new(size, size), ], }, }]) .build(ctx) }