mirror of
https://github.com/FliegendeWurst/cursive.git
synced 2024-11-23 17:35:00 +00:00
Rename some types
BoxView => ResizedView SizedView => LastSizeView ViewBox => BoxedView Boxable => Resizable Boxable::box => Resizable::resize Old names are still re-exported, but deprecated.
This commit is contained in:
parent
237c6c8e33
commit
9aee7d374c
@ -95,16 +95,16 @@ Our list will start empty. If we leave it like that, it will be tiny when
|
|||||||
the application starts, and will grow when we add names. This is not very
|
the application starts, and will grow when we add names. This is not very
|
||||||
professional-looking, so we'll give it a fixed size.
|
professional-looking, so we'll give it a fixed size.
|
||||||
|
|
||||||
To do that, a [`BoxView`] can wrap any view and give it a fixed size.
|
To do that, a [`ResizedView`] can wrap any view and give it a fixed size.
|
||||||
We could do:
|
We could do:
|
||||||
|
|
||||||
```rust,ignore
|
```rust,ignore
|
||||||
let select = BoxView::with_fixed_size((10, 5), SelectView::<String>::new());
|
let select = ResizedView::with_fixed_size((10, 5), SelectView::<String>::new());
|
||||||
```
|
```
|
||||||
|
|
||||||
But there is another shorter way: the [`Boxable`] trait is conveniently
|
But there is another shorter way: the [`Resizable`] trait is conveniently
|
||||||
implemented for any `View`, and allow to wrap in a `BoxView` with a chainable
|
implemented for any `View`, and allow to wrap in a `ResizedView` with a chainable
|
||||||
call. `Boxable`, and a few other useful traits, are conveniently bundled in
|
call. `Resizable`, and a few other useful traits, are conveniently bundled in
|
||||||
the [`traits`] prelude, ready to be imported:
|
the [`traits`] prelude, ready to be imported:
|
||||||
|
|
||||||
```rust,ignore
|
```rust,ignore
|
||||||
@ -133,14 +133,14 @@ fn on_submit(s: &mut Cursive, name: &str) {
|
|||||||
```
|
```
|
||||||
|
|
||||||
(Be sure to call `on_submit` on the `SelectView`,
|
(Be sure to call `on_submit` on the `SelectView`,
|
||||||
not on the `BoxView` returned by `fixed_size`!)
|
not on the `ResizedView` returned by `fixed_size`!)
|
||||||
|
|
||||||
What we do there should be pretty familiar by now:
|
What we do there should be pretty familiar by now:
|
||||||
replace the layer with a simple dialog.
|
replace the layer with a simple dialog.
|
||||||
|
|
||||||
[`SelectView`]: https://docs.rs/cursive/0/cursive/views/struct.SelectView.html
|
[`SelectView`]: https://docs.rs/cursive/0/cursive/views/struct.SelectView.html
|
||||||
[`BoxView`]: https://docs.rs/cursive/0/cursive/views/struct.BoxView.html
|
[`ResizedView`]: https://docs.rs/cursive/0/cursive/views/struct.ResizedView.html
|
||||||
[`Boxable`]: https://docs.rs/cursive/0/cursive/view/trait.Boxable.html
|
[`Resizable`]: https://docs.rs/cursive/0/cursive/view/trait.Resizable.html
|
||||||
[`traits`]: https://docs.rs/cursive/0/cursive/traits/index.html
|
[`traits`]: https://docs.rs/cursive/0/cursive/traits/index.html
|
||||||
[`SelectView::on_submit`]: https://docs.rs/cursive/0/cursive/views/struct.SelectView.html#method.on_submit
|
[`SelectView::on_submit`]: https://docs.rs/cursive/0/cursive/views/struct.SelectView.html#method.on_submit
|
||||||
|
|
||||||
@ -228,7 +228,7 @@ how to point to the correct view.
|
|||||||
Later, you can ask the Cursive root for this ID and get access to the view.
|
Later, you can ask the Cursive root for this ID and get access to the view.
|
||||||
Just what we need!
|
Just what we need!
|
||||||
|
|
||||||
Like `BoxView`, `IdView` can be used directly with [`IdView::new`], or through
|
Like `ResizedView`, `IdView` can be used directly with [`IdView::new`], or through
|
||||||
the [`Identifiable`] trait. [`Cursive::call_on_id`] allows you to run a closure
|
the [`Identifiable`] trait. [`Cursive::call_on_id`] allows you to run a closure
|
||||||
on the view.
|
on the view.
|
||||||
|
|
||||||
@ -264,7 +264,7 @@ let select = SelectView::<String>::new()
|
|||||||
.fixed_size((10, 5));
|
.fixed_size((10, 5));
|
||||||
```
|
```
|
||||||
(Here again, the order is important: we want to wrap the `SelectView`, not
|
(Here again, the order is important: we want to wrap the `SelectView`, not
|
||||||
the `BoxView`. But we still need to call `on_submit` before that.)
|
the `ResizedView`. But we still need to call `on_submit` before that.)
|
||||||
|
|
||||||
That way, we can update it with a new item:
|
That way, we can update it with a new item:
|
||||||
|
|
||||||
|
@ -19,9 +19,9 @@ fn main() {
|
|||||||
.on_submit(show_popup)
|
.on_submit(show_popup)
|
||||||
// Give the `EditView` a name so we can refer to it later.
|
// Give the `EditView` a name so we can refer to it later.
|
||||||
.with_id("name")
|
.with_id("name")
|
||||||
// Wrap this in a `BoxView` with a fixed width.
|
// Wrap this in a `ResizedView` with a fixed width.
|
||||||
// Do this _after_ `with_id` or the name will point to the
|
// Do this _after_ `with_id` or the name will point to the
|
||||||
// `BoxView` instead of `EditView`!
|
// `ResizedView` instead of `EditView`!
|
||||||
.fixed_width(20),
|
.fixed_width(20),
|
||||||
)
|
)
|
||||||
.button("Ok", |s| {
|
.button("Ok", |s| {
|
||||||
|
@ -37,7 +37,7 @@ fn main() {
|
|||||||
|
|
||||||
let mut siv = Cursive::default();
|
let mut siv = Cursive::default();
|
||||||
|
|
||||||
// Let's add a BoxView to keep the list at a reasonable size
|
// Let's add a ResizedView to keep the list at a reasonable size
|
||||||
// (it can scroll anyway).
|
// (it can scroll anyway).
|
||||||
siv.add_layer(
|
siv.add_layer(
|
||||||
Dialog::around(select.scrollable().fixed_size((20, 10)))
|
Dialog::around(select.scrollable().fixed_size((20, 10)))
|
||||||
|
@ -65,7 +65,7 @@ pub mod tests {
|
|||||||
let input = backend.input();
|
let input = backend.input();
|
||||||
let mut siv = Cursive::new(|| backend);
|
let mut siv = Cursive::new(|| backend);
|
||||||
|
|
||||||
// Let's add a BoxView to keep the list at a reasonable size
|
// Let's add a ResizedView to keep the list at a reasonable size
|
||||||
// (it can scroll anyway).
|
// (it can scroll anyway).
|
||||||
siv.add_layer(
|
siv.add_layer(
|
||||||
Dialog::around(select.scrollable().fixed_size((20, 10)))
|
Dialog::around(select.scrollable().fixed_size((20, 10)))
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
use cursive::traits::Boxable;
|
||||||
use cursive::traits::*;
|
use cursive::traits::*;
|
||||||
use cursive::views;
|
use cursive::views;
|
||||||
|
|
||||||
|
@ -9,7 +9,10 @@
|
|||||||
//! ```
|
//! ```
|
||||||
|
|
||||||
#[doc(no_inline)]
|
#[doc(no_inline)]
|
||||||
pub use crate::view::{Boxable, Finder, Identifiable, Scrollable, View};
|
#[allow(deprecated)]
|
||||||
|
pub use crate::view::{
|
||||||
|
Boxable, Finder, Identifiable, Resizable, Scrollable, View,
|
||||||
|
};
|
||||||
|
|
||||||
#[doc(no_inline)]
|
#[doc(no_inline)]
|
||||||
pub use crate::With;
|
pub use crate::With;
|
||||||
|
@ -1,79 +0,0 @@
|
|||||||
use crate::vec::Vec2;
|
|
||||||
use crate::view::{SizeConstraint, View};
|
|
||||||
use crate::views::BoxView;
|
|
||||||
|
|
||||||
/// Makes a view wrappable in a [`BoxView`].
|
|
||||||
///
|
|
||||||
/// [`BoxView`]: ../views/struct.BoxView.html
|
|
||||||
pub trait Boxable: View + Sized {
|
|
||||||
/// Wraps `self` in a `BoxView` with the given size constraints.
|
|
||||||
fn boxed(
|
|
||||||
self,
|
|
||||||
width: SizeConstraint,
|
|
||||||
height: SizeConstraint,
|
|
||||||
) -> BoxView<Self> {
|
|
||||||
BoxView::new(width, height, self)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Wraps `self` into a fixed-size `BoxView`.
|
|
||||||
fn fixed_size<S: Into<Vec2>>(self, size: S) -> BoxView<Self> {
|
|
||||||
BoxView::with_fixed_size(size, self)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Wraps `self` into a fixed-width `BoxView`.
|
|
||||||
fn fixed_width(self, width: usize) -> BoxView<Self> {
|
|
||||||
BoxView::with_fixed_width(width, self)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Wraps `self` into a fixed-width `BoxView`.
|
|
||||||
fn fixed_height(self, height: usize) -> BoxView<Self> {
|
|
||||||
BoxView::with_fixed_height(height, self)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Wraps `self` into a full-screen `BoxView`.
|
|
||||||
fn full_screen(self) -> BoxView<Self> {
|
|
||||||
BoxView::with_full_screen(self)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Wraps `self` into a full-width `BoxView`.
|
|
||||||
fn full_width(self) -> BoxView<Self> {
|
|
||||||
BoxView::with_full_width(self)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Wraps `self` into a full-height `BoxView`.
|
|
||||||
fn full_height(self) -> BoxView<Self> {
|
|
||||||
BoxView::with_full_height(self)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Wraps `self` into a limited-size `BoxView`.
|
|
||||||
fn max_size<S: Into<Vec2>>(self, size: S) -> BoxView<Self> {
|
|
||||||
BoxView::with_max_size(size, self)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Wraps `self` into a limited-width `BoxView`.
|
|
||||||
fn max_width(self, max_width: usize) -> BoxView<Self> {
|
|
||||||
BoxView::with_max_width(max_width, self)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Wraps `self` into a limited-height `BoxView`.
|
|
||||||
fn max_height(self, max_height: usize) -> BoxView<Self> {
|
|
||||||
BoxView::with_max_height(max_height, self)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Wraps `self` into a `BoxView` at least sized `size`.
|
|
||||||
fn min_size<S: Into<Vec2>>(self, size: S) -> BoxView<Self> {
|
|
||||||
BoxView::with_min_size(size, self)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Wraps `self` in a `BoxView` at least `min_width` wide.
|
|
||||||
fn min_width(self, min_width: usize) -> BoxView<Self> {
|
|
||||||
BoxView::with_min_width(min_width, self)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Wraps `self` in a `BoxView` at least `min_height` tall.
|
|
||||||
fn min_height(self, min_height: usize) -> BoxView<Self> {
|
|
||||||
BoxView::with_min_height(min_height, self)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: View> Boxable for T {}
|
|
@ -16,7 +16,7 @@ pub trait Identifiable: View + Sized {
|
|||||||
/// ```rust
|
/// ```rust
|
||||||
/// # use cursive::Cursive;
|
/// # use cursive::Cursive;
|
||||||
/// # use cursive::views::TextView;
|
/// # use cursive::views::TextView;
|
||||||
/// # use cursive::view::Boxable;
|
/// # use cursive::view::Resizable;
|
||||||
/// use cursive::view::Identifiable;
|
/// use cursive::view::Identifiable;
|
||||||
///
|
///
|
||||||
/// let mut siv = Cursive::dummy();
|
/// let mut siv = Cursive::dummy();
|
||||||
@ -36,10 +36,10 @@ pub trait Identifiable: View + Sized {
|
|||||||
///
|
///
|
||||||
/// You should call this directly on the view you want to retrieve later,
|
/// You should call this directly on the view you want to retrieve later,
|
||||||
/// before other wrappers like [`fixed_width`]. Otherwise, you would be
|
/// before other wrappers like [`fixed_width`]. Otherwise, you would be
|
||||||
/// retrieving a [`BoxView`]!
|
/// retrieving a [`ResizedView`]!
|
||||||
///
|
///
|
||||||
/// [`fixed_width`]: trait.Boxable.html#method.fixed_width
|
/// [`fixed_width`]: trait.Resizable.html#method.fixed_width
|
||||||
/// [`BoxView`]: ../views/struct.BoxView.html
|
/// [`ResizedView`]: ../views/struct.ResizedView.html
|
||||||
///
|
///
|
||||||
fn with_id<S: Into<String>>(self, id: S) -> IdView<Self> {
|
fn with_id<S: Into<String>>(self, id: S) -> IdView<Self> {
|
||||||
IdView::new(id, self)
|
IdView::new(id, self)
|
||||||
|
@ -93,8 +93,8 @@ mod view_path;
|
|||||||
mod view_trait;
|
mod view_trait;
|
||||||
|
|
||||||
// Helper bases
|
// Helper bases
|
||||||
mod boxable;
|
|
||||||
mod identifiable;
|
mod identifiable;
|
||||||
|
mod resizable;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
pub mod scroll;
|
pub mod scroll;
|
||||||
|
|
||||||
@ -104,12 +104,12 @@ mod scrollable;
|
|||||||
mod into_boxed_view;
|
mod into_boxed_view;
|
||||||
|
|
||||||
pub use self::any::AnyView;
|
pub use self::any::AnyView;
|
||||||
pub use self::boxable::Boxable;
|
|
||||||
pub use self::finder::{Finder, Selector};
|
pub use self::finder::{Finder, Selector};
|
||||||
pub use self::identifiable::Identifiable;
|
pub use self::identifiable::Identifiable;
|
||||||
pub use self::into_boxed_view::IntoBoxedView;
|
pub use self::into_boxed_view::IntoBoxedView;
|
||||||
pub use self::margins::Margins;
|
pub use self::margins::Margins;
|
||||||
pub use self::position::{Offset, Position};
|
pub use self::position::{Offset, Position};
|
||||||
|
pub use self::resizable::Resizable;
|
||||||
pub use self::scroll::ScrollStrategy;
|
pub use self::scroll::ScrollStrategy;
|
||||||
pub use self::scroll_base::ScrollBase;
|
pub use self::scroll_base::ScrollBase;
|
||||||
pub use self::scrollable::Scrollable;
|
pub use self::scrollable::Scrollable;
|
||||||
@ -118,3 +118,6 @@ pub use self::size_constraint::SizeConstraint;
|
|||||||
pub use self::view_path::ViewPath;
|
pub use self::view_path::ViewPath;
|
||||||
pub use self::view_trait::View;
|
pub use self::view_trait::View;
|
||||||
pub use self::view_wrapper::ViewWrapper;
|
pub use self::view_wrapper::ViewWrapper;
|
||||||
|
|
||||||
|
#[deprecated(note = "Boxable is being renamed to Resizable")]
|
||||||
|
pub use self::resizable::Resizable as Boxable;
|
||||||
|
89
src/view/resizable.rs
Normal file
89
src/view/resizable.rs
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
use crate::vec::Vec2;
|
||||||
|
use crate::view::{SizeConstraint, View};
|
||||||
|
use crate::views::ResizedView;
|
||||||
|
|
||||||
|
/// Makes a view wrappable in a [`ResizedView`].
|
||||||
|
///
|
||||||
|
/// [`ResizedView`]: ../views/struct.ResizedView.html
|
||||||
|
pub trait Resizable: View + Sized {
|
||||||
|
/// Same as [`resized`](Self::resized())
|
||||||
|
#[deprecated(note = "Use resized() instead.")]
|
||||||
|
fn boxed(
|
||||||
|
self,
|
||||||
|
width: SizeConstraint,
|
||||||
|
height: SizeConstraint,
|
||||||
|
) -> ResizedView<Self> {
|
||||||
|
self.resized(width, height)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Wraps `self` in a `ResizedView` with the given size constraints.
|
||||||
|
fn resized(
|
||||||
|
self,
|
||||||
|
width: SizeConstraint,
|
||||||
|
height: SizeConstraint,
|
||||||
|
) -> ResizedView<Self> {
|
||||||
|
ResizedView::new(width, height, self)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Wraps `self` into a fixed-size `ResizedView`.
|
||||||
|
fn fixed_size<S: Into<Vec2>>(self, size: S) -> ResizedView<Self> {
|
||||||
|
ResizedView::with_fixed_size(size, self)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Wraps `self` into a fixed-width `ResizedView`.
|
||||||
|
fn fixed_width(self, width: usize) -> ResizedView<Self> {
|
||||||
|
ResizedView::with_fixed_width(width, self)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Wraps `self` into a fixed-width `ResizedView`.
|
||||||
|
fn fixed_height(self, height: usize) -> ResizedView<Self> {
|
||||||
|
ResizedView::with_fixed_height(height, self)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Wraps `self` into a full-screen `ResizedView`.
|
||||||
|
fn full_screen(self) -> ResizedView<Self> {
|
||||||
|
ResizedView::with_full_screen(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Wraps `self` into a full-width `ResizedView`.
|
||||||
|
fn full_width(self) -> ResizedView<Self> {
|
||||||
|
ResizedView::with_full_width(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Wraps `self` into a full-height `ResizedView`.
|
||||||
|
fn full_height(self) -> ResizedView<Self> {
|
||||||
|
ResizedView::with_full_height(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Wraps `self` into a limited-size `ResizedView`.
|
||||||
|
fn max_size<S: Into<Vec2>>(self, size: S) -> ResizedView<Self> {
|
||||||
|
ResizedView::with_max_size(size, self)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Wraps `self` into a limited-width `ResizedView`.
|
||||||
|
fn max_width(self, max_width: usize) -> ResizedView<Self> {
|
||||||
|
ResizedView::with_max_width(max_width, self)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Wraps `self` into a limited-height `ResizedView`.
|
||||||
|
fn max_height(self, max_height: usize) -> ResizedView<Self> {
|
||||||
|
ResizedView::with_max_height(max_height, self)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Wraps `self` into a `ResizedView` at least sized `size`.
|
||||||
|
fn min_size<S: Into<Vec2>>(self, size: S) -> ResizedView<Self> {
|
||||||
|
ResizedView::with_min_size(size, self)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Wraps `self` in a `ResizedView` at least `min_width` wide.
|
||||||
|
fn min_width(self, min_width: usize) -> ResizedView<Self> {
|
||||||
|
ResizedView::with_min_width(min_width, self)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Wraps `self` in a `ResizedView` at least `min_height` tall.
|
||||||
|
fn min_height(self, min_height: usize) -> ResizedView<Self> {
|
||||||
|
ResizedView::with_min_height(min_height, self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: View> Resizable for T {}
|
@ -2,9 +2,9 @@ use std::cmp::min;
|
|||||||
|
|
||||||
/// Single-dimensional constraint on a view size.
|
/// Single-dimensional constraint on a view size.
|
||||||
///
|
///
|
||||||
/// This describes a possible behaviour for a [`BoxView`].
|
/// This describes a possible behaviour for a [`ResizedView`].
|
||||||
///
|
///
|
||||||
/// [`BoxView`]: ../views/struct.BoxView.html
|
/// [`ResizedView`]: ../views/struct.ResizedView.html
|
||||||
#[derive(Debug, Clone, Copy)]
|
#[derive(Debug, Clone, Copy)]
|
||||||
pub enum SizeConstraint {
|
pub enum SizeConstraint {
|
||||||
/// No constraint imposed, the child view's response is used.
|
/// No constraint imposed, the child view's response is used.
|
||||||
@ -22,7 +22,7 @@ pub enum SizeConstraint {
|
|||||||
impl SizeConstraint {
|
impl SizeConstraint {
|
||||||
/// Returns the size to be given to the child.
|
/// Returns the size to be given to the child.
|
||||||
///
|
///
|
||||||
/// When `available` is offered to the `BoxView`.
|
/// When `available` is offered to the `ResizedView`.
|
||||||
pub fn available(self, available: usize) -> usize {
|
pub fn available(self, available: usize) -> usize {
|
||||||
match self {
|
match self {
|
||||||
SizeConstraint::Free
|
SizeConstraint::Free
|
||||||
|
@ -4,14 +4,14 @@ use std::ops::{Deref, DerefMut};
|
|||||||
/// A boxed `View`.
|
/// A boxed `View`.
|
||||||
///
|
///
|
||||||
/// It derefs to the wrapped view.
|
/// It derefs to the wrapped view.
|
||||||
pub struct ViewBox {
|
pub struct BoxedView {
|
||||||
view: Box<dyn View>,
|
view: Box<dyn View>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ViewBox {
|
impl BoxedView {
|
||||||
/// Creates a new `ViewBox` around the given boxed view.
|
/// Creates a new `BoxedView` around the given boxed view.
|
||||||
pub fn new(view: Box<dyn View>) -> Self {
|
pub fn new(view: Box<dyn View>) -> Self {
|
||||||
ViewBox { view }
|
BoxedView { view }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Box the given view
|
/// Box the given view
|
||||||
@ -19,7 +19,7 @@ impl ViewBox {
|
|||||||
where
|
where
|
||||||
T: IntoBoxedView,
|
T: IntoBoxedView,
|
||||||
{
|
{
|
||||||
ViewBox::new(view.as_boxed_view())
|
BoxedView::new(view.as_boxed_view())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the inner boxed view.
|
/// Returns the inner boxed view.
|
||||||
@ -28,7 +28,7 @@ impl ViewBox {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Deref for ViewBox {
|
impl Deref for BoxedView {
|
||||||
type Target = dyn View;
|
type Target = dyn View;
|
||||||
|
|
||||||
fn deref(&self) -> &dyn View {
|
fn deref(&self) -> &dyn View {
|
||||||
@ -36,13 +36,13 @@ impl Deref for ViewBox {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DerefMut for ViewBox {
|
impl DerefMut for BoxedView {
|
||||||
fn deref_mut(&mut self) -> &mut dyn View {
|
fn deref_mut(&mut self) -> &mut dyn View {
|
||||||
&mut *self.view
|
&mut *self.view
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ViewWrapper for ViewBox {
|
impl ViewWrapper for BoxedView {
|
||||||
type V = dyn View;
|
type V = dyn View;
|
||||||
|
|
||||||
fn with_view<F, R>(&self, f: F) -> Option<R>
|
fn with_view<F, R>(&self, f: F) -> Option<R>
|
@ -5,7 +5,7 @@ use crate::rect::Rect;
|
|||||||
use crate::theme::ColorStyle;
|
use crate::theme::ColorStyle;
|
||||||
use crate::vec::Vec2;
|
use crate::vec::Vec2;
|
||||||
use crate::view::{Margins, Selector, View};
|
use crate::view::{Margins, Selector, View};
|
||||||
use crate::views::{Button, DummyView, SizedView, TextView, ViewBox};
|
use crate::views::{BoxedView, Button, DummyView, LastSizeView, TextView};
|
||||||
use crate::Cursive;
|
use crate::Cursive;
|
||||||
use crate::Printer;
|
use crate::Printer;
|
||||||
use crate::With;
|
use crate::With;
|
||||||
@ -25,7 +25,7 @@ pub enum DialogFocus {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct ChildButton {
|
struct ChildButton {
|
||||||
button: SizedView<Button>,
|
button: LastSizeView<Button>,
|
||||||
offset: Cell<Vec2>,
|
offset: Cell<Vec2>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ impl ChildButton {
|
|||||||
F: 'static + Fn(&mut Cursive),
|
F: 'static + Fn(&mut Cursive),
|
||||||
{
|
{
|
||||||
ChildButton {
|
ChildButton {
|
||||||
button: SizedView::new(Button::new(label, cb)),
|
button: LastSizeView::new(Button::new(label, cb)),
|
||||||
offset: Cell::new(Vec2::zero()),
|
offset: Cell::new(Vec2::zero()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -58,7 +58,7 @@ pub struct Dialog {
|
|||||||
title_position: HAlign,
|
title_position: HAlign,
|
||||||
|
|
||||||
// The actual inner view.
|
// The actual inner view.
|
||||||
content: SizedView<ViewBox>,
|
content: LastSizeView<BoxedView>,
|
||||||
|
|
||||||
// Optional list of buttons under the main view.
|
// Optional list of buttons under the main view.
|
||||||
// Include the top-left corner.
|
// Include the top-left corner.
|
||||||
@ -93,7 +93,7 @@ impl Dialog {
|
|||||||
/// Creates a new `Dialog` with the given content.
|
/// Creates a new `Dialog` with the given content.
|
||||||
pub fn around<V: View + 'static>(view: V) -> Self {
|
pub fn around<V: View + 'static>(view: V) -> Self {
|
||||||
Dialog {
|
Dialog {
|
||||||
content: SizedView::new(ViewBox::boxed(view)),
|
content: LastSizeView::new(BoxedView::boxed(view)),
|
||||||
buttons: Vec::new(),
|
buttons: Vec::new(),
|
||||||
title: String::new(),
|
title: String::new(),
|
||||||
title_position: HAlign::Center,
|
title_position: HAlign::Center,
|
||||||
@ -148,7 +148,7 @@ impl Dialog {
|
|||||||
///
|
///
|
||||||
/// Previous content will be dropped.
|
/// Previous content will be dropped.
|
||||||
pub fn set_content<V: View + 'static>(&mut self, view: V) {
|
pub fn set_content<V: View + 'static>(&mut self, view: V) {
|
||||||
self.content = SizedView::new(ViewBox::boxed(view));
|
self.content = LastSizeView::new(BoxedView::boxed(view));
|
||||||
self.invalidate();
|
self.invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,17 +3,17 @@ use crate::view::View;
|
|||||||
use crate::view::ViewWrapper;
|
use crate::view::ViewWrapper;
|
||||||
|
|
||||||
/// Wrapper around a view that remembers its size.
|
/// Wrapper around a view that remembers its size.
|
||||||
pub struct SizedView<T> {
|
pub struct LastSizeView<T> {
|
||||||
/// Wrapped view.
|
/// Wrapped view.
|
||||||
pub view: T,
|
pub view: T,
|
||||||
/// Cached size from the last layout() call.
|
/// Cached size from the last layout() call.
|
||||||
pub size: Vec2,
|
pub size: Vec2,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T> SizedView<T> {
|
impl<T> LastSizeView<T> {
|
||||||
/// Wraps the given view.
|
/// Wraps the given view.
|
||||||
pub fn new(view: T) -> Self {
|
pub fn new(view: T) -> Self {
|
||||||
SizedView {
|
LastSizeView {
|
||||||
view,
|
view,
|
||||||
size: Vec2::zero(),
|
size: Vec2::zero(),
|
||||||
}
|
}
|
||||||
@ -22,7 +22,7 @@ impl<T> SizedView<T> {
|
|||||||
inner_getters!(self.view: T);
|
inner_getters!(self.view: T);
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: View> ViewWrapper for SizedView<T> {
|
impl<T: View> ViewWrapper for LastSizeView<T> {
|
||||||
wrap_impl!(self.view: T);
|
wrap_impl!(self.view: T);
|
||||||
|
|
||||||
fn wrap_layout(&mut self, size: Vec2) {
|
fn wrap_layout(&mut self, size: Vec2) {
|
@ -52,7 +52,7 @@ macro_rules! impl_enabled {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mod box_view;
|
mod boxed_view;
|
||||||
mod button;
|
mod button;
|
||||||
mod canvas;
|
mod canvas;
|
||||||
mod checkbox;
|
mod checkbox;
|
||||||
@ -64,6 +64,7 @@ mod edit_view;
|
|||||||
mod enableable_view;
|
mod enableable_view;
|
||||||
mod hideable_view;
|
mod hideable_view;
|
||||||
mod id_view;
|
mod id_view;
|
||||||
|
mod last_size_view;
|
||||||
mod layer;
|
mod layer;
|
||||||
mod linear_layout;
|
mod linear_layout;
|
||||||
mod list_view;
|
mod list_view;
|
||||||
@ -74,18 +75,17 @@ mod padded_view;
|
|||||||
mod panel;
|
mod panel;
|
||||||
mod progress_bar;
|
mod progress_bar;
|
||||||
mod radio;
|
mod radio;
|
||||||
|
mod resized_view;
|
||||||
mod scroll_view;
|
mod scroll_view;
|
||||||
mod select_view;
|
mod select_view;
|
||||||
mod shadow_view;
|
mod shadow_view;
|
||||||
mod sized_view;
|
|
||||||
mod slider_view;
|
mod slider_view;
|
||||||
mod stack_view;
|
mod stack_view;
|
||||||
mod text_area;
|
mod text_area;
|
||||||
mod text_view;
|
mod text_view;
|
||||||
mod tracked_view;
|
mod tracked_view;
|
||||||
mod view_box;
|
|
||||||
|
|
||||||
pub use self::box_view::BoxView;
|
pub use self::boxed_view::BoxedView;
|
||||||
pub use self::button::Button;
|
pub use self::button::Button;
|
||||||
pub use self::canvas::Canvas;
|
pub use self::canvas::Canvas;
|
||||||
pub use self::checkbox::Checkbox;
|
pub use self::checkbox::Checkbox;
|
||||||
@ -97,6 +97,7 @@ pub use self::edit_view::EditView;
|
|||||||
pub use self::enableable_view::EnableableView;
|
pub use self::enableable_view::EnableableView;
|
||||||
pub use self::hideable_view::HideableView;
|
pub use self::hideable_view::HideableView;
|
||||||
pub use self::id_view::{IdView, ViewRef};
|
pub use self::id_view::{IdView, ViewRef};
|
||||||
|
pub use self::last_size_view::LastSizeView;
|
||||||
pub use self::layer::Layer;
|
pub use self::layer::Layer;
|
||||||
pub use self::linear_layout::LinearLayout;
|
pub use self::linear_layout::LinearLayout;
|
||||||
pub use self::list_view::{ListChild, ListView};
|
pub use self::list_view::{ListChild, ListView};
|
||||||
@ -107,13 +108,24 @@ pub use self::padded_view::PaddedView;
|
|||||||
pub use self::panel::Panel;
|
pub use self::panel::Panel;
|
||||||
pub use self::progress_bar::ProgressBar;
|
pub use self::progress_bar::ProgressBar;
|
||||||
pub use self::radio::{RadioButton, RadioGroup};
|
pub use self::radio::{RadioButton, RadioGroup};
|
||||||
|
pub use self::resized_view::ResizedView;
|
||||||
pub use self::scroll_view::ScrollView;
|
pub use self::scroll_view::ScrollView;
|
||||||
pub use self::select_view::SelectView;
|
pub use self::select_view::SelectView;
|
||||||
pub use self::shadow_view::ShadowView;
|
pub use self::shadow_view::ShadowView;
|
||||||
pub use self::sized_view::SizedView;
|
|
||||||
pub use self::slider_view::SliderView;
|
pub use self::slider_view::SliderView;
|
||||||
pub use self::stack_view::{LayerPosition, StackView};
|
pub use self::stack_view::{LayerPosition, StackView};
|
||||||
pub use self::text_area::TextArea;
|
pub use self::text_area::TextArea;
|
||||||
pub use self::text_view::{TextContent, TextContentRef, TextView};
|
pub use self::text_view::{TextContent, TextContentRef, TextView};
|
||||||
pub use self::tracked_view::TrackedView;
|
pub use self::tracked_view::TrackedView;
|
||||||
pub use self::view_box::ViewBox;
|
|
||||||
|
#[deprecated(note = "SizedView is being renamed to LastSizeView")]
|
||||||
|
/// Same as [`LastSizeView`](self::LastSizeView).
|
||||||
|
pub type SizedView<T> = LastSizeView<T>;
|
||||||
|
|
||||||
|
#[deprecated(note = "BoxView is being renamed to ResizedView")]
|
||||||
|
/// Same as [`ResizedView`](self::ResizedView).
|
||||||
|
pub type BoxView<T> = ResizedView<T>;
|
||||||
|
|
||||||
|
#[deprecated(note = "ViewBox is being renamed to BoxedView")]
|
||||||
|
/// Same as [`BoxedView`](self::BoxedView).
|
||||||
|
pub type ViewBox = BoxedView;
|
||||||
|
@ -16,14 +16,14 @@ use crate::XY;
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use cursive::views::{BoxView, TextView};
|
/// use cursive::views::{ResizedView, TextView};
|
||||||
///
|
///
|
||||||
/// // Creates a 20x4 BoxView with a TextView content.
|
/// // Creates a 20x4 ResizedView with a TextView content.
|
||||||
/// let view = BoxView::with_fixed_size((20,4), TextView::new("Hello!"));
|
/// let view = ResizedView::with_fixed_size((20,4), TextView::new("Hello!"));
|
||||||
/// ```
|
/// ```
|
||||||
///
|
///
|
||||||
/// See also [`Boxable`](crate::view::Boxable) for an easy way to wrap any view.
|
/// See also [`Boxable`](crate::view::Boxable) for an easy way to wrap any view.
|
||||||
pub struct BoxView<T: View> {
|
pub struct ResizedView<T: View> {
|
||||||
/// Constraint on each axis
|
/// Constraint on each axis
|
||||||
size: XY<SizeConstraint>,
|
size: XY<SizeConstraint>,
|
||||||
|
|
||||||
@ -34,8 +34,8 @@ pub struct BoxView<T: View> {
|
|||||||
view: T,
|
view: T,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: View> BoxView<T> {
|
impl<T: View> ResizedView<T> {
|
||||||
/// Creates a new `BoxView` with the given width and height requirements.
|
/// Creates a new `ResizedView` with the given width and height requirements.
|
||||||
///
|
///
|
||||||
/// `None` values will use the wrapped view's preferences.
|
/// `None` values will use the wrapped view's preferences.
|
||||||
pub fn new(
|
pub fn new(
|
||||||
@ -43,7 +43,7 @@ impl<T: View> BoxView<T> {
|
|||||||
height: SizeConstraint,
|
height: SizeConstraint,
|
||||||
view: T,
|
view: T,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
BoxView {
|
ResizedView {
|
||||||
size: (width, height).into(),
|
size: (width, height).into(),
|
||||||
invalidated: true,
|
invalidated: true,
|
||||||
view,
|
view,
|
||||||
@ -76,102 +76,110 @@ impl<T: View> BoxView<T> {
|
|||||||
self.invalidate();
|
self.invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wraps `view` in a new `BoxView` with the given size.
|
/// Wraps `view` in a new `ResizedView` with the given size.
|
||||||
pub fn with_fixed_size<S: Into<Vec2>>(size: S, view: T) -> Self {
|
pub fn with_fixed_size<S: Into<Vec2>>(size: S, view: T) -> Self {
|
||||||
let size = size.into();
|
let size = size.into();
|
||||||
|
|
||||||
BoxView::new(
|
ResizedView::new(
|
||||||
SizeConstraint::Fixed(size.x),
|
SizeConstraint::Fixed(size.x),
|
||||||
SizeConstraint::Fixed(size.y),
|
SizeConstraint::Fixed(size.y),
|
||||||
view,
|
view,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wraps `view` in a new `BoxView` with fixed width.
|
/// Wraps `view` in a new `ResizedView` with fixed width.
|
||||||
pub fn with_fixed_width(width: usize, view: T) -> Self {
|
pub fn with_fixed_width(width: usize, view: T) -> Self {
|
||||||
BoxView::new(SizeConstraint::Fixed(width), SizeConstraint::Free, view)
|
ResizedView::new(
|
||||||
|
SizeConstraint::Fixed(width),
|
||||||
|
SizeConstraint::Free,
|
||||||
|
view,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wraps `view` in a new `BoxView` with fixed height.
|
/// Wraps `view` in a new `ResizedView` with fixed height.
|
||||||
pub fn with_fixed_height(height: usize, view: T) -> Self {
|
pub fn with_fixed_height(height: usize, view: T) -> Self {
|
||||||
BoxView::new(SizeConstraint::Free, SizeConstraint::Fixed(height), view)
|
ResizedView::new(
|
||||||
|
SizeConstraint::Free,
|
||||||
|
SizeConstraint::Fixed(height),
|
||||||
|
view,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wraps `view` in a `BoxView` which will take all available space.
|
/// Wraps `view` in a `ResizedView` which will take all available space.
|
||||||
pub fn with_full_screen(view: T) -> Self {
|
pub fn with_full_screen(view: T) -> Self {
|
||||||
BoxView::new(SizeConstraint::Full, SizeConstraint::Full, view)
|
ResizedView::new(SizeConstraint::Full, SizeConstraint::Full, view)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wraps `view` in a `BoxView` which will take all available width.
|
/// Wraps `view` in a `ResizedView` which will take all available width.
|
||||||
pub fn with_full_width(view: T) -> Self {
|
pub fn with_full_width(view: T) -> Self {
|
||||||
BoxView::new(SizeConstraint::Full, SizeConstraint::Free, view)
|
ResizedView::new(SizeConstraint::Full, SizeConstraint::Free, view)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wraps `view` in a `BoxView` which will take all available height.
|
/// Wraps `view` in a `ResizedView` which will take all available height.
|
||||||
pub fn with_full_height(view: T) -> Self {
|
pub fn with_full_height(view: T) -> Self {
|
||||||
BoxView::new(SizeConstraint::Free, SizeConstraint::Full, view)
|
ResizedView::new(SizeConstraint::Free, SizeConstraint::Full, view)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wraps `view` in a `BoxView` which will never be bigger than `size`.
|
/// Wraps `view` in a `ResizedView` which will never be bigger than `size`.
|
||||||
pub fn with_max_size<S: Into<Vec2>>(size: S, view: T) -> Self {
|
pub fn with_max_size<S: Into<Vec2>>(size: S, view: T) -> Self {
|
||||||
let size = size.into();
|
let size = size.into();
|
||||||
|
|
||||||
BoxView::new(
|
ResizedView::new(
|
||||||
SizeConstraint::AtMost(size.x),
|
SizeConstraint::AtMost(size.x),
|
||||||
SizeConstraint::AtMost(size.y),
|
SizeConstraint::AtMost(size.y),
|
||||||
view,
|
view,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wraps `view` in a `BoxView` which will enforce a maximum width.
|
/// Wraps `view` in a `ResizedView` which will enforce a maximum width.
|
||||||
///
|
///
|
||||||
/// The resulting width will never be more than `max_width`.
|
/// The resulting width will never be more than `max_width`.
|
||||||
pub fn with_max_width(max_width: usize, view: T) -> Self {
|
pub fn with_max_width(max_width: usize, view: T) -> Self {
|
||||||
BoxView::new(
|
ResizedView::new(
|
||||||
SizeConstraint::AtMost(max_width),
|
SizeConstraint::AtMost(max_width),
|
||||||
SizeConstraint::Free,
|
SizeConstraint::Free,
|
||||||
view,
|
view,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wraps `view` in a `BoxView` which will enforce a maximum height.
|
/// Wraps `view` in a `ResizedView` which will enforce a maximum height.
|
||||||
///
|
///
|
||||||
/// The resulting height will never be more than `max_height`.
|
/// The resulting height will never be more than `max_height`.
|
||||||
pub fn with_max_height(max_height: usize, view: T) -> Self {
|
pub fn with_max_height(max_height: usize, view: T) -> Self {
|
||||||
BoxView::new(
|
ResizedView::new(
|
||||||
SizeConstraint::Free,
|
SizeConstraint::Free,
|
||||||
SizeConstraint::AtMost(max_height),
|
SizeConstraint::AtMost(max_height),
|
||||||
view,
|
view,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wraps `view` in a `BoxView` which will never be smaller than `size`.
|
/// Wraps `view` in a `ResizedView` which will never be smaller than `size`.
|
||||||
pub fn with_min_size<S: Into<Vec2>>(size: S, view: T) -> Self {
|
pub fn with_min_size<S: Into<Vec2>>(size: S, view: T) -> Self {
|
||||||
let size = size.into();
|
let size = size.into();
|
||||||
|
|
||||||
BoxView::new(
|
ResizedView::new(
|
||||||
SizeConstraint::AtLeast(size.x),
|
SizeConstraint::AtLeast(size.x),
|
||||||
SizeConstraint::AtLeast(size.y),
|
SizeConstraint::AtLeast(size.y),
|
||||||
view,
|
view,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wraps `view` in a `BoxView` which will enforce a minimum width.
|
/// Wraps `view` in a `ResizedView` which will enforce a minimum width.
|
||||||
///
|
///
|
||||||
/// The resulting width will never be less than `min_width`.
|
/// The resulting width will never be less than `min_width`.
|
||||||
pub fn with_min_width(min_width: usize, view: T) -> Self {
|
pub fn with_min_width(min_width: usize, view: T) -> Self {
|
||||||
BoxView::new(
|
ResizedView::new(
|
||||||
SizeConstraint::AtLeast(min_width),
|
SizeConstraint::AtLeast(min_width),
|
||||||
SizeConstraint::Free,
|
SizeConstraint::Free,
|
||||||
view,
|
view,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wraps `view` in a `BoxView` which will enforce a minimum height.
|
/// Wraps `view` in a `ResizedView` which will enforce a minimum height.
|
||||||
///
|
///
|
||||||
/// The resulting height will never be less than `min_height`.
|
/// The resulting height will never be less than `min_height`.
|
||||||
pub fn with_min_height(min_height: usize, view: T) -> Self {
|
pub fn with_min_height(min_height: usize, view: T) -> Self {
|
||||||
BoxView::new(
|
ResizedView::new(
|
||||||
SizeConstraint::Free,
|
SizeConstraint::Free,
|
||||||
SizeConstraint::AtLeast(min_height),
|
SizeConstraint::AtLeast(min_height),
|
||||||
view,
|
view,
|
||||||
@ -186,7 +194,7 @@ impl<T: View> BoxView<T> {
|
|||||||
inner_getters!(self.view: T);
|
inner_getters!(self.view: T);
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: View> ViewWrapper for BoxView<T> {
|
impl<T: View> ViewWrapper for ResizedView<T> {
|
||||||
wrap_impl!(self.view: T);
|
wrap_impl!(self.view: T);
|
||||||
|
|
||||||
fn wrap_draw(&self, printer: &Printer) {
|
fn wrap_draw(&self, printer: &Printer) {
|
@ -5,7 +5,7 @@ use crate::vec::Vec2;
|
|||||||
use crate::view::{
|
use crate::view::{
|
||||||
IntoBoxedView, Offset, Position, Selector, View, ViewWrapper,
|
IntoBoxedView, Offset, Position, Selector, View, ViewWrapper,
|
||||||
};
|
};
|
||||||
use crate::views::{CircularFocus, Layer, ShadowView, ViewBox};
|
use crate::views::{BoxedView, CircularFocus, Layer, ShadowView};
|
||||||
use crate::Printer;
|
use crate::Printer;
|
||||||
use crate::With;
|
use crate::With;
|
||||||
use std::cell;
|
use std::cell;
|
||||||
@ -199,7 +199,7 @@ impl<T: View> View for ChildWrapper<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct Child {
|
struct Child {
|
||||||
view: ChildWrapper<ViewBox>,
|
view: ChildWrapper<BoxedView>,
|
||||||
size: Vec2,
|
size: Vec2,
|
||||||
placement: Placement,
|
placement: Placement,
|
||||||
|
|
||||||
@ -250,7 +250,7 @@ impl StackView {
|
|||||||
where
|
where
|
||||||
T: IntoBoxedView,
|
T: IntoBoxedView,
|
||||||
{
|
{
|
||||||
let boxed = ViewBox::boxed(view);
|
let boxed = BoxedView::boxed(view);
|
||||||
self.layers.push(Child {
|
self.layers.push(Child {
|
||||||
view: ChildWrapper::Backfilled(Layer::new(
|
view: ChildWrapper::Backfilled(Layer::new(
|
||||||
CircularFocus::wrap_tab(boxed),
|
CircularFocus::wrap_tab(boxed),
|
||||||
@ -356,7 +356,7 @@ impl StackView {
|
|||||||
where
|
where
|
||||||
T: IntoBoxedView,
|
T: IntoBoxedView,
|
||||||
{
|
{
|
||||||
let boxed = ViewBox::boxed(view);
|
let boxed = BoxedView::boxed(view);
|
||||||
self.layers.push(Child {
|
self.layers.push(Child {
|
||||||
// Skip padding for absolute/parent-placed views
|
// Skip padding for absolute/parent-placed views
|
||||||
view: ChildWrapper::Shadow(
|
view: ChildWrapper::Shadow(
|
||||||
@ -383,7 +383,7 @@ impl StackView {
|
|||||||
where
|
where
|
||||||
T: IntoBoxedView,
|
T: IntoBoxedView,
|
||||||
{
|
{
|
||||||
let boxed = ViewBox::boxed(view);
|
let boxed = BoxedView::boxed(view);
|
||||||
self.layers.push(Child {
|
self.layers.push(Child {
|
||||||
view: ChildWrapper::Plain(CircularFocus::wrap_tab(boxed)),
|
view: ChildWrapper::Plain(CircularFocus::wrap_tab(boxed)),
|
||||||
size: Vec2::new(0, 0),
|
size: Vec2::new(0, 0),
|
||||||
@ -419,7 +419,7 @@ impl StackView {
|
|||||||
.pop()
|
.pop()
|
||||||
.map(|child| child.view)
|
.map(|child| child.view)
|
||||||
.map(ChildWrapper::unwrap)
|
.map(ChildWrapper::unwrap)
|
||||||
.map(ViewBox::unwrap)
|
.map(BoxedView::unwrap)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Computes the offset of the current top view.
|
/// Computes the offset of the current top view.
|
||||||
|
@ -14,13 +14,13 @@ use unicode_width::UnicodeWidthStr;
|
|||||||
/// Multi-lines text editor.
|
/// Multi-lines text editor.
|
||||||
///
|
///
|
||||||
/// A `TextArea` will attempt to grow vertically and horizontally
|
/// A `TextArea` will attempt to grow vertically and horizontally
|
||||||
/// dependent on the content. Wrap it in a `BoxView` to
|
/// dependent on the content. Wrap it in a `ResizedView` to
|
||||||
/// constrain its size.
|
/// constrain its size.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use cursive::traits::{Boxable, Identifiable};
|
/// use cursive::traits::{Resizable, Identifiable};
|
||||||
/// use cursive::views::TextArea;
|
/// use cursive::views::TextArea;
|
||||||
///
|
///
|
||||||
/// let text_area = TextArea::new()
|
/// let text_area = TextArea::new()
|
||||||
|
Loading…
Reference in New Issue
Block a user