/* * To compile: * cc test.c -o test $(pkg-config --libs --cflags gtk+-3.0 glib-2.0 cairo gio-2.0 poppler-glib) */ #include #include #include #include #include #include char *file; gboolean draw_cb(GtkWidget *widget, cairo_t *cr, gpointer user_data) { PopplerDocument *document = poppler_document_new_from_file(file, NULL, NULL); PopplerPage *page = poppler_document_get_page(document, 0); cairo_set_source_rgb(cr, 1., 1., 1.); cairo_paint(cr); poppler_page_render(page, cr); g_object_unref(page); g_object_unref(document); } gboolean redraw(gpointer main_ptr) { gtk_widget_queue_draw(GTK_WIDGET(main_ptr)); return TRUE; } int main(int argc, char *argv[]) { gtk_init(&argc, &argv); if(argc < 2) { printf("Syntax: test \n"); exit(0); } GFile *arg = g_file_new_for_commandline_arg(argv[1]); file = g_file_get_uri(arg); g_object_unref(arg); GtkWidget *main = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_size_request(main, 800, 1000); g_signal_connect(main, "draw", G_CALLBACK(draw_cb), NULL); g_signal_connect(main, "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(main); g_idle_add(redraw, main); gtk_main(); }