--- a/ui/cocoa/text.m Sun Jul 20 22:04:39 2025 +0200 +++ b/ui/cocoa/text.m Sun Aug 24 15:24:16 2025 +0200 @@ -42,7 +42,7 @@ scrollview.documentView = textview; UiLayout layout = UI_INIT_LAYOUT(args); - ui_container_add(obj, scrollview, &layout, TRUE); + ui_container_add(obj, scrollview, &layout); UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_TEXT); @@ -85,7 +85,6 @@ NSTextStorage *textStorage; if(text->data1) { textStorage = (__bridge NSTextStorage*)text->data1; - } else { textStorage = [[NSTextStorage alloc] init]; } @@ -94,43 +93,83 @@ } void ui_textarea_set(UiText *text, const char *str) { - + NSTextView *textview = (__bridge NSTextView*)text->obj; + if(text->value.free) { + text->value.free(text->value.ptr); + } + text->value.ptr = strdup(str); + text->value.free = free; + textview.string = [[NSString alloc] initWithUTF8String:str]; } char* ui_textarea_get(UiText *text) { - return NULL; + NSTextView *textview = (__bridge NSTextView*)text->obj; + if(text->value.free) { + text->value.free(text->value.ptr); + } + text->value.ptr = strdup(textview.string.UTF8String); + text->value.free = free; + return text->value.ptr; } char* ui_textarea_getsubstr(UiText *text, int begin, int end) { - return NULL; + NSTextView *textview = (__bridge NSTextView*)text->obj; + NSString *str = textview.string; + NSRange range = NSMakeRange(begin, end-begin); + NSString *sub = [str substringWithRange:range]; + return strdup(sub.UTF8String); } void ui_textarea_insert(UiText *text, int pos, char *str) { - + NSTextView *textview = (__bridge NSTextView*)text->obj; + NSString *s = [[NSString alloc] initWithUTF8String:str]; + NSAttributedString *attributedStr = [[NSAttributedString alloc] initWithString:s]; + [textview.textStorage insertAttributedString:attributedStr atIndex:pos]; } void ui_textarea_setposition(UiText *text, int pos) { - + NSTextView *textview = (__bridge NSTextView*)text->obj; + NSRange range = NSMakeRange(pos, 0); + [textview setSelectedRange:range]; } int ui_textarea_position(UiText *text) { - return 0; + NSTextView *textview = (__bridge NSTextView*)text->obj; + NSRange range = textview.selectedRange; + return (int)range.location; } void ui_textarea_setselection(UiText *text, int begin, int end) { - + NSTextView *textview = (__bridge NSTextView*)text->obj; + NSRange range = NSMakeRange(begin, end-begin); + [textview setSelectedRange:range]; } void ui_textarea_selection(UiText *text, int *begin, int *end) { - + NSTextView *textview = (__bridge NSTextView*)text->obj; + NSRange range = textview.selectedRange; + if(begin) { + *begin = (int)range.location; + } + if(end) { + *end = (int)(range.location+range.length); + } } int ui_textarea_length(UiText *text) { - return 0; + NSTextView *textview = (__bridge NSTextView*)text->obj; + return (int)textview.string.length; } void ui_textarea_remove(UiText *text, int begin, int end) { + NSTextView *textview = (__bridge NSTextView*)text->obj; + if (begin < 0 || end < begin || end > textview.string.length) { + return; + } + + NSRange range = NSMakeRange(begin, end - begin); + [[textview textStorage] deleteCharactersInRange:range]; } @@ -150,7 +189,7 @@ } UiLayout layout = UI_INIT_LAYOUT(args); - ui_container_add(obj, textfield, &layout, FALSE); + ui_container_add(obj, textfield, &layout); UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING); if(var) {