Commit Graph

43 Commits

Author SHA1 Message Date
Florian Dehau
6069d89dee chore: fix all clippy warnings 2021-12-23 18:55:43 +01:00
Florian Dehau
41142732ec feat(buffer): add a method to build a Style out of an existing Cell 2020-09-27 19:12:35 +02:00
Brooks Rady
0abaa20de9 refactor: clean up some folds (#362) 2020-09-20 15:02:06 +02:00
Florian Dehau
0ffea495b1 refactor: implement cascading styles
- merge `Style` and `StyleDiff` together. `Style` now is used to activate or deactivate certain
style rules not to overidden all of them.
- update all impacted widgets, examples and tests.
2020-07-17 20:58:20 +02:00
Florian Dehau
88c4b191fb feat(text): add new text primitives 2020-07-10 22:59:24 +02:00
Florian Dehau
96c6b4efcb refactor(tests): move test utilities to TestBackend
* Remove custom Debug implementation of Buffer
* Add `TestBackend::assert_buffer` to compare buffers in integration tests. When
the assertion fails, the output now show the list of differences in addition
of the views of the computed and expected buffers. This effectively replaces
the table of debug code for colors and modifiers as it is easier to read.
2020-05-21 21:59:39 +02:00
Florian Dehau
a7761fe55d fix(buffer): ignore zero-width graphemes 2020-05-12 21:16:16 +02:00
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.
2020-02-23 19:23:37 +01:00
Florian Dehau
ea43413507 fix: remove clippy warnings 2020-01-19 23:11:12 +01:00
Florian Dehau
816bc9b5c8 style: fix formatting and clippy issues 2019-11-05 08:08:14 +01:00
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.
2019-03-10 17:36:14 +01:00
David Flemström
b7664a4108 Support several modifiers and indexed colors at once 2019-03-10 15:56:56 +01:00
Florian Dehau
b669cf9ce7 style: fix clippy warnings 2019-02-03 22:42:09 +01:00
Sven-Hendrik Haase
144bfb71cf Upgrade to 2018 edition 2019-01-13 14:35:51 +00:00
Karoline Pauls
3fd9e23851 Buffer: correct diffing of buffers with multi-width characters
Resolves #104
2019-01-13 13:46:39 +00:00
Karoline Pauls
1802cf8dbc Improve wrapping of double-width characters 2018-12-22 15:38:51 +01:00
Karoline Pauls
89dac9d2a6 buffer: add quotes to fmt::Debug for better testing experience 2018-12-05 21:20:12 +01:00
Florian Dehau
22e8fade7e feat: add experimental test backend 2018-11-04 20:16:10 +01:00
Florian Dehau
6c69160d6b feat: remove unecessary borrows of Style 2018-09-07 22:24:52 +02:00
Florian Dehau
d6016788ef refactor: clippy + rustfmt 2018-09-04 22:23:44 +02:00
Florian Dehau
7181970a32 feat: split layout from rendering
* remove layout logic from Terminal
* replace Group with Layout
* add Frame intermediate object
2018-09-04 22:23:44 +02:00
Magnus Bergmark
d0d2f88346 BUG: Buffer::pos_of panics on inside-bounds index
- Add tests for this behavior.
- Extend documentation of Buffer::pos_of and Buffer::index_of
  - Clarify that the coordinates should be in global coordinate-space
  (rather than local).
  - Document panics.
  - Add examples.
2018-04-01 11:13:35 +02:00
Florian Dehau
c3c5109c5a [src] Fix build and tests 2017-12-26 21:45:46 +01:00
Florian Dehau
1f285fbac0 [src] Run cargo fmt 2017-10-30 23:14:57 +01:00
Florian Dehau
71545a0aa8 Run cargo fmt 2017-09-11 08:15:39 +02:00
Florian Dehau
4f8a57d500 Fix clippy warnings 2016-11-07 22:57:13 +01:00
Florian Dehau
662e2dd102 Fix examples 2016-11-06 21:41:32 +01:00
Florian Dehau
224eb2d8e0 Add support for text styling 2016-11-06 18:49:57 +01:00
Florian Dehau
93cc237007 Documentation 2016-11-03 23:59:04 +01:00
Florian Dehau
107d7297af Fix some layout problems 2016-10-31 18:04:10 +01:00
Florian Dehau
b0b1645010 Rename set_characters method in buffer interface 2016-10-27 19:33:32 +02:00
Florian Dehau
bcb3d751bf Rename buffer methods 2016-10-27 12:35:26 +02:00
Florian Dehau
85bd76e17d Small improvements 2016-10-26 19:19:46 +02:00
Florian Dehau
c91436baee Change rendering method and adapt widget trait accordingly 2016-10-26 14:32:45 +02:00
Florian Dehau
063bde8764 Add bar chart prototype 2016-10-22 12:51:41 +02:00
Florian Dehau
7a427c06d4 Update chart widget and fix colors in all widgets 2016-10-21 19:02:19 +02:00
Florian Dehau
07ff2b08eb Improve Chart Widget, safer buffer and unicode width 2016-10-20 12:01:09 +02:00
Florian Dehau
fde0ba95dd Remove cache system and add unicode segmentation 2016-10-16 00:38:20 +02:00
Florian Dehau
bd404f0238 Cleanup code and add chart widget 2016-10-14 19:44:52 +02:00
Florian Dehau
6ed19df342 Update color support for block, gauge, list and sparkline 2016-10-13 17:57:45 +02:00
Florian Dehau
9816ccd4e3 Change layout properties and improve gauge and sparkline 2016-10-13 16:27:33 +02:00
Florian Dehau
5b5d37ee69 Add gauge, fix rendering and cleanup code 2016-10-12 16:12:42 +02:00
Florian Dehau
459201bc65 First commit 2016-10-09 19:46:53 +02:00