ui/cocoa/webview.m

changeset 878
862a57990eb8
parent 876
2131c806440d
equal deleted inserted replaced
877:aff9ad6a54a1 878:862a57990eb8
28 28
29 #import "webview.h" 29 #import "webview.h"
30 #import "Container.h" 30 #import "Container.h"
31 31
32 UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs *args) { 32 UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs *args) {
33 UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_GENERIC);
34
33 WKWebView *webview = [[WKWebView alloc]init]; 35 WKWebView *webview = [[WKWebView alloc]init];
34 36
35 UiLayout layout = UI_ARGS2LAYOUT(args); 37 UiLayout layout = UI_ARGS2LAYOUT(args);
36 ui_container_add(obj, webview, &layout); 38 ui_container_add(obj, webview, &layout);
37 39
38 UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_GENERIC);
39 if(var) { 40 if(var) {
40 UiGeneric *value = var->value; 41 UiGeneric *value = var->value;
41 value->get = ui_webview_get; 42 value->get = ui_webview_get;
42 value->get_type = ui_webview_get_type; 43 value->get_type = ui_webview_get_type;
43 value->set = ui_webview_set; 44 value->set = ui_webview_set;
59 } 60 }
60 61
61 UiWebViewData* ui_webview_data_clone(UiWebViewData *data) { 62 UiWebViewData* ui_webview_data_clone(UiWebViewData *data) {
62 UiWebViewData *newdata = malloc(sizeof(UiWebViewData)); 63 UiWebViewData *newdata = malloc(sizeof(UiWebViewData));
63 memset(newdata, 0, sizeof(UiWebViewData)); 64 memset(newdata, 0, sizeof(UiWebViewData));
65 newdata->zoom = 1;
66 newdata->javascript = TRUE;
64 67
65 if(data) { 68 if(data) {
66 newdata->uri = data->uri ? strdup(data->uri) : NULL; 69 newdata->uri = data->uri ? strdup(data->uri) : NULL;
67 newdata->mimetype = data->mimetype ? strdup(data->mimetype) : NULL; 70 newdata->mimetype = data->mimetype ? strdup(data->mimetype) : NULL;
68 newdata->encoding = data->encoding ? strdup(data->encoding) : NULL; 71 newdata->encoding = data->encoding ? strdup(data->encoding) : NULL;
96 WKWebView *webview = (__bridge WKWebView*)g->obj; 99 WKWebView *webview = (__bridge WKWebView*)g->obj;
97 100
98 if(data->type == WEBVIEW_CONTENT_URL) { 101 if(data->type == WEBVIEW_CONTENT_URL) {
99 (void)ui_webview_get_uri(g); // this updates data->uri 102 (void)ui_webview_get_uri(g); // this updates data->uri
100 } 103 }
104 data->zoom = webview.pageZoom;
101 105
102 return ui_webview_data_clone(g->value); 106 return ui_webview_data_clone(g->value);
103 } 107 }
104 108
105 const char* ui_webview_get_type(UiGeneric *g) { 109 const char* ui_webview_get_type(UiGeneric *g) {
116 ui_webview_data_free(g->value); 120 ui_webview_data_free(g->value);
117 g->value = ui_webview_data_clone(data); 121 g->value = ui_webview_data_clone(data);
118 122
119 WKWebView *webview = (__bridge WKWebView*)g->obj; 123 WKWebView *webview = (__bridge WKWebView*)g->obj;
120 UiWebViewData *webd = data; 124 UiWebViewData *webd = data;
121 if(webd->type == WEBVIEW_CONTENT_URL && webd->uri) { 125 if(webd->type == WEBVIEW_CONTENT_URL) {
122 NSURL *url = [NSURL URLWithString:[[NSString alloc] initWithUTF8String:webd->uri]]; 126 const char *uri = webd->uri ? webd->uri : "about:blank";
127 NSURL *url = [NSURL URLWithString:[[NSString alloc] initWithUTF8String:uri]];
123 if(url) { 128 if(url) {
124 NSURLRequest *req = [NSURLRequest requestWithURL:url]; 129 NSURLRequest *req = [NSURLRequest requestWithURL:url];
125 if(req) { 130 if(req) {
126 [webview loadRequest:req]; 131 [webview loadRequest:req];
127 } 132 }
128 } 133 }
129 } else if(webd->content) { 134 } else {
130 // TODO 135 NSString *mimetype = [[NSString alloc]initWithUTF8String: webd->mimetype ? webd->mimetype : "text/plain"];
131 } 136 NSString *encoding = [[NSString alloc]initWithUTF8String: webd->encoding ? webd->encoding : "UTF-8"];
137 NSString *urlStr = [[NSString alloc]initWithUTF8String: webd->uri ? webd->uri : "file:///"];
138 NSURL *url = [NSURL URLWithString:urlStr];
139 NSData *content = [NSData dataWithBytes:webd->content length:webd->contentlength];
140 if(!url) {
141 url = [NSURL URLWithString:@"about:blank"];
142 }
143 [webview loadData:content MIMEType:mimetype characterEncodingName:encoding baseURL:url];
144 }
145
146 webview.pageZoom = webd->zoom;
132 147
133 return 1; 148 return 1;
134 } 149 }
135 150
136 void ui_webview_destroy(UiGeneric *g) { 151 void ui_webview_destroy(UiGeneric *g) {
143 WKWebView *webview = (__bridge WKWebView*)g->obj; 158 WKWebView *webview = (__bridge WKWebView*)g->obj;
144 UiWebViewData *data = g->value; 159 UiWebViewData *data = g->value;
145 data->type = WEBVIEW_CONTENT_URL; 160 data->type = WEBVIEW_CONTENT_URL;
146 161
147 if(!url) { 162 if(!url) {
148 url = "abount:blank"; 163 url = "about:blank";
149 } 164 }
150 165
151 NSURL *nsurl = [NSURL URLWithString:[[NSString alloc] initWithUTF8String:url]]; 166 NSURL *nsurl = [NSURL URLWithString:[[NSString alloc] initWithUTF8String:url]];
152 if(nsurl) { 167 if(nsurl) {
153 NSURLRequest *req = [NSURLRequest requestWithURL:nsurl]; 168 NSURLRequest *req = [NSURLRequest requestWithURL:nsurl];
242 } 257 }
243 return data->uri; 258 return data->uri;
244 } 259 }
245 260
246 void ui_webview_enable_javascript(UiGeneric *g, UiBool enable) { 261 void ui_webview_enable_javascript(UiGeneric *g, UiBool enable) {
247 262 // unsupported
248 } 263 }
249 264
250 void ui_webview_set_zoom(UiGeneric *g, double zoom) { 265 void ui_webview_set_zoom(UiGeneric *g, double zoom) {
251 266 WKWebView *webview = (__bridge WKWebView*)g->obj;
267 webview.pageZoom = zoom;
252 } 268 }
253 269
254 double ui_webview_get_zoom(UiGeneric *g) { 270 double ui_webview_get_zoom(UiGeneric *g) {
255 return 0; 271 WKWebView *webview = (__bridge WKWebView*)g->obj;
256 } 272 return webview.pageZoom;
273 }

mercurial