Commit Graph

284 Commits (3a843d50744c22647a6c010535fb4adf8112b870)

Author SHA1 Message Date
Darrien Glasser 359b7feb8c
fix(widgets/canvas): Add bounds check when drawing line high/low (#283)
* Add bounds check when drawing line high/low
* Add test to ensure codepath doesn't break
4 years ago
Florian Dehau 5d99b4af00 docs: improve widgets documentation 5 years ago
Björn Steinbrink 8f9aa276e8 fix(widgets/list): fix line length calculation for selectable lists
The code that outputs the list elements uses the full inner width of its
block, without taking the width of the highlight symbol into
consideration. This allows the elements to overflow the box and draw
over the block's border. To fix that, we need to reduce the target width
for the list elements.
5 years ago
Florian Dehau bc2a512101 feat: add missing `Clone` and `Copy` on types 5 years ago
Florian Dehau 4f728d363f fix(widgets/list): stop highlighting blank placeholders 5 years ago
Florian Dehau 584e1b0500 refactor(widgets/canvas): allow canvas to render with a simple dot character instead of braille patterns
This change allows developers to gracefully degrade the output if the targeted
terminal does not support the full range of unicode symbols.
5 years ago
Florian Dehau cee65ed283 feat: allow BarChart and Sparkline to use a more portable set of symbols
Add `BarChart::bar_set` and `Sparkline::bar_set` methods to customize
the set of symbols used to display the data. The new set should give
a better looking output on terminal that do not support a wide range
of unicode symbols.
5 years ago
Stephan Dilly 7676d3c7df add clear widget and popup example utilizing it 5 years ago
Stephan Dilly fd48719040 fix some typos 5 years ago
Loïc Girault d987225ac8 Add thick lines and line::Set struct
Add a new style of line and use a struct to avoid duplication of
matching
5 years ago
Florian Dehau 3f62ce9c19 chore: remove unecessary dependencies
* Remove log, stderrlog, structopt
* Add argh
5 years ago
Florian Dehau 278c153d31 style: remove clippy warnings 5 years ago
Florian Dehau ae677099d6 feat(widgets/table): allow one row to be selected 5 years ago
Florian Dehau 140db9b2e2 refactor(canvas): update shape drawing strategy
* Update the `Shape` trait. Instead of returning an iterator of point, all
shapes are now aware of the surface they will be drawn to through a `Painter`.
In order to draw themselves, they paint points of the "braille grid".
* Rewrite how lines are drawn using a common line drawing algorithm (Bresenham).
5 years ago
Vadim Chekan 1683e8d609
Clean redundant generics params in Table (#234)
* Clean redundant generics params in Table

It is possible to use associated types the same way as generics parameters. In fact associated types are nothing more than better organized generics params. For example, there is no need to introduce another param to constraint iterator item to be Display, you can just say `where I::Iterator, I::Item: Display`. This allows to drop type params for Table from 5 to 2.
5 years ago
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.
5 years ago
Malte Tammena 808a5c9ffd Mark Style::* functions `const` 5 years ago
Florian Dehau d16db5ed90 style: fix clippy warnings 5 years ago
Florian Dehau 28017f97ea feat(widgets/chart): add more control on the visibility of the legend 5 years ago
Florian Dehau ea43413507 fix: remove clippy warnings 5 years ago
Caleb Bassi 829b7b6b70 Change linechart to draw the points also 5 years ago
Caleb Bassi 262bf441ce Add linechart support
Closes #73

This commit only adds support for linecharts for the braille marker.
5 years ago
Caleb Bassi 7aae9b380e Add header_gap field to Table 5 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.
5 years ago
Matthew Stevenson 682349c03e update block example; add BorderType to exposed widgets API 5 years ago
Matthew Stevenson a72389b28c revert to single Block struct; add set_border_type method and BorderType enum 5 years ago
Matthew Stevenson 06d159fb7b add RoundedBlock and DoubleBlock structs that impl From Block; add Block::rounded() and Block::double_border() 5 years ago
Matthew Stevenson 578560766d add round corners and double lines to symbols 5 years ago
Florian Dehau 8293cef703 Release v0.8.0 5 years ago
Timon 60b99cfc66 feat: bump crossterm to 0.14 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
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
Joe Ardent 86f681a007 Silence check warnings about [lack of] use of 'dyn' for boxed trait objects. 5 years ago
Florian Dehau a3827aaeae Remove try call in termion backend 5 years ago
Jeremy Day 47c68e40a2 fix for canvas rendering edge cases causing overflow errors 5 years ago
Florian Dehau 2a7eec816a Add PartialEq to Text 5 years ago
Florian Dehau 8fbb764c9e Move Borders documentation 5 years ago
Florian Dehau 4756801fd9 Format 5 years ago
Russ f0e0b515ad avoid divide by zero 5 years ago
defiori 25a0825ae4 fix: curses backend cursor positions 5 years ago
scauligi b1ac297d71 fix crossterm terminal size and dark gray color 5 years ago
nytopop 8a9c76b003 Don't highlight Tabs separator behind selection 5 years ago
DarrienG 41cdd3e261 Provide clone and debug for Text type 5 years ago
Timon_Post f6a0a91a23 fmt 5 years ago
timonpost@hotmail.nl ffaaf5e39c review update 5 years ago
timonpost@hotmail.nl 567cf7b8e5 update 0.9.2 5 years ago
Florian Dehau a74d335cb4 Fix clippy warnings 6 years ago
Florian Dehau 7a5ad3fbdb Fix sparkline panic when max is zero 6 years ago
Florian Dehau 4436110c44 Improve onboarding in documentation 6 years ago
Florian Dehau f8b3526426 Add code example for `Constraint::Ratio` 6 years ago
Florian Dehau 43e38ac483 Fix Buffer::merge
Coordinates returned by Buffer::pos_of were interpreted as local coordinates
while they were global. This was resulting in panics due to out of bounds
accesses. Interpreting the coordinates as global and using correct offsets
when computing the new index within the buffer for each cell fix the issue.
6 years ago
David Flemström 21e79ca078 Rebase and include necessary curses changes 6 years ago
David Flemström a25bbea555 Add workarounds for weird termion escape code handling 6 years ago
David Flemström b7664a4108 Support several modifiers and indexed colors at once 6 years ago
David Flemström d360cd3434 Support exact ratios for layout constraints 6 years ago
Florian Dehau e037db076c fix(backend/curses): use chtype to achieve platform agnostic conversion of graphemes 6 years ago
Florian Dehau 3ef19f41e6 fix(backend/curses): avoid platform specific conversion of graphemes 6 years ago
Florian Dehau da90ec15fa fix: add missing get_cursor and set_cursor on CursesBackend 6 years ago
Florian Dehau 7f5af46300 style: fmt 6 years ago
defiori 624e6ee047 fix: filter out wide unicode characters on windows 6 years ago
defiori 4a1f3cd61f feat: curses instance can be passed to backend 6 years ago
defiori d75198a8ee feat: add pancurses backend 6 years ago
defiori cadb41c9e3 fix: unified crossterm backend 6 years ago
defiori b30cae0473 feat: crossterm backend can use alternate screen 6 years ago
scauligi 7290086fe9 forgot to flush 6 years ago
scauligi bca920bea0 get/set cursor position 6 years ago
Jonathan cd41ca571f Modified with_crossterm naming scheme 6 years ago
Jonathan dc654e9f6c Added ability to create crossterm with previously created crossterm::Screen 6 years ago
Florian Dehau b669cf9ce7 style: fix clippy warnings 6 years ago
Florian Dehau 97f764b45d feat: handle crossterm errors 6 years ago
Florian Dehau 52a40ec99a fix: remove undefined crossterm attributes in windows builds 6 years ago
Sven-Hendrik Haase a78fa73b34 Add new shape: Rectangle 6 years ago
Jens Krause 1c0b0abf61 Use `UnicodeWidthStr::width()`
to get width of `divider`.

Also use `set_string` instead of `set_symbol`. The latter cuts content of a multi-char divider.
6 years ago
Jens Krause f7c6620e25 Fix documented example to fix doc-tests on CI 6 years ago
Jens Krause 16372f7847 Don't show divider after last tab 6 years ago
Jens Krause 72c2eb7182 Add `divider` to `Tabs`
to change appearance of tab dividers.
6 years ago
Sven-Hendrik Haase 144bfb71cf Upgrade to 2018 edition 6 years ago
Karoline Pauls 3fd9e23851 Buffer: correct diffing of buffers with multi-width characters
Resolves #104
6 years ago
Karoline Pauls 10642d0e04 Paragraph: word wrapping 6 years ago
Karoline Pauls 1802cf8dbc Improve wrapping of double-width characters 6 years ago
Karoline Pauls 090975481b Update tests and docs to take size from the Frame 6 years ago
Karoline Pauls 228816f5f8 Frame: provide consistent size for rendering 6 years ago
Karoline Pauls 8522e028f1 Run `cargo fmt` with the new Rust stable toolchain (1.31.0) 6 years ago
Ash a2776dfc86 Make sure we always emit a cursor goto for the first update.
Otherwise, if the first update is to (1, 0) then no goto occurs.
6 years ago