Fri, 08 Aug 2025 21:20:08 +0200
merge
--- a/make/xcode/toolkit/toolkit/main.m Fri Aug 08 21:19:36 2025 +0200 +++ b/make/xcode/toolkit/toolkit/main.m Fri Aug 08 21:20:08 2025 +0200 @@ -34,6 +34,10 @@ printf("button click\n"); } +static void toolbar_action(UiEvent *event, void *userdata) { + printf("toolbar item\n"); +} + void application_startup(UiEvent *event, void *data) { UiObject *obj = ui_window("My Window", NULL); @@ -80,11 +84,11 @@ } } - ui_toolbar_item("item1", .label = "Test 1"); - ui_toolbar_item("item2", .label = "Test 2"); + ui_toolbar_item("item1", .label = "Test 1", .icon = "NSImageNameGoBackTemplate", .onclick = toolbar_action); + ui_toolbar_item("item2", .label = "Test 2", .icon = "NSImageNameGoForwardTemplate", .onclick = toolbar_action); ui_toolbar_add_default("item1", UI_TOOLBAR_LEFT); - ui_toolbar_add_default("item1", UI_TOOLBAR_RIGHT); + ui_toolbar_add_default("item2", UI_TOOLBAR_RIGHT); ui_main(); return 0;
--- a/ui/cocoa/Toolbar.m Fri Aug 08 21:19:36 2025 +0200 +++ b/ui/cocoa/Toolbar.m Fri Aug 08 21:20:08 2025 +0200 @@ -28,6 +28,7 @@ #import "Toolbar.h" #import "EventData.h" +#import "image.h" #import <objc/runtime.h> #include "../common/toolbar.h" @@ -111,20 +112,17 @@ @end NSToolbarItem* ui_nstoolbaritem_create_item(UiObject *obj, UiToolbarItem *item, NSString *identifier) { - NSToolbarItem *tbItem = [[NSToolbarItem alloc] initWithItemIdentifier: identifier]; - - NSButton *button = [[NSButton alloc] init]; - tbItem.view = button; + NSToolbarItem *button = [[NSToolbarItem alloc] initWithItemIdentifier: identifier]; + button.bordered = YES; if(item->args.label) { NSString *label = [[NSString alloc] initWithUTF8String:item->args.label]; - [tbItem setLabel:label]; - if(!item->args.icon) { - button.title = label; - } + button.paletteLabel = label; + button.label = label; } if(item->args.icon) { - button.image = [NSImage imageNamed: [[NSString alloc] initWithUTF8String:item->args.icon]]; + //button.image = [NSImage imageNamed: [[NSString alloc] initWithUTF8String:item->args.icon]]; + button.image = ui_cocoa_named_icon(item->args.icon); } if(item->args.onclick) { @@ -134,7 +132,7 @@ button.action = @selector(handleEvent:); objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN); } - return tbItem; + return button; } NSToolbarItem* ui_nstoolbaritem_create_toggle(UiObject *obj, UiToolbarToggleItem *item, NSString *identifier) {
--- a/ui/cocoa/image.h Fri Aug 08 21:19:36 2025 +0200 +++ b/ui/cocoa/image.h Fri Aug 08 21:20:08 2025 +0200 @@ -29,3 +29,7 @@ #include "../ui/image.h" #include "Container.h" + +void ui_icon_init(void); + +NSImage* ui_cocoa_named_icon(const char *name);
--- a/ui/cocoa/image.m Fri Aug 08 21:19:36 2025 +0200 +++ b/ui/cocoa/image.m Fri Aug 08 21:20:08 2025 +0200 @@ -28,6 +28,35 @@ #import "image.h" +static NSDictionary *standardIconNames; + +void ui_icon_init(void) { + standardIconNames = @{ + @"NSImageNameActionTemplate": NSImageNameActionTemplate, + @"NSImageNameAddTemplate": NSImageNameAddTemplate, + @"NSImageNameAdvanced": NSImageNameAdvanced, + @"NSImageNameApplicationIcon": NSImageNameApplicationIcon, + @"NSImageNameBluetoothTemplate": NSImageNameBluetoothTemplate, + @"NSImageNameBonjour": NSImageNameBonjour, + @"NSImageNameBookmarksTemplate": NSImageNameBookmarksTemplate, + @"NSImageNameCaution": NSImageNameCaution, + // TODO + @"NSImageNameRefreshTemplate": NSImageNameRefreshTemplate, + @"NSImageNameFolder": NSImageNameFolder, + @"NSImageNameGoForwardTemplate": NSImageNameGoForwardTemplate, + @"NSImageNameGoBackTemplate": NSImageNameGoBackTemplate + }; +} + +NSImage* ui_cocoa_named_icon(const char *name) { + NSString *imageName = [[NSString alloc] initWithUTF8String:name]; + NSString *imgName = [standardIconNames objectForKey:imageName]; + if(imgName) { + imageName = imgName; + } + return [NSImage imageNamed:imageName]; +} + void ui_image_ref(UIIMAGE img) { // TODO
--- 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]; }
--- a/ui/cocoa/toolkit.m Fri Aug 08 21:19:36 2025 +0200 +++ b/ui/cocoa/toolkit.m Fri Aug 08 21:20:08 2025 +0200 @@ -34,6 +34,7 @@ #include "../common/toolbar.h" #include "../common/threadpool.h" +#import "image.h" #import "menu.h" #import "Toolbar.h" @@ -72,7 +73,9 @@ //[NSBundle loadNibNamed:@"MainMenu" owner:NSApp ]; //[[NSBundle mainBundle] loadNibNamed:@"MainMenu" owner:NSApp topLevelObjects:&topLevelObjects]; + ui_icon_init(); ui_toolbar_init(); + } const char* ui_appname() {