Skip to content

Commit a6d0d57

Browse files
authored
Merge pull request #1615 from iced-rs/fix/responsive-operations
Fix operations for `Responsive` widget
2 parents 678de11 + 5f2ec13 commit a6d0d57

18 files changed

Lines changed: 74 additions & 9 deletions

File tree

examples/modal/src/main.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,11 +325,13 @@ mod modal {
325325
&self,
326326
state: &mut Tree,
327327
layout: Layout<'_>,
328+
renderer: &Renderer,
328329
operation: &mut dyn widget::Operation<Message>,
329330
) {
330331
self.base.as_widget().operate(
331332
&mut state.children[0],
332333
layout,
334+
renderer,
333335
operation,
334336
);
335337
}
@@ -436,11 +438,13 @@ mod modal {
436438
fn operate(
437439
&mut self,
438440
layout: Layout<'_>,
441+
renderer: &Renderer,
439442
operation: &mut dyn widget::Operation<Message>,
440443
) {
441444
self.content.as_widget().operate(
442445
self.tree,
443446
layout.children().next().unwrap(),
447+
renderer,
444448
operation,
445449
);
446450
}

lazy/src/component.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ where
234234
&self,
235235
tree: &mut Tree,
236236
layout: Layout<'_>,
237+
renderer: &Renderer,
237238
operation: &mut dyn widget::Operation<Message>,
238239
) {
239240
struct MapOperation<'a, B> {
@@ -274,6 +275,7 @@ where
274275
element.as_widget().operate(
275276
&mut tree.children[0],
276277
layout,
278+
renderer,
277279
&mut MapOperation { operation },
278280
);
279281
});

lazy/src/lazy.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,12 +130,14 @@ where
130130
&self,
131131
tree: &mut Tree,
132132
layout: Layout<'_>,
133+
renderer: &Renderer,
133134
operation: &mut dyn widget::Operation<Message>,
134135
) {
135136
self.with_element(|element| {
136137
element.as_widget().operate(
137138
&mut tree.children[0],
138139
layout,
140+
renderer,
139141
operation,
140142
);
141143
});

lazy/src/responsive.rs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ use iced_native::layout::{self, Layout};
33
use iced_native::mouse;
44
use iced_native::overlay;
55
use iced_native::renderer;
6-
use iced_native::widget::horizontal_space;
76
use iced_native::widget::tree::{self, Tree};
7+
use iced_native::widget::{self, horizontal_space};
88
use iced_native::{
99
Clipboard, Element, Length, Point, Rectangle, Shell, Size, Widget,
1010
};
@@ -142,6 +142,29 @@ where
142142
layout::Node::new(limits.max())
143143
}
144144

145+
fn operate(
146+
&self,
147+
tree: &mut Tree,
148+
layout: Layout<'_>,
149+
renderer: &Renderer,
150+
operation: &mut dyn widget::Operation<Message>,
151+
) {
152+
let state = tree.state.downcast_mut::<State>();
153+
let mut content = self.content.borrow_mut();
154+
155+
content.resolve(
156+
&mut state.tree.borrow_mut(),
157+
renderer,
158+
layout,
159+
&self.view,
160+
|tree, renderer, layout, element| {
161+
element
162+
.as_widget()
163+
.operate(tree, layout, renderer, operation);
164+
},
165+
);
166+
}
167+
145168
fn on_event(
146169
&mut self,
147170
tree: &mut Tree,

native/src/element.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,7 @@ where
290290
&self,
291291
tree: &mut Tree,
292292
layout: Layout<'_>,
293+
renderer: &Renderer,
293294
operation: &mut dyn widget::Operation<B>,
294295
) {
295296
struct MapOperation<'a, B> {
@@ -334,8 +335,12 @@ where
334335
}
335336
}
336337

337-
self.widget
338-
.operate(tree, layout, &mut MapOperation { operation });
338+
self.widget.operate(
339+
tree,
340+
layout,
341+
renderer,
342+
&mut MapOperation { operation },
343+
);
339344
}
340345

341346
fn on_event(
@@ -473,9 +478,12 @@ where
473478
&self,
474479
state: &mut Tree,
475480
layout: Layout<'_>,
481+
renderer: &Renderer,
476482
operation: &mut dyn widget::Operation<Message>,
477483
) {
478-
self.element.widget.operate(state, layout, operation)
484+
self.element
485+
.widget
486+
.operate(state, layout, renderer, operation)
479487
}
480488

481489
fn on_event(

native/src/overlay.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ where
4646
fn operate(
4747
&mut self,
4848
_layout: Layout<'_>,
49+
_renderer: &Renderer,
4950
_operation: &mut dyn widget::Operation<Message>,
5051
) {
5152
}

native/src/overlay/element.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,10 @@ where
108108
pub fn operate(
109109
&mut self,
110110
layout: Layout<'_>,
111+
renderer: &Renderer,
111112
operation: &mut dyn widget::Operation<Message>,
112113
) {
113-
self.overlay.operate(layout, operation);
114+
self.overlay.operate(layout, renderer, operation);
114115
}
115116
}
116117

@@ -144,6 +145,7 @@ where
144145
fn operate(
145146
&mut self,
146147
layout: Layout<'_>,
148+
renderer: &Renderer,
147149
operation: &mut dyn widget::Operation<B>,
148150
) {
149151
struct MapOperation<'a, B> {
@@ -189,7 +191,7 @@ where
189191
}
190192

191193
self.content
192-
.operate(layout, &mut MapOperation { operation });
194+
.operate(layout, renderer, &mut MapOperation { operation });
193195
}
194196

195197
fn on_event(

native/src/user_interface.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,7 @@ where
493493
self.root.as_widget().operate(
494494
&mut self.state,
495495
Layout::new(&self.base),
496+
renderer,
496497
operation,
497498
);
498499

@@ -507,6 +508,7 @@ where
507508

508509
overlay.operate(
509510
Layout::new(self.overlay.as_ref().unwrap()),
511+
renderer,
510512
operation,
511513
);
512514
}

native/src/widget.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ where
175175
&self,
176176
_state: &mut Tree,
177177
_layout: Layout<'_>,
178+
_renderer: &Renderer,
178179
_operation: &mut dyn Operation<Message>,
179180
) {
180181
}

native/src/widget/button.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,12 +169,14 @@ where
169169
&self,
170170
tree: &mut Tree,
171171
layout: Layout<'_>,
172+
renderer: &Renderer,
172173
operation: &mut dyn Operation<Message>,
173174
) {
174175
operation.container(None, &mut |operation| {
175176
self.content.as_widget().operate(
176177
&mut tree.children[0],
177178
layout.children().next().unwrap(),
179+
renderer,
178180
operation,
179181
);
180182
});

0 commit comments

Comments
 (0)