Get rid of has_widget_info and push events directly where it makes sense.

This commit is contained in:
Nolan Darilek 2021-05-19 08:42:33 -05:00
parent fa18727933
commit 131525536b
3 changed files with 12 additions and 24 deletions

View file

@ -193,8 +193,7 @@ impl CtxRef {
drag_released: false, drag_released: false,
is_pointer_button_down_on: false, is_pointer_button_down_on: false,
interact_pointer_pos: None, interact_pointer_pos: None,
changed: false, // must be set by the widget itself changed: false, // must be set by the widget itself
has_widget_info: false, // must be set by the widget itself
}; };
if !enabled || !sense.focusable || !layer_id.allow_interaction() { if !enabled || !sense.focusable || !layer_id.allow_interaction() {

View file

@ -65,8 +65,6 @@ pub struct Response {
/// e.g. the slider was dragged, text was entered in a `TextEdit` etc. /// e.g. the slider was dragged, text was entered in a `TextEdit` etc.
/// Always `false` for something like a `Button`. /// Always `false` for something like a `Button`.
pub(crate) changed: bool, pub(crate) changed: bool,
/// Has a `WidgetInfo` but isn't covered by some other case (E.g. `changed`, `clicked`.)
pub(crate) has_widget_info: bool,
} }
impl std::fmt::Debug for Response { impl std::fmt::Debug for Response {
@ -86,7 +84,6 @@ impl std::fmt::Debug for Response {
is_pointer_button_down_on, is_pointer_button_down_on,
interact_pointer_pos, interact_pointer_pos,
changed, changed,
has_widget_info,
} = self; } = self;
f.debug_struct("Response") f.debug_struct("Response")
.field("layer_id", layer_id) .field("layer_id", layer_id)
@ -102,7 +99,6 @@ impl std::fmt::Debug for Response {
.field("is_pointer_button_down_on", is_pointer_button_down_on) .field("is_pointer_button_down_on", is_pointer_button_down_on)
.field("interact_pointer_pos", interact_pointer_pos) .field("interact_pointer_pos", interact_pointer_pos)
.field("changed", changed) .field("changed", changed)
.field("has_widget_info", has_widget_info)
.finish() .finish()
} }
} }
@ -441,13 +437,6 @@ impl Response {
Some(OutputEvent::FocusGained(make_info())) Some(OutputEvent::FocusGained(make_info()))
} else if self.changed { } else if self.changed {
Some(OutputEvent::ValueChanged(make_info())) Some(OutputEvent::ValueChanged(make_info()))
} else if self.has_widget_info {
let info = make_info();
if info.primary_cursor.is_some() && info.secondary_cursor.is_some() {
Some(OutputEvent::TextSelectionChanged(info))
} else {
None
}
} else { } else {
None None
}; };
@ -490,7 +479,6 @@ impl Response {
|| other.is_pointer_button_down_on, || other.is_pointer_button_down_on,
interact_pointer_pos: self.interact_pointer_pos.or(other.interact_pointer_pos), interact_pointer_pos: self.interact_pointer_pos.or(other.interact_pointer_pos),
changed: self.changed || other.changed, changed: self.changed || other.changed,
has_widget_info: self.has_widget_info || other.has_widget_info,
} }
} }
} }

View file

@ -1,4 +1,4 @@
use crate::{util::undoer::Undoer, *}; use crate::{output::OutputEvent, util::undoer::Undoer, *};
use epaint::{text::cursor::*, *}; use epaint::{text::cursor::*, *};
#[derive(Clone, Debug, Default)] #[derive(Clone, Debug, Default)]
@ -505,7 +505,6 @@ impl<'t> TextEdit<'t> {
&& text_to_insert != "\r" && text_to_insert != "\r"
{ {
let mut ccursor = delete_selected(text, &mut prev_text, &cursorp); let mut ccursor = delete_selected(text, &mut prev_text, &cursorp);
insert_text(&mut ccursor, text, &mut prev_text, text_to_insert); insert_text(&mut ccursor, text, &mut prev_text, text_to_insert);
Some(CCursorPair::one(ccursor)) Some(CCursorPair::one(ccursor))
} else { } else {
@ -664,14 +663,16 @@ impl<'t> TextEdit<'t> {
if response.changed { if response.changed {
response.widget_info(|| WidgetInfo::text_edit(&*text, &*prev_text)); response.widget_info(|| WidgetInfo::text_edit(&*text, &*prev_text));
} else if let Some(text_cursor) = text_cursor { } else if let Some(text_cursor) = text_cursor {
response.has_widget_info = true; let info = WidgetInfo::text_selection_changed(
response.widget_info(|| { text_cursor.primary.ccursor.index,
WidgetInfo::text_selection_changed( text_cursor.secondary.ccursor.index,
text_cursor.primary.ccursor.index, &*text,
text_cursor.secondary.ccursor.index, );
&*text, response
) .ctx
}); .output()
.events
.push(OutputEvent::TextSelectionChanged(info));
} }
response response
} }