Archived
1
0
Fork 0
This repository has been archived on 2023-03-27. You can view files and clone it, but cannot push or open issues or pull requests.
cli-old/lib/widgets/text.rb
Braiden Vasco 896aae87cb Rename Curses::React::Component#draw to #render, #render to #draw
To make components similar to React components
2017-07-28 00:02:59 +00:00

56 lines
1.3 KiB
Ruby

# frozen_string_literal: true
module Widgets
class Text < Curses::React::Component
def trigger(event)
case event
when Events::Text::Enter
props[:on_enter].call
when Events::Text::Putc
props[:on_putc].call event.char
when Events::Text::Left
props[:on_left].call
when Events::Text::Right
props[:on_right].call
when Events::Text::Home
props[:on_home].call
when Events::Text::End
props[:on_end].call
when Events::Text::Backspace
props[:on_backspace].call
when Events::Text::Delete
props[:on_delete].call
end
end
private
def render
total = props[:width] - 1
start = [0, props[:cursor_pos] - total].max
cut = props[:text][start...start + total]
setpos 0, 0
before_cursor = cut[0...props[:cursor_pos]]
under_cursor = cut[props[:cursor_pos]] || ' '
after_cursor = cut[(1 + props[:cursor_pos])..-1] || ''
Style.default.editing_text window do
addstr before_cursor
end
Style.default.public_send props[:focused] ? :cursor : :editing_text, window do
addstr under_cursor
end
Style.default.editing_text window do
addstr after_cursor
end
end
end
end