implement textarea widget functions (Cocoa) default tip

Wed, 29 Apr 2026 21:40:22 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Wed, 29 Apr 2026 21:40:22 +0200
changeset 1116
677f7f68f5aa
parent 1115
65870e2dbc1b

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) {
     

mercurial