--- a/ui/cocoa/webview.m Sun Oct 26 13:10:46 2025 +0100 +++ b/ui/cocoa/webview.m Mon Oct 27 16:48:39 2025 +0100 @@ -30,12 +30,13 @@ #import "Container.h" UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs *args) { + UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_GENERIC); + WKWebView *webview = [[WKWebView alloc]init]; UiLayout layout = UI_ARGS2LAYOUT(args); ui_container_add(obj, webview, &layout); - UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_GENERIC); if(var) { UiGeneric *value = var->value; value->get = ui_webview_get; @@ -61,6 +62,8 @@ UiWebViewData* ui_webview_data_clone(UiWebViewData *data) { UiWebViewData *newdata = malloc(sizeof(UiWebViewData)); memset(newdata, 0, sizeof(UiWebViewData)); + newdata->zoom = 1; + newdata->javascript = TRUE; if(data) { newdata->uri = data->uri ? strdup(data->uri) : NULL; @@ -98,6 +101,7 @@ if(data->type == WEBVIEW_CONTENT_URL) { (void)ui_webview_get_uri(g); // this updates data->uri } + data->zoom = webview.pageZoom; return ui_webview_data_clone(g->value); } @@ -118,18 +122,29 @@ WKWebView *webview = (__bridge WKWebView*)g->obj; UiWebViewData *webd = data; - if(webd->type == WEBVIEW_CONTENT_URL && webd->uri) { - NSURL *url = [NSURL URLWithString:[[NSString alloc] initWithUTF8String:webd->uri]]; + if(webd->type == WEBVIEW_CONTENT_URL) { + const char *uri = webd->uri ? webd->uri : "about:blank"; + NSURL *url = [NSURL URLWithString:[[NSString alloc] initWithUTF8String:uri]]; if(url) { NSURLRequest *req = [NSURLRequest requestWithURL:url]; if(req) { [webview loadRequest:req]; } } - } else if(webd->content) { - // TODO + } else { + NSString *mimetype = [[NSString alloc]initWithUTF8String: webd->mimetype ? webd->mimetype : "text/plain"]; + NSString *encoding = [[NSString alloc]initWithUTF8String: webd->encoding ? webd->encoding : "UTF-8"]; + NSString *urlStr = [[NSString alloc]initWithUTF8String: webd->uri ? webd->uri : "file:///"]; + NSURL *url = [NSURL URLWithString:urlStr]; + NSData *content = [NSData dataWithBytes:webd->content length:webd->contentlength]; + if(!url) { + url = [NSURL URLWithString:@"about:blank"]; + } + [webview loadData:content MIMEType:mimetype characterEncodingName:encoding baseURL:url]; } + webview.pageZoom = webd->zoom; + return 1; } @@ -145,7 +160,7 @@ data->type = WEBVIEW_CONTENT_URL; if(!url) { - url = "abount:blank"; + url = "about:blank"; } NSURL *nsurl = [NSURL URLWithString:[[NSString alloc] initWithUTF8String:url]]; @@ -244,13 +259,15 @@ } void ui_webview_enable_javascript(UiGeneric *g, UiBool enable) { - + // unsupported } void ui_webview_set_zoom(UiGeneric *g, double zoom) { - + WKWebView *webview = (__bridge WKWebView*)g->obj; + webview.pageZoom = zoom; } double ui_webview_get_zoom(UiGeneric *g) { - return 0; + WKWebView *webview = (__bridge WKWebView*)g->obj; + return webview.pageZoom; }