summaryrefslogtreecommitdiffstats
path: root/native
diff options
context:
space:
mode:
Diffstat (limited to 'native')
-rw-r--r--native/src/widget/pane_grid/title_bar.rs71
1 files changed, 47 insertions, 24 deletions
diff --git a/native/src/widget/pane_grid/title_bar.rs b/native/src/widget/pane_grid/title_bar.rs
index a10181af..6713724a 100644
--- a/native/src/widget/pane_grid/title_bar.rs
+++ b/native/src/widget/pane_grid/title_bar.rs
@@ -105,19 +105,17 @@ where
let mut children = padded.children();
let title_layout = children.next().unwrap();
-
- self.content.draw(
- renderer,
- &inherited_style,
- title_layout,
- cursor_position,
- viewport,
- );
+ let mut show_title = true;
if let Some(controls) = &self.controls {
let controls_layout = children.next().unwrap();
if show_controls || self.always_show_controls {
+ if title_layout.bounds().width + controls_layout.bounds().width
+ > padded.bounds().width
+ {
+ show_title = false;
+ }
controls.draw(
renderer,
&inherited_style,
@@ -127,6 +125,16 @@ where
);
}
}
+
+ if show_title {
+ self.content.draw(
+ renderer,
+ &inherited_style,
+ title_layout,
+ cursor_position,
+ viewport,
+ );
+ }
}
/// Returns whether the mouse cursor is over the pick area of the
@@ -214,9 +222,15 @@ where
let mut children = padded.children();
let title_layout = children.next().unwrap();
+ let mut show_title = true;
let control_status = if let Some(controls) = &mut self.controls {
let controls_layout = children.next().unwrap();
+ if title_layout.bounds().width + controls_layout.bounds().width
+ > padded.bounds().width
+ {
+ show_title = false;
+ }
controls.on_event(
event.clone(),
@@ -230,14 +244,18 @@ where
event::Status::Ignored
};
- let title_status = self.content.on_event(
- event,
- title_layout,
- cursor_position,
- renderer,
- clipboard,
- shell,
- );
+ let title_status = if show_title {
+ self.content.on_event(
+ event,
+ title_layout,
+ cursor_position,
+ renderer,
+ clipboard,
+ shell,
+ )
+ } else {
+ event::Status::Ignored
+ };
control_status.merge(title_status)
}
@@ -264,15 +282,20 @@ where
if let Some(controls) = &self.controls {
let controls_layout = children.next().unwrap();
+ let controls_interaction = controls.mouse_interaction(
+ controls_layout,
+ cursor_position,
+ viewport,
+ renderer,
+ );
- controls
- .mouse_interaction(
- controls_layout,
- cursor_position,
- viewport,
- renderer,
- )
- .max(title_interaction)
+ if title_layout.bounds().width + controls_layout.bounds().width
+ > padded.bounds().width
+ {
+ controls_interaction
+ } else {
+ controls_interaction.max(title_interaction)
+ }
} else {
title_interaction
}