int main(int argc, char* argv[]) { // Initialize GTK+ gtk_init(&argc, &argv); gdk_threads_init(); GtkWidget *main_window; GdkWindow *gdk_window; createDrawContext(&main_window, &gdk_window); // Create a browser instance WebKitWebView *webView = WEBKIT_WEB_VIEW(webkit_web_view_new()); // make sure the background of the main window is black plz GdkColor blaaack; gdk_color_parse("#000000", &blaaack); gtk_widget_modify_bg(main_window, GTK_STATE_NORMAL, &blaaack); // Put the browser area into the main window gtk_container_add(GTK_CONTAINER(main_window), GTK_WIDGET(webView)); // necessary for ensuring positioning relative to xscreensaver-demo is right gtk_widget_show_all(main_window); // 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(destroyWindow), NULL); g_signal_connect(main_window, "delete-event", G_CALLBACK(destroyWindow), NULL); // transparent background so we dont have any white flashes webkit_web_view_set_transparent(webView, true); int height; int width; gdk_window_get_geometry(gdk_window, NULL, NULL, &width, &height, NULL); if (height < 480 && width < 640) { // make the tiny preview windows look reasonable webkit_web_view_set_full_content_zoom(webView, true); webkit_web_view_set_zoom_level(webView, 0.4); } // set up some webkit settings WebKitWebSettings *settings = webkit_web_view_get_settings(webView); g_object_set (G_OBJECT(settings), "enable-webgl", true, NULL); // accelerated-compositing chokes on my machine, but maybe its my shitty nvidia drivers g_object_set (G_OBJECT(settings), "enable-accelerated-compositing", false, NULL); // select tag and format url wordexp_t exp_result; wordexp(CONFIG_PATH, &exp_result, 0); printf("Loading tags file at %s\n", exp_result.we_wordv[0]); char* tags_path = exp_result.we_wordv[0]; char url[MAX_URL_LENGTH]; char tags[MAX_NUMBER_TAGS][MAX_TAG_LENGTH]; int tags_length = 0; FILE* tags_file; if (tags_path == NULL || (tags_file = fopen(tags_path, "r")) == NULL) { printf("No tag file found. using defaults\n"); int default_tags_length = sizeof(DEFAULT_TAGS) / sizeof(char*); for (int i = 0; i < default_tags_length; ++i) { printf("%d\n", i); strcpy(tags[i], DEFAULT_TAGS[i]); } tags_length = default_tags_length; } else { int i = 0; printf("Iterating through file\n"); while (i < MAX_NUMBER_TAGS && fgets(tags[i], sizeof(tags[0]), tags_file)) { tags[i][strlen(tags[i]) - 1] = '\0'; printf("Got %s!\n", tags[i]); ++i; } tags_length = i; } printf("%d tags found. selecting one.\n", tags_length); srand(time(0)); int index = rand() % tags_length; printf("%d is our index...\n", index); printf("%s selected!\n", tags[index]); sprintf(url, URL_FORMAT, tags[index]); printf("Loading %s\n", url); webkit_web_view_load_uri(webView, url); // Make sure that when the browser area becomes visible, it will get mouse // and keyboard events gtk_widget_grab_focus(GTK_WIDGET(webView)); // hit our callback whenever load-status changes g_signal_connect(G_OBJECT(webView), "notify::load-status", G_CALLBACK(load_status_cb), &url); g_signal_connect(G_OBJECT(webView), "load-error", G_CALLBACK(load_error_cb), &url); // Run the main GTK+ event loop gtk_main(); return 0; }
//----------------------------------------------------------------------------- void Win32Frame::paint (HWND hwnd) { HRGN rgn = CreateRectRgn (0, 0, 0, 0); if (GetUpdateRgn (hwnd, rgn, false) == NULLREGION) { DeleteObject (rgn); return; } inPaint = true; PAINTSTRUCT ps; HDC hdc = BeginPaint (hwnd, &ps); if (hdc) { CRect updateRect ((CCoord)ps.rcPaint.left, (CCoord)ps.rcPaint.top, (CCoord)ps.rcPaint.right, (CCoord)ps.rcPaint.bottom); CRect frameSize; getSize (frameSize); frameSize.offset (-frameSize.left, -frameSize.top); if (deviceContext == 0) deviceContext = createDrawContext (hwnd, hdc, frameSize); if (deviceContext) { deviceContext->setClipRect (updateRect); CDrawContext* drawContext = backBuffer ? backBuffer : deviceContext; drawContext->beginDraw (); DWORD len = GetRegionData (rgn, 0, NULL); if (len) { if (len > updateRegionListSize) { if (updateRegionList) free (updateRegionList); updateRegionListSize = len; updateRegionList = (RGNDATA*) malloc (updateRegionListSize); } GetRegionData (rgn, len, updateRegionList); if (updateRegionList->rdh.nCount > 0) { RECT* rp = (RECT*)updateRegionList->Buffer; for (uint32_t i = 0; i < updateRegionList->rdh.nCount; i++) { CRect ur (rp->left, rp->top, rp->right, rp->bottom); paintRect = ur; drawContext->clearRect (ur); getFrame ()->platformDrawRect (drawContext, ur); rp++; } } else { getFrame ()->platformDrawRect (drawContext, updateRect); } } drawContext->endDraw (); if (backBuffer) { deviceContext->beginDraw (); deviceContext->clearRect (updateRect); backBuffer->copyFrom (deviceContext, updateRect, CPoint (updateRect.left, updateRect.top)); deviceContext->endDraw (); } } } EndPaint (hwnd, &ps); DeleteObject (rgn); inPaint = false; }