diff --git a/src/bin/test/main.rs b/src/bin/test/main.rs index 8a9c125..6096c2c 100644 --- a/src/bin/test/main.rs +++ b/src/bin/test/main.rs @@ -104,16 +104,16 @@ impl DefaultAppState for Client { .add(ui); let texts = Span::empty(Dir::DOWN).gap(10).handles(ui); - let msg_area = texts.h.scroll().masked().background(rect(Color::SKY)); + let msg_area = texts.h.scrollable().masked().background(rect(Color::SKY)); let add_text = wtext("add") - .editable(false) + .editable(EditMode::MultiLine) .text_align(Align::LEFT) .size(30) .attr::(()) .on(Submit, move |mut ctx| { let content = ctx.widget.edit(ctx.state.ui()).take(); let text = wtext(content) - .editable(false) + .editable(EditMode::MultiLine) .size(30) .text_align(Align::LEFT) .wrap(true) diff --git a/src/widget/text/build.rs b/src/widget/text/build.rs index 4dffdb4..ee07c33 100644 --- a/src/widget/text/build.rs +++ b/src/widget/text/build.rs @@ -40,12 +40,12 @@ impl> TextBuilder { self.attrs.wrap = wrap; self } - pub fn editable(self, single_line: bool) -> TextBuilder { + pub fn editable(self, mode: EditMode) -> TextBuilder { TextBuilder { content: self.content, attrs: self.attrs, hint: self.hint, - output: TextEditOutput { single_line }, + output: TextEditOutput { mode }, state: PhantomData, } } @@ -100,7 +100,7 @@ impl TextBuilderOutput for TextOutput { } pub struct TextEditOutput { - single_line: bool, + mode: EditMode, } impl TextBuilderOutput for TextEditOutput { type Output = TextEdit; @@ -115,7 +115,7 @@ impl TextBuilderOutput for TextEditOutput { )); let mut text = TextEdit::new( TextView::new(buf, builder.attrs, builder.hint.get(ui)), - builder.output.single_line, + builder.output.mode, ); let font_system = &mut ui.text.font_system; text.buf diff --git a/src/widget/text/edit.rs b/src/widget/text/edit.rs index 7a0fe6c..67ec614 100644 --- a/src/widget/text/edit.rs +++ b/src/widget/text/edit.rs @@ -12,17 +12,23 @@ pub struct TextEdit { selection: TextSelection, history: Vec<(String, TextSelection)>, double_hit: Option, - pub single_line: bool, + pub mode: EditMode, +} + +#[derive(Clone, Copy, PartialEq)] +pub enum EditMode { + SingleLine, + MultiLine, } impl TextEdit { - pub fn new(view: TextView, single_line: bool) -> Self { + pub fn new(view: TextView, mode: EditMode) -> Self { Self { view, selection: Default::default(), history: Default::default(), double_hit: None, - single_line, + mode, } } pub fn select_content(&self, start: Cursor, end: Cursor) -> String { @@ -246,7 +252,7 @@ impl<'a, State: 'static> TextEditCtx<'a, State> { } fn string(&self, text: &str) -> String { - if self.text.single_line { + if self.text.mode == EditMode::SingleLine { text.replace('\n', "") } else { text.to_string() @@ -315,7 +321,7 @@ impl<'a, State: 'static> TextEditCtx<'a, State> { } pub fn newline(&mut self) { - if self.text.single_line { + if self.text.mode == EditMode::SingleLine { return; } self.clear_span(); diff --git a/src/widget/trait_fns.rs b/src/widget/trait_fns.rs index 5513877..15cd674 100644 --- a/src/widget/trait_fns.rs +++ b/src/widget/trait_fns.rs @@ -83,13 +83,13 @@ widget_trait! { } } - fn scroll(self) -> impl WidgetIdFn> { + fn scrollable(self) -> impl WidgetIdFn> { use eventable::*; move |ui| { Scroll::new(self.add(ui), Axis::Y) - .on(CursorSense::Scroll, |ctx| { - let s = &mut ctx.state.ui()[ctx.widget]; - s.scroll(ctx.data.scroll_delta.y * 50.0); + .on(CursorSense::Scroll, |mut ctx| { + let delta = ctx.data.scroll_delta.y * 50.0; + ctx.widget().scroll(delta); }) .add(ui) }