Mon, 15 Dec 2025 15:33:52 +0100
add functions for loading images (Cocoa)
| ui/cocoa/image.h | file | annotate | diff | comparison | revisions | |
| ui/cocoa/image.m | file | annotate | diff | comparison | revisions |
--- a/ui/cocoa/image.h Sun Dec 14 21:03:19 2025 +0100 +++ b/ui/cocoa/image.h Mon Dec 15 15:33:52 2025 +0100 @@ -30,7 +30,10 @@ #include "Container.h" - +typedef struct UiImage { + void *nsimage; + unsigned int ref; +} UiImage; void ui_icon_init(void);
--- a/ui/cocoa/image.m Sun Dec 14 21:03:19 2025 +0100 +++ b/ui/cocoa/image.m Mon Dec 15 15:33:52 2025 +0100 @@ -107,11 +107,54 @@ return [NSImage imageNamed:imageName]; } +static UIIMAGE create_image(NSImage *image) { + UiImage *img = malloc(sizeof(UiImage)); + img->nsimage = (__bridge_retained void*)image; + img->ref = 1; + return img; +} void ui_image_ref(UIIMAGE img) { - // TODO + UiImage *image = img; + image->ref++; } void ui_image_unref(UIIMAGE img) { - // TODO + UiImage *image = img; + if(--image->ref == 0) { + CFRelease(image->nsimage); + free(img); + } } + +static int load_image(UiGeneric *obj, NSImage *img) { + UIIMAGE image = create_image(img); + + if(obj->set) { + obj->set(obj, image, UI_IMAGE_OBJECT_TYPE); + ui_image_unref(image); + } else { + obj->value = image; + obj->type = UI_IMAGE_OBJECT_TYPE; + } + + return 0; +} + +int ui_image_load_file(UiGeneric *obj, const char *path) { + NSString *str = [[NSString alloc]initWithUTF8String:path]; + NSImage *img = [[NSImage alloc]initWithContentsOfFile:str]; + if(img == nil) { + return 1; + } + return load_image(obj, img); +} + +int ui_image_load_data(UiGeneric *obj, const void *imgdata, size_t size) { + NSData *data = [NSData dataWithBytes:(void*)imgdata length:size]; + NSImage *img = [[NSImage alloc] initWithData:data]; + if(img == nil) { + return 1; + } + return load_image(obj, img); +}