diff options
Diffstat (limited to 'examples/tooltip/src/main.rs')
| -rw-r--r-- | examples/tooltip/src/main.rs | 155 | 
1 files changed, 46 insertions, 109 deletions
| diff --git a/examples/tooltip/src/main.rs b/examples/tooltip/src/main.rs index cfeaf6a6..35b862a8 100644 --- a/examples/tooltip/src/main.rs +++ b/examples/tooltip/src/main.rs @@ -1,138 +1,75 @@ -use iced::tooltip::{self, Tooltip}; -use iced::{ -    alignment, button, Alignment, Button, Column, Container, Element, Length, -    Row, Sandbox, Settings, Text, -}; +use iced::theme; +use iced::widget::tooltip::Position; +use iced::widget::{button, container, tooltip}; +use iced::{Element, Length, Sandbox, Settings}; -pub fn main() { -    Example::run(Settings::default()).unwrap() +pub fn main() -> iced::Result { +    Example::run(Settings::default())  } -#[derive(Default)]  struct Example { -    top: button::State, -    bottom: button::State, -    right: button::State, -    left: button::State, -    follow_cursor: button::State, +    position: Position,  } -#[derive(Debug, Clone, Copy)] -struct Message; +#[derive(Debug, Clone)] +enum Message { +    ChangePosition, +}  impl Sandbox for Example {      type Message = Message;      fn new() -> Self { -        Self::default() +        Self { +            position: Position::Bottom, +        }      }      fn title(&self) -> String {          String::from("Tooltip - Iced")      } -    fn update(&mut self, _message: Message) {} - -    fn view(&mut self) -> Element<Message> { -        let top = -            tooltip("Tooltip at top", &mut self.top, tooltip::Position::Top); - -        let bottom = tooltip( -            "Tooltip at bottom", -            &mut self.bottom, -            tooltip::Position::Bottom, -        ); - -        let left = -            tooltip("Tooltip at left", &mut self.left, tooltip::Position::Left); - -        let right = tooltip( -            "Tooltip at right", -            &mut self.right, -            tooltip::Position::Right, -        ); - -        let fixed_tooltips = Row::with_children(vec![ -            top.into(), -            bottom.into(), -            left.into(), -            right.into(), -        ]) -        .width(Length::Fill) -        .height(Length::Fill) -        .align_items(Alignment::Center) -        .spacing(50); - -        let follow_cursor = tooltip( -            "Tooltip follows cursor", -            &mut self.follow_cursor, -            tooltip::Position::FollowCursor, -        ); +    fn update(&mut self, message: Message) { +        match message { +            Message::ChangePosition => { +                let position = match &self.position { +                    Position::FollowCursor => Position::Top, +                    Position::Top => Position::Bottom, +                    Position::Bottom => Position::Left, +                    Position::Left => Position::Right, +                    Position::Right => Position::FollowCursor, +                }; + +                self.position = position +            } +        } +    } -        let content = Column::with_children(vec![ -            Container::new(fixed_tooltips) -                .width(Length::Fill) -                .height(Length::Fill) -                .center_x() -                .center_y() -                .into(), -            follow_cursor.into(), -        ]) -        .width(Length::Fill) -        .height(Length::Fill) -        .spacing(50); +    fn view(&self) -> Element<Message> { +        let tooltip = tooltip( +            button("Press to change position") +                .on_press(Message::ChangePosition), +            position_to_text(self.position), +            self.position, +        ) +        .gap(10) +        .style(theme::Container::Box); -        Container::new(content) +        container(tooltip)              .width(Length::Fill)              .height(Length::Fill)              .center_x()              .center_y() -            .padding(50)              .into()      }  } -fn tooltip<'a>( -    label: &str, -    button_state: &'a mut button::State, -    position: tooltip::Position, -) -> Element<'a, Message> { -    Tooltip::new( -        Button::new( -            button_state, -            Text::new(label) -                .size(40) -                .width(Length::Fill) -                .height(Length::Fill) -                .horizontal_alignment(alignment::Horizontal::Center) -                .vertical_alignment(alignment::Vertical::Center), -        ) -        .on_press(Message) -        .width(Length::Fill) -        .height(Length::Fill), -        "Tooltip", -        position, -    ) -    .gap(5) -    .padding(10) -    .style(style::Tooltip) -    .into() -} - -mod style { -    use iced::container; -    use iced::Color; - -    pub struct Tooltip; - -    impl container::StyleSheet for Tooltip { -        fn style(&self) -> container::Style { -            container::Style { -                text_color: Some(Color::from_rgb8(0xEE, 0xEE, 0xEE)), -                background: Some(Color::from_rgb(0.11, 0.42, 0.87).into()), -                border_radius: 12.0, -                ..container::Style::default() -            } -        } +fn position_to_text<'a>(position: Position) -> &'a str { +    match position { +        Position::FollowCursor => "Follow Cursor", +        Position::Top => "Top", +        Position::Bottom => "Bottom", +        Position::Left => "Left", +        Position::Right => "Right",      }  } | 
