# HG changeset patch # User Olaf Wintermann # Date 1754216766 -7200 # Node ID d43b4fcd3d8c679f78b2daeb641a6777fe773914 # Parent 1e2f3a44d45552961e7fbc6496c6543773107d6c add support for toolbar icons (Cocoa) diff -r 1e2f3a44d455 -r d43b4fcd3d8c make/xcode/toolkit/toolkit/main.m --- a/make/xcode/toolkit/toolkit/main.m Sun Aug 03 10:53:58 2025 +0200 +++ b/make/xcode/toolkit/toolkit/main.m Sun Aug 03 12:26:06 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; diff -r 1e2f3a44d455 -r d43b4fcd3d8c ui/cocoa/Toolbar.m --- a/ui/cocoa/Toolbar.m Sun Aug 03 10:53:58 2025 +0200 +++ b/ui/cocoa/Toolbar.m Sun Aug 03 12:26:06 2025 +0200 @@ -28,6 +28,7 @@ #import "Toolbar.h" #import "EventData.h" +#import "image.h" #import #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) { diff -r 1e2f3a44d455 -r d43b4fcd3d8c ui/cocoa/image.h --- a/ui/cocoa/image.h Sun Aug 03 10:53:58 2025 +0200 +++ b/ui/cocoa/image.h Sun Aug 03 12:26:06 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); diff -r 1e2f3a44d455 -r d43b4fcd3d8c ui/cocoa/image.m --- a/ui/cocoa/image.m Sun Aug 03 10:53:58 2025 +0200 +++ b/ui/cocoa/image.m Sun Aug 03 12:26:06 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 diff -r 1e2f3a44d455 -r d43b4fcd3d8c ui/cocoa/toolkit.m --- a/ui/cocoa/toolkit.m Sun Aug 03 10:53:58 2025 +0200 +++ b/ui/cocoa/toolkit.m Sun Aug 03 12:26:06 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() {