ui/cocoa/webview.m

changeset 1227
dd9f17feae3e
parent 1174
8b8da1adef7d
equal deleted inserted replaced
1226:f38d354623be 1227:dd9f17feae3e
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;

mercurial