mirror of
https://git.pwmt.org/pwmt/zathura.git
synced 2024-12-29 12:15:59 +01:00
Re-factor
This commit is contained in:
parent
5291634f77
commit
16bc86c195
1 changed files with 47 additions and 31 deletions
|
@ -699,6 +699,50 @@ recolor(ZathuraRendererPrivate* priv, zathura_page_t* page, unsigned int page_wi
|
||||||
cairo_surface_mark_dirty(surface);
|
cairo_surface_mark_dirty(surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
invoke_completed_signal(render_job_t* job, cairo_surface_t* surface)
|
||||||
|
{
|
||||||
|
emit_completed_signal_t* ecs = g_try_malloc0(sizeof(emit_completed_signal_t));
|
||||||
|
if (ecs == NULL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ecs->job = job;
|
||||||
|
ecs->surface = cairo_surface_reference(surface);
|
||||||
|
|
||||||
|
/* emit signal from the main context, i.e. the main thread */
|
||||||
|
g_main_context_invoke(NULL, emit_completed_signal, ecs);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
render_to_cairo_surface(cairo_surface_t* surface, zathura_page_t* page, ZathuraRenderer* renderer, double real_scale)
|
||||||
|
{
|
||||||
|
cairo_t* cairo = cairo_create(surface);
|
||||||
|
if (cairo == NULL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
cairo_save(cairo);
|
||||||
|
cairo_set_source_rgb(cairo, 1, 1, 1);
|
||||||
|
cairo_paint(cairo);
|
||||||
|
cairo_restore(cairo);
|
||||||
|
cairo_save(cairo);
|
||||||
|
|
||||||
|
/* apply scale (used by e.g. Poppler as pixels per point) */
|
||||||
|
if (fabs(real_scale - 1.0f) > FLT_EPSILON) {
|
||||||
|
cairo_scale(cairo, real_scale, real_scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
zathura_renderer_lock(renderer);
|
||||||
|
const int err = zathura_page_render(page, cairo, false);
|
||||||
|
zathura_renderer_unlock(renderer);
|
||||||
|
cairo_restore(cairo);
|
||||||
|
cairo_destroy(cairo);
|
||||||
|
|
||||||
|
return err == ZATHURA_ERROR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
render(render_job_t* job, ZathuraRenderRequest* request, ZathuraRenderer* renderer)
|
render(render_job_t* job, ZathuraRenderRequest* request, ZathuraRenderer* renderer)
|
||||||
{
|
{
|
||||||
|
@ -739,29 +783,8 @@ render(render_job_t* job, ZathuraRenderRequest* request, ZathuraRenderer* render
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
cairo_t* cairo = cairo_create(surface);
|
/* actually render to the surface */
|
||||||
if (cairo == NULL) {
|
if (!render_to_cairo_surface(surface, page, renderer, real_scale)) {
|
||||||
cairo_surface_destroy(surface);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
cairo_save(cairo);
|
|
||||||
cairo_set_source_rgb(cairo, 1, 1, 1);
|
|
||||||
cairo_paint(cairo);
|
|
||||||
cairo_restore(cairo);
|
|
||||||
cairo_save(cairo);
|
|
||||||
|
|
||||||
/* apply scale (used by e.g. Poppler as pixels per point) */
|
|
||||||
if (fabs(real_scale - 1.0f) > FLT_EPSILON) {
|
|
||||||
cairo_scale(cairo, real_scale, real_scale);
|
|
||||||
}
|
|
||||||
|
|
||||||
zathura_renderer_lock(renderer);
|
|
||||||
const int err = zathura_page_render(page, cairo, false);
|
|
||||||
zathura_renderer_unlock(renderer);
|
|
||||||
cairo_restore(cairo);
|
|
||||||
cairo_destroy(cairo);
|
|
||||||
if (err != ZATHURA_ERROR_OK) {
|
|
||||||
cairo_surface_destroy(surface);
|
cairo_surface_destroy(surface);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -780,18 +803,11 @@ render(render_job_t* job, ZathuraRenderRequest* request, ZathuraRenderer* render
|
||||||
recolor(priv, page, page_width, page_height, surface);
|
recolor(priv, page, page_width, page_height, surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
emit_completed_signal_t* ecs = g_try_malloc0(sizeof(emit_completed_signal_t));
|
if (!invoke_completed_signal(job, surface)) {
|
||||||
if (ecs == NULL) {
|
|
||||||
cairo_surface_destroy(surface);
|
cairo_surface_destroy(surface);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ecs->job = job;
|
|
||||||
ecs->surface = cairo_surface_reference(surface);
|
|
||||||
|
|
||||||
/* emit signal from the main context, i.e. the main thread */
|
|
||||||
g_main_context_invoke(NULL, emit_completed_signal, ecs);
|
|
||||||
|
|
||||||
cairo_surface_destroy(surface);
|
cairo_surface_destroy(surface);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in a new issue