summaryrefslogtreecommitdiffstats
path: root/widget/src/helpers.rs
diff options
context:
space:
mode:
Diffstat (limited to 'widget/src/helpers.rs')
-rw-r--r--widget/src/helpers.rs48
1 files changed, 27 insertions, 21 deletions
diff --git a/widget/src/helpers.rs b/widget/src/helpers.rs
index 17cf94cc..42d0f499 100644
--- a/widget/src/helpers.rs
+++ b/widget/src/helpers.rs
@@ -167,7 +167,7 @@ macro_rules! text {
/// # pub type Element<'a, Message> = iced_widget::core::Element<'a, Message, iced_widget::Theme, iced_widget::Renderer>;
/// use iced::font;
/// use iced::widget::{rich_text, span};
-/// use iced::{color, Font};
+/// use iced::{color, never, Font};
///
/// #[derive(Debug, Clone)]
/// enum Message {
@@ -177,9 +177,10 @@ macro_rules! text {
/// fn view(state: &State) -> Element<'_, Message> {
/// rich_text![
/// span("I am red!").color(color!(0xff0000)),
-/// " ",
+/// span(" "),
/// span("And I am bold!").font(Font { weight: font::Weight::Bold, ..Font::default() }),
/// ]
+/// .on_link_click(never)
/// .size(20)
/// .into()
/// }
@@ -187,7 +188,7 @@ macro_rules! text {
#[macro_export]
macro_rules! rich_text {
() => (
- $crate::Column::new()
+ $crate::text::Rich::new()
);
($($x:expr),+ $(,)?) => (
$crate::text::Rich::from_iter([$($crate::text::Span::from($x)),+])
@@ -633,7 +634,7 @@ where
fn update(
&mut self,
state: &mut Tree,
- event: Event,
+ event: &Event,
layout: Layout<'_>,
cursor: mouse::Cursor,
renderer: &Renderer,
@@ -836,7 +837,7 @@ where
fn update(
&mut self,
tree: &mut Tree,
- event: Event,
+ event: &Event,
layout: Layout<'_>,
cursor: mouse::Cursor,
renderer: &Renderer,
@@ -871,26 +872,28 @@ where
shell.request_redraw();
}
+ let is_visible =
+ is_hovered || self.is_top_focused || self.is_top_overlay_active;
+
if matches!(
event,
Event::Mouse(
mouse::Event::CursorMoved { .. }
| mouse::Event::ButtonReleased(_)
)
- ) || is_hovered
- || self.is_top_focused
- || self.is_top_overlay_active
+ ) || is_visible
{
+ let redraw_request = shell.redraw_request();
+
self.top.as_widget_mut().update(
- top_tree,
- event.clone(),
- top_layout,
- cursor,
- renderer,
- clipboard,
- shell,
- viewport,
+ top_tree, event, top_layout, cursor, renderer, clipboard,
+ shell, viewport,
);
+
+ // Ignore redraw requests of invisible content
+ if !is_visible {
+ Shell::replace_redraw_request(shell, redraw_request);
+ }
};
if shell.is_event_captured() {
@@ -899,7 +902,7 @@ where
self.base.as_widget_mut().update(
base_tree,
- event.clone(),
+ event,
base_layout,
cursor,
renderer,
@@ -1136,10 +1139,11 @@ where
/// # pub type Element<'a, Message> = iced_widget::core::Element<'a, Message, iced_widget::Theme, iced_widget::Renderer>;
/// use iced::font;
/// use iced::widget::{rich_text, span};
-/// use iced::{color, Font};
+/// use iced::{color, never, Font};
///
/// #[derive(Debug, Clone)]
/// enum Message {
+/// LinkClicked(&'static str),
/// // ...
/// }
///
@@ -1149,13 +1153,14 @@ where
/// span(" "),
/// span("And I am bold!").font(Font { weight: font::Weight::Bold, ..Font::default() }),
/// ])
+/// .on_link_click(never)
/// .size(20)
/// .into()
/// }
/// ```
-pub fn rich_text<'a, Link, Theme, Renderer>(
+pub fn rich_text<'a, Link, Message, Theme, Renderer>(
spans: impl AsRef<[text::Span<'a, Link, Renderer::Font>]> + 'a,
-) -> text::Rich<'a, Link, Theme, Renderer>
+) -> text::Rich<'a, Link, Message, Theme, Renderer>
where
Link: Clone + 'static,
Theme: text::Catalog + 'a,
@@ -1179,7 +1184,7 @@ where
/// # pub type Element<'a, Message> = iced_widget::core::Element<'a, Message, iced_widget::Theme, iced_widget::Renderer>;
/// use iced::font;
/// use iced::widget::{rich_text, span};
-/// use iced::{color, Font};
+/// use iced::{color, never, Font};
///
/// #[derive(Debug, Clone)]
/// enum Message {
@@ -1192,6 +1197,7 @@ where
/// " ",
/// span("And I am bold!").font(Font { weight: font::Weight::Bold, ..Font::default() }),
/// ]
+/// .on_link_click(never)
/// .size(20)
/// .into()
/// }