summaryrefslogtreecommitdiffstats
path: root/native/src/element.rs
diff options
context:
space:
mode:
Diffstat (limited to 'native/src/element.rs')
-rw-r--r--native/src/element.rs31
1 files changed, 21 insertions, 10 deletions
diff --git a/native/src/element.rs b/native/src/element.rs
index d4237fd0..276f7614 100644
--- a/native/src/element.rs
+++ b/native/src/element.rs
@@ -1,5 +1,5 @@
use crate::{
- layout, renderer, Color, Event, Hasher, Layout, Length, Point, Widget,
+ layout, Clipboard, Color, Event, Hasher, Layout, Length, Point, Widget,
};
/// A generic [`Widget`].
@@ -171,7 +171,7 @@ where
/// ```
pub fn map<F, B>(self, f: F) -> Element<'a, B, Renderer>
where
- Message: 'static + Clone,
+ Message: 'static,
Renderer: 'a,
B: 'static,
F: 'static + Fn(Message) -> B,
@@ -194,7 +194,7 @@ where
) -> Element<'a, Message, Renderer>
where
Message: 'static,
- Renderer: 'a + renderer::Debugger,
+ Renderer: 'a + layout::Debugger,
{
Element {
widget: Box::new(Explain::new(self, color.into())),
@@ -234,13 +234,18 @@ where
pub fn draw(
&self,
renderer: &mut Renderer,
+ defaults: &Renderer::Defaults,
layout: Layout<'_>,
cursor_position: Point,
) -> Renderer::Output {
- self.widget.draw(renderer, layout, cursor_position)
+ self.widget
+ .draw(renderer, defaults, layout, cursor_position)
}
- pub(crate) fn hash_layout(&self, state: &mut Hasher) {
+ /// Computes the _layout_ hash of the [`Element`].
+ ///
+ /// [`Element`]: struct.Element.html
+ pub fn hash_layout(&self, state: &mut Hasher) {
self.widget.hash_layout(state);
}
}
@@ -267,7 +272,6 @@ impl<'a, A, B, Renderer> Map<'a, A, B, Renderer> {
impl<'a, A, B, Renderer> Widget<B, Renderer> for Map<'a, A, B, Renderer>
where
- A: Clone,
Renderer: crate::Renderer,
{
fn width(&self) -> Length {
@@ -293,6 +297,7 @@ where
cursor_position: Point,
messages: &mut Vec<B>,
renderer: &Renderer,
+ clipboard: Option<&dyn Clipboard>,
) {
let mut original_messages = Vec::new();
@@ -302,21 +307,23 @@ where
cursor_position,
&mut original_messages,
renderer,
+ clipboard,
);
original_messages
- .iter()
- .cloned()
+ .drain(..)
.for_each(|message| messages.push((self.mapper)(message)));
}
fn draw(
&self,
renderer: &mut Renderer,
+ defaults: &Renderer::Defaults,
layout: Layout<'_>,
cursor_position: Point,
) -> Renderer::Output {
- self.widget.draw(renderer, layout, cursor_position)
+ self.widget
+ .draw(renderer, defaults, layout, cursor_position)
}
fn hash_layout(&self, state: &mut Hasher) {
@@ -341,7 +348,7 @@ where
impl<'a, Message, Renderer> Widget<Message, Renderer>
for Explain<'a, Message, Renderer>
where
- Renderer: crate::Renderer + renderer::Debugger,
+ Renderer: crate::Renderer + layout::Debugger,
{
fn width(&self) -> Length {
self.element.widget.width()
@@ -366,6 +373,7 @@ where
cursor_position: Point,
messages: &mut Vec<Message>,
renderer: &Renderer,
+ clipboard: Option<&dyn Clipboard>,
) {
self.element.widget.on_event(
event,
@@ -373,16 +381,19 @@ where
cursor_position,
messages,
renderer,
+ clipboard,
)
}
fn draw(
&self,
renderer: &mut Renderer,
+ defaults: &Renderer::Defaults,
layout: Layout<'_>,
cursor_position: Point,
) -> Renderer::Output {
renderer.explain(
+ defaults,
self.element.widget.as_ref(),
layout,
cursor_position,