ui/cocoa/text.m

changeset 689
2a739c195296
parent 686
1e2f3a44d455
child 718
06eec75a6fd5
--- a/ui/cocoa/text.m	Fri Aug 08 21:19:36 2025 +0200
+++ b/ui/cocoa/text.m	Fri Aug 08 21:20:08 2025 +0200
@@ -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];
 }
 
 

mercurial