Make widget::Tree mutable in Widget::layout
This commit is contained in:
parent
301e6e5fdc
commit
a026e917d3
45 changed files with 135 additions and 135 deletions
|
|
@ -306,7 +306,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
@ -492,7 +492,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ pub fn resolve<Message, Renderer>(
|
||||||
spacing: f32,
|
spacing: f32,
|
||||||
align_items: Alignment,
|
align_items: Alignment,
|
||||||
items: &[Element<'_, Message, Renderer>],
|
items: &[Element<'_, Message, Renderer>],
|
||||||
trees: &[widget::Tree],
|
trees: &mut [widget::Tree],
|
||||||
) -> Node
|
) -> Node
|
||||||
where
|
where
|
||||||
Renderer: crate::Renderer,
|
Renderer: crate::Renderer,
|
||||||
|
|
@ -83,7 +83,7 @@ where
|
||||||
let mut nodes: Vec<Node> = Vec::with_capacity(items.len());
|
let mut nodes: Vec<Node> = Vec::with_capacity(items.len());
|
||||||
nodes.resize(items.len(), Node::default());
|
nodes.resize(items.len(), Node::default());
|
||||||
|
|
||||||
for (i, (child, tree)) in items.iter().zip(trees).enumerate() {
|
for (i, (child, tree)) in items.iter().zip(trees.iter_mut()).enumerate() {
|
||||||
let fill_factor = match axis {
|
let fill_factor = match axis {
|
||||||
Axis::Horizontal => child.as_widget().width(),
|
Axis::Horizontal => child.as_widget().width(),
|
||||||
Axis::Vertical => child.as_widget().height(),
|
Axis::Vertical => child.as_widget().height(),
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ where
|
||||||
///
|
///
|
||||||
/// [`Node`]: layout::Node
|
/// [`Node`]: layout::Node
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&mut self,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
bounds: Size,
|
bounds: Size,
|
||||||
position: Point,
|
position: Point,
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ where
|
||||||
|
|
||||||
/// Computes the layout of the [`Element`] in the given bounds.
|
/// Computes the layout of the [`Element`] in the given bounds.
|
||||||
pub fn layout(
|
pub fn layout(
|
||||||
&self,
|
&mut self,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
bounds: Size,
|
bounds: Size,
|
||||||
translation: Vector,
|
translation: Vector,
|
||||||
|
|
@ -150,7 +150,7 @@ where
|
||||||
Renderer: crate::Renderer,
|
Renderer: crate::Renderer,
|
||||||
{
|
{
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&mut self,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
bounds: Size,
|
bounds: Size,
|
||||||
position: Point,
|
position: Point,
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ where
|
||||||
Renderer: crate::Renderer,
|
Renderer: crate::Renderer,
|
||||||
{
|
{
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&mut self,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
bounds: Size,
|
bounds: Size,
|
||||||
position: Point,
|
position: Point,
|
||||||
|
|
@ -71,7 +71,7 @@ where
|
||||||
layout::Node::with_children(
|
layout::Node::with_children(
|
||||||
bounds,
|
bounds,
|
||||||
self.children
|
self.children
|
||||||
.iter()
|
.iter_mut()
|
||||||
.map(|child| child.layout(renderer, bounds, translation))
|
.map(|child| child.layout(renderer, bounds, translation))
|
||||||
.collect(),
|
.collect(),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ where
|
||||||
/// user interface.
|
/// user interface.
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node;
|
) -> layout::Node;
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,11 @@ use crate::alignment;
|
||||||
use crate::layout;
|
use crate::layout;
|
||||||
use crate::mouse;
|
use crate::mouse;
|
||||||
use crate::renderer;
|
use crate::renderer;
|
||||||
use crate::text::{self, Paragraph as _};
|
use crate::text::{self, Paragraph};
|
||||||
use crate::widget::tree::{self, Tree};
|
use crate::widget::tree::{self, Tree};
|
||||||
use crate::{Color, Element, Layout, Length, Pixels, Point, Rectangle, Widget};
|
use crate::{Color, Element, Layout, Length, Pixels, Point, Rectangle, Widget};
|
||||||
|
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::cell::RefCell;
|
|
||||||
|
|
||||||
pub use text::{LineHeight, Shaping};
|
pub use text::{LineHeight, Shaping};
|
||||||
|
|
||||||
|
|
@ -120,7 +119,7 @@ where
|
||||||
|
|
||||||
/// The internal state of a [`Text`] widget.
|
/// The internal state of a [`Text`] widget.
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
pub struct State<T>(RefCell<T>);
|
pub struct State<P: Paragraph>(P);
|
||||||
|
|
||||||
impl<'a, Message, Renderer> Widget<Message, Renderer> for Text<'a, Renderer>
|
impl<'a, Message, Renderer> Widget<Message, Renderer> for Text<'a, Renderer>
|
||||||
where
|
where
|
||||||
|
|
@ -132,7 +131,7 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
fn state(&self) -> tree::State {
|
fn state(&self) -> tree::State {
|
||||||
tree::State::new(State(RefCell::new(Renderer::Paragraph::default())))
|
tree::State::new(State(Renderer::Paragraph::default()))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn width(&self) -> Length {
|
fn width(&self) -> Length {
|
||||||
|
|
@ -145,12 +144,12 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
layout(
|
layout(
|
||||||
tree.state.downcast_ref::<State<Renderer::Paragraph>>(),
|
tree.state.downcast_mut::<State<Renderer::Paragraph>>(),
|
||||||
renderer,
|
renderer,
|
||||||
limits,
|
limits,
|
||||||
self.width,
|
self.width,
|
||||||
|
|
@ -189,7 +188,7 @@ where
|
||||||
|
|
||||||
/// Produces the [`layout::Node`] of a [`Text`] widget.
|
/// Produces the [`layout::Node`] of a [`Text`] widget.
|
||||||
pub fn layout<Renderer>(
|
pub fn layout<Renderer>(
|
||||||
state: &State<Renderer::Paragraph>,
|
state: &mut State<Renderer::Paragraph>,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
width: Length,
|
width: Length,
|
||||||
|
|
@ -211,10 +210,10 @@ where
|
||||||
let size = size.unwrap_or_else(|| renderer.default_size());
|
let size = size.unwrap_or_else(|| renderer.default_size());
|
||||||
let font = font.unwrap_or_else(|| renderer.default_font());
|
let font = font.unwrap_or_else(|| renderer.default_font());
|
||||||
|
|
||||||
let mut paragraph = state.0.borrow_mut();
|
let State(ref mut paragraph) = state;
|
||||||
|
|
||||||
renderer.update_paragraph(
|
renderer.update_paragraph(
|
||||||
&mut paragraph,
|
paragraph,
|
||||||
text::Text {
|
text::Text {
|
||||||
content,
|
content,
|
||||||
bounds,
|
bounds,
|
||||||
|
|
@ -251,7 +250,7 @@ pub fn draw<Renderer>(
|
||||||
) where
|
) where
|
||||||
Renderer: text::Renderer,
|
Renderer: text::Renderer,
|
||||||
{
|
{
|
||||||
let paragraph = state.0.borrow();
|
let State(ref paragraph) = state;
|
||||||
let bounds = layout.bounds();
|
let bounds = layout.bounds();
|
||||||
|
|
||||||
let x = match paragraph.horizontal_alignment() {
|
let x = match paragraph.horizontal_alignment() {
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ mod quad {
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
_tree: &widget::Tree,
|
_tree: &mut widget::Tree,
|
||||||
_renderer: &Renderer,
|
_renderer: &Renderer,
|
||||||
_limits: &layout::Limits,
|
_limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ mod circle {
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
_tree: &widget::Tree,
|
_tree: &mut widget::Tree,
|
||||||
_renderer: &Renderer,
|
_renderer: &Renderer,
|
||||||
_limits: &layout::Limits,
|
_limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ mod rainbow {
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
_tree: &widget::Tree,
|
_tree: &mut widget::Tree,
|
||||||
_renderer: &Renderer,
|
_renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
|
|
@ -254,7 +254,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
_tree: &Tree,
|
_tree: &mut Tree,
|
||||||
_renderer: &iced::Renderer<Theme>,
|
_renderer: &iced::Renderer<Theme>,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
|
|
@ -175,7 +175,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
_tree: &Tree,
|
_tree: &mut Tree,
|
||||||
_renderer: &Renderer,
|
_renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
|
|
@ -285,13 +285,15 @@ mod modal {
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &widget::Tree,
|
tree: &mut widget::Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
self.base
|
self.base.as_widget().layout(
|
||||||
.as_widget()
|
&mut tree.children[0],
|
||||||
.layout(&tree.children[0], renderer, limits)
|
renderer,
|
||||||
|
limits,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn on_event(
|
fn on_event(
|
||||||
|
|
@ -402,7 +404,7 @@ mod modal {
|
||||||
Message: Clone,
|
Message: Clone,
|
||||||
{
|
{
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&mut self,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
_bounds: Size,
|
_bounds: Size,
|
||||||
position: Point,
|
position: Point,
|
||||||
|
|
|
||||||
|
|
@ -326,13 +326,15 @@ mod toast {
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
self.content
|
self.content.as_widget().layout(
|
||||||
.as_widget()
|
&mut tree.children[0],
|
||||||
.layout(&tree.children[0], renderer, limits)
|
renderer,
|
||||||
|
limits,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn tag(&self) -> widget::tree::Tag {
|
fn tag(&self) -> widget::tree::Tag {
|
||||||
|
|
@ -503,7 +505,7 @@ mod toast {
|
||||||
for Overlay<'a, 'b, Message>
|
for Overlay<'a, 'b, Message>
|
||||||
{
|
{
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&mut self,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
bounds: Size,
|
bounds: Size,
|
||||||
position: Point,
|
position: Point,
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ where
|
||||||
state.diff(root.as_widget());
|
state.diff(root.as_widget());
|
||||||
|
|
||||||
let base = root.as_widget().layout(
|
let base = root.as_widget().layout(
|
||||||
&state,
|
&mut state,
|
||||||
renderer,
|
renderer,
|
||||||
&layout::Limits::new(Size::ZERO, bounds),
|
&layout::Limits::new(Size::ZERO, bounds),
|
||||||
);
|
);
|
||||||
|
|
@ -230,7 +230,7 @@ where
|
||||||
let _ = ManuallyDrop::into_inner(manual_overlay);
|
let _ = ManuallyDrop::into_inner(manual_overlay);
|
||||||
|
|
||||||
self.base = self.root.as_widget().layout(
|
self.base = self.root.as_widget().layout(
|
||||||
&self.state,
|
&mut self.state,
|
||||||
renderer,
|
renderer,
|
||||||
&layout::Limits::new(Size::ZERO, self.bounds),
|
&layout::Limits::new(Size::ZERO, self.bounds),
|
||||||
);
|
);
|
||||||
|
|
@ -330,7 +330,7 @@ where
|
||||||
|
|
||||||
shell.revalidate_layout(|| {
|
shell.revalidate_layout(|| {
|
||||||
self.base = self.root.as_widget().layout(
|
self.base = self.root.as_widget().layout(
|
||||||
&self.state,
|
&mut self.state,
|
||||||
renderer,
|
renderer,
|
||||||
&layout::Limits::new(Size::ZERO, self.bounds),
|
&layout::Limits::new(Size::ZERO, self.bounds),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -159,14 +159,16 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
layout(limits, self.width, self.height, self.padding, |limits| {
|
layout(limits, self.width, self.height, self.padding, |limits| {
|
||||||
self.content
|
self.content.as_widget().layout(
|
||||||
.as_widget()
|
&mut tree.children[0],
|
||||||
.layout(&tree.children[0], renderer, limits)
|
renderer,
|
||||||
|
limits,
|
||||||
|
)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -129,7 +129,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
_tree: &Tree,
|
_tree: &mut Tree,
|
||||||
_renderer: &Renderer,
|
_renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
|
|
@ -184,7 +184,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
@ -195,7 +195,7 @@ where
|
||||||
|limits| {
|
|limits| {
|
||||||
let state = tree
|
let state = tree
|
||||||
.state
|
.state
|
||||||
.downcast_ref::<widget::text::State<Renderer::Paragraph>>();
|
.downcast_mut::<widget::text::State<Renderer::Paragraph>>();
|
||||||
|
|
||||||
widget::text::layout(
|
widget::text::layout(
|
||||||
state,
|
state,
|
||||||
|
|
|
||||||
|
|
@ -122,7 +122,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
@ -139,7 +139,7 @@ where
|
||||||
self.spacing,
|
self.spacing,
|
||||||
self.align_items,
|
self.align_items,
|
||||||
&self.children,
|
&self.children,
|
||||||
&tree.children,
|
&mut tree.children,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -305,7 +305,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &widget::Tree,
|
tree: &mut widget::Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
|
|
@ -162,7 +162,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
|
|
@ -167,7 +167,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
_tree: &Tree,
|
_tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
_tree: &Tree,
|
_tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
|
|
@ -152,7 +152,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
@ -327,7 +327,7 @@ where
|
||||||
Renderer: core::Renderer,
|
Renderer: core::Renderer,
|
||||||
{
|
{
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&mut self,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
bounds: Size,
|
bounds: Size,
|
||||||
position: Point,
|
position: Point,
|
||||||
|
|
|
||||||
|
|
@ -254,7 +254,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
@ -567,7 +567,7 @@ where
|
||||||
S: 'static + Default,
|
S: 'static + Default,
|
||||||
{
|
{
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&mut self,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
bounds: Size,
|
bounds: Size,
|
||||||
position: Point,
|
position: Point,
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ impl<'a, Message, Renderer> Content<'a, Message, Renderer>
|
||||||
where
|
where
|
||||||
Renderer: core::Renderer,
|
Renderer: core::Renderer,
|
||||||
{
|
{
|
||||||
fn layout(&mut self, tree: &Tree, renderer: &Renderer) {
|
fn layout(&mut self, tree: &mut Tree, renderer: &Renderer) {
|
||||||
if self.layout.is_none() {
|
if self.layout.is_none() {
|
||||||
self.layout = Some(self.element.as_widget().layout(
|
self.layout = Some(self.element.as_widget().layout(
|
||||||
tree,
|
tree,
|
||||||
|
|
@ -144,7 +144,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
_tree: &Tree,
|
_tree: &mut Tree,
|
||||||
_renderer: &Renderer,
|
_renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
@ -363,7 +363,7 @@ where
|
||||||
Renderer: core::Renderer,
|
Renderer: core::Renderer,
|
||||||
{
|
{
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&mut self,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
bounds: Size,
|
bounds: Size,
|
||||||
position: Point,
|
position: Point,
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
|
|
@ -232,7 +232,7 @@ where
|
||||||
Renderer::Theme: StyleSheet + container::StyleSheet,
|
Renderer::Theme: StyleSheet + container::StyleSheet,
|
||||||
{
|
{
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&mut self,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
bounds: Size,
|
bounds: Size,
|
||||||
position: Point,
|
position: Point,
|
||||||
|
|
@ -352,7 +352,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
_tree: &Tree,
|
_tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
|
|
@ -275,7 +275,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
@ -475,7 +475,7 @@ where
|
||||||
|
|
||||||
/// Calculates the [`Layout`] of a [`PaneGrid`].
|
/// Calculates the [`Layout`] of a [`PaneGrid`].
|
||||||
pub fn layout<Renderer, T>(
|
pub fn layout<Renderer, T>(
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
node: &Node,
|
node: &Node,
|
||||||
|
|
@ -483,14 +483,19 @@ pub fn layout<Renderer, T>(
|
||||||
height: Length,
|
height: Length,
|
||||||
spacing: f32,
|
spacing: f32,
|
||||||
contents: impl Iterator<Item = (Pane, T)>,
|
contents: impl Iterator<Item = (Pane, T)>,
|
||||||
layout_content: impl Fn(T, &Tree, &Renderer, &layout::Limits) -> layout::Node,
|
layout_content: impl Fn(
|
||||||
|
T,
|
||||||
|
&mut Tree,
|
||||||
|
&Renderer,
|
||||||
|
&layout::Limits,
|
||||||
|
) -> layout::Node,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
let limits = limits.width(width).height(height);
|
let limits = limits.width(width).height(height);
|
||||||
let size = limits.resolve(Size::ZERO);
|
let size = limits.resolve(Size::ZERO);
|
||||||
|
|
||||||
let regions = node.pane_regions(spacing, size);
|
let regions = node.pane_regions(spacing, size);
|
||||||
let children = contents
|
let children = contents
|
||||||
.zip(tree.children.iter())
|
.zip(tree.children.iter_mut())
|
||||||
.filter_map(|((pane, content), tree)| {
|
.filter_map(|((pane, content), tree)| {
|
||||||
let region = regions.get(&pane)?;
|
let region = regions.get(&pane)?;
|
||||||
let size = Size::new(region.width, region.height);
|
let size = Size::new(region.width, region.height);
|
||||||
|
|
|
||||||
|
|
@ -150,7 +150,7 @@ where
|
||||||
|
|
||||||
pub(crate) fn layout(
|
pub(crate) fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
@ -158,7 +158,7 @@ where
|
||||||
let max_size = limits.max();
|
let max_size = limits.max();
|
||||||
|
|
||||||
let title_bar_layout = title_bar.layout(
|
let title_bar_layout = title_bar.layout(
|
||||||
&tree.children[1],
|
&mut tree.children[1],
|
||||||
renderer,
|
renderer,
|
||||||
&layout::Limits::new(Size::ZERO, max_size),
|
&layout::Limits::new(Size::ZERO, max_size),
|
||||||
);
|
);
|
||||||
|
|
@ -166,7 +166,7 @@ where
|
||||||
let title_bar_size = title_bar_layout.size();
|
let title_bar_size = title_bar_layout.size();
|
||||||
|
|
||||||
let mut body_layout = self.body.as_widget().layout(
|
let mut body_layout = self.body.as_widget().layout(
|
||||||
&tree.children[0],
|
&mut tree.children[0],
|
||||||
renderer,
|
renderer,
|
||||||
&layout::Limits::new(
|
&layout::Limits::new(
|
||||||
Size::ZERO,
|
Size::ZERO,
|
||||||
|
|
@ -184,9 +184,11 @@ where
|
||||||
vec![title_bar_layout, body_layout],
|
vec![title_bar_layout, body_layout],
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
self.body
|
self.body.as_widget().layout(
|
||||||
.as_widget()
|
&mut tree.children[0],
|
||||||
.layout(&tree.children[0], renderer, limits)
|
renderer,
|
||||||
|
limits,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -213,7 +213,7 @@ where
|
||||||
|
|
||||||
pub(crate) fn layout(
|
pub(crate) fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
@ -221,7 +221,7 @@ where
|
||||||
let max_size = limits.max();
|
let max_size = limits.max();
|
||||||
|
|
||||||
let title_layout = self.content.as_widget().layout(
|
let title_layout = self.content.as_widget().layout(
|
||||||
&tree.children[0],
|
&mut tree.children[0],
|
||||||
renderer,
|
renderer,
|
||||||
&layout::Limits::new(Size::ZERO, max_size),
|
&layout::Limits::new(Size::ZERO, max_size),
|
||||||
);
|
);
|
||||||
|
|
@ -230,7 +230,7 @@ where
|
||||||
|
|
||||||
let mut node = if let Some(controls) = &self.controls {
|
let mut node = if let Some(controls) = &self.controls {
|
||||||
let mut controls_layout = controls.as_widget().layout(
|
let mut controls_layout = controls.as_widget().layout(
|
||||||
&tree.children[1],
|
&mut tree.children[1],
|
||||||
renderer,
|
renderer,
|
||||||
&layout::Limits::new(Size::ZERO, max_size),
|
&layout::Limits::new(Size::ZERO, max_size),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@ use crate::overlay::menu::{self, Menu};
|
||||||
use crate::scrollable;
|
use crate::scrollable;
|
||||||
|
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::cell::RefCell;
|
|
||||||
|
|
||||||
pub use crate::style::pick_list::{Appearance, StyleSheet};
|
pub use crate::style::pick_list::{Appearance, StyleSheet};
|
||||||
|
|
||||||
|
|
@ -175,12 +174,12 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
layout(
|
layout(
|
||||||
tree.state.downcast_ref::<State<Renderer::Paragraph>>(),
|
tree.state.downcast_mut::<State<Renderer::Paragraph>>(),
|
||||||
renderer,
|
renderer,
|
||||||
limits,
|
limits,
|
||||||
self.width,
|
self.width,
|
||||||
|
|
@ -305,8 +304,8 @@ pub struct State<P: text::Paragraph> {
|
||||||
keyboard_modifiers: keyboard::Modifiers,
|
keyboard_modifiers: keyboard::Modifiers,
|
||||||
is_open: bool,
|
is_open: bool,
|
||||||
hovered_option: Option<usize>,
|
hovered_option: Option<usize>,
|
||||||
option_paragraphs: RefCell<Vec<P>>,
|
options: Vec<P>,
|
||||||
placeholder_paragraph: RefCell<P>,
|
placeholder: P,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<P: text::Paragraph> State<P> {
|
impl<P: text::Paragraph> State<P> {
|
||||||
|
|
@ -317,8 +316,8 @@ impl<P: text::Paragraph> State<P> {
|
||||||
keyboard_modifiers: keyboard::Modifiers::default(),
|
keyboard_modifiers: keyboard::Modifiers::default(),
|
||||||
is_open: bool::default(),
|
is_open: bool::default(),
|
||||||
hovered_option: Option::default(),
|
hovered_option: Option::default(),
|
||||||
option_paragraphs: RefCell::new(Vec::new()),
|
options: Vec::new(),
|
||||||
placeholder_paragraph: RefCell::new(Default::default()),
|
placeholder: P::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -375,7 +374,7 @@ pub struct Icon<Font> {
|
||||||
|
|
||||||
/// Computes the layout of a [`PickList`].
|
/// Computes the layout of a [`PickList`].
|
||||||
pub fn layout<Renderer, T>(
|
pub fn layout<Renderer, T>(
|
||||||
state: &State<Renderer::Paragraph>,
|
state: &mut State<Renderer::Paragraph>,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
width: Length,
|
width: Length,
|
||||||
|
|
@ -397,9 +396,7 @@ where
|
||||||
let font = font.unwrap_or_else(|| renderer.default_font());
|
let font = font.unwrap_or_else(|| renderer.default_font());
|
||||||
let text_size = text_size.unwrap_or_else(|| renderer.default_size());
|
let text_size = text_size.unwrap_or_else(|| renderer.default_size());
|
||||||
|
|
||||||
let mut paragraphs = state.option_paragraphs.borrow_mut();
|
state.options.resize_with(options.len(), Default::default);
|
||||||
|
|
||||||
paragraphs.resize_with(options.len(), Default::default);
|
|
||||||
|
|
||||||
let option_text = Text {
|
let option_text = Text {
|
||||||
content: "",
|
content: "",
|
||||||
|
|
@ -415,7 +412,7 @@ where
|
||||||
shaping: text_shaping,
|
shaping: text_shaping,
|
||||||
};
|
};
|
||||||
|
|
||||||
for (option, paragraph) in options.iter().zip(paragraphs.iter_mut()) {
|
for (option, paragraph) in options.iter().zip(state.options.iter_mut()) {
|
||||||
let label = option.to_string();
|
let label = option.to_string();
|
||||||
|
|
||||||
renderer.update_paragraph(
|
renderer.update_paragraph(
|
||||||
|
|
@ -428,9 +425,8 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(placeholder) = placeholder {
|
if let Some(placeholder) = placeholder {
|
||||||
let mut paragraph = state.placeholder_paragraph.borrow_mut();
|
|
||||||
renderer.update_paragraph(
|
renderer.update_paragraph(
|
||||||
&mut paragraph,
|
&mut state.placeholder,
|
||||||
Text {
|
Text {
|
||||||
content: placeholder,
|
content: placeholder,
|
||||||
..option_text
|
..option_text
|
||||||
|
|
@ -441,13 +437,13 @@ where
|
||||||
let max_width = match width {
|
let max_width = match width {
|
||||||
Length::Shrink => {
|
Length::Shrink => {
|
||||||
let labels_width =
|
let labels_width =
|
||||||
paragraphs.iter().fold(0.0, |width, paragraph| {
|
state.options.iter().fold(0.0, |width, paragraph| {
|
||||||
f32::max(width, paragraph.min_width())
|
f32::max(width, paragraph.min_width())
|
||||||
});
|
});
|
||||||
|
|
||||||
labels_width.max(
|
labels_width.max(
|
||||||
placeholder
|
placeholder
|
||||||
.map(|_| state.placeholder_paragraph.borrow().min_width())
|
.map(|_| state.placeholder.min_width())
|
||||||
.unwrap_or(0.0),
|
.unwrap_or(0.0),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
_tree: &Tree,
|
_tree: &mut Tree,
|
||||||
_renderer: &Renderer,
|
_renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ impl<'a, Message, Theme> Widget<Message, Renderer<Theme>> for QRCode<'a> {
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
_tree: &Tree,
|
_tree: &mut Tree,
|
||||||
_renderer: &Renderer<Theme>,
|
_renderer: &Renderer<Theme>,
|
||||||
_limits: &layout::Limits,
|
_limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
|
|
@ -211,7 +211,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
@ -222,7 +222,7 @@ where
|
||||||
|limits| {
|
|limits| {
|
||||||
let state = tree
|
let state = tree
|
||||||
.state
|
.state
|
||||||
.downcast_ref::<widget::text::State<Renderer::Paragraph>>();
|
.downcast_mut::<widget::text::State<Renderer::Paragraph>>();
|
||||||
|
|
||||||
widget::text::layout(
|
widget::text::layout(
|
||||||
state,
|
state,
|
||||||
|
|
|
||||||
|
|
@ -114,7 +114,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
@ -128,7 +128,7 @@ where
|
||||||
self.spacing,
|
self.spacing,
|
||||||
self.align_items,
|
self.align_items,
|
||||||
&self.children,
|
&self.children,
|
||||||
&tree.children,
|
&mut tree.children,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
_tree: &Tree,
|
_tree: &mut Tree,
|
||||||
_renderer: &Renderer,
|
_renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
|
|
@ -230,7 +230,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
@ -242,7 +242,7 @@ where
|
||||||
&self.direction,
|
&self.direction,
|
||||||
|renderer, limits| {
|
|renderer, limits| {
|
||||||
self.content.as_widget().layout(
|
self.content.as_widget().layout(
|
||||||
&tree.children[0],
|
&mut tree.children[0],
|
||||||
renderer,
|
renderer,
|
||||||
limits,
|
limits,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -169,7 +169,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
_tree: &Tree,
|
_tree: &mut Tree,
|
||||||
_renderer: &Renderer,
|
_renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
_tree: &Tree,
|
_tree: &mut Tree,
|
||||||
_renderer: &Renderer,
|
_renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
_tree: &Tree,
|
_tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@ use crate::core::{
|
||||||
};
|
};
|
||||||
use crate::runtime::Command;
|
use crate::runtime::Command;
|
||||||
|
|
||||||
use std::cell::RefCell;
|
|
||||||
|
|
||||||
pub use iced_style::text_input::{Appearance, StyleSheet};
|
pub use iced_style::text_input::{Appearance, StyleSheet};
|
||||||
|
|
||||||
/// A field that can be filled with text.
|
/// A field that can be filled with text.
|
||||||
|
|
@ -267,7 +265,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
@ -280,7 +278,7 @@ where
|
||||||
self.font,
|
self.font,
|
||||||
self.line_height,
|
self.line_height,
|
||||||
self.icon.as_ref(),
|
self.icon.as_ref(),
|
||||||
tree.state.downcast_ref::<State<Renderer::Paragraph>>(),
|
tree.state.downcast_mut::<State<Renderer::Paragraph>>(),
|
||||||
&self.value,
|
&self.value,
|
||||||
&self.placeholder,
|
&self.placeholder,
|
||||||
self.is_secure,
|
self.is_secure,
|
||||||
|
|
@ -469,7 +467,7 @@ pub fn layout<Renderer>(
|
||||||
font: Option<Renderer::Font>,
|
font: Option<Renderer::Font>,
|
||||||
line_height: text::LineHeight,
|
line_height: text::LineHeight,
|
||||||
icon: Option<&Icon<Renderer::Font>>,
|
icon: Option<&Icon<Renderer::Font>>,
|
||||||
state: &State<Renderer::Paragraph>,
|
state: &mut State<Renderer::Paragraph>,
|
||||||
value: &Value,
|
value: &Value,
|
||||||
placeholder: &str,
|
placeholder: &str,
|
||||||
is_secure: bool,
|
is_secure: bool,
|
||||||
|
|
@ -499,14 +497,12 @@ where
|
||||||
shaping: text::Shaping::Advanced,
|
shaping: text::Shaping::Advanced,
|
||||||
};
|
};
|
||||||
|
|
||||||
renderer.update_paragraph(
|
renderer
|
||||||
&mut state.placeholder_paragraph.borrow_mut(),
|
.update_paragraph(&mut state.placeholder_paragraph, placeholder_text);
|
||||||
placeholder_text,
|
|
||||||
);
|
|
||||||
|
|
||||||
if is_secure {
|
if is_secure {
|
||||||
renderer.update_paragraph(
|
renderer.update_paragraph(
|
||||||
&mut state.paragraph.borrow_mut(),
|
&mut state.paragraph,
|
||||||
Text {
|
Text {
|
||||||
content: &value.secure().to_string(),
|
content: &value.secure().to_string(),
|
||||||
..placeholder_text
|
..placeholder_text
|
||||||
|
|
@ -514,7 +510,7 @@ where
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
renderer.update_paragraph(
|
renderer.update_paragraph(
|
||||||
&mut state.paragraph.borrow_mut(),
|
&mut state.paragraph,
|
||||||
Text {
|
Text {
|
||||||
content: &value.to_string(),
|
content: &value.to_string(),
|
||||||
..placeholder_text
|
..placeholder_text
|
||||||
|
|
@ -1072,7 +1068,6 @@ pub fn draw<Renderer>(
|
||||||
}
|
}
|
||||||
|
|
||||||
let text = value.to_string();
|
let text = value.to_string();
|
||||||
let paragraph = &state.paragraph.borrow() as &Renderer::Paragraph;
|
|
||||||
|
|
||||||
let (cursor, offset) = if let Some(focus) = state
|
let (cursor, offset) = if let Some(focus) = state
|
||||||
.is_focused
|
.is_focused
|
||||||
|
|
@ -1083,7 +1078,7 @@ pub fn draw<Renderer>(
|
||||||
cursor::State::Index(position) => {
|
cursor::State::Index(position) => {
|
||||||
let (text_value_width, offset) =
|
let (text_value_width, offset) =
|
||||||
measure_cursor_and_scroll_offset(
|
measure_cursor_and_scroll_offset(
|
||||||
paragraph,
|
&state.paragraph,
|
||||||
text_bounds,
|
text_bounds,
|
||||||
position,
|
position,
|
||||||
);
|
);
|
||||||
|
|
@ -1121,14 +1116,14 @@ pub fn draw<Renderer>(
|
||||||
|
|
||||||
let (left_position, left_offset) =
|
let (left_position, left_offset) =
|
||||||
measure_cursor_and_scroll_offset(
|
measure_cursor_and_scroll_offset(
|
||||||
paragraph,
|
&state.paragraph,
|
||||||
text_bounds,
|
text_bounds,
|
||||||
left,
|
left,
|
||||||
);
|
);
|
||||||
|
|
||||||
let (right_position, right_offset) =
|
let (right_position, right_offset) =
|
||||||
measure_cursor_and_scroll_offset(
|
measure_cursor_and_scroll_offset(
|
||||||
paragraph,
|
&state.paragraph,
|
||||||
text_bounds,
|
text_bounds,
|
||||||
right,
|
right,
|
||||||
);
|
);
|
||||||
|
|
@ -1162,7 +1157,7 @@ pub fn draw<Renderer>(
|
||||||
(None, 0.0)
|
(None, 0.0)
|
||||||
};
|
};
|
||||||
|
|
||||||
let text_width = paragraph.min_width();
|
let text_width = state.paragraph.min_width();
|
||||||
|
|
||||||
let render = |renderer: &mut Renderer| {
|
let render = |renderer: &mut Renderer| {
|
||||||
if let Some((cursor, color)) = cursor {
|
if let Some((cursor, color)) = cursor {
|
||||||
|
|
@ -1171,13 +1166,11 @@ pub fn draw<Renderer>(
|
||||||
renderer.with_translation(Vector::ZERO, |_| {});
|
renderer.with_translation(Vector::ZERO, |_| {});
|
||||||
}
|
}
|
||||||
|
|
||||||
let placeholder_paragraph = state.placeholder_paragraph.borrow();
|
|
||||||
|
|
||||||
renderer.fill_paragraph(
|
renderer.fill_paragraph(
|
||||||
if text.is_empty() {
|
if text.is_empty() {
|
||||||
&placeholder_paragraph
|
&state.placeholder_paragraph
|
||||||
} else {
|
} else {
|
||||||
paragraph
|
&state.paragraph
|
||||||
},
|
},
|
||||||
Point::new(text_bounds.x, text_bounds.center_y()),
|
Point::new(text_bounds.x, text_bounds.center_y()),
|
||||||
if text.is_empty() {
|
if text.is_empty() {
|
||||||
|
|
@ -1219,8 +1212,8 @@ pub fn mouse_interaction(
|
||||||
/// The state of a [`TextInput`].
|
/// The state of a [`TextInput`].
|
||||||
#[derive(Debug, Default, Clone)]
|
#[derive(Debug, Default, Clone)]
|
||||||
pub struct State<P: text::Paragraph> {
|
pub struct State<P: text::Paragraph> {
|
||||||
paragraph: RefCell<P>,
|
paragraph: P,
|
||||||
placeholder_paragraph: RefCell<P>,
|
placeholder_paragraph: P,
|
||||||
is_focused: Option<Focus>,
|
is_focused: Option<Focus>,
|
||||||
is_dragging: bool,
|
is_dragging: bool,
|
||||||
is_pasting: Option<Value>,
|
is_pasting: Option<Value>,
|
||||||
|
|
@ -1246,8 +1239,8 @@ impl<P: text::Paragraph> State<P> {
|
||||||
/// Creates a new [`State`], representing a focused [`TextInput`].
|
/// Creates a new [`State`], representing a focused [`TextInput`].
|
||||||
pub fn focused() -> Self {
|
pub fn focused() -> Self {
|
||||||
Self {
|
Self {
|
||||||
paragraph: RefCell::new(P::default()),
|
paragraph: P::default(),
|
||||||
placeholder_paragraph: RefCell::new(P::default()),
|
placeholder_paragraph: P::default(),
|
||||||
is_focused: None,
|
is_focused: None,
|
||||||
is_dragging: false,
|
is_dragging: false,
|
||||||
is_pasting: None,
|
is_pasting: None,
|
||||||
|
|
@ -1364,7 +1357,7 @@ fn offset<P: text::Paragraph>(
|
||||||
};
|
};
|
||||||
|
|
||||||
let (_, offset) = measure_cursor_and_scroll_offset(
|
let (_, offset) = measure_cursor_and_scroll_offset(
|
||||||
&state.paragraph.borrow() as &P,
|
&state.paragraph,
|
||||||
text_bounds,
|
text_bounds,
|
||||||
focus_position,
|
focus_position,
|
||||||
);
|
);
|
||||||
|
|
@ -1402,7 +1395,6 @@ fn find_cursor_position<P: text::Paragraph>(
|
||||||
|
|
||||||
let char_offset = state
|
let char_offset = state
|
||||||
.paragraph
|
.paragraph
|
||||||
.borrow()
|
|
||||||
.hit_test(Point::new(x + offset, text_bounds.height / 2.0))
|
.hit_test(Point::new(x + offset, text_bounds.height / 2.0))
|
||||||
.map(text::Hit::cursor)?;
|
.map(text::Hit::cursor)?;
|
||||||
|
|
||||||
|
|
@ -1432,7 +1424,7 @@ fn replace_paragraph<Renderer>(
|
||||||
let mut children_layout = layout.children();
|
let mut children_layout = layout.children();
|
||||||
let text_bounds = children_layout.next().unwrap().bounds();
|
let text_bounds = children_layout.next().unwrap().bounds();
|
||||||
|
|
||||||
*state.paragraph.get_mut() = renderer.create_paragraph(Text {
|
state.paragraph = renderer.create_paragraph(Text {
|
||||||
font,
|
font,
|
||||||
line_height,
|
line_height,
|
||||||
content: &value.to_string(),
|
content: &value.to_string(),
|
||||||
|
|
|
||||||
|
|
@ -178,7 +178,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &mut Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
@ -192,7 +192,7 @@ where
|
||||||
if let Some(label) = self.label.as_deref() {
|
if let Some(label) = self.label.as_deref() {
|
||||||
let state = tree
|
let state = tree
|
||||||
.state
|
.state
|
||||||
.downcast_ref::<widget::text::State<Renderer::Paragraph>>();
|
.downcast_mut::<widget::text::State<Renderer::Paragraph>>();
|
||||||
|
|
||||||
widget::text::layout(
|
widget::text::layout(
|
||||||
state,
|
state,
|
||||||
|
|
|
||||||
|
|
@ -135,7 +135,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
tree: &widget::Tree,
|
tree: &mut widget::Tree,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
@ -302,7 +302,7 @@ where
|
||||||
Renderer::Theme: container::StyleSheet + widget::text::StyleSheet,
|
Renderer::Theme: container::StyleSheet + widget::text::StyleSheet,
|
||||||
{
|
{
|
||||||
tooltip: &'b Text<'a, Renderer>,
|
tooltip: &'b Text<'a, Renderer>,
|
||||||
state: &'b widget::Tree,
|
state: &'b mut widget::Tree,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
content_bounds: Rectangle,
|
content_bounds: Rectangle,
|
||||||
snap_within_viewport: bool,
|
snap_within_viewport: bool,
|
||||||
|
|
@ -319,7 +319,7 @@ where
|
||||||
Renderer::Theme: container::StyleSheet + widget::text::StyleSheet,
|
Renderer::Theme: container::StyleSheet + widget::text::StyleSheet,
|
||||||
{
|
{
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&mut self,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
bounds: Size,
|
bounds: Size,
|
||||||
position: Point,
|
position: Point,
|
||||||
|
|
|
||||||
|
|
@ -166,7 +166,7 @@ where
|
||||||
|
|
||||||
fn layout(
|
fn layout(
|
||||||
&self,
|
&self,
|
||||||
_tree: &Tree,
|
_tree: &mut Tree,
|
||||||
_renderer: &Renderer,
|
_renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue