-
-
Save dfrankland/959d05152693ebe8cef8770db2ca4001 to your computer and use it in GitHub Desktop.
This program will create an offscreen(invisible) webkit-web-view, and take a screenshot of the loaded document, the document/URL is passed as a command line argument to the program
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <gtk/gtk.h> | |
#include <webkit/webkit.h> | |
static void destroyWindowCb(GtkWidget* widget, GtkWidget* window); | |
static gboolean closeWebViewCb(WebKitWebView* webView, GtkWidget* window); | |
static void | |
webkit_render_cb(WebKitWebView *webview, | |
WebKitWebFrame *webframe, | |
gpointer data) | |
{ | |
cairo_surface_t *surface = webkit_web_view_get_snapshot(webview); | |
cairo_surface_write_to_png(surface,"img.png"); | |
} | |
int main(int argc, char* argv[]) | |
{ | |
// Initialize GTK+ | |
gtk_init(&argc, &argv); | |
// Create an 800x600 offscreeen window that will contain the browser instance | |
GtkWidget *main_window = gtk_offscreen_window_new(); | |
gtk_window_set_default_size(GTK_WINDOW(main_window), 800, 600); | |
// Create a browser instance | |
WebKitWebView *webView = WEBKIT_WEB_VIEW(webkit_web_view_new()); | |
// Create a scrollable area, and put the browser instance into it | |
GtkWidget *scrolledWindow = gtk_scrolled_window_new(NULL, NULL); | |
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow), | |
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); | |
gtk_container_add(GTK_CONTAINER(scrolledWindow), GTK_WIDGET(webView)); | |
// Set up callbacks so that if either the main window or the browser instance is | |
// closed, the program will exit | |
g_signal_connect(main_window, "destroy", G_CALLBACK(destroyWindowCb), NULL); | |
g_signal_connect(webView, "close-web-view", G_CALLBACK(closeWebViewCb), main_window); | |
//When the load is finished we grab a screenshot of the loaded document. | |
g_signal_connect(webView,"document-load-finished",G_CALLBACK(webkit_render_cb),NULL); | |
g_signal_connect(webView,"document-load-finished",G_CALLBACK(destroyWindowCb),NULL); | |
// Put the scrollable area into the main window | |
gtk_container_add(GTK_CONTAINER(main_window), scrolledWindow); | |
// Load a web page into the browser instance | |
webkit_web_view_load_uri(webView, argv[1]); | |
// Make sure that when the browser area becomes visible, it will get mouse | |
// and keyboard events | |
gtk_widget_grab_focus(GTK_WIDGET(webView)); | |
// Make sure the main window and all its contents are visible | |
gtk_widget_show_all(main_window); | |
// Run the main GTK+ event loop | |
gtk_main(); | |
return 0; | |
} | |
static void destroyWindowCb(GtkWidget* widget, GtkWidget* window) | |
{ | |
gtk_main_quit(); | |
} | |
static gboolean closeWebViewCb(WebKitWebView* webView, GtkWidget* window) | |
{ | |
gtk_widget_destroy(window); | |
return TRUE; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment