| 27 */ |
27 */ |
| 28 |
28 |
| 29 #import "webview.h" |
29 #import "webview.h" |
| 30 #import "Container.h" |
30 #import "Container.h" |
| 31 |
31 |
| |
32 static UiWebViewData* create_webview_data(void) { |
| |
33 UiWebViewData *data = malloc(sizeof(UiWebViewData)); |
| |
34 memset(data, 0, sizeof(UiWebViewData)); |
| |
35 data->javascript = TRUE; |
| |
36 data->zoom = 1; |
| |
37 return data; |
| |
38 } |
| |
39 |
| 32 UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs *args) { |
40 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); |
41 UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_GENERIC); |
| 34 |
42 |
| 35 WKWebView *webview = [[WKWebView alloc]init]; |
43 WKWebView *webview = [[WKWebView alloc]init]; |
| 36 |
44 |
| 45 value->destroy = ui_webview_destroy; |
53 value->destroy = ui_webview_destroy; |
| 46 value->obj = (__bridge void*)webview; |
54 value->obj = (__bridge void*)webview; |
| 47 if(value->value) { |
55 if(value->value) { |
| 48 ui_webview_set(value, value->value, UI_WEBVIEW_OBJECT_TYPE); |
56 ui_webview_set(value, value->value, UI_WEBVIEW_OBJECT_TYPE); |
| 49 } else { |
57 } else { |
| 50 UiWebViewData *data = malloc(sizeof(UiWebViewData)); |
58 UiWebViewData *data = create_webview_data(); |
| 51 memset(data, 0, sizeof(UiWebViewData)); |
|
| 52 data->webview = (__bridge void*)webview; |
59 data->webview = (__bridge void*)webview; |
| 53 data->javascript = TRUE; |
|
| 54 data->zoom = 1; |
|
| 55 value->value = data; |
60 value->value = data; |
| 56 } |
61 } |
| 57 } |
62 } |
| 58 |
63 |
| 59 return (__bridge void*)webview; |
64 return (__bridge void*)webview; |
| 60 } |
65 } |
| 61 |
66 |
| 62 UiWebViewData* ui_webview_data_clone(UiWebViewData *data) { |
67 UiWebViewData* ui_webview_data_clone(UiWebViewData *data) { |
| 63 UiWebViewData *newdata = malloc(sizeof(UiWebViewData)); |
68 UiWebViewData *newdata = create_webview_data(); |
| 64 memset(newdata, 0, sizeof(UiWebViewData)); |
|
| 65 newdata->zoom = 1; |
|
| 66 newdata->javascript = TRUE; |
|
| 67 |
69 |
| 68 if(data) { |
70 if(data) { |
| 69 newdata->uri = data->uri ? strdup(data->uri) : NULL; |
71 newdata->uri = data->uri ? strdup(data->uri) : NULL; |
| 70 newdata->mimetype = data->mimetype ? strdup(data->mimetype) : NULL; |
72 newdata->mimetype = data->mimetype ? strdup(data->mimetype) : NULL; |
| 71 newdata->encoding = data->encoding ? strdup(data->encoding) : NULL; |
73 newdata->encoding = data->encoding ? strdup(data->encoding) : NULL; |
| 96 |
98 |
| 97 void* ui_webview_get(UiGeneric *g) { |
99 void* ui_webview_get(UiGeneric *g) { |
| 98 UiWebViewData *data = g->value; |
100 UiWebViewData *data = g->value; |
| 99 WKWebView *webview = (__bridge WKWebView*)g->obj; |
101 WKWebView *webview = (__bridge WKWebView*)g->obj; |
| 100 |
102 |
| |
103 if(data == NULL) { |
| |
104 data = create_webview_data(); |
| |
105 data->webview = g->obj; |
| |
106 g->value = data; |
| |
107 } |
| |
108 |
| 101 if(data->type == WEBVIEW_CONTENT_URL) { |
109 if(data->type == WEBVIEW_CONTENT_URL) { |
| 102 (void)ui_webview_get_uri(g); // this updates data->uri |
110 (void)ui_webview_get_uri(g); // this updates data->uri |
| 103 } |
111 } |
| 104 data->zoom = webview.pageZoom; |
112 data->zoom = webview.pageZoom; |
| 105 |
113 |
| 155 |
163 |
| 156 |
164 |
| 157 void ui_webview_load_url(UiGeneric *g, const char *url) { |
165 void ui_webview_load_url(UiGeneric *g, const char *url) { |
| 158 WKWebView *webview = (__bridge WKWebView*)g->obj; |
166 WKWebView *webview = (__bridge WKWebView*)g->obj; |
| 159 UiWebViewData *data = g->value; |
167 UiWebViewData *data = g->value; |
| |
168 |
| |
169 if(data == NULL) { |
| |
170 data = create_webview_data(); |
| |
171 data->webview = g->obj; |
| |
172 g->value = data; |
| |
173 } |
| |
174 |
| 160 data->type = WEBVIEW_CONTENT_URL; |
175 data->type = WEBVIEW_CONTENT_URL; |
| 161 |
176 |
| 162 if(!url) { |
177 if(!url) { |
| 163 url = "about:blank"; |
178 url = "about:blank"; |
| 164 } |
179 } |
| 180 const char *mimetype, |
195 const char *mimetype, |
| 181 const char *encoding) |
196 const char *encoding) |
| 182 { |
197 { |
| 183 UiWebViewData *data = g->value; |
198 UiWebViewData *data = g->value; |
| 184 WKWebView *webview = (__bridge WKWebView*)g->obj; |
199 WKWebView *webview = (__bridge WKWebView*)g->obj; |
| |
200 |
| |
201 if(data == NULL) { |
| |
202 data = create_webview_data(); |
| |
203 data->webview = g->obj; |
| |
204 g->value = data; |
| |
205 } |
| 185 |
206 |
| 186 data->type = WEBVIEW_CONTENT_CONTENT; |
207 data->type = WEBVIEW_CONTENT_CONTENT; |
| 187 |
208 |
| 188 free(data->uri); |
209 free(data->uri); |
| 189 data->uri = NULL; |
210 data->uri = NULL; |