mirror of
https://git.pwmt.org/pwmt/zathura.git
synced 2024-12-29 13:46:01 +01:00
Removed render thread
This commit removes the render thread and provides one global drawing area that is used to show the pages.
This commit is contained in:
parent
bc329b0601
commit
5b918ca16e
1 changed files with 34 additions and 105 deletions
137
zathura.c
137
zathura.c
|
@ -111,8 +111,6 @@ typedef struct
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
PopplerPage *page;
|
PopplerPage *page;
|
||||||
cairo_surface_t *surface;
|
|
||||||
GtkWidget *drawing_area;
|
|
||||||
pthread_mutex_t lock;
|
pthread_mutex_t lock;
|
||||||
} Page;
|
} Page;
|
||||||
|
|
||||||
|
@ -140,6 +138,7 @@ struct
|
||||||
GtkEntry *inputbar;
|
GtkEntry *inputbar;
|
||||||
GtkWidget *index;
|
GtkWidget *index;
|
||||||
GtkWidget *information;
|
GtkWidget *information;
|
||||||
|
GtkWidget *drawing_area;
|
||||||
} UI;
|
} UI;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
|
@ -180,7 +179,6 @@ struct
|
||||||
{
|
{
|
||||||
pthread_mutex_t scale_lock;
|
pthread_mutex_t scale_lock;
|
||||||
pthread_mutex_t rotate_lock;
|
pthread_mutex_t rotate_lock;
|
||||||
pthread_mutex_t render_lock;
|
|
||||||
pthread_mutex_t search_lock;
|
pthread_mutex_t search_lock;
|
||||||
pthread_mutex_t viewport_lock;
|
pthread_mutex_t viewport_lock;
|
||||||
} Lock;
|
} Lock;
|
||||||
|
@ -200,8 +198,8 @@ struct
|
||||||
int number_of_pages;
|
int number_of_pages;
|
||||||
int scale;
|
int scale;
|
||||||
int rotate;
|
int rotate;
|
||||||
pthread_t render_thread;
|
|
||||||
pthread_t search_thread;
|
pthread_t search_thread;
|
||||||
|
cairo_surface_t *surface;
|
||||||
} PDF;
|
} PDF;
|
||||||
|
|
||||||
} Zathura;
|
} Zathura;
|
||||||
|
@ -221,7 +219,6 @@ void switch_view(GtkWidget*);
|
||||||
GtkEventBox* createCompletionRow(GtkBox*, char*, char*, gboolean);
|
GtkEventBox* createCompletionRow(GtkBox*, char*, char*, gboolean);
|
||||||
|
|
||||||
/* thread declaration */
|
/* thread declaration */
|
||||||
void* render(void*);
|
|
||||||
void* search(void*);
|
void* search(void*);
|
||||||
|
|
||||||
/* shortcut declarations */
|
/* shortcut declarations */
|
||||||
|
@ -287,7 +284,6 @@ init_zathura()
|
||||||
/* mutexes */
|
/* mutexes */
|
||||||
pthread_mutex_init(&(Zathura.Lock.scale_lock), NULL);
|
pthread_mutex_init(&(Zathura.Lock.scale_lock), NULL);
|
||||||
pthread_mutex_init(&(Zathura.Lock.rotate_lock), NULL);
|
pthread_mutex_init(&(Zathura.Lock.rotate_lock), NULL);
|
||||||
pthread_mutex_init(&(Zathura.Lock.render_lock), NULL);
|
|
||||||
pthread_mutex_init(&(Zathura.Lock.search_lock), NULL);
|
pthread_mutex_init(&(Zathura.Lock.search_lock), NULL);
|
||||||
pthread_mutex_init(&(Zathura.Lock.viewport_lock), NULL);
|
pthread_mutex_init(&(Zathura.Lock.viewport_lock), NULL);
|
||||||
|
|
||||||
|
@ -325,6 +321,7 @@ init_zathura()
|
||||||
Zathura.UI.continuous = GTK_BOX(gtk_vbox_new(FALSE, 0));
|
Zathura.UI.continuous = GTK_BOX(gtk_vbox_new(FALSE, 0));
|
||||||
Zathura.UI.view = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL));
|
Zathura.UI.view = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL));
|
||||||
Zathura.UI.viewport = GTK_VIEWPORT(gtk_viewport_new(NULL, NULL));
|
Zathura.UI.viewport = GTK_VIEWPORT(gtk_viewport_new(NULL, NULL));
|
||||||
|
Zathura.UI.drawing_area = gtk_drawing_area_new();
|
||||||
Zathura.UI.statusbar = gtk_event_box_new();
|
Zathura.UI.statusbar = gtk_event_box_new();
|
||||||
Zathura.UI.statusbar_entries = GTK_BOX(gtk_hbox_new(FALSE, 0));
|
Zathura.UI.statusbar_entries = GTK_BOX(gtk_hbox_new(FALSE, 0));
|
||||||
Zathura.UI.inputbar = GTK_ENTRY(gtk_entry_new());
|
Zathura.UI.inputbar = GTK_ENTRY(gtk_entry_new());
|
||||||
|
@ -354,6 +351,11 @@ init_zathura()
|
||||||
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(Zathura.UI.view), GTK_POLICY_NEVER, GTK_POLICY_NEVER);
|
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(Zathura.UI.view), GTK_POLICY_NEVER, GTK_POLICY_NEVER);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* drawing area */
|
||||||
|
gtk_widget_modify_bg(GTK_WIDGET(Zathura.UI.drawing_area), GTK_STATE_NORMAL, &(Zathura.Style.default_bg));
|
||||||
|
gtk_widget_show(Zathura.UI.drawing_area);
|
||||||
|
g_signal_connect(G_OBJECT(Zathura.UI.drawing_area), "expose-event", G_CALLBACK(cb_draw), NULL);
|
||||||
|
|
||||||
/* statusbar */
|
/* statusbar */
|
||||||
gtk_widget_modify_bg(GTK_WIDGET(Zathura.UI.statusbar), GTK_STATE_NORMAL, &(Zathura.Style.statusbar_bg));
|
gtk_widget_modify_bg(GTK_WIDGET(Zathura.UI.statusbar), GTK_STATE_NORMAL, &(Zathura.Style.statusbar_bg));
|
||||||
|
|
||||||
|
@ -458,9 +460,9 @@ draw(int page_id)
|
||||||
pthread_mutex_lock(&(Zathura.PDF.pages[page_id]->lock));
|
pthread_mutex_lock(&(Zathura.PDF.pages[page_id]->lock));
|
||||||
Page *current_page = Zathura.PDF.pages[page_id];
|
Page *current_page = Zathura.PDF.pages[page_id];
|
||||||
|
|
||||||
if(current_page->surface)
|
if(Zathura.PDF.surface)
|
||||||
cairo_surface_destroy(current_page->surface);
|
cairo_surface_destroy(Zathura.PDF.surface);
|
||||||
current_page->surface = NULL;
|
Zathura.PDF.surface = NULL;
|
||||||
|
|
||||||
poppler_page_get_size(current_page->page, &page_width, &page_height);
|
poppler_page_get_size(current_page->page, &page_width, &page_height);
|
||||||
|
|
||||||
|
@ -476,8 +478,8 @@ draw(int page_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
cairo_t *cairo;
|
cairo_t *cairo;
|
||||||
current_page->surface = cairo_image_surface_create(CAIRO_FORMAT_RGB24, width, height);
|
Zathura.PDF.surface = cairo_image_surface_create(CAIRO_FORMAT_RGB24, width, height);
|
||||||
cairo = cairo_create(current_page->surface);
|
cairo = cairo_create(Zathura.PDF.surface);
|
||||||
|
|
||||||
cairo_save(cairo);
|
cairo_save(cairo);
|
||||||
cairo_set_source_rgb(cairo, 1, 1, 1);
|
cairo_set_source_rgb(cairo, 1, 1, 1);
|
||||||
|
@ -512,18 +514,18 @@ draw(int page_id)
|
||||||
cairo_restore(cairo);
|
cairo_restore(cairo);
|
||||||
cairo_destroy(cairo);
|
cairo_destroy(cairo);
|
||||||
|
|
||||||
unsigned char* image = cairo_image_surface_get_data(current_page->surface);
|
|
||||||
int x, y, z = 0;
|
|
||||||
|
|
||||||
if(Zathura.Global.reverse_video)
|
if(Zathura.Global.reverse_video)
|
||||||
{
|
{
|
||||||
for(x = 0; x < cairo_image_surface_get_width(current_page->surface); x++)
|
unsigned char* image = cairo_image_surface_get_data(Zathura.PDF.surface);
|
||||||
for(y = 0; y < cairo_image_surface_get_height(current_page->surface) * 4; y++)
|
int x, y, z = 0;
|
||||||
|
|
||||||
|
for(x = 0; x < cairo_image_surface_get_width(Zathura.PDF.surface); x++)
|
||||||
|
for(y = 0; y < cairo_image_surface_get_height(Zathura.PDF.surface) * 4; y++)
|
||||||
image[z++] ^= 0x00FFFFFF;
|
image[z++] ^= 0x00FFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_widget_set_size_request(current_page->drawing_area, width, height);
|
gtk_widget_set_size_request(Zathura.UI.drawing_area, width, height);
|
||||||
gtk_widget_queue_draw(current_page->drawing_area);
|
gtk_widget_queue_draw(Zathura.UI.drawing_area);
|
||||||
pthread_mutex_unlock(&(Zathura.PDF.pages[page_id]->lock));
|
pthread_mutex_unlock(&(Zathura.PDF.pages[page_id]->lock));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -553,9 +555,7 @@ change_mode(int mode)
|
||||||
void
|
void
|
||||||
highlight_result(int page_id, PopplerRectangle* rectangle)
|
highlight_result(int page_id, PopplerRectangle* rectangle)
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(&(Zathura.PDF.pages[page_id]->lock));
|
cairo_t *cairo = cairo_create(Zathura.PDF.surface);
|
||||||
cairo_t *cairo = cairo_create(Zathura.PDF.pages[page_id]->surface);
|
|
||||||
pthread_mutex_unlock(&(Zathura.PDF.pages[page_id]->lock));
|
|
||||||
cairo_set_source_rgba(cairo, Zathura.Style.search_highlight.red, Zathura.Style.search_highlight.green,
|
cairo_set_source_rgba(cairo, Zathura.Style.search_highlight.red, Zathura.Style.search_highlight.green,
|
||||||
Zathura.Style.search_highlight.blue, TRANSPARENCY);
|
Zathura.Style.search_highlight.blue, TRANSPARENCY);
|
||||||
|
|
||||||
|
@ -741,9 +741,8 @@ set_page(int page)
|
||||||
|
|
||||||
Zathura.PDF.page_number = page;
|
Zathura.PDF.page_number = page;
|
||||||
Zathura.State.pages = g_strdup_printf("[%i/%i]", page + 1, Zathura.PDF.number_of_pages);
|
Zathura.State.pages = g_strdup_printf("[%i/%i]", page + 1, Zathura.PDF.number_of_pages);
|
||||||
pthread_mutex_lock(&(Zathura.PDF.pages[page]->lock));
|
switch_view(Zathura.UI.drawing_area);
|
||||||
switch_view(Zathura.PDF.pages[page]->drawing_area);
|
draw(page);
|
||||||
pthread_mutex_unlock(&(Zathura.PDF.pages[page]->lock));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -762,22 +761,6 @@ switch_view(GtkWidget* widget)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* thread implementation */
|
/* thread implementation */
|
||||||
void*
|
|
||||||
render(void* parameter)
|
|
||||||
{
|
|
||||||
if(!Zathura.PDF.document)
|
|
||||||
pthread_exit(NULL);
|
|
||||||
|
|
||||||
intptr_t t = (intptr_t) parameter;
|
|
||||||
int begin_page = (int) t;
|
|
||||||
|
|
||||||
int page;
|
|
||||||
for(page = 0; page < Zathura.PDF.number_of_pages; page++)
|
|
||||||
draw((begin_page + page) % Zathura.PDF.number_of_pages);
|
|
||||||
|
|
||||||
pthread_exit(NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void* search(void* parameter)
|
void* search(void* parameter)
|
||||||
{
|
{
|
||||||
Argument* argument = (Argument*) parameter;
|
Argument* argument = (Argument*) parameter;
|
||||||
|
@ -889,31 +872,18 @@ sc_navigate(Argument* argument)
|
||||||
void
|
void
|
||||||
sc_revert_video(Argument* argument)
|
sc_revert_video(Argument* argument)
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(&(Zathura.Lock.render_lock));
|
|
||||||
if(Zathura.PDF.render_thread)
|
|
||||||
pthread_cancel(Zathura.PDF.render_thread);
|
|
||||||
|
|
||||||
Zathura.Global.reverse_video = !Zathura.Global.reverse_video;
|
Zathura.Global.reverse_video = !Zathura.Global.reverse_video;
|
||||||
|
draw(Zathura.PDF.page_number);
|
||||||
intptr_t t = Zathura.PDF.page_number;
|
|
||||||
pthread_create(&(Zathura.PDF.render_thread), NULL, render, (gpointer) t);
|
|
||||||
pthread_mutex_unlock(&(Zathura.Lock.render_lock));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
sc_rotate(Argument* argument)
|
sc_rotate(Argument* argument)
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(&(Zathura.Lock.render_lock));
|
|
||||||
if(Zathura.PDF.render_thread)
|
|
||||||
pthread_cancel(Zathura.PDF.render_thread);
|
|
||||||
|
|
||||||
pthread_mutex_lock(&(Zathura.Lock.rotate_lock));
|
pthread_mutex_lock(&(Zathura.Lock.rotate_lock));
|
||||||
Zathura.PDF.rotate = (Zathura.PDF.rotate + 90) % 360;
|
Zathura.PDF.rotate = (Zathura.PDF.rotate + 90) % 360;
|
||||||
pthread_mutex_unlock(&(Zathura.Lock.rotate_lock));
|
pthread_mutex_unlock(&(Zathura.Lock.rotate_lock));
|
||||||
|
|
||||||
intptr_t t = Zathura.PDF.page_number;
|
draw(Zathura.PDF.page_number);
|
||||||
pthread_create(&(Zathura.PDF.render_thread), NULL, render, (gpointer) t);
|
|
||||||
pthread_mutex_unlock(&(Zathura.Lock.render_lock));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1008,9 +978,7 @@ sc_toggle_index(Argument* argument)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(&(Zathura.PDF.pages[Zathura.PDF.page_number]->lock));
|
switch_view(Zathura.UI.drawing_area);
|
||||||
switch_view( Zathura.PDF.pages[Zathura.PDF.page_number]->drawing_area );
|
|
||||||
pthread_mutex_unlock(&(Zathura.PDF.pages[Zathura.PDF.page_number]->lock));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
show = !show;
|
show = !show;
|
||||||
|
@ -1368,21 +1336,12 @@ cmd_close(int argc, char** argv)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check for current render thread */
|
|
||||||
pthread_mutex_lock(&(Zathura.Lock.render_lock));
|
|
||||||
if(Zathura.PDF.render_thread)
|
|
||||||
pthread_cancel(Zathura.PDF.render_thread);
|
|
||||||
pthread_mutex_unlock(&(Zathura.Lock.render_lock));
|
|
||||||
|
|
||||||
/* clean up pages */
|
/* clean up pages */
|
||||||
int i;
|
int i;
|
||||||
for(i = 0; i < Zathura.PDF.number_of_pages; i++)
|
for(i = 0; i < Zathura.PDF.number_of_pages; i++)
|
||||||
{
|
{
|
||||||
Page* current_page = Zathura.PDF.pages[i];
|
Page* current_page = Zathura.PDF.pages[i];
|
||||||
g_object_unref(current_page->page);
|
g_object_unref(current_page->page);
|
||||||
if(current_page->surface)
|
|
||||||
cairo_surface_destroy(current_page->surface);
|
|
||||||
gtk_widget_destroy(current_page->drawing_area);
|
|
||||||
pthread_mutex_destroy(¤t_page->lock);
|
pthread_mutex_destroy(¤t_page->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1586,9 +1545,7 @@ cmd_info(int argc, char** argv)
|
||||||
switch_view(Zathura.UI.information);
|
switch_view(Zathura.UI.information);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(&(Zathura.PDF.pages[Zathura.PDF.page_number]->lock));
|
switch_view(Zathura.UI.drawing_area);
|
||||||
switch_view( Zathura.PDF.pages[Zathura.PDF.page_number]->drawing_area );
|
|
||||||
pthread_mutex_unlock(&(Zathura.PDF.pages[Zathura.PDF.page_number]->lock));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
show = !show;
|
show = !show;
|
||||||
|
@ -1645,24 +1602,11 @@ cmd_open(int argc, char** argv)
|
||||||
{
|
{
|
||||||
Zathura.PDF.pages[i] = malloc(sizeof(Page));
|
Zathura.PDF.pages[i] = malloc(sizeof(Page));
|
||||||
Zathura.PDF.pages[i]->page = poppler_document_get_page(Zathura.PDF.document, i);
|
Zathura.PDF.pages[i]->page = poppler_document_get_page(Zathura.PDF.document, i);
|
||||||
Zathura.PDF.pages[i]->surface = NULL;
|
|
||||||
Zathura.PDF.pages[i]->drawing_area = gtk_drawing_area_new();
|
|
||||||
pthread_mutex_init(&(Zathura.PDF.pages[i]->lock), NULL);
|
pthread_mutex_init(&(Zathura.PDF.pages[i]->lock), NULL);
|
||||||
|
|
||||||
gtk_widget_modify_bg(GTK_WIDGET(Zathura.PDF.pages[i]->drawing_area), GTK_STATE_NORMAL, &(Zathura.Style.default_bg));
|
|
||||||
gtk_widget_show(Zathura.PDF.pages[i]->drawing_area);
|
|
||||||
|
|
||||||
intptr_t t = i;
|
|
||||||
g_signal_connect(G_OBJECT(Zathura.PDF.pages[i]->drawing_area), "expose-event", G_CALLBACK(cb_draw), (gpointer) t);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* render pages */
|
/* render pages */
|
||||||
pthread_mutex_lock(&(Zathura.Lock.render_lock));
|
draw(0);
|
||||||
if(Zathura.PDF.render_thread)
|
|
||||||
pthread_cancel(Zathura.PDF.render_thread);
|
|
||||||
|
|
||||||
pthread_create(&(Zathura.PDF.render_thread), NULL, render, NULL);
|
|
||||||
pthread_mutex_unlock(&(Zathura.Lock.render_lock));
|
|
||||||
|
|
||||||
set_page(0);
|
set_page(0);
|
||||||
update_status();
|
update_status();
|
||||||
|
@ -1749,13 +1693,7 @@ cmd_set(int argc, char** argv)
|
||||||
if(!Zathura.PDF.document)
|
if(!Zathura.PDF.document)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
pthread_mutex_lock(&(Zathura.Lock.render_lock));
|
draw(Zathura.PDF.page_number);
|
||||||
if(Zathura.PDF.render_thread)
|
|
||||||
pthread_cancel(Zathura.PDF.render_thread);
|
|
||||||
|
|
||||||
intptr_t t = Zathura.PDF.page_number;
|
|
||||||
pthread_create(&(Zathura.PDF.render_thread), NULL, render, (gpointer) t);
|
|
||||||
pthread_mutex_unlock(&(Zathura.Lock.render_lock));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2039,13 +1977,7 @@ bcmd_zoom(char* buffer, Argument* argument)
|
||||||
Zathura.PDF.scale = 100;
|
Zathura.PDF.scale = 100;
|
||||||
pthread_mutex_unlock(&(Zathura.Lock.scale_lock));
|
pthread_mutex_unlock(&(Zathura.Lock.scale_lock));
|
||||||
|
|
||||||
pthread_mutex_lock(&(Zathura.Lock.render_lock));
|
draw(Zathura.PDF.page_number);
|
||||||
if(Zathura.PDF.render_thread)
|
|
||||||
pthread_cancel(Zathura.PDF.render_thread);
|
|
||||||
|
|
||||||
intptr_t t = Zathura.PDF.page_number;
|
|
||||||
pthread_create(&(Zathura.PDF.render_thread), NULL, render, (gpointer) t);
|
|
||||||
pthread_mutex_unlock(&(Zathura.Lock.render_lock));
|
|
||||||
update_status();
|
update_status();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2074,7 +2006,6 @@ cb_destroy(GtkWidget* widget, gpointer data)
|
||||||
/* mutexes */
|
/* mutexes */
|
||||||
pthread_mutex_destroy(&(Zathura.Lock.scale_lock));
|
pthread_mutex_destroy(&(Zathura.Lock.scale_lock));
|
||||||
pthread_mutex_destroy(&(Zathura.Lock.rotate_lock));
|
pthread_mutex_destroy(&(Zathura.Lock.rotate_lock));
|
||||||
pthread_mutex_destroy(&(Zathura.Lock.render_lock));
|
|
||||||
pthread_mutex_destroy(&(Zathura.Lock.search_lock));
|
pthread_mutex_destroy(&(Zathura.Lock.search_lock));
|
||||||
pthread_mutex_destroy(&(Zathura.Lock.viewport_lock));
|
pthread_mutex_destroy(&(Zathura.Lock.viewport_lock));
|
||||||
|
|
||||||
|
@ -2085,8 +2016,8 @@ cb_destroy(GtkWidget* widget, gpointer data)
|
||||||
|
|
||||||
gboolean cb_draw(GtkWidget* widget, GdkEventExpose* expose, gpointer data)
|
gboolean cb_draw(GtkWidget* widget, GdkEventExpose* expose, gpointer data)
|
||||||
{
|
{
|
||||||
intptr_t t = (intptr_t) data;
|
/*intptr_t t = (intptr_t) data;*/
|
||||||
int page_id = (int) t;
|
int page_id = Zathura.PDF.page_number; /* (int) t; */
|
||||||
|
|
||||||
if(page_id < 0 || page_id > Zathura.PDF.number_of_pages)
|
if(page_id < 0 || page_id > Zathura.PDF.number_of_pages)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -2132,11 +2063,9 @@ gboolean cb_draw(GtkWidget* widget, GdkEventExpose* expose, gpointer data)
|
||||||
offset_y = 0;
|
offset_y = 0;
|
||||||
|
|
||||||
|
|
||||||
pthread_mutex_lock(&(Zathura.PDF.pages[page_id]->lock));
|
cairo_set_source_surface(cairo, Zathura.PDF.surface, offset_x, offset_y);
|
||||||
cairo_set_source_surface(cairo, Zathura.PDF.pages[page_id]->surface, offset_x, offset_y);
|
|
||||||
cairo_paint(cairo);
|
cairo_paint(cairo);
|
||||||
cairo_destroy(cairo);
|
cairo_destroy(cairo);
|
||||||
pthread_mutex_unlock(&(Zathura.PDF.pages[page_id]->lock));
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue