summaryrefslogtreecommitdiffstats
path: root/examples/tooltip
diff options
context:
space:
mode:
authorLibravatar Yusuf Bera Ertan <y.bera003.06@protonmail.com>2020-07-28 18:07:46 +0300
committerLibravatar Yusuf Bera Ertan <y.bera003.06@protonmail.com>2021-02-15 19:37:46 +0300
commita19f89d3a6af2804f2ac4e30f6d639b56a9bebfd (patch)
tree313320abe39ade1214723521b6a5aff56ad2edef /examples/tooltip
parent4de164dcc7bc3524c8b20f9c734bc1a4ae4c83bc (diff)
downloadiced-a19f89d3a6af2804f2ac4e30f6d639b56a9bebfd.tar.gz
iced-a19f89d3a6af2804f2ac4e30f6d639b56a9bebfd.tar.bz2
iced-a19f89d3a6af2804f2ac4e30f6d639b56a9bebfd.zip
feat(native): add Tooltip widget
Diffstat (limited to 'examples/tooltip')
-rw-r--r--examples/tooltip/Cargo.toml9
-rw-r--r--examples/tooltip/README.md14
-rw-r--r--examples/tooltip/src/main.rs123
3 files changed, 146 insertions, 0 deletions
diff --git a/examples/tooltip/Cargo.toml b/examples/tooltip/Cargo.toml
new file mode 100644
index 00000000..1171de00
--- /dev/null
+++ b/examples/tooltip/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "tooltip"
+version = "0.1.0"
+authors = ["Yusuf Bera Ertan <y.bera003.06@protonmail.com>"]
+edition = "2018"
+publish = false
+
+[dependencies]
+iced = { path = "../..", features = ["debug"] }
diff --git a/examples/tooltip/README.md b/examples/tooltip/README.md
new file mode 100644
index 00000000..4ccf6578
--- /dev/null
+++ b/examples/tooltip/README.md
@@ -0,0 +1,14 @@
+## Tooltip
+
+A tooltip.
+
+It displays and positions a widget on another based on cursor position.
+
+The __[`main`]__ file contains all the code of the example.
+
+You can run it with `cargo run`:
+```
+cargo run --package tooltip
+```
+
+[`main`]: src/main.rs
diff --git a/examples/tooltip/src/main.rs b/examples/tooltip/src/main.rs
new file mode 100644
index 00000000..6e2c4dd4
--- /dev/null
+++ b/examples/tooltip/src/main.rs
@@ -0,0 +1,123 @@
+use iced::{
+ button, tooltip::TooltipPosition, Button, Column, Container, Element,
+ Length, Row, Sandbox, Settings, Text, Tooltip,
+};
+
+pub fn main() {
+ Example::run(Settings::default()).unwrap()
+}
+
+#[derive(Default)]
+struct Example {
+ tooltip_top_button_state: button::State,
+ tooltip_bottom_button_state: button::State,
+ tooltip_right_button_state: button::State,
+ tooltip_left_button_state: button::State,
+ tooltip_cursor_button_state: button::State,
+}
+
+#[derive(Debug, Clone, Copy)]
+struct Message;
+
+impl Sandbox for Example {
+ type Message = Message;
+
+ fn new() -> Self {
+ Self::default()
+ }
+
+ fn title(&self) -> String {
+ String::from("Tooltip - Iced")
+ }
+
+ fn update(&mut self, _message: Message) {}
+
+ fn view(&mut self) -> Element<Message> {
+ let tooltip_top = tooltip_builder(
+ "Tooltip at top",
+ &mut self.tooltip_top_button_state,
+ TooltipPosition::Top,
+ );
+ let tooltip_bottom = tooltip_builder(
+ "Tooltip at bottom",
+ &mut self.tooltip_bottom_button_state,
+ TooltipPosition::Bottom,
+ );
+ let tooltip_right = tooltip_builder(
+ "Tooltip at right",
+ &mut self.tooltip_right_button_state,
+ TooltipPosition::Right,
+ );
+ let tooltip_left = tooltip_builder(
+ "Tooltip at left",
+ &mut self.tooltip_left_button_state,
+ TooltipPosition::Left,
+ );
+
+ let fixed_tooltips = Row::with_children(vec![
+ tooltip_top.into(),
+ tooltip_bottom.into(),
+ tooltip_left.into(),
+ tooltip_right.into(),
+ ])
+ .width(Length::Fill)
+ .height(Length::Fill)
+ .align_items(iced::Align::Center)
+ .spacing(120);
+
+ let cursor_tooltip_area = Tooltip::new(
+ Button::new(
+ &mut self.tooltip_cursor_button_state,
+ Container::new(Text::new("Tooltip follows cursor").size(40))
+ .center_y()
+ .center_x()
+ .width(Length::Fill)
+ .height(Length::Fill),
+ )
+ .on_press(Message)
+ .width(Length::Fill)
+ .height(Length::Fill),
+ tooltip(),
+ TooltipPosition::FollowCursor,
+ );
+
+ let content = Column::with_children(vec![
+ Container::new(fixed_tooltips)
+ .width(Length::Fill)
+ .height(Length::Fill)
+ .center_x()
+ .center_y()
+ .into(),
+ cursor_tooltip_area.into(),
+ ])
+ .width(Length::Fill)
+ .height(Length::Fill);
+
+ Container::new(content)
+ .width(Length::Fill)
+ .height(Length::Fill)
+ .center_x()
+ .center_y()
+ .into()
+ }
+}
+
+fn tooltip_builder<'a>(
+ label: &str,
+ button_state: &'a mut button::State,
+ position: TooltipPosition,
+) -> Container<'a, Message> {
+ Container::new(Tooltip::new(
+ Button::new(button_state, Text::new(label).size(40)).on_press(Message),
+ tooltip(),
+ position,
+ ))
+ .center_x()
+ .center_y()
+ .width(Length::Fill)
+ .height(Length::Fill)
+}
+
+fn tooltip() -> Text {
+ Text::new("Tooltip").size(20)
+}