Merge pull request #2221 from Dworv/text-shrink
Text editor shrinking to content
This commit is contained in:
commit
111c8bfa79
6 changed files with 41 additions and 2 deletions
|
|
@ -24,6 +24,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
- `text_shaping` method for `Tooltip`. [#2172](https://github.com/iced-rs/iced/pull/2172)
|
- `text_shaping` method for `Tooltip`. [#2172](https://github.com/iced-rs/iced/pull/2172)
|
||||||
- `interaction` method for `MouseArea`. [#2207](https://github.com/iced-rs/iced/pull/2207)
|
- `interaction` method for `MouseArea`. [#2207](https://github.com/iced-rs/iced/pull/2207)
|
||||||
- `hovered` styling for `Svg` widget. [#2163](https://github.com/iced-rs/iced/pull/2163)
|
- `hovered` styling for `Svg` widget. [#2163](https://github.com/iced-rs/iced/pull/2163)
|
||||||
|
- `height` method for `TextEditor`. [#2221](https://github.com/iced-rs/iced/pull/2221)
|
||||||
- Customizable style for `TextEditor`. [#2159](https://github.com/iced-rs/iced/pull/2159)
|
- Customizable style for `TextEditor`. [#2159](https://github.com/iced-rs/iced/pull/2159)
|
||||||
- Border width styling for `Toggler`. [#2219](https://github.com/iced-rs/iced/pull/2219)
|
- Border width styling for `Toggler`. [#2219](https://github.com/iced-rs/iced/pull/2219)
|
||||||
- `RawText` variant for `Primitive` in `iced_graphics`. [#2158](https://github.com/iced-rs/iced/pull/2158)
|
- `RawText` variant for `Primitive` in `iced_graphics`. [#2158](https://github.com/iced-rs/iced/pull/2158)
|
||||||
|
|
@ -118,6 +119,7 @@ Many thanks to...
|
||||||
- @derezzedex
|
- @derezzedex
|
||||||
- @DoomDuck
|
- @DoomDuck
|
||||||
- @dtzxporter
|
- @dtzxporter
|
||||||
|
- @Dworv
|
||||||
- @fogarecious
|
- @fogarecious
|
||||||
- @GyulyVGC
|
- @GyulyVGC
|
||||||
- @hicaru
|
- @hicaru
|
||||||
|
|
|
||||||
|
|
@ -150,6 +150,10 @@ impl text::Editor for () {
|
||||||
Size::ZERO
|
Size::ZERO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn min_bounds(&self) -> Size {
|
||||||
|
Size::ZERO
|
||||||
|
}
|
||||||
|
|
||||||
fn update(
|
fn update(
|
||||||
&mut self,
|
&mut self,
|
||||||
_new_bounds: Size,
|
_new_bounds: Size,
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,10 @@ pub trait Editor: Sized + Default {
|
||||||
/// Returns the current boundaries of the [`Editor`].
|
/// Returns the current boundaries of the [`Editor`].
|
||||||
fn bounds(&self) -> Size;
|
fn bounds(&self) -> Size;
|
||||||
|
|
||||||
|
/// Returns the minimum boundaries to fit the current contents of
|
||||||
|
/// the [`Editor`].
|
||||||
|
fn min_bounds(&self) -> Size;
|
||||||
|
|
||||||
/// Updates the [`Editor`] with some new attributes.
|
/// Updates the [`Editor`] with some new attributes.
|
||||||
fn update(
|
fn update(
|
||||||
&mut self,
|
&mut self,
|
||||||
|
|
|
||||||
|
|
@ -191,6 +191,7 @@ impl Application for Editor {
|
||||||
column![
|
column![
|
||||||
controls,
|
controls,
|
||||||
text_editor(&self.content)
|
text_editor(&self.content)
|
||||||
|
.height(Length::Fill)
|
||||||
.on_action(Message::ActionPerformed)
|
.on_action(Message::ActionPerformed)
|
||||||
.highlight::<Highlighter>(
|
.highlight::<Highlighter>(
|
||||||
highlighter::Settings {
|
highlighter::Settings {
|
||||||
|
|
|
||||||
|
|
@ -470,6 +470,12 @@ impl editor::Editor for Editor {
|
||||||
self.internal().bounds
|
self.internal().bounds
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn min_bounds(&self) -> Size {
|
||||||
|
let internal = self.internal();
|
||||||
|
|
||||||
|
text::measure(internal.editor.buffer())
|
||||||
|
}
|
||||||
|
|
||||||
fn update(
|
fn update(
|
||||||
&mut self,
|
&mut self,
|
||||||
new_bounds: Size,
|
new_bounds: Size,
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ where
|
||||||
text_size: None,
|
text_size: None,
|
||||||
line_height: LineHeight::default(),
|
line_height: LineHeight::default(),
|
||||||
width: Length::Fill,
|
width: Length::Fill,
|
||||||
height: Length::Fill,
|
height: Length::Shrink,
|
||||||
padding: Padding::new(5.0),
|
padding: Padding::new(5.0),
|
||||||
style: Default::default(),
|
style: Default::default(),
|
||||||
on_edit: None,
|
on_edit: None,
|
||||||
|
|
@ -83,6 +83,12 @@ where
|
||||||
Theme: StyleSheet,
|
Theme: StyleSheet,
|
||||||
Renderer: text::Renderer,
|
Renderer: text::Renderer,
|
||||||
{
|
{
|
||||||
|
/// Sets the height of the [`TextEditor`].
|
||||||
|
pub fn height(mut self, height: impl Into<Length>) -> Self {
|
||||||
|
self.height = height.into();
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/// Sets the message that should be produced when some action is performed in
|
/// Sets the message that should be produced when some action is performed in
|
||||||
/// the [`TextEditor`].
|
/// the [`TextEditor`].
|
||||||
///
|
///
|
||||||
|
|
@ -352,6 +358,8 @@ where
|
||||||
state.highlighter_settings = self.highlighter_settings.clone();
|
state.highlighter_settings = self.highlighter_settings.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let limits = limits.height(self.height);
|
||||||
|
|
||||||
internal.editor.update(
|
internal.editor.update(
|
||||||
limits.shrink(self.padding).max(),
|
limits.shrink(self.padding).max(),
|
||||||
self.font.unwrap_or_else(|| renderer.default_font()),
|
self.font.unwrap_or_else(|| renderer.default_font()),
|
||||||
|
|
@ -360,7 +368,21 @@ where
|
||||||
state.highlighter.borrow_mut().deref_mut(),
|
state.highlighter.borrow_mut().deref_mut(),
|
||||||
);
|
);
|
||||||
|
|
||||||
layout::Node::new(limits.max())
|
match self.height {
|
||||||
|
Length::Fill | Length::FillPortion(_) | Length::Fixed(_) => {
|
||||||
|
layout::Node::new(limits.max())
|
||||||
|
}
|
||||||
|
Length::Shrink => {
|
||||||
|
let min_bounds = internal.editor.min_bounds();
|
||||||
|
|
||||||
|
layout::Node::new(
|
||||||
|
limits
|
||||||
|
.height(min_bounds.height)
|
||||||
|
.max()
|
||||||
|
.expand(Size::new(0.0, self.padding.vertical())),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn on_event(
|
fn on_event(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue