# Changelog ## To be released ## v0.6.2 - 2019-07-16 ### Added * `Text` implements PartialEq ### Fixed * Avoid overflow errors in canvas ## v0.6.1 - 2019-06-16 ### Fixed * Avoid a division by zero when all values in a barchart are equal to 0. * Fix the inverted cursor position in the curses backend. * Ensure that the correct terminal size is returned when using the crossterm backend. * Avoid highlighting the separator after the selected item in the Tabs widget. ## v0.6.0 - 2019-05-18 ### Changed * Update crossterm backend ## v0.5.1 - 2019-04-14 ### Fixed * Fix a panic in the Sparkline widget ## v0.5.0 - 2019-03-10 ### Added * Add a new curses backend (with Windows support thanks to `pancurses`). * Add `Backend::get_cursor` and `Backend::set_cursor` methods to query and set the position of the cursor. * Add more constructors to the `Crossterm` backend. * Add a demo for all backends using a shared UI and application state. * Add `Ratio` as a new variant of layout `Constraint`. It can be used to define exact ratios constraints. ### Changed * Add support for multiple modifiers on the same `Style` by changing `Modifier` from an enum to a bitflags struct. So instead of writing: ```rust let style = Style::default().modifier(Modifier::Italic); ``` one should use: ```rust let style = Style::default().modifier(Modifier::ITALIC); // or let style = Style::default().modifier(Modifier::ITALIC | Modifier::BOLD); ``` ### Fixed * Ensure correct behavoir of the alternate screens with the `Crossterm` backend. * Fix out of bounds panic when two `Buffer` are merged. ## v0.4.0 - 2019-02-03 ### Added * Add a new canvas shape: `Rectangle`. * Official support of `Crossterm` backend. * Make it possible to choose the divider between `Tabs`. * Add word wrapping on Paragraph. * The gauge widget accepts a ratio (f64 between 0 and 1) in addition of a percentage. ### Changed * Upgrade to Rust 2018 edition. ### Fixed * Fix rendering of double-width characters. * Fix race condition on the size of the terminal and expose a size that is safe to use when drawing through `Frame::size`. * Prevent unsigned int overflow on large screens. ## v0.3.0 - 2018-11-04 ### Added * Add experimental test backend ## v0.3.0-beta.3 - 2018-09-24 ### Changed * `show_cursor` is called when `Terminal` is dropped if the cursor is hidden. ## v0.3.0-beta.2 - 2018-09-23 ### Changed * Remove custom `termion` backends. This is motivated by the fact that `termion` structs are meant to be combined/wrapped to provide additional functionalities to the terminal (e.g AlternateScreen, Mouse support, ...). Thus providing exclusive types do not make a lot of sense and give a false hint that additional features cannot be used together. The recommended approach is now to create your own version of `stdout`: ```rust let stdout = io::stdout().into_raw_mode()?; let stdout = MouseTerminal::from(stdout); let stdout = AlternateScreen::from(stdout); ``` and then to create the corresponding `termion` backend: ```rust let backend = TermionBackend::new(stdout); ``` The resulting code is more verbose but it works with all combinations of additional `termion` features. ## v0.3.0-beta.1 - 2018-09-08 ### Changed * Replace `Item` by a generic and flexible `Text` that can be used in both `Paragraph` and `List` widgets. * Remove unecessary borrows on `Style`. ## v0.3.0-beta.0 - 2018-09-04 ### Added * Add a basic `Crossterm` backend ### Changed * Remove `Group` and introduce `Layout` in its place - `Terminal` is no longer required to compute a layout - `Size` has been renamed `Constraint` * Widgets are rendered on a `Frame` instead of a `Terminal` in order to avoid mixing `draw` and `render` calls * `draw` on `Terminal` expects a closure where the UI is built by rendering widgets on the given `Frame` * Update `Widget` trait - `draw` takes area by value - `render` takes a `Frame` instead of a `Terminal` * All widgets use the consumable builder pattern * `SelectableList` can have no selected item and the highlight symbol is hidden in this case * Remove markup langage inside `Paragraph`. `Paragraph` now expects an iterator of `Text` items ## v0.2.3 - 2018-06-09 ### Added * Add `start_corner` option for `List` * Add more text aligment options for `Paragraph` ## v0.2.2 - 2018-05-06 ### Added * `Terminal` implements `Debug` ### Changed * Use `FnOnce` instead of `FnMut` in Group::render ## v0.2.1 - 2018-04-01 ### Added * Add `AlternateScreenBackend` in `termion` backend * Add `TermionBackend::with_stdout` in order to let an user of the library provides its own termion struct * Add tests and documentation for `Buffer::pos_of` * Remove leading whitespaces when wrapping text ### Fixed * Fix `debug_assert` in `Buffer::pos_of` * Pass the style of `SelectableList` to the underlying `List` * Fix missing character when wrapping text * Fix panic when specifying layout constraints ## v0.2.0 - 2017-12-26 ### Added * Add `MouseBackend` in `termion` backend to handle scroll and mouse events * Add generic `Item` for items in a `List` ### Changed * Rename `TermionBackend` to `RawBackend` (to distinguish it from the `MouseBackend`) * Generic parameters for `List` to allow passing iterators as items * Generic parameters for `Table` to allow using iterators as rows and header * Generic parameters for `Tabs` * Rename `border` bitflags to `Borders` * Run latest `rustfmt` on all sources ### Removed * Drop `log4rs` as a dev-dependencies in favor of `stderrlog`