iced_selection
Text selection API for iced, with reference widget implementations.
Text in iced currently isn't selectable except for TextEditor and TextInput. This is my solution, but others exist as well (see Special thanks).
Check out the examples, or read the documentation to get an idea about the crate.
Roughly:
- selection.rs: The main selection API, built around iced's Paragraph.
- text.rs: Reference implementation for a selectable text widget.
- text/rich.rs: Reference implementation for a selectable rich text widget.
- markdown.rs: A custom Viewer and its corresponding custom methods.
- lib.rs: Helper methods, macros and re-exports.
Wrapped text support
Wrapped text is supported, but by-line selection (Shift + Up Arrow / Shift + Down Arrow & triple-click mouse selection) will treat all wrapped segments as part of the same line.
Installation
Simply add it to under your Cargo.toml's dependencies section.
# ...
[dependencies]
iced = { git = "https://github.com/iced-rs/iced", branch = "master" }
iced_selection = { git = "git://git.pml68.dev/iced_selection" }
Features
default:markdown: Provides support for rendering markdown through a custom viewer.
TODO
- [X] allow out-of-bounds selection dragging
- [X] custom markdown
Viewer - [X] double-click + drag for by-word selection
- [X] triple-click + drag for by-line selection
- [X] support wrapped lines
- [ ] fix by-line selection for wrapped line segments
- [ ] make "combining" multiple text widgets possible (
feat/global-selectable)
Contributing
You can send issues, feature requests, patches etc. to contact@pml68.dev.
Special thanks
iced, for making this possible in the first place, and for the modified source code ofText,RichandSelection(based ontext_input/cursor.rs).Halloy, for its amazing selectable text implementation (check it out, but mind the GPLv3!).alex-ds13for their incredible contributions toiced_selection.
