merge

Fri, 01 May 2026 20:50:33 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Fri, 01 May 2026 20:50:33 +0200
changeset 1118
546a969ad7d5
parent 1117
a8410327b0dc (current diff)
parent 1116
677f7f68f5aa (diff)
child 1119
13983d8280ae

merge

Binary file resource/.DS_Store has changed
--- a/ui/cocoa/text.m	Fri May 01 20:49:35 2026 +0200
+++ b/ui/cocoa/text.m	Fri May 01 20:50:33 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) {
     
--- a/ui/common/types.c	Fri May 01 20:49:35 2026 +0200
+++ b/ui/common/types.c	Fri May 01 20:50:33 2026 +0200
@@ -978,7 +978,7 @@
 
 char* ui_text_getsubstr(UiText *text, int begin, int end) {
     if(text->getsubstr) {
-        text->getsubstr(text, begin, end);
+        return text->getsubstr(text, begin, end);
     } else {
         return NULL;
     }

mercurial