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
|
|
@ -159,14 +159,16 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
layout(limits, self.width, self.height, self.padding, |limits| {
|
||||
self.content
|
||||
.as_widget()
|
||||
.layout(&tree.children[0], renderer, limits)
|
||||
self.content.as_widget().layout(
|
||||
&mut tree.children[0],
|
||||
renderer,
|
||||
limits,
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
_tree: &Tree,
|
||||
_tree: &mut Tree,
|
||||
_renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
|
|||
|
|
@ -184,7 +184,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
@ -195,7 +195,7 @@ where
|
|||
|limits| {
|
||||
let state = tree
|
||||
.state
|
||||
.downcast_ref::<widget::text::State<Renderer::Paragraph>>();
|
||||
.downcast_mut::<widget::text::State<Renderer::Paragraph>>();
|
||||
|
||||
widget::text::layout(
|
||||
state,
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
@ -139,7 +139,7 @@ where
|
|||
self.spacing,
|
||||
self.align_items,
|
||||
&self.children,
|
||||
&tree.children,
|
||||
&mut tree.children,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -305,7 +305,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
tree: &widget::Tree,
|
||||
tree: &mut widget::Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
|
|||
|
|
@ -167,7 +167,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
_tree: &Tree,
|
||||
_tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
_tree: &Tree,
|
||||
_tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
|
|||
|
|
@ -152,7 +152,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
@ -327,7 +327,7 @@ where
|
|||
Renderer: core::Renderer,
|
||||
{
|
||||
fn layout(
|
||||
&self,
|
||||
&mut self,
|
||||
renderer: &Renderer,
|
||||
bounds: Size,
|
||||
position: Point,
|
||||
|
|
|
|||
|
|
@ -254,7 +254,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
@ -567,7 +567,7 @@ where
|
|||
S: 'static + Default,
|
||||
{
|
||||
fn layout(
|
||||
&self,
|
||||
&mut self,
|
||||
renderer: &Renderer,
|
||||
bounds: Size,
|
||||
position: Point,
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ impl<'a, Message, Renderer> Content<'a, Message, Renderer>
|
|||
where
|
||||
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() {
|
||||
self.layout = Some(self.element.as_widget().layout(
|
||||
tree,
|
||||
|
|
@ -144,7 +144,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
_tree: &Tree,
|
||||
_tree: &mut Tree,
|
||||
_renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
@ -363,7 +363,7 @@ where
|
|||
Renderer: core::Renderer,
|
||||
{
|
||||
fn layout(
|
||||
&self,
|
||||
&mut self,
|
||||
renderer: &Renderer,
|
||||
bounds: Size,
|
||||
position: Point,
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
|
|||
|
|
@ -232,7 +232,7 @@ where
|
|||
Renderer::Theme: StyleSheet + container::StyleSheet,
|
||||
{
|
||||
fn layout(
|
||||
&self,
|
||||
&mut self,
|
||||
renderer: &Renderer,
|
||||
bounds: Size,
|
||||
position: Point,
|
||||
|
|
@ -352,7 +352,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
_tree: &Tree,
|
||||
_tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
|
|||
|
|
@ -275,7 +275,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
@ -475,7 +475,7 @@ where
|
|||
|
||||
/// Calculates the [`Layout`] of a [`PaneGrid`].
|
||||
pub fn layout<Renderer, T>(
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
node: &Node,
|
||||
|
|
@ -483,14 +483,19 @@ pub fn layout<Renderer, T>(
|
|||
height: Length,
|
||||
spacing: f32,
|
||||
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 {
|
||||
let limits = limits.width(width).height(height);
|
||||
let size = limits.resolve(Size::ZERO);
|
||||
|
||||
let regions = node.pane_regions(spacing, size);
|
||||
let children = contents
|
||||
.zip(tree.children.iter())
|
||||
.zip(tree.children.iter_mut())
|
||||
.filter_map(|((pane, content), tree)| {
|
||||
let region = regions.get(&pane)?;
|
||||
let size = Size::new(region.width, region.height);
|
||||
|
|
|
|||
|
|
@ -150,7 +150,7 @@ where
|
|||
|
||||
pub(crate) fn layout(
|
||||
&self,
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
@ -158,7 +158,7 @@ where
|
|||
let max_size = limits.max();
|
||||
|
||||
let title_bar_layout = title_bar.layout(
|
||||
&tree.children[1],
|
||||
&mut tree.children[1],
|
||||
renderer,
|
||||
&layout::Limits::new(Size::ZERO, max_size),
|
||||
);
|
||||
|
|
@ -166,7 +166,7 @@ where
|
|||
let title_bar_size = title_bar_layout.size();
|
||||
|
||||
let mut body_layout = self.body.as_widget().layout(
|
||||
&tree.children[0],
|
||||
&mut tree.children[0],
|
||||
renderer,
|
||||
&layout::Limits::new(
|
||||
Size::ZERO,
|
||||
|
|
@ -184,9 +184,11 @@ where
|
|||
vec![title_bar_layout, body_layout],
|
||||
)
|
||||
} else {
|
||||
self.body
|
||||
.as_widget()
|
||||
.layout(&tree.children[0], renderer, limits)
|
||||
self.body.as_widget().layout(
|
||||
&mut tree.children[0],
|
||||
renderer,
|
||||
limits,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -213,7 +213,7 @@ where
|
|||
|
||||
pub(crate) fn layout(
|
||||
&self,
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
@ -221,7 +221,7 @@ where
|
|||
let max_size = limits.max();
|
||||
|
||||
let title_layout = self.content.as_widget().layout(
|
||||
&tree.children[0],
|
||||
&mut tree.children[0],
|
||||
renderer,
|
||||
&layout::Limits::new(Size::ZERO, max_size),
|
||||
);
|
||||
|
|
@ -230,7 +230,7 @@ where
|
|||
|
||||
let mut node = if let Some(controls) = &self.controls {
|
||||
let mut controls_layout = controls.as_widget().layout(
|
||||
&tree.children[1],
|
||||
&mut tree.children[1],
|
||||
renderer,
|
||||
&layout::Limits::new(Size::ZERO, max_size),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ use crate::overlay::menu::{self, Menu};
|
|||
use crate::scrollable;
|
||||
|
||||
use std::borrow::Cow;
|
||||
use std::cell::RefCell;
|
||||
|
||||
pub use crate::style::pick_list::{Appearance, StyleSheet};
|
||||
|
||||
|
|
@ -175,12 +174,12 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
layout(
|
||||
tree.state.downcast_ref::<State<Renderer::Paragraph>>(),
|
||||
tree.state.downcast_mut::<State<Renderer::Paragraph>>(),
|
||||
renderer,
|
||||
limits,
|
||||
self.width,
|
||||
|
|
@ -305,8 +304,8 @@ pub struct State<P: text::Paragraph> {
|
|||
keyboard_modifiers: keyboard::Modifiers,
|
||||
is_open: bool,
|
||||
hovered_option: Option<usize>,
|
||||
option_paragraphs: RefCell<Vec<P>>,
|
||||
placeholder_paragraph: RefCell<P>,
|
||||
options: Vec<P>,
|
||||
placeholder: P,
|
||||
}
|
||||
|
||||
impl<P: text::Paragraph> State<P> {
|
||||
|
|
@ -317,8 +316,8 @@ impl<P: text::Paragraph> State<P> {
|
|||
keyboard_modifiers: keyboard::Modifiers::default(),
|
||||
is_open: bool::default(),
|
||||
hovered_option: Option::default(),
|
||||
option_paragraphs: RefCell::new(Vec::new()),
|
||||
placeholder_paragraph: RefCell::new(Default::default()),
|
||||
options: Vec::new(),
|
||||
placeholder: P::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -375,7 +374,7 @@ pub struct Icon<Font> {
|
|||
|
||||
/// Computes the layout of a [`PickList`].
|
||||
pub fn layout<Renderer, T>(
|
||||
state: &State<Renderer::Paragraph>,
|
||||
state: &mut State<Renderer::Paragraph>,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
width: Length,
|
||||
|
|
@ -397,9 +396,7 @@ where
|
|||
let font = font.unwrap_or_else(|| renderer.default_font());
|
||||
let text_size = text_size.unwrap_or_else(|| renderer.default_size());
|
||||
|
||||
let mut paragraphs = state.option_paragraphs.borrow_mut();
|
||||
|
||||
paragraphs.resize_with(options.len(), Default::default);
|
||||
state.options.resize_with(options.len(), Default::default);
|
||||
|
||||
let option_text = Text {
|
||||
content: "",
|
||||
|
|
@ -415,7 +412,7 @@ where
|
|||
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();
|
||||
|
||||
renderer.update_paragraph(
|
||||
|
|
@ -428,9 +425,8 @@ where
|
|||
}
|
||||
|
||||
if let Some(placeholder) = placeholder {
|
||||
let mut paragraph = state.placeholder_paragraph.borrow_mut();
|
||||
renderer.update_paragraph(
|
||||
&mut paragraph,
|
||||
&mut state.placeholder,
|
||||
Text {
|
||||
content: placeholder,
|
||||
..option_text
|
||||
|
|
@ -441,13 +437,13 @@ where
|
|||
let max_width = match width {
|
||||
Length::Shrink => {
|
||||
let labels_width =
|
||||
paragraphs.iter().fold(0.0, |width, paragraph| {
|
||||
state.options.iter().fold(0.0, |width, paragraph| {
|
||||
f32::max(width, paragraph.min_width())
|
||||
});
|
||||
|
||||
labels_width.max(
|
||||
placeholder
|
||||
.map(|_| state.placeholder_paragraph.borrow().min_width())
|
||||
.map(|_| state.placeholder.min_width())
|
||||
.unwrap_or(0.0),
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
_tree: &Tree,
|
||||
_tree: &mut Tree,
|
||||
_renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ impl<'a, Message, Theme> Widget<Message, Renderer<Theme>> for QRCode<'a> {
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
_tree: &Tree,
|
||||
_tree: &mut Tree,
|
||||
_renderer: &Renderer<Theme>,
|
||||
_limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
|
|||
|
|
@ -211,7 +211,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
@ -222,7 +222,7 @@ where
|
|||
|limits| {
|
||||
let state = tree
|
||||
.state
|
||||
.downcast_ref::<widget::text::State<Renderer::Paragraph>>();
|
||||
.downcast_mut::<widget::text::State<Renderer::Paragraph>>();
|
||||
|
||||
widget::text::layout(
|
||||
state,
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
@ -128,7 +128,7 @@ where
|
|||
self.spacing,
|
||||
self.align_items,
|
||||
&self.children,
|
||||
&tree.children,
|
||||
&mut tree.children,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
_tree: &Tree,
|
||||
_tree: &mut Tree,
|
||||
_renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
|
|||
|
|
@ -230,7 +230,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
@ -242,7 +242,7 @@ where
|
|||
&self.direction,
|
||||
|renderer, limits| {
|
||||
self.content.as_widget().layout(
|
||||
&tree.children[0],
|
||||
&mut tree.children[0],
|
||||
renderer,
|
||||
limits,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -169,7 +169,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
_tree: &Tree,
|
||||
_tree: &mut Tree,
|
||||
_renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
_tree: &Tree,
|
||||
_tree: &mut Tree,
|
||||
_renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
_tree: &Tree,
|
||||
_tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
|
|||
|
|
@ -30,8 +30,6 @@ use crate::core::{
|
|||
};
|
||||
use crate::runtime::Command;
|
||||
|
||||
use std::cell::RefCell;
|
||||
|
||||
pub use iced_style::text_input::{Appearance, StyleSheet};
|
||||
|
||||
/// A field that can be filled with text.
|
||||
|
|
@ -267,7 +265,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
@ -280,7 +278,7 @@ where
|
|||
self.font,
|
||||
self.line_height,
|
||||
self.icon.as_ref(),
|
||||
tree.state.downcast_ref::<State<Renderer::Paragraph>>(),
|
||||
tree.state.downcast_mut::<State<Renderer::Paragraph>>(),
|
||||
&self.value,
|
||||
&self.placeholder,
|
||||
self.is_secure,
|
||||
|
|
@ -469,7 +467,7 @@ pub fn layout<Renderer>(
|
|||
font: Option<Renderer::Font>,
|
||||
line_height: text::LineHeight,
|
||||
icon: Option<&Icon<Renderer::Font>>,
|
||||
state: &State<Renderer::Paragraph>,
|
||||
state: &mut State<Renderer::Paragraph>,
|
||||
value: &Value,
|
||||
placeholder: &str,
|
||||
is_secure: bool,
|
||||
|
|
@ -499,14 +497,12 @@ where
|
|||
shaping: text::Shaping::Advanced,
|
||||
};
|
||||
|
||||
renderer.update_paragraph(
|
||||
&mut state.placeholder_paragraph.borrow_mut(),
|
||||
placeholder_text,
|
||||
);
|
||||
renderer
|
||||
.update_paragraph(&mut state.placeholder_paragraph, placeholder_text);
|
||||
|
||||
if is_secure {
|
||||
renderer.update_paragraph(
|
||||
&mut state.paragraph.borrow_mut(),
|
||||
&mut state.paragraph,
|
||||
Text {
|
||||
content: &value.secure().to_string(),
|
||||
..placeholder_text
|
||||
|
|
@ -514,7 +510,7 @@ where
|
|||
);
|
||||
} else {
|
||||
renderer.update_paragraph(
|
||||
&mut state.paragraph.borrow_mut(),
|
||||
&mut state.paragraph,
|
||||
Text {
|
||||
content: &value.to_string(),
|
||||
..placeholder_text
|
||||
|
|
@ -1072,7 +1068,6 @@ pub fn draw<Renderer>(
|
|||
}
|
||||
|
||||
let text = value.to_string();
|
||||
let paragraph = &state.paragraph.borrow() as &Renderer::Paragraph;
|
||||
|
||||
let (cursor, offset) = if let Some(focus) = state
|
||||
.is_focused
|
||||
|
|
@ -1083,7 +1078,7 @@ pub fn draw<Renderer>(
|
|||
cursor::State::Index(position) => {
|
||||
let (text_value_width, offset) =
|
||||
measure_cursor_and_scroll_offset(
|
||||
paragraph,
|
||||
&state.paragraph,
|
||||
text_bounds,
|
||||
position,
|
||||
);
|
||||
|
|
@ -1121,14 +1116,14 @@ pub fn draw<Renderer>(
|
|||
|
||||
let (left_position, left_offset) =
|
||||
measure_cursor_and_scroll_offset(
|
||||
paragraph,
|
||||
&state.paragraph,
|
||||
text_bounds,
|
||||
left,
|
||||
);
|
||||
|
||||
let (right_position, right_offset) =
|
||||
measure_cursor_and_scroll_offset(
|
||||
paragraph,
|
||||
&state.paragraph,
|
||||
text_bounds,
|
||||
right,
|
||||
);
|
||||
|
|
@ -1162,7 +1157,7 @@ pub fn draw<Renderer>(
|
|||
(None, 0.0)
|
||||
};
|
||||
|
||||
let text_width = paragraph.min_width();
|
||||
let text_width = state.paragraph.min_width();
|
||||
|
||||
let render = |renderer: &mut Renderer| {
|
||||
if let Some((cursor, color)) = cursor {
|
||||
|
|
@ -1171,13 +1166,11 @@ pub fn draw<Renderer>(
|
|||
renderer.with_translation(Vector::ZERO, |_| {});
|
||||
}
|
||||
|
||||
let placeholder_paragraph = state.placeholder_paragraph.borrow();
|
||||
|
||||
renderer.fill_paragraph(
|
||||
if text.is_empty() {
|
||||
&placeholder_paragraph
|
||||
&state.placeholder_paragraph
|
||||
} else {
|
||||
paragraph
|
||||
&state.paragraph
|
||||
},
|
||||
Point::new(text_bounds.x, text_bounds.center_y()),
|
||||
if text.is_empty() {
|
||||
|
|
@ -1219,8 +1212,8 @@ pub fn mouse_interaction(
|
|||
/// The state of a [`TextInput`].
|
||||
#[derive(Debug, Default, Clone)]
|
||||
pub struct State<P: text::Paragraph> {
|
||||
paragraph: RefCell<P>,
|
||||
placeholder_paragraph: RefCell<P>,
|
||||
paragraph: P,
|
||||
placeholder_paragraph: P,
|
||||
is_focused: Option<Focus>,
|
||||
is_dragging: bool,
|
||||
is_pasting: Option<Value>,
|
||||
|
|
@ -1246,8 +1239,8 @@ impl<P: text::Paragraph> State<P> {
|
|||
/// Creates a new [`State`], representing a focused [`TextInput`].
|
||||
pub fn focused() -> Self {
|
||||
Self {
|
||||
paragraph: RefCell::new(P::default()),
|
||||
placeholder_paragraph: RefCell::new(P::default()),
|
||||
paragraph: P::default(),
|
||||
placeholder_paragraph: P::default(),
|
||||
is_focused: None,
|
||||
is_dragging: false,
|
||||
is_pasting: None,
|
||||
|
|
@ -1364,7 +1357,7 @@ fn offset<P: text::Paragraph>(
|
|||
};
|
||||
|
||||
let (_, offset) = measure_cursor_and_scroll_offset(
|
||||
&state.paragraph.borrow() as &P,
|
||||
&state.paragraph,
|
||||
text_bounds,
|
||||
focus_position,
|
||||
);
|
||||
|
|
@ -1402,7 +1395,6 @@ fn find_cursor_position<P: text::Paragraph>(
|
|||
|
||||
let char_offset = state
|
||||
.paragraph
|
||||
.borrow()
|
||||
.hit_test(Point::new(x + offset, text_bounds.height / 2.0))
|
||||
.map(text::Hit::cursor)?;
|
||||
|
||||
|
|
@ -1432,7 +1424,7 @@ fn replace_paragraph<Renderer>(
|
|||
let mut children_layout = layout.children();
|
||||
let text_bounds = children_layout.next().unwrap().bounds();
|
||||
|
||||
*state.paragraph.get_mut() = renderer.create_paragraph(Text {
|
||||
state.paragraph = renderer.create_paragraph(Text {
|
||||
font,
|
||||
line_height,
|
||||
content: &value.to_string(),
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
@ -192,7 +192,7 @@ where
|
|||
if let Some(label) = self.label.as_deref() {
|
||||
let state = tree
|
||||
.state
|
||||
.downcast_ref::<widget::text::State<Renderer::Paragraph>>();
|
||||
.downcast_mut::<widget::text::State<Renderer::Paragraph>>();
|
||||
|
||||
widget::text::layout(
|
||||
state,
|
||||
|
|
|
|||
|
|
@ -135,7 +135,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
tree: &widget::Tree,
|
||||
tree: &mut widget::Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
@ -302,7 +302,7 @@ where
|
|||
Renderer::Theme: container::StyleSheet + widget::text::StyleSheet,
|
||||
{
|
||||
tooltip: &'b Text<'a, Renderer>,
|
||||
state: &'b widget::Tree,
|
||||
state: &'b mut widget::Tree,
|
||||
cursor_position: Point,
|
||||
content_bounds: Rectangle,
|
||||
snap_within_viewport: bool,
|
||||
|
|
@ -319,7 +319,7 @@ where
|
|||
Renderer::Theme: container::StyleSheet + widget::text::StyleSheet,
|
||||
{
|
||||
fn layout(
|
||||
&self,
|
||||
&mut self,
|
||||
renderer: &Renderer,
|
||||
bounds: Size,
|
||||
position: Point,
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
_tree: &Tree,
|
||||
_tree: &mut Tree,
|
||||
_renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue