Commit 518fd77c authored by Moritz Lipp's avatar Moritz Lipp

Make compatible to mupdf 1.10

parent 5a661c0c
......@@ -3,7 +3,6 @@
#define _POSIX_C_SOURCE 1
#include <mupdf/fitz.h>
#include <mupdf/xps.h>
#include <mupdf/pdf.h>
#include <glib-2.0/glib.h>
......
......@@ -93,7 +93,7 @@ pdf_page_image_get_cairo(zathura_page_t* page, mupdf_page_t* mupdf_page,
fz_pixmap* pixmap = NULL;
cairo_surface_t* surface = NULL;
pixmap = fz_get_pixmap_from_image(mupdf_page->ctx, mupdf_image, 0, 0);
pixmap = fz_get_pixmap_from_image(mupdf_page->ctx, mupdf_image, NULL, NULL, 0, 0);
if (pixmap == NULL) {
goto error_free;
}
......
......@@ -6,7 +6,8 @@
#include "plugin.h"
static void build_index(fz_outline* outline, girara_tree_node_t* root);
static void build_index(fz_context* ctx, fz_document* document, fz_outline*
outline, girara_tree_node_t* root);
girara_tree_node_t*
pdf_document_index_generate(zathura_document_t* document, mupdf_document_t* mupdf_document, zathura_error_t* error)
......@@ -29,7 +30,7 @@ pdf_document_index_generate(zathura_document_t* document, mupdf_document_t* mupd
/* generate index */
girara_tree_node_t* root = girara_node_new(zathura_index_element_new("ROOT"));
build_index(outline, root);
build_index(mupdf_document->ctx, mupdf_document->document, outline, root);
/* free outline */
fz_drop_outline(mupdf_document->ctx, outline);
......@@ -38,7 +39,7 @@ pdf_document_index_generate(zathura_document_t* document, mupdf_document_t* mupd
}
static void
build_index(fz_outline* outline, girara_tree_node_t* root)
build_index(fz_context* ctx, fz_document* document, fz_outline* outline, girara_tree_node_t* root)
{
if (outline == NULL || root == NULL) {
return;
......@@ -50,49 +51,24 @@ build_index(fz_outline* outline, girara_tree_node_t* root)
zathura_link_type_t type = ZATHURA_LINK_INVALID;
zathura_rectangle_t rect = { .x1 = 0, .y1 = 0, .x2 = 0, .y2 = 0 };
switch (outline->dest.kind) {
case FZ_LINK_NONE:
type = ZATHURA_LINK_NONE;
break;
case FZ_LINK_URI:
if (fz_is_external_link(ctx, outline->uri) == 1) {
if (strstr(outline->uri, "file://") == outline->uri) {
type = ZATHURA_LINK_GOTO_REMOTE;
target.value = outline->uri;
} else {
type = ZATHURA_LINK_URI;
target.value = outline->dest.ld.uri.uri;
break;
case FZ_LINK_GOTO:
type = ZATHURA_LINK_GOTO_DEST;
target.page_number = outline->dest.ld.gotor.page;
target.destination_type = ZATHURA_LINK_DESTINATION_XYZ;
target.left = 0;
target.top = 0;
target.scale = 0.0;
{
int gflags = outline->dest.ld.gotor.flags;
if (gflags & fz_link_flag_l_valid) {
target.left = outline->dest.ld.gotor.lt.x;
}
if (gflags & fz_link_flag_t_valid) {
target.top = outline->dest.ld.gotor.lt.y;
}
/* if (gflags & fz_link_flag_r_is_zoom) { */
/* target.scale = outline->dest.ld.gotor.rb.x; */
/* } */
}
break;
case FZ_LINK_LAUNCH:
type = ZATHURA_LINK_LAUNCH;
target.value = outline->dest.ld.launch.file_spec;
break;
case FZ_LINK_NAMED:
type = ZATHURA_LINK_NAMED;
target.value = outline->dest.ld.named.named;
break;
case FZ_LINK_GOTOR:
type = ZATHURA_LINK_GOTO_REMOTE;
target.value = outline->dest.ld.gotor.file_spec;
break;
default:
outline = outline->next; // TODO: Don't skip unknown type
continue;
target.value = outline->uri;
}
} else {
float x = 0;
float y = 0;
type = ZATHURA_LINK_GOTO_DEST;
target.destination_type = ZATHURA_LINK_DESTINATION_XYZ;
target.page_number = fz_resolve_link(ctx, document, outline->uri, &x, &y);
target.left = x;
target.top = y;
target.scale = 0.0;
}
index_element->link = zathura_link_new(type, rect, target);
......@@ -104,7 +80,7 @@ build_index(fz_outline* outline, girara_tree_node_t* root)
girara_tree_node_t* node = girara_node_append_data(root, index_element);
if (outline->down != NULL) {
build_index(outline->down, node);
build_index(ctx, document, outline->down, node);
}
outline = outline->next;
......
......@@ -43,59 +43,31 @@ pdf_page_links_get(zathura_page_t* page, mupdf_page_t* mupdf_page, zathura_error
zathura_link_type_t type = ZATHURA_LINK_INVALID;
zathura_link_target_t target = { 0 };
char* buffer = NULL;
switch (link->dest.kind) {
case FZ_LINK_NONE:
type = ZATHURA_LINK_NONE;
break;
case FZ_LINK_URI:
if (fz_is_external_link(mupdf_document->ctx, link->uri) == 1) {
if (strstr(link->uri, "file://") == link->uri) {
type = ZATHURA_LINK_GOTO_REMOTE;
target.value = link->uri;
} else {
type = ZATHURA_LINK_URI;
target.value = link->dest.ld.uri.uri;
break;
case FZ_LINK_GOTO:
type = ZATHURA_LINK_GOTO_DEST;
target.page_number = link->dest.ld.gotor.page;
target.destination_type = ZATHURA_LINK_DESTINATION_XYZ;
target.left = 0;
target.top = 0;
target.scale = 0.0;
{
int gflags = link->dest.ld.gotor.flags;
if (gflags & fz_link_flag_l_valid) {
target.left = link->dest.ld.gotor.lt.x;
}
if (gflags & fz_link_flag_t_valid) {
target.top = link->dest.ld.gotor.lt.y;
}
/* if (gflags & fz_link_flag_r_is_zoom) { */
/* target.scale = link->dest.ld.gotor.rb.x; */
/* } */
}
break;
case FZ_LINK_LAUNCH:
type = ZATHURA_LINK_LAUNCH;
target.value = link->dest.ld.launch.file_spec;
break;
case FZ_LINK_NAMED:
type = ZATHURA_LINK_NAMED;
target.value = link->dest.ld.named.named;
break;
case FZ_LINK_GOTOR:
type = ZATHURA_LINK_GOTO_REMOTE;
target.value = link->dest.ld.gotor.file_spec;
break;
default:
continue;
target.value = link->uri;
}
} else {
float x = 0;
float y = 0;
type = ZATHURA_LINK_GOTO_DEST;
target.destination_type = ZATHURA_LINK_DESTINATION_XYZ;
target.page_number = fz_resolve_link(mupdf_document->ctx,
mupdf_document->document, link->uri, &x, &y);
target.left = x;
target.top = y;
target.scale = 0.0;
}
zathura_link_t* zathura_link = zathura_link_new(type, position, target);
if (zathura_link != NULL) {
girara_list_append(list, zathura_link);
}
if (buffer != NULL) {
g_free(buffer);
}
}
return list;
......
......@@ -43,7 +43,9 @@ pdf_page_init(zathura_page_t* page)
/* setup text */
mupdf_page->extracted_text = false;
mupdf_page->text = fz_new_stext_page(mupdf_page->ctx);
fz_rect mediabox;
mupdf_page->text = fz_new_stext_page(mupdf_page->ctx,
fz_bound_page(mupdf_page->ctx, mupdf_page->page, &mediabox));
if (mupdf_page->text == NULL) {
goto error_free;
}
......
......@@ -20,7 +20,7 @@ pdf_page_render_to_buffer(mupdf_document_t* mupdf_document, mupdf_page_t* mupdf_
return ZATHURA_ERROR_UNKNOWN;
}
fz_display_list* display_list = fz_new_display_list(mupdf_page->ctx);
fz_display_list* display_list = fz_new_display_list(mupdf_page->ctx, NULL);
fz_device* device = fz_new_list_device(mupdf_page->ctx, display_list);
fz_try (mupdf_document->ctx) {
......@@ -37,10 +37,10 @@ pdf_page_render_to_buffer(mupdf_document_t* mupdf_document, mupdf_page_t* mupdf_
fz_rect rect = { .x1 = page_width, .y1 = page_height };
fz_colorspace* colorspace = fz_device_bgr(mupdf_document->ctx);
fz_pixmap* pixmap = fz_new_pixmap_with_bbox_and_data(mupdf_page->ctx, colorspace, &irect, image);
fz_pixmap* pixmap = fz_new_pixmap_with_bbox_and_data(mupdf_page->ctx, colorspace, &irect, 1, image);
fz_clear_pixmap_with_value(mupdf_page->ctx, pixmap, 0xFF);
device = fz_new_draw_device(mupdf_page->ctx, pixmap);
device = fz_new_draw_device(mupdf_page->ctx, NULL, pixmap);
fz_run_display_list(mupdf_page->ctx, display_list, device, &fz_identity, &rect, NULL);
fz_drop_device(mupdf_page->ctx, device);
......
......@@ -14,7 +14,7 @@ mupdf_page_extract_text(mupdf_document_t* mupdf_document, mupdf_page_t* mupdf_pa
fz_device* text_device = NULL;
fz_try (mupdf_page->ctx) {
text_device = fz_new_stext_device(mupdf_page->ctx, mupdf_page->sheet, mupdf_page->text);
text_device = fz_new_stext_device(mupdf_page->ctx, mupdf_page->sheet, mupdf_page->text, NULL);
/* Disable FZ_IGNORE_IMAGE to collect image blocks */
fz_disable_device_hints(mupdf_page->ctx, text_device, FZ_IGNORE_IMAGE);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment