summaryrefslogtreecommitdiffstats
path: root/widget/src
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-04-26 15:17:35 +0200
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-04-26 15:17:35 +0200
commit73088a6fc1567f8bd557fdf479e16b395032b019 (patch)
tree2ea1465ff65d10cd7dccaac6785d5544b071ce38 /widget/src
parent3762c0590ceb0fc579a1e699702d7d5c2b204348 (diff)
downloadiced-73088a6fc1567f8bd557fdf479e16b395032b019.tar.gz
iced-73088a6fc1567f8bd557fdf479e16b395032b019.tar.bz2
iced-73088a6fc1567f8bd557fdf479e16b395032b019.zip
Fix out of bounds caret in `TextEditor` in some circumstances
Diffstat (limited to 'widget/src')
-rw-r--r--widget/src/text_editor.rs30
1 files changed, 17 insertions, 13 deletions
diff --git a/widget/src/text_editor.rs b/widget/src/text_editor.rs
index 5b0b1b79..7c0b98ea 100644
--- a/widget/src/text_editor.rs
+++ b/widget/src/text_editor.rs
@@ -569,23 +569,27 @@ where
if state.is_focused {
match internal.editor.cursor() {
Cursor::Caret(position) => {
- let position = position + translation;
+ let cursor =
+ Rectangle::new(
+ position + translation,
+ Size::new(
+ 1.0,
+ self.line_height
+ .to_absolute(self.text_size.unwrap_or_else(
+ || renderer.default_size(),
+ ))
+ .into(),
+ ),
+ );
- if bounds.contains(position) {
+ if let Some(clipped_cursor) = bounds.intersection(&cursor) {
renderer.fill_quad(
renderer::Quad {
bounds: Rectangle {
- x: position.x.floor(),
- y: position.y,
- width: 1.0,
- height: self
- .line_height
- .to_absolute(
- self.text_size.unwrap_or_else(
- || renderer.default_size(),
- ),
- )
- .into(),
+ x: clipped_cursor.x.floor(),
+ y: clipped_cursor.y,
+ width: clipped_cursor.width,
+ height: clipped_cursor.height,
},
..renderer::Quad::default()
},