コード例 #1
0
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;
}
コード例 #2
0
ファイル: win32frame.cpp プロジェクト: DaniM/lyngo
//-----------------------------------------------------------------------------
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;
}