Wed, 29 Apr 2026 21:40:22 +0200
implement textarea widget functions (Cocoa)
| ui/cocoa/text.m | file | annotate | diff | comparison | revisions |
--- a/ui/cocoa/text.m Wed Apr 29 21:26:14 2026 +0200 +++ b/ui/cocoa/text.m Wed Apr 29 21:40:22 2026 +0200 @@ -81,7 +81,91 @@ return (__bridge void*)textview; } +void ui_textarea_focus(UIWIDGET textarea) { + textarea = ui_textarea_gettextwidget(textarea); + if(!textarea) { + fprintf(stderr, "Error: ui_textarea_focus: widget is not a textarea\n"); + return; + } + NSTextView *view = (__bridge NSTextView*)textarea; + [view.window makeFirstResponder:view]; +} + +void ui_textarea_set_selection(UIWIDGET textarea, int begin, int end) { + textarea = ui_textarea_gettextwidget(textarea); + if(!textarea) { + fprintf(stderr, "Error: ui_textarea_set_selection: widget is not a textarea\n"); + return; + } + NSTextView *view = (__bridge NSTextView*)textarea; + NSRange range = NSMakeRange(begin, end-begin); + [view setSelectedRange:range]; +} + +void ui_textarea_select_all(UIWIDGET textarea) { + textarea = ui_textarea_gettextwidget(textarea); + if(!textarea) { + fprintf(stderr, "Error: ui_textarea_select_all: widget is not a textarea\n"); + return; + } +} + +void ui_textarea_set_editable(UIWIDGET textarea, UiBool editable) { + textarea = ui_textarea_gettextwidget(textarea); + if(!textarea) { + fprintf(stderr, "Error: ui_textarea_set_editable: widget is not a textarea\n"); + return; + } + NSTextView *view = (__bridge NSTextView*)textarea; + view.editable = editable; +} + +UiBool ui_textarea_is_editable(UIWIDGET textarea) { + textarea = ui_textarea_gettextwidget(textarea); + if(!textarea) { + fprintf(stderr, "Error: ui_textarea_is_editable: widget is not a textarea\n"); + return 0; + } + NSTextView *view = (__bridge NSTextView*)textarea; + return view.isEditable; +} + +void ui_textarea_set_position(UIWIDGET textarea, int pos) { + textarea = ui_textarea_gettextwidget(textarea); + if(!textarea) { + fprintf(stderr, "Error: ui_textarea_set_position: widget is not a textarea\n"); + return; + } + NSTextView *view = (__bridge NSTextView*)textarea; + NSRange range = NSMakeRange(pos, 0); + [view setSelectedRange:range]; +} + +int ui_textarea_get_position(UIWIDGET textarea) { + textarea = ui_textarea_gettextwidget(textarea); + if(!textarea) { + fprintf(stderr, "Error: ui_textarea_get_position: widget is not a textarea\n"); + return 0; + } + NSTextView *view = (__bridge NSTextView*)textarea; + NSRange range = view.selectedRange; + return (int)range.location; +} + +void ui_textarea_scroll_to(UIWIDGET textarea, int pos) { + textarea = ui_textarea_gettextwidget(textarea); + if(!textarea) { + fprintf(stderr, "Error: ui_textarea_scroll_to: widget is not a textarea\n"); + return; + } + NSTextView *view = (__bridge NSTextView*)textarea; + NSRange range = NSMakeRange(pos, 0); + [view scrollRangeToVisible:range]; +} + + +// UiText textarea functions void ui_textarea_save(UiText *text) {