diff options
author | 2020-02-24 04:14:32 +0100 | |
---|---|---|
committer | 2020-02-24 04:14:32 +0100 | |
commit | 190dcef1553efa181b68caa91b109f83fe289412 (patch) | |
tree | 13a6ede0a6be982f59535c1276603ca35ada2045 /wgpu/src/renderer | |
parent | e8bf0fc0997740096cad74daa4b5a338ce808aad (diff) | |
download | iced-190dcef1553efa181b68caa91b109f83fe289412.tar.gz iced-190dcef1553efa181b68caa91b109f83fe289412.tar.bz2 iced-190dcef1553efa181b68caa91b109f83fe289412.zip |
Text Selection completely rewritten
Diffstat (limited to 'wgpu/src/renderer')
-rw-r--r-- | wgpu/src/renderer/widget/text_input.rs | 47 |
1 files changed, 41 insertions, 6 deletions
diff --git a/wgpu/src/renderer/widget/text_input.rs b/wgpu/src/renderer/widget/text_input.rs index 72da85f4..4e0274b8 100644 --- a/wgpu/src/renderer/widget/text_input.rs +++ b/wgpu/src/renderer/widget/text_input.rs @@ -46,7 +46,7 @@ impl text_input::Renderer for Renderer { text_bounds, value, size, - state.cursor_position(value).position(), + state.cursor.draw_position(value), font, ); @@ -111,17 +111,16 @@ impl text_input::Renderer for Renderer { }; let (contents_primitive, offset) = if state.is_focused() { - let cursor = state.cursor_position(value); let (text_value_width, offset) = measure_cursor_and_scroll_offset( self, text_bounds, value, size, - cursor.position(), + state.cursor.draw_position(value), font, ); - let selection = match cursor { + /*let selection = match cursor { text_input::Cursor::Index(_) => Primitive::None, text_input::Cursor::Selection { .. } => { let (cursor_left_offset, _) = @@ -130,7 +129,7 @@ impl text_input::Renderer for Renderer { text_bounds, value, size, - cursor.left(), + state.cursor.left(), font, ); let (cursor_right_offset, _) = @@ -139,7 +138,7 @@ impl text_input::Renderer for Renderer { text_bounds, value, size, - cursor.right(), + state.cursor.right(), font, ); let width = cursor_right_offset - cursor_left_offset; @@ -158,6 +157,42 @@ impl text_input::Renderer for Renderer { border_color: Color::TRANSPARENT, } } + };*/ + + let selection = if !state.cursor.is_selection() { + Primitive::None + } else { + let (cursor_left_offset, _) = measure_cursor_and_scroll_offset( + self, + text_bounds, + value, + size, + state.cursor.left(), + font, + ); + let (cursor_right_offset, _) = measure_cursor_and_scroll_offset( + self, + text_bounds, + value, + size, + state.cursor.right(), + font, + ); + let width = cursor_right_offset - cursor_left_offset; + Primitive::Quad { + bounds: Rectangle { + x: text_bounds.x + cursor_left_offset, + y: text_bounds.y, + width, + height: text_bounds.height, + }, + background: Background::Color( + style_sheet.selection_color(), + ), + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + } }; let cursor = Primitive::Quad { |