Commit Graph

512 Commits (florian.dehau/layout)
 

Author SHA1 Message Date
Florian Dehau 6cb57f5d2a feat: add stateful widgets
Most widgets can be drawn directly based on the input parameters. However, some
features may require some kind of associated state to be implemented.

For example, the `List` widget can highlight the item currently selected. This
can be translated in an offset, which is the number of elements to skip in
order to have the selected item within the viewport currently allocated to this
widget. The widget can therefore only provide the following behavior: whenever
the selected item is out of the viewport scroll to a predefined position (make
the selected item the last viewable item or the one in the middle).
Nonetheless, if the widget has access to the last computed offset then it can
implement a natural scrolling experience where the last offset is reused until
the selected item is out of the viewport.

To allow such behavior within the widgets, this commit introduces the following
changes:
- Add a `StatefulWidget` trait with an associated `State` type. Widgets that
can take advantage of having a "memory" between two draw calls needs to
implement this trait.
- Add a `render_stateful_widget` method on `Frame` where the associated
state is given as a parameter.

The chosen approach is thus to let the developers manage their widgets' states
themselves as they are already responsible for the lifecycle of the wigets
(given that the crate exposes an immediate mode api).

The following changes were also introduced:

- `Widget::render` has been deleted. Developers should use `Frame::render_widget`
instead.
- `Widget::background` has been deleted. Developers should use `Buffer::set_background`
instead.
- `SelectableList` has been deleted. Developers can directly use `List` where
`SelectableList` features have been back-ported.
4 years ago
Florian Dehau 67dd1ac608 fix: remove array_into_iter warnings 4 years ago
Malte Tammena 808a5c9ffd Mark Style::* functions `const` 4 years ago
Florian Dehau d16db5ed90 style: fix clippy warnings 4 years ago
Florian Dehau 6e24f9d47b style: run cargo fmt 4 years ago
tarkah 92ab09496a add ytop to apps using 4 years ago
Florian Dehau 28017f97ea feat(widgets/chart): add more control on the visibility of the legend 4 years ago
Florian Dehau ea43413507 fix: remove clippy warnings 4 years ago
Caleb Bassi 829b7b6b70 Change linechart to draw the points also 4 years ago
Caleb Bassi 262bf441ce Add linechart support
Closes #73

This commit only adds support for linecharts for the braille marker.
4 years ago
Caleb Bassi 7aae9b380e Add header_gap field to Table 4 years ago
Florian Dehau d50327548b style: run rustfmt 4 years ago
Florian Dehau e6ce0ab9a7 refactor(examples): add input modes to user input examples 4 years ago
Florian Dehau 9085c81e76 refactor: clean up border type for blocks
* Merge line symbols in a single module.
* Replace set_border_type with border_type to match other builder methods.
* Remove unecessary branching.
4 years ago
Matthew Stevenson 682349c03e update block example; add BorderType to exposed widgets API 4 years ago
Matthew Stevenson a72389b28c revert to single Block struct; add set_border_type method and BorderType enum 4 years ago
Matthew Stevenson f1bc00b67f add rounded corners and double borders to block example 4 years ago
Matthew Stevenson 06d159fb7b add RoundedBlock and DoubleBlock structs that impl From Block; add Block::rounded() and Block::double_border() 4 years ago
Matthew Stevenson 578560766d add round corners and double lines to symbols 4 years ago
Caleb Bassi 9e5c924ef1 Fix crossterm link in readme 4 years ago
Aram Drevekenin cf39de882a docs(readme): add bandwhich to "apps using tui" 4 years ago
Florian Dehau 8293cef703 Release v0.8.0 5 years ago
Timon 60b99cfc66 feat: bump crossterm to 0.14 5 years ago
Florian Dehau 7cc4189eb0 chore: update issue templates 5 years ago
Florian Dehau 86d4a32314 chore: update issue templates 5 years ago
Florian Dehau 67c9c64eab chore: add spotify-tui to the list of apps using tui 5 years ago
Kyle Ruzic b8d0f947e8 Added a verticle 'cross' to the symbols as it was missing for no real reason 5 years ago
Sebastian Woetzel bbd4363fa9 Bugfix: title_style was not used to style the axis title 5 years ago
Florian Dehau e0083fb8de chore: make the onboarding easier for Windows users. 5 years ago
Florian Dehau 3abafc307c Release v0.7.0 5 years ago
Florian Dehau 055af0f78a chore: bump dev dependencies
* bump rand to 0.7
* bump structopt to 0.3
5 years ago
Timon e4873e4da9 feat(backend): bump crossterm to 0.13
* removed flush calls because execute already calls flush under the hood.
* moved some static functions into From traits
* removed useless clone in demo
* upgrade to crossterm 0.13
* map all errors
5 years ago
Florian Dehau 2233cdc9cc chore: add CI based on github actions 5 years ago
Florian Dehau 816bc9b5c8 style: fix formatting and clippy issues 5 years ago
Florian Dehau a82c82fcd7 fix(widgets): remove compilation warning in table widget 5 years ago
TheZoq2 bb28d02277 Update docs to point encourage installing 0.6 5 years ago
Jeffas 94877f4e7e Use constraints for table column widths
This allows table column widths to be adapted more and scale with the
UI.

The constraints are solved using the Cassowary solver. An added
constraint for fitting them all in the width is added.
5 years ago
Florian Dehau 3747ddbefb feat(backend): Refactor crossterm backend
* Remove compilation warnings
* Fix rendering artifacts in the crossterm demo. In particular, the bold modifier
was leaking on most of the terminal screen because the old logic was not
properly unsetting the bold modifier after use (took inspiration of the termion
backend implementation)
5 years ago
Florian Dehau 42731da546 Enable build failure on compilation warnings 5 years ago
Joseph Knight e183d63a5e typo in barcharg.rs 5 years ago
Joseph Knight e5fdd442c3 typo in sparkline.rs 5 years ago
Joseph Knight 97357c0e08 typo in curses.rs 5 years ago
Joseph Knight 8649ce4c78 fixed typo in symbols.rs 5 years ago
Timon_Post a0f6605f59 Implemented command api crossterm, for better perfomance. 5 years ago
Jeffas db9b1dd689 Make margins be vertical or horizontal
This adds support for margins to be either vertical or horizontal, or
both.
5 years ago
Florian Dehau 9c8d62151b Replace build status badge in README 5 years ago
Florian Dehau c44d521279 Remove appveyor and travis config 5 years ago
Florian Dehau ba9da05cef Update azure pipelines config 5 years ago
Florian Dehau abd552fde6 Run cargo fmt 5 years ago
Florian Dehau 3726761549 List required features for all examples 5 years ago