summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-08-30 06:36:24 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-08-30 06:36:24 +0200
commita026e917d3364e58fd827995261158d8cb356ce9 (patch)
treea057623bc812da0d4771399dcdc2fe07c1d04b40 /core
parent301e6e5fdc40f36f98bd8fef0fa923745533ad27 (diff)
downloadiced-a026e917d3364e58fd827995261158d8cb356ce9.tar.gz
iced-a026e917d3364e58fd827995261158d8cb356ce9.tar.bz2
iced-a026e917d3364e58fd827995261158d8cb356ce9.zip
Make `widget::Tree` mutable in `Widget::layout`
Diffstat (limited to 'core')
-rw-r--r--core/src/element.rs4
-rw-r--r--core/src/layout/flex.rs4
-rw-r--r--core/src/overlay.rs2
-rw-r--r--core/src/overlay/element.rs4
-rw-r--r--core/src/overlay/group.rs4
-rw-r--r--core/src/widget.rs2
-rw-r--r--core/src/widget/text.rs19
7 files changed, 19 insertions, 20 deletions
diff --git a/core/src/element.rs b/core/src/element.rs
index 0d23a9e7..02f16bcb 100644
--- a/core/src/element.rs
+++ b/core/src/element.rs
@@ -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 {
diff --git a/core/src/layout/flex.rs b/core/src/layout/flex.rs
index 86b1a45b..c02b63d8 100644
--- a/core/src/layout/flex.rs
+++ b/core/src/layout/flex.rs
@@ -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(),
diff --git a/core/src/overlay.rs b/core/src/overlay.rs
index 2e05db93..f71f25f7 100644
--- a/core/src/overlay.rs
+++ b/core/src/overlay.rs
@@ -25,7 +25,7 @@ where
///
/// [`Node`]: layout::Node
fn layout(
- &self,
+ &mut self,
renderer: &Renderer,
bounds: Size,
position: Point,
diff --git a/core/src/overlay/element.rs b/core/src/overlay/element.rs
index 29b404b8..689e69be 100644
--- a/core/src/overlay/element.rs
+++ b/core/src/overlay/element.rs
@@ -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,
diff --git a/core/src/overlay/group.rs b/core/src/overlay/group.rs
index 691686cd..a0bae6bb 100644
--- a/core/src/overlay/group.rs
+++ b/core/src/overlay/group.rs
@@ -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(),
)
diff --git a/core/src/widget.rs b/core/src/widget.rs
index 70328ff7..294d5984 100644
--- a/core/src/widget.rs
+++ b/core/src/widget.rs
@@ -55,7 +55,7 @@ where
/// user interface.
fn layout(
&self,
- tree: &Tree,
+ tree: &mut Tree,
renderer: &Renderer,
limits: &layout::Limits,
) -> layout::Node;
diff --git a/core/src/widget/text.rs b/core/src/widget/text.rs
index 0405537b..b349399b 100644
--- a/core/src/widget/text.rs
+++ b/core/src/widget/text.rs
@@ -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() {