Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <gtk/gtk.h>
- #include <gdk/gdkx.h>
- #include <gdk/gdkscreen.h>
- #include <cairo.h>
- #include <webkit/webkit.h>
- static void screen_changed(GtkWidget *widget, GdkScreen *old_screen, gpointer user_data);
- static gboolean expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data);
- static void clicked(GtkWindow *win, GdkEventButton *event, gpointer user_data);
- static void location_cb(WebKitWebView *view, const char *uri, gpointer user_data)
- {
- if(webkit_web_view_get_transparent(view)){
- fprintf(stdout,"TRANSPARENT\n");
- }else{
- fprintf(stdout,"NOT TRANSPARENT\n");
- }
- fprintf(stdout,"loaded\n");
- fflush(stdout);
- }
- int main(int argc, char **argv)
- {
- gtk_init(&argc, &argv);
- GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- GdkWindow *gwin;
- GtkWidget* webkit_player = NULL;
- gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
- gtk_window_set_default_size(GTK_WINDOW(window), 400, 400);
- gtk_window_set_title(GTK_WINDOW(window), "Alpha Demo");
- g_signal_connect(G_OBJECT(window), "delete-event", gtk_main_quit, NULL);
- gtk_widget_set_app_paintable(window, TRUE);
- g_signal_connect(G_OBJECT(window), "expose-event", G_CALLBACK(expose), NULL);
- g_signal_connect(G_OBJECT(window), "screen-changed", G_CALLBACK(screen_changed), NULL);
- gtk_window_set_decorated(GTK_WINDOW(window), FALSE);
- gtk_widget_add_events(window, GDK_BUTTON_PRESS_MASK);
- g_signal_connect(G_OBJECT(window), "button-press-event", G_CALLBACK(clicked), NULL);
- webkit_player = webkit_web_view_new();
- webkit_web_view_set_transparent(WEBKIT_WEB_VIEW(webkit_player), TRUE);
- g_signal_connect(webkit_player, "load-finished", G_CALLBACK(location_cb), "file://test.html");
- gtk_container_add(GTK_CONTAINER(window), webkit_player);
- screen_changed(window, NULL, NULL);
- // load the uri
- webkit_web_view_load_string(WEBKIT_WEB_VIEW(webkit_player), "<html><style type='text/css'>body {background: rgba(0,255,0,0.1);}</style><head></head><body><h1>Hello World!</h1></body></html>", NULL, NULL, "file://");
- gtk_widget_show_all(window);
- gwin = gtk_widget_get_window(GTK_WIDGET(window));
- printf("the X11 id is %u\n", GDK_DRAWABLE_XID(gwin));
- gtk_main();
- return 0;
- }
- gboolean supports_alpha = TRUE;
- static void screen_changed(GtkWidget *widget, GdkScreen *old_screen, gpointer userdata)
- {
- /* To check if the display supports alpha channels, get the colormap */
- GdkScreen *screen = gtk_widget_get_screen(widget);
- GdkColormap *colormap = gdk_screen_get_rgba_colormap(screen);
- if (!colormap)
- {
- printf("Your screen does not support alpha channels!\n");
- colormap = gdk_screen_get_rgb_colormap(screen);
- supports_alpha = FALSE;
- }
- else
- {
- printf("Your screen supports alpha channels!\n");
- supports_alpha = TRUE;
- }
- gtk_widget_set_colormap(widget, colormap);
- }
- static gboolean expose(GtkWidget *widget, GdkEventExpose *event, gpointer userdata)
- {
- cairo_t *cr = gdk_cairo_create(widget->window);
- if (supports_alpha)
- cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.0); /* transparent */
- else
- cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); /* opaque white */
- /* draw the background */
- cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
- cairo_paint (cr);
- cairo_destroy(cr);
- return FALSE;
- }
- static void clicked(GtkWindow *win, GdkEventButton *event, gpointer user_data)
- {
- /* toggle window manager frames */
- gtk_window_set_decorated(win, !gtk_window_get_decorated(win));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement