|
|
|
@ -126,37 +126,37 @@ textInput = config \ ui.stateful {
|
|
|
|
|
|
|
|
|
|
|
|
# update : State \ Event \ State
|
|
|
|
# update : State \ Event \ State
|
|
|
|
update = state event \ event
|
|
|
|
update = state event \ event
|
|
|
|
| Key { key = c, printable = True, meta = False, ctrl = False } \
|
|
|
|
| Key { key = c, printable = True, meta = False, ctrl = False } \ (
|
|
|
|
newText = insertChar state.text state.cursorPos c;
|
|
|
|
newText = insertChar state.text state.cursorPos c;
|
|
|
|
newCursorPos = state.cursorPos + 1;
|
|
|
|
newCursorPos = state.cursorPos + 1;
|
|
|
|
newScroll = calcScrollOffset newText newCursorPos state.scrollOffset config.w;
|
|
|
|
newScroll = calcScrollOffset newText newCursorPos state.scrollOffset config.w;
|
|
|
|
newState = state.{ text = newText, cursorPos = newCursorPos, scrollOffset = newScroll };
|
|
|
|
newState = state.{ text = newText, cursorPos = newCursorPos, scrollOffset = newScroll };
|
|
|
|
{ state = newState, emit = [config.onChange newText] }
|
|
|
|
{ state = newState, emit = [config.onChange newText] })
|
|
|
|
|
|
|
|
|
|
|
|
| Key { key = "ArrowLeft" } \
|
|
|
|
| Key { key = "ArrowLeft" } \ (
|
|
|
|
newCursorPos = max 0 (state.cursorPos - 1);
|
|
|
|
newCursorPos = max 0 (state.cursorPos - 1);
|
|
|
|
newScroll = calcScrollOffset state.text newCursorPos state.scrollOffset config.w;
|
|
|
|
newScroll = calcScrollOffset state.text newCursorPos state.scrollOffset config.w;
|
|
|
|
newState = state.{ text = state.text, cursorPos = newCursorPos, scrollOffset = newScroll };
|
|
|
|
newState = state.{ text = state.text, cursorPos = newCursorPos, scrollOffset = newScroll };
|
|
|
|
{ state = newState, emit = [] }
|
|
|
|
{ state = newState, emit = [] })
|
|
|
|
|
|
|
|
|
|
|
|
| Key { key = "ArrowRight" } \
|
|
|
|
| Key { key = "ArrowRight" } \ (
|
|
|
|
newCursorPos = min (len state.text) (state.cursorPos + 1);
|
|
|
|
newCursorPos = min (len state.text) (state.cursorPos + 1);
|
|
|
|
newScroll = calcScrollOffset state.text newCursorPos state.scrollOffset config.w;
|
|
|
|
newScroll = calcScrollOffset state.text newCursorPos state.scrollOffset config.w;
|
|
|
|
newState = state.{ text = state.text, cursorPos = newCursorPos, scrollOffset = newScroll };
|
|
|
|
newState = state.{ text = state.text, cursorPos = newCursorPos, scrollOffset = newScroll };
|
|
|
|
{ state = newState, emit = [] }
|
|
|
|
{ state = newState, emit = [] })
|
|
|
|
|
|
|
|
|
|
|
|
| Key { key = "Backspace" } \
|
|
|
|
| Key { key = "Backspace" } \ (
|
|
|
|
newText = deleteChar state.text state.cursorPos;
|
|
|
|
newText = deleteChar state.text state.cursorPos;
|
|
|
|
newCursorPos = max 0 (state.cursorPos - 1);
|
|
|
|
newCursorPos = max 0 (state.cursorPos - 1);
|
|
|
|
newScroll = calcScrollOffset newText newCursorPos state.scrollOffset config.w;
|
|
|
|
newScroll = calcScrollOffset newText newCursorPos state.scrollOffset config.w;
|
|
|
|
newState = state.{ text = newText, cursorPos = newCursorPos, scrollOffset = newScroll };
|
|
|
|
newState = state.{ text = newText, cursorPos = newCursorPos, scrollOffset = newScroll };
|
|
|
|
{ state = newState, emit = [config.onChange newText] }
|
|
|
|
{ state = newState, emit = [config.onChange newText] })
|
|
|
|
|
|
|
|
|
|
|
|
| Clicked coords \
|
|
|
|
| Clicked coords \ (
|
|
|
|
newCursorPos = findCursorPos state.text coords.x state.scrollOffset 8;
|
|
|
|
newCursorPos = findCursorPos state.text coords.x state.scrollOffset 8;
|
|
|
|
newScroll = calcScrollOffset state.text newCursorPos state.scrollOffset config.w;
|
|
|
|
newScroll = calcScrollOffset state.text newCursorPos state.scrollOffset config.w;
|
|
|
|
newState = state.{ text = state.text, cursorPos = newCursorPos, scrollOffset = newScroll };
|
|
|
|
newState = state.{ text = state.text, cursorPos = newCursorPos, scrollOffset = newScroll };
|
|
|
|
{ state = newState, emit = [] }
|
|
|
|
{ state = newState, emit = [] })
|
|
|
|
|
|
|
|
|
|
|
|
| Focused \ { state = state.{ focused = True }, emit = [] }
|
|
|
|
| Focused \ { state = state.{ focused = True }, emit = [] }
|
|
|
|
| Blurred \ { state = state.{ focused = False }, emit = [] }
|
|
|
|
| Blurred \ { state = state.{ focused = False }, emit = [] }
|
|
|
|
|