diff options
author | 2021-10-25 16:16:35 +0700 | |
---|---|---|
committer | 2021-10-25 16:35:02 +0700 | |
commit | 4a11cbd99445338619dfaf1f327dbc25b2983cb7 (patch) | |
tree | 254598ff97f17cb33e44bd1402323d3b6892cb6b /graphics/src/renderer.rs | |
parent | 41394b4e90a81a43c796c070e706e6aa4d8652bc (diff) | |
download | iced-4a11cbd99445338619dfaf1f327dbc25b2983cb7.tar.gz iced-4a11cbd99445338619dfaf1f327dbc25b2983cb7.tar.bz2 iced-4a11cbd99445338619dfaf1f327dbc25b2983cb7.zip |
Implement `Widget::mouse_interaction` for `PaneGrid`
... and fix rendering of drag interaction in `PaneGrid` by
introducing an explicit `with_translation` method to `Renderer`
and simplifying the `with_layer` and `Clip` primitive.
Diffstat (limited to '')
-rw-r--r-- | graphics/src/renderer.rs | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/graphics/src/renderer.rs b/graphics/src/renderer.rs index d90a3f1e..8b6c2217 100644 --- a/graphics/src/renderer.rs +++ b/graphics/src/renderer.rs @@ -51,10 +51,26 @@ where layout } - fn with_layer( + fn with_layer(&mut self, bounds: Rectangle, f: impl FnOnce(&mut Self)) { + let current_primitives = + std::mem::replace(&mut self.primitives, Vec::new()); + + f(self); + + let layer_primitives = + std::mem::replace(&mut self.primitives, current_primitives); + + self.primitives.push(Primitive::Clip { + bounds, + content: Box::new(Primitive::Group { + primitives: layer_primitives, + }), + }); + } + + fn with_translation( &mut self, - bounds: Rectangle, - offset: Vector<u32>, + translation: Vector, f: impl FnOnce(&mut Self), ) { let current_primitives = @@ -65,9 +81,8 @@ where let layer_primitives = std::mem::replace(&mut self.primitives, current_primitives); - self.primitives.push(Primitive::Clip { - bounds, - offset, + self.primitives.push(Primitive::Translate { + translation, content: Box::new(Primitive::Group { primitives: layer_primitives, }), |