This commit is contained in:
Moritz Lipp 2011-04-18 21:22:35 +02:00
parent 4a8f4df2db
commit 8bcb79ea94
6 changed files with 80 additions and 55 deletions

View file

@ -38,14 +38,11 @@ buffer_changed(girara_session_t* session)
void void
cb_view_vadjustment_value_changed(GtkAdjustment *adjustment, gpointer data) cb_view_vadjustment_value_changed(GtkAdjustment *adjustment, gpointer data)
{ {
g_return_if_fail(data != NULL);
zathura_t* zathura = data; zathura_t* zathura = data;
if (!zathura->document || !zathura->document->pages || !zathura->ui.page_view) { if (!zathura || !zathura->document || !zathura->document->pages || !zathura->ui.page_view) {
return; return;
} }
// FIXME // FIXME
/* get current adjustment values */ /* get current adjustment values */
/*gdouble lower = gtk_adjustment_get_value(adjustment);*/ /*gdouble lower = gtk_adjustment_get_value(adjustment);*/

View file

@ -15,6 +15,7 @@
#include "document.h" #include "document.h"
#include "utils.h" #include "utils.h"
#include "zathura.h" #include "zathura.h"
#include "render.h"
#define LENGTH(x) (sizeof(x)/sizeof((x)[0])) #define LENGTH(x) (sizeof(x)/sizeof((x)[0]))
@ -385,6 +386,7 @@ zathura_page_get(zathura_document_t* document, unsigned int page_id)
page->rendered = false; page->rendered = false;
page->event_box = gtk_event_box_new(); page->event_box = gtk_event_box_new();
page->drawing_area = gtk_drawing_area_new(); page->drawing_area = gtk_drawing_area_new();
g_signal_connect(page->drawing_area, "expose-event", G_CALLBACK(page_expose_event), page);
gtk_container_add(GTK_CONTAINER(page->event_box), page->drawing_area); gtk_container_add(GTK_CONTAINER(page->event_box), page->drawing_area);

View file

@ -22,7 +22,7 @@ render_job(void* data)
g_mutex_unlock(render_thread->lock); g_mutex_unlock(render_thread->lock);
if (render(render_thread->zathura, page) != true) { if (render(render_thread->zathura, page) != true) {
fprintf(stderr, "rendering failed\n"); girara_error("Rendering failed\n");
} }
printf("Rendered %d\n", page->number); printf("Rendered %d\n", page->number);
@ -134,6 +134,10 @@ render_page(render_thread_t* render_thread, zathura_page_t* page)
bool bool
render(zathura_t* zathura, zathura_page_t* page) render(zathura_t* zathura, zathura_page_t* page)
{ {
if (zathura == NULL || page == NULL) {
return false;
}
gdk_threads_enter(); gdk_threads_enter();
g_static_mutex_lock(&(page->lock)); g_static_mutex_lock(&(page->lock));
zathura_image_buffer_t* image_buffer = zathura_page_render(page); zathura_image_buffer_t* image_buffer = zathura_page_render(page);
@ -198,5 +202,29 @@ render_all(zathura_t* zathura)
/* redraw current page */ /* redraw current page */
GtkAdjustment* view_vadjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(zathura->ui.session->gtk.view)); GtkAdjustment* view_vadjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(zathura->ui.session->gtk.view));
cb_view_vadjustment_value_changed(view_vadjustment, NULL); cb_view_vadjustment_value_changed(view_vadjustment, zathura);
}
gboolean
page_expose_event(GtkWidget* widget, GdkEventExpose* event, gpointer data)
{
zathura_page_t* page = data;
g_static_mutex_lock(&(page->lock));
cairo_t* cairo = gdk_cairo_create(page->drawing_area->window);
if (cairo == NULL) {
girara_error("Could not create blank page");
g_static_mutex_unlock(&(page->lock));
return false;
}
cairo_set_source_rgb(cairo, 0, 0, 0);
cairo_rectangle(cairo, 0, 0, page->width, page->height);
cairo_fill(cairo);
cairo_destroy(cairo);
g_static_mutex_unlock(&(page->lock));
return true;
} }

View file

@ -53,4 +53,14 @@ bool render_page(render_thread_t* render_thread, zathura_page_t* page);
*/ */
void render_all(zathura_t* zathura); void render_all(zathura_t* zathura);
/**
* Renders page
*
* @param widget Drawing area
* @param event Event
* @param data Optional data
* @return true if no error occured
*/
gboolean page_expose_event(GtkWidget* widget, GdkEventExpose* event, gpointer data);
#endif // RENDER_H #endif // RENDER_H

View file

@ -12,6 +12,15 @@
#include "utils.h" #include "utils.h"
#include "render.h" #include "render.h"
typedef struct zathura_document_info_s
{
zathura_t* zathura;
const char* path;
const char* password;
} zathura_document_info_t;
gboolean document_info_open(gpointer data);
/* function implementation */ /* function implementation */
zathura_t* zathura_t*
zathura_init(int argc, char* argv[]) zathura_init(int argc, char* argv[])
@ -84,6 +93,17 @@ zathura_init(int argc, char* argv[])
/* configuration */ /* configuration */
config_load_default(zathura); config_load_default(zathura);
if (argc > 1) {
zathura_document_info_t* document_info = malloc(sizeof(zathura_document_info_t));
if (document_info != NULL) {
document_info->zathura = zathura;
document_info->path = argv[1];
document_info->password = (argc >= 2) ? argv[2] : NULL;
g_idle_add(document_info_open, document_info);
}
}
return zathura; return zathura;
error_free: error_free:
@ -117,6 +137,22 @@ zathura_free(zathura_t* zathura)
girara_list_free(zathura->plugins.plugins); girara_list_free(zathura->plugins.plugins);
} }
gboolean
document_info_open(gpointer data)
{
zathura_document_info_t* document_info = data;
g_return_val_if_fail(document_info != NULL, FALSE);
if (document_info->zathura == NULL || document_info->path == NULL) {
free(document_info);
return FALSE;
}
document_open(document_info->zathura, document_info->path, document_info->password);
return FALSE;
}
bool bool
document_open(zathura_t* zathura, const char* path, const char* password) document_open(zathura_t* zathura, const char* path, const char* password)
{ {
@ -132,11 +168,6 @@ document_open(zathura_t* zathura, const char* path, const char* password)
zathura->document = document; zathura->document = document;
/* init view */
if (create_blank_pages(zathura) == false) {
return false;
}
/* view mode */ /* view mode */
int* value = girara_setting_get(zathura->ui.session, "pages-per-row"); int* value = girara_setting_get(zathura->ui.session, "pages-per-row");
int pages_per_row = (value) ? *value : 1; int pages_per_row = (value) ? *value : 1;
@ -203,7 +234,7 @@ page_set(zathura_t* zathura, unsigned int page_id)
} }
GtkAdjustment* view_vadjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(zathura->ui.session->gtk.view)); GtkAdjustment* view_vadjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(zathura->ui.session->gtk.view));
cb_view_vadjustment_value_changed(view_vadjustment, NULL); cb_view_vadjustment_value_changed(view_vadjustment, zathura);
/* update page number */ /* update page number */
zathura->document->current_page_number = page_id; zathura->document->current_page_number = page_id;
@ -249,34 +280,6 @@ page_view_set_mode(zathura_t* zathura, unsigned int pages_per_row)
gtk_widget_show_all(zathura->ui.page_view); gtk_widget_show_all(zathura->ui.page_view);
} }
bool
create_blank_pages(zathura_t* zathura)
{
/* create blank pages */
for (unsigned int i = 0; i < zathura->document->number_of_pages; i++)
{
zathura_page_t* page = zathura->document->pages[i];
g_static_mutex_lock(&(page->lock));
cairo_t* cairo = gdk_cairo_create(page->drawing_area->window);
if (cairo == NULL) {
girara_error("Could not create blank page");
g_static_mutex_unlock(&(page->lock));
return false;
}
cairo_set_source_rgb(cairo, 1, 1, 1);
cairo_rectangle(cairo, 0, 0, page->width, page->height);
cairo_fill(cairo);
cairo_destroy(cairo);
g_static_mutex_unlock(&(page->lock));
}
return true;
}
/* main function */ /* main function */
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
@ -290,13 +293,6 @@ int main(int argc, char* argv[])
return -1; return -1;
} }
if (argc > 1) {
if (!document_open(zathura, argv[1], NULL)) {
printf("error: could not open document\n");
return -1;
}
}
gdk_threads_enter(); gdk_threads_enter();
gtk_main(); gtk_main();
gdk_threads_leave(); gdk_threads_leave();

View file

@ -113,12 +113,4 @@ bool page_set(zathura_t* zathura, unsigned int page_id);
*/ */
void page_view_set_mode(zathura_t* zathura, unsigned int pages_per_row); void page_view_set_mode(zathura_t* zathura, unsigned int pages_per_row);
/**
* Create blank pages
*
* @param zathura The zathura zathura
* @return false if an error occured, otherwise true
*/
bool create_blank_pages(zathura_t* zathura);
#endif // ZATHURA_H #endif // ZATHURA_H