3 weeks ago
add more webview API
ui/gtk/webview.c | file | annotate | diff | comparison | revisions | |
ui/gtk/webview.h | file | annotate | diff | comparison | revisions | |
ui/ui/webview.h | file | annotate | diff | comparison | revisions |
--- a/ui/gtk/webview.c Wed Feb 19 22:44:49 2025 +0100 +++ b/ui/gtk/webview.c Thu Feb 20 22:32:58 2025 +0100 @@ -28,19 +28,15 @@ #include "toolkit.h" #include "container.h" -#include "../ui/webview.h" #include "webview.h" #ifdef UI_WEBVIEW -#include <webkit/webkit.h> - UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs args) { UiObject* current = uic_current_obj(obj); GtkWidget *webview = webkit_web_view_new(); - //webkit_web_view_load_uri(WEBKIT_WEB_VIEW(webview), "https://code.unixwork.de"); ui_set_name_and_style(webview, args.name, args.style_class); @@ -48,7 +44,10 @@ if(var) { WebViewData *data = malloc(sizeof(WebViewData)); memset(data, 0, sizeof(WebViewData)); - data->widget = webview; + data->webview = WEBKIT_WEB_VIEW(webview); + WebKitSettings *settings = webkit_web_view_get_settings(data->webview); + data->javascript = webkit_settings_get_enable_javascript(settings); + data->zoom = webkit_web_view_get_zoom_level(data->webview); UiGeneric *value = var->value; value->get = ui_webview_get; @@ -56,7 +55,7 @@ value->set = ui_webview_set; value->obj = data; if(value->value && value->type && !strcmp(value->type, UI_WEBVIEW_OBJECT_TYPE)) { - + // TODO } } @@ -81,22 +80,25 @@ } WebViewData *obj = g->obj; - if(!obj->widget) { + if(!obj->webview) { return 1; } WebViewData *data = value; if(data->type == WEBVIEW_CONTENT_URL) { - webkit_web_view_load_uri(WEBKIT_WEB_VIEW(obj->widget), data->uri); + webkit_web_view_load_uri(obj->webview, data->uri); } else { if(!data->content) { return 1; } GBytes *bytes = g_bytes_new(data->content, data->contentlength); - webkit_web_view_load_bytes(WEBKIT_WEB_VIEW(obj->widget), bytes, data->mimetype, data->encoding, data->uri); + webkit_web_view_load_bytes(obj->webview, bytes, data->mimetype, data->encoding, data->uri); } + ui_webview_enable_javascript(g, data->javascript); + webkit_web_view_set_zoom_level(data->webview, data->zoom); + return 0; } @@ -123,5 +125,53 @@ g->set(g, &data, UI_WEBVIEW_OBJECT_TYPE); } +void ui_webview_reload(UiGeneric *g) { + WebViewData *webview = g->obj; + webkit_web_view_reload(webview->webview); +} + +UiBool ui_webview_can_go_back(UiGeneric *g) { + WebViewData *webview = g->obj; + return webkit_web_view_can_go_back(webview->webview); +} + +UiBool ui_webview_can_go_forward(UiGeneric *g) { + WebViewData *webview = g->obj; + return webkit_web_view_can_go_forward(webview->webview); +} + +void ui_webview_go_back(UiGeneric *g) { + WebViewData *webview = g->obj; + webkit_web_view_go_back(webview->webview); +} + +void ui_webview_go_forward(UiGeneric *g) { + WebViewData *webview = g->obj; + webkit_web_view_go_forward(webview->webview); +} + +const char* ui_webview_get_uri(UiGeneric *g) { + WebViewData *webview = g->obj; + return webkit_web_view_get_uri(webview->webview); +} + +void ui_webview_enable_javascript(UiGeneric *g, UiBool enable) { + WebViewData *webview = g->obj; + WebKitSettings *settings = webkit_web_view_get_settings(webview->webview); + webkit_settings_set_enable_javascript(settings, enable); +} + +void ui_webview_set_zoom(UiGeneric *g, double zoom) { + WebViewData *webview = g->obj; + webkit_web_view_set_zoom_level(webview->webview, zoom); + webview->zoom = zoom; +} + +double ui_webview_get_zoom(UiGeneric *g) { + WebViewData *webview = g->obj; + webview->zoom = webkit_web_view_get_zoom_level(webview->webview); + return webview->zoom; +} + #endif
--- a/ui/gtk/webview.h Wed Feb 19 22:44:49 2025 +0100 +++ b/ui/gtk/webview.h Thu Feb 20 22:32:58 2025 +0100 @@ -28,6 +28,9 @@ #ifndef WEBVIEW_H #define WEBVIEW_H +#include "../ui/webview.h" +#include <webkit/webkit.h> + #ifdef __cplusplus extern "C" { #endif @@ -38,13 +41,16 @@ }; typedef struct WebViewData { - GtkWidget *widget; + WebKitWebView *webview; char *uri; char *mimetype; char *encoding; char *content; size_t contentlength; enum WebViewDataType type; + + double zoom; + UiBool javascript; } WebViewData; void* ui_webview_get(UiGeneric *g);
--- a/ui/ui/webview.h Wed Feb 19 22:44:49 2025 +0100 +++ b/ui/ui/webview.h Thu Feb 20 22:32:58 2025 +0100 @@ -71,6 +71,17 @@ const char *encoding); +void ui_webview_reload(UiGeneric *g); +UiBool ui_webview_can_go_back(UiGeneric *g); +UiBool ui_webview_can_go_forward(UiGeneric *g); +void ui_webview_go_back(UiGeneric *g); +void ui_webview_go_forward(UiGeneric *g); +const char * ui_webview_get_uri(UiGeneric *g); +void ui_webview_enable_javascript(UiGeneric *g, UiBool enable); +void ui_webview_set_zoom(UiGeneric *g, double zoom); +double ui_webview_get_zoom(UiGeneric *g); + + #ifdef __cplusplus } #endif