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(
|
||||
&self,
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
@ -492,7 +492,7 @@ where
|
|||
|
||||
fn layout(
|
||||
&self,
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ pub fn resolve<Message, Renderer>(
|
|||
spacing: f32,
|
||||
align_items: Alignment,
|
||||
items: &[Element<'_, Message, Renderer>],
|
||||
trees: &[widget::Tree],
|
||||
trees: &mut [widget::Tree],
|
||||
) -> Node
|
||||
where
|
||||
Renderer: crate::Renderer,
|
||||
|
|
@ -83,7 +83,7 @@ where
|
|||
let mut nodes: Vec<Node> = Vec::with_capacity(items.len());
|
||||
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 {
|
||||
Axis::Horizontal => child.as_widget().width(),
|
||||
Axis::Vertical => child.as_widget().height(),
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ where
|
|||
///
|
||||
/// [`Node`]: layout::Node
|
||||
fn layout(
|
||||
&self,
|
||||
&mut self,
|
||||
renderer: &Renderer,
|
||||
bounds: Size,
|
||||
position: Point,
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ where
|
|||
|
||||
/// Computes the layout of the [`Element`] in the given bounds.
|
||||
pub fn layout(
|
||||
&self,
|
||||
&mut self,
|
||||
renderer: &Renderer,
|
||||
bounds: Size,
|
||||
translation: Vector,
|
||||
|
|
@ -150,7 +150,7 @@ where
|
|||
Renderer: crate::Renderer,
|
||||
{
|
||||
fn layout(
|
||||
&self,
|
||||
&mut self,
|
||||
renderer: &Renderer,
|
||||
bounds: Size,
|
||||
position: Point,
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ where
|
|||
Renderer: crate::Renderer,
|
||||
{
|
||||
fn layout(
|
||||
&self,
|
||||
&mut self,
|
||||
renderer: &Renderer,
|
||||
bounds: Size,
|
||||
position: Point,
|
||||
|
|
@ -71,7 +71,7 @@ where
|
|||
layout::Node::with_children(
|
||||
bounds,
|
||||
self.children
|
||||
.iter()
|
||||
.iter_mut()
|
||||
.map(|child| child.layout(renderer, bounds, translation))
|
||||
.collect(),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ where
|
|||
/// user interface.
|
||||
fn layout(
|
||||
&self,
|
||||
tree: &Tree,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node;
|
||||
|
|
|
|||
|
|
@ -3,12 +3,11 @@ use crate::alignment;
|
|||
use crate::layout;
|
||||
use crate::mouse;
|
||||
use crate::renderer;
|
||||
use crate::text::{self, Paragraph as _};
|
||||
use crate::text::{self, Paragraph};
|
||||
use crate::widget::tree::{self, Tree};
|
||||
use crate::{Color, Element, Layout, Length, Pixels, Point, Rectangle, Widget};
|
||||
|
||||
use std::borrow::Cow;
|
||||
use std::cell::RefCell;
|
||||
|
||||
pub use text::{LineHeight, Shaping};
|
||||
|
||||
|
|
@ -120,7 +119,7 @@ where
|
|||
|
||||
/// The internal state of a [`Text`] widget.
|
||||
#[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>
|
||||
where
|
||||
|
|
@ -132,7 +131,7 @@ where
|
|||
}
|
||||
|
||||
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 {
|
||||
|
|
@ -145,12 +144,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,
|
||||
|
|
@ -189,7 +188,7 @@ where
|
|||
|
||||
/// Produces the [`layout::Node`] of a [`Text`] widget.
|
||||
pub fn layout<Renderer>(
|
||||
state: &State<Renderer::Paragraph>,
|
||||
state: &mut State<Renderer::Paragraph>,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
width: Length,
|
||||
|
|
@ -211,10 +210,10 @@ where
|
|||
let size = size.unwrap_or_else(|| renderer.default_size());
|
||||
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(
|
||||
&mut paragraph,
|
||||
paragraph,
|
||||
text::Text {
|
||||
content,
|
||||
bounds,
|
||||
|
|
@ -251,7 +250,7 @@ pub fn draw<Renderer>(
|
|||
) where
|
||||
Renderer: text::Renderer,
|
||||
{
|
||||
let paragraph = state.0.borrow();
|
||||
let State(ref paragraph) = state;
|
||||
let bounds = layout.bounds();
|
||||
|
||||
let x = match paragraph.horizontal_alignment() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue