summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2018-06-25 13:15:50 +0200
committerTor Andersson <tor.andersson@artifex.com>2018-07-05 15:32:34 +0200
commit4a99615a609eec2b84bb2341d74fac46a5998137 (patch)
tree486eacff07448e4c655df1fa1bcb20df709dd8df /platform
parent2aa62902447760764e7a763dea322145d9c4808c (diff)
downloadmupdf-4a99615a609eec2b84bb2341d74fac46a5998137.tar.xz
Pass rect and matrix by value in geometry functions.
Several things irk me about passing values as const pointers: * They can be NULL, which is not a valid value. * They require explicit temporary variables for storage. * They don't compose easily in a legible manner, requiring weird pointer passing semantics where the variable being assigned is hidden as an argument in the innermost function call. * We can't change the value through the pointer, requiring yet more local variables to hold copies of the input value. In the device interface where we pass a matrix to a function, we often find ourselves making a local copy of the matrix so we can concatenate other transforms to it. This copying is a lot of unnecessary busywork that I hope to eventually avoid by laying the groundwork with this commit. This is a rather large API change, so I apologize for the inconvenience, but I hope the end result and gain in legibility will be worth the pain.
Diffstat (limited to 'platform')
-rw-r--r--platform/gl/gl-annotate.c66
-rw-r--r--platform/gl/gl-font.c2
-rw-r--r--platform/gl/gl-input.c2
-rw-r--r--platform/gl/gl-main.c54
-rw-r--r--platform/gl/gl-ui.c2
-rw-r--r--platform/java/mupdf_native.c69
-rw-r--r--platform/java/mupdf_native.h4
-rw-r--r--platform/java/src/com/artifex/mupdf/fitz/DisplayList.java6
-rw-r--r--platform/x11/pdfapp.c53
9 files changed, 121 insertions, 137 deletions
diff --git a/platform/gl/gl-annotate.c b/platform/gl/gl-annotate.c
index 92458824..dca7519a 100644
--- a/platform/gl/gl-annotate.c
+++ b/platform/gl/gl-annotate.c
@@ -115,7 +115,7 @@ static void new_annot(int type)
case PDF_ANNOT_SOUND:
{
fz_rect icon_rect = { 12, 12, 12+20, 12+20 };
- pdf_set_annot_rect(ctx, selected_annot, &icon_rect);
+ pdf_set_annot_rect(ctx, selected_annot, icon_rect);
pdf_set_annot_color(ctx, selected_annot, 3, yellow);
}
break;
@@ -123,7 +123,7 @@ static void new_annot(int type)
case PDF_ANNOT_FREE_TEXT:
{
fz_rect text_rect = { 12, 12, 12+200, 12+100 };
- pdf_set_annot_rect(ctx, selected_annot, &text_rect);
+ pdf_set_annot_rect(ctx, selected_annot, text_rect);
pdf_set_annot_border(ctx, selected_annot, 0);
pdf_set_annot_default_appearance(ctx, selected_annot, "Helv", 12, black);
}
@@ -132,7 +132,7 @@ static void new_annot(int type)
case PDF_ANNOT_STAMP:
{
fz_rect stamp_rect = { 12, 12, 12+190, 12+50 };
- pdf_set_annot_rect(ctx, selected_annot, &stamp_rect);
+ pdf_set_annot_rect(ctx, selected_annot, stamp_rect);
pdf_set_annot_color(ctx, selected_annot, 3, red);
}
break;
@@ -140,7 +140,7 @@ static void new_annot(int type)
case PDF_ANNOT_CARET:
{
fz_rect caret_rect = { 12, 12, 12+18, 12+15 };
- pdf_set_annot_rect(ctx, selected_annot, &caret_rect);
+ pdf_set_annot_rect(ctx, selected_annot, caret_rect);
pdf_set_annot_color(ctx, selected_annot, 3, blue);
}
break;
@@ -158,7 +158,7 @@ static void new_annot(int type)
case PDF_ANNOT_CIRCLE:
{
fz_rect shape_rect = { 12, 12, 12+100, 12+50 };
- pdf_set_annot_rect(ctx, selected_annot, &shape_rect);
+ pdf_set_annot_rect(ctx, selected_annot, shape_rect);
pdf_set_annot_border(ctx, selected_annot, 1);
pdf_set_annot_color(ctx, selected_annot, 3, red);
}
@@ -553,8 +553,8 @@ void do_annotate_panel(void)
/* common annotation properties */
- pdf_annot_rect(ctx, selected_annot, &rect);
- fz_irect_from_rect(&irect, &rect);
+ rect = pdf_annot_rect(ctx, selected_annot);
+ irect = fz_irect_from_rect(rect);
ui_label("Rect: %d %d %d %d", irect.x0, irect.y0, irect.x1, irect.y1);
do_annotate_flags();
@@ -778,9 +778,8 @@ static void do_edit_icon(fz_irect canvas_area, fz_irect area, fz_rect *rect)
moving = 0;
if (fz_abs(start_pt.x - rect->x0) > 0.1f || fz_abs(start_pt.x - rect->y0) > 0.1f)
{
- fz_rect trect = *rect;
- fz_transform_rect(&trect, &view_page_inv_ctm);
- pdf_set_annot_rect(ctx, selected_annot, &trect);
+ fz_rect trect = fz_transform_rect(*rect, view_page_inv_ctm);
+ pdf_set_annot_rect(ctx, selected_annot, trect);
}
}
}
@@ -800,7 +799,7 @@ static void do_edit_rect(fz_irect canvas_area, fz_irect area, fz_rect *rect)
static fz_rect start_rect;
static int state = ER_NONE;
- fz_expand_irect(&area, 5);
+ area = fz_expand_irect(area, 5);
if (ui_mouse_inside(&canvas_area) && ui_mouse_inside(&area))
{
ui.hot = selected_annot;
@@ -839,9 +838,8 @@ static void do_edit_rect(fz_irect canvas_area, fz_irect area, fz_rect *rect)
state = ER_NONE;
if (rects_differ(&start_rect, rect, 1))
{
- fz_rect trect = *rect;
- fz_transform_rect(&trect, &view_page_inv_ctm);
- pdf_set_annot_rect(ctx, selected_annot, &trect);
+ fz_rect trect = fz_transform_rect(*rect, view_page_inv_ctm);
+ pdf_set_annot_rect(ctx, selected_annot, trect);
}
}
}
@@ -856,7 +854,7 @@ static void do_edit_line(fz_irect canvas_area, fz_irect area, fz_rect *rect)
fz_point a, b;
float lw;
- fz_expand_irect(&area, 5);
+ area = fz_expand_irect(area, 5);
if (ui_mouse_inside(&canvas_area) && ui_mouse_inside(&area))
{
ui.hot = selected_annot;
@@ -864,12 +862,12 @@ static void do_edit_line(fz_irect canvas_area, fz_irect area, fz_rect *rect)
{
ui.active = selected_annot;
pdf_annot_line(ctx, selected_annot, &start_a, &start_b);
- fz_transform_point(&start_a, &view_page_ctm);
- fz_transform_point(&start_b, &view_page_ctm);
+ start_a = fz_transform_point(start_a, view_page_ctm);
+ start_b = fz_transform_point(start_b, view_page_ctm);
a_grab = fz_make_irect(start_a.x, start_a.y, start_a.x, start_a.y);
b_grab = fz_make_irect(start_b.x, start_b.y, start_b.x, start_b.y);
- fz_expand_irect(&a_grab, 10);
- fz_expand_irect(&b_grab, 10);
+ a_grab = fz_expand_irect(a_grab, 10);
+ b_grab = fz_expand_irect(b_grab, 10);
state = EL_NONE;
if (ui_mouse_inside(&a_grab)) state |= EL_A;
if (ui_mouse_inside(&b_grab)) state |= EL_B;
@@ -895,7 +893,7 @@ static void do_edit_line(fz_irect canvas_area, fz_irect area, fz_rect *rect)
rect->x1 = fz_max(a.x, b.x);
rect->y1 = fz_max(a.y, b.y);
lw = pdf_annot_border(ctx, selected_annot);
- fz_expand_rect(rect, fz_matrix_expansion(&view_page_ctm) * lw);
+ *rect = fz_expand_rect(*rect, fz_matrix_expansion(view_page_ctm) * lw);
/* cancel on right click */
if (ui.right)
@@ -907,8 +905,8 @@ static void do_edit_line(fz_irect canvas_area, fz_irect area, fz_rect *rect)
state = EL_NONE;
if (points_differ(&start_a, &a, 1) || points_differ(&start_b, &b, 1))
{
- fz_transform_point(&a, &view_page_inv_ctm);
- fz_transform_point(&b, &view_page_inv_ctm);
+ a = fz_transform_point(a, view_page_inv_ctm);
+ b = fz_transform_point(b, view_page_inv_ctm);
pdf_set_annot_line(ctx, selected_annot, a, b);
}
}
@@ -938,11 +936,11 @@ static void do_edit_polygon(fz_irect canvas_area, int close)
if (n > 0)
{
p = pdf_annot_vertex(ctx, selected_annot, n-1);
- fz_transform_point(&p, &view_page_ctm);
+ p = fz_transform_point(p, view_page_ctm);
if (close)
{
a = pdf_annot_vertex(ctx, selected_annot, 0);
- fz_transform_point(&a, &view_page_ctm);
+ a = fz_transform_point(a, view_page_ctm);
}
glBegin(GL_LINE_STRIP);
glColor4f(1, 0, 0, 1);
@@ -966,8 +964,7 @@ static void do_edit_polygon(fz_irect canvas_area, int close)
/* commit point on mouse-up */
if (!ui.down)
{
- fz_point p = { ui.x, ui.y };
- fz_transform_point(&p, &view_page_inv_ctm);
+ fz_point p = fz_transform_point_xy(ui.x, ui.y, view_page_inv_ctm);
pdf_add_annot_vertex(ctx, selected_annot, p);
drawing = 0;
}
@@ -1029,7 +1026,7 @@ static void do_edit_ink(fz_irect canvas_area)
if (n > 1)
{
for (i = 0; i < n; ++i)
- fz_transform_point(&p[i], &view_page_inv_ctm);
+ p[i] = fz_transform_point(p[i], view_page_inv_ctm);
pdf_add_annot_ink_list(ctx, selected_annot, n, p);
}
drawing = 0;
@@ -1064,8 +1061,8 @@ static void do_edit_quad_points(void)
fz_point page_a = { pt.x, pt.y };
fz_point page_b = { ui.x, ui.y };
- fz_transform_point(&page_a, &view_page_inv_ctm);
- fz_transform_point(&page_b, &view_page_inv_ctm);
+ page_a = fz_transform_point(page_a, view_page_inv_ctm);
+ page_b = fz_transform_point(page_b, view_page_inv_ctm);
n = fz_highlight_selection(ctx, page_text, page_a, page_b, hits, nelem(hits));
@@ -1076,8 +1073,7 @@ static void do_edit_quad_points(void)
glBegin(GL_QUADS);
for (i = 0; i < n; ++i)
{
- fz_quad thit = hits[i];
- fz_transform_quad(&thit, &view_page_ctm);
+ fz_quad thit = fz_transform_quad(hits[i], view_page_ctm);
glVertex2f(thit.ul.x, thit.ul.y);
glVertex2f(thit.ur.x, thit.ur.y);
glVertex2f(thit.lr.x, thit.lr.y);
@@ -1114,9 +1110,9 @@ void do_annotate_canvas(fz_irect canvas_area)
for (annot = pdf_first_annot(ctx, page); annot; annot = pdf_next_annot(ctx, annot))
{
- pdf_bound_annot(ctx, annot, &bounds);
- fz_transform_rect(&bounds, &view_page_ctm);
- fz_irect_from_rect(&area, &bounds);
+ bounds = pdf_bound_annot(ctx, annot);
+ bounds = fz_transform_rect(bounds, view_page_ctm);
+ area = fz_irect_from_rect(bounds);
if (ui_mouse_inside(&canvas_area) && ui_mouse_inside(&area))
{
@@ -1189,7 +1185,7 @@ void do_annotate_canvas(fz_irect canvas_area)
glEnable(GL_BLEND);
glColor4f(1, 1, 1, 1);
glBegin(GL_LINE_LOOP);
- fz_irect_from_rect(&area, &bounds);
+ area = fz_irect_from_rect(bounds);
glVertex2f(area.x0-0.5f, area.y0-0.5f);
glVertex2f(area.x1+0.5f, area.y0-0.5f);
glVertex2f(area.x1+0.5f, area.y1+0.5f);
diff --git a/platform/gl/gl-font.c b/platform/gl/gl-font.c
index 08dd773a..8a331b3e 100644
--- a/platform/gl/gl-font.c
+++ b/platform/gl/gl-font.c
@@ -137,7 +137,7 @@ static struct glyph *lookup_glyph(fz_font *font, int gid, float *xp, float *yp)
int w, h;
/* match fitz's glyph cache quantization */
- fz_scale(&trm, g_font_size, -g_font_size);
+ trm = fz_scale(g_font_size, -g_font_size);
trm.e = *xp;
trm.f = *yp;
fz_subpixel_adjust(ctx, &trm, &subpix_trm, &subx, &suby);
diff --git a/platform/gl/gl-input.c b/platform/gl/gl-input.c
index 56fcf74d..c3898f50 100644
--- a/platform/gl/gl-input.c
+++ b/platform/gl/gl-input.c
@@ -409,7 +409,7 @@ int ui_input(struct input *input, int width, int height)
area = ui_pack(width, ui.lineheight * height + 6);
ui_draw_bevel_rect(area, UI_COLOR_TEXT_BG, 1);
- fz_expand_irect(&area, -2);
+ area = fz_expand_irect(area, -2);
if (height > 1)
area.x1 -= ui.lineheight;
diff --git a/platform/gl/gl-main.c b/platform/gl/gl-main.c
index 899dc4ec..5b26a48f 100644
--- a/platform/gl/gl-main.c
+++ b/platform/gl/gl-main.c
@@ -207,20 +207,18 @@ void update_title(void)
void transform_page(void)
{
- fz_rect rect = page_bounds;
+ fz_rect rect;
fz_matrix matrix;
- draw_page_bounds = page_bounds;
-
- fz_scale(&draw_page_ctm, currentzoom / 72, currentzoom / 72);
- fz_pre_rotate(&draw_page_ctm, -currentrotate);
+ draw_page_ctm = fz_scale(currentzoom / 72, currentzoom / 72);
+ draw_page_ctm = fz_pre_rotate(draw_page_ctm, -currentrotate);
/* fix the page origin at 0,0 after rotation */
- fz_transform_rect(&rect, &draw_page_ctm);
- fz_translate(&matrix, -rect.x0, -rect.y0);
- fz_concat(&draw_page_ctm, &draw_page_ctm, &matrix);
+ rect = fz_transform_rect(page_bounds, draw_page_ctm);
+ matrix = fz_translate(-rect.x0, -rect.y0);
+ draw_page_ctm = fz_concat(draw_page_ctm, matrix);
- fz_transform_rect(&draw_page_bounds, &draw_page_ctm);
+ draw_page_bounds = fz_transform_rect(page_bounds, draw_page_ctm);
}
void load_page(void)
@@ -245,10 +243,10 @@ void load_page(void)
page_text = fz_new_stext_page_from_page(ctx, fzpage, NULL);
/* compute bounds here for initial window size */
- fz_bound_page(ctx, fzpage, &page_bounds);
+ page_bounds = fz_bound_page(ctx, fzpage);
transform_page();
- fz_irect_from_rect(&area, &draw_page_bounds);
+ area = fz_irect_from_rect(draw_page_bounds);
page_tex.w = area.x1 - area.x0;
page_tex.h = area.y1 - area.y0;
}
@@ -281,16 +279,14 @@ static struct mark save_mark()
{
struct mark mark;
mark.page = currentpage;
- mark.scroll.x = scroll_x;
- mark.scroll.y = scroll_y;
- fz_transform_point(&mark.scroll, &view_page_inv_ctm);
+ mark.scroll = fz_transform_point_xy(scroll_x, scroll_y, view_page_inv_ctm);
return mark;
}
static void restore_mark(struct mark mark)
{
currentpage = mark.page;
- fz_transform_point(&mark.scroll, &draw_page_ctm);
+ mark.scroll = fz_transform_point(mark.scroll, draw_page_ctm);
scroll_x = mark.scroll.x;
scroll_y = mark.scroll.y;
}
@@ -337,9 +333,8 @@ static void jump_to_page(int newpage)
static void jump_to_page_xy(int newpage, float x, float y)
{
- fz_point p = { x, y };
+ fz_point p = fz_transform_point_xy(x, y, draw_page_ctm);
newpage = fz_clampi(newpage, 0, fz_count_pages(ctx, doc) - 1);
- fz_transform_point(&p, &draw_page_ctm);
clear_future();
push_history();
currentpage = newpage;
@@ -427,8 +422,8 @@ static void do_links(fz_link *link)
while (link)
{
bounds = link->rect;
- fz_transform_rect(&bounds, &view_page_ctm);
- fz_irect_from_rect(&area, &bounds);
+ bounds = fz_transform_rect(link->rect, view_page_ctm);
+ area = fz_irect_from_rect(bounds);
if (ui_mouse_inside(&area))
{
@@ -493,8 +488,8 @@ static void do_page_selection(void)
fz_point page_a = { pt.x, pt.y };
fz_point page_b = { ui.x, ui.y };
- fz_transform_point(&page_a, &view_page_inv_ctm);
- fz_transform_point(&page_b, &view_page_inv_ctm);
+ page_a = fz_transform_point(page_a, view_page_inv_ctm);
+ page_b = fz_transform_point(page_b, view_page_inv_ctm);
if (ui.mod == GLUT_ACTIVE_CTRL)
fz_snap_selection(ctx, page_text, &page_a, &page_b, FZ_SELECT_WORDS);
@@ -510,8 +505,7 @@ static void do_page_selection(void)
glBegin(GL_QUADS);
for (i = 0; i < n; ++i)
{
- fz_quad thit = hits[i];
- fz_transform_quad(&thit, &view_page_ctm);
+ fz_quad thit = fz_transform_quad(hits[i], view_page_ctm);
glVertex2f(thit.ul.x, thit.ul.y);
glVertex2f(thit.ur.x, thit.ur.y);
glVertex2f(thit.lr.x, thit.lr.y);
@@ -546,8 +540,7 @@ static void do_search_hits(void)
glBegin(GL_QUADS);
for (i = 0; i < search_hit_count; ++i)
{
- fz_quad thit = search_hit_quads[i];
- fz_transform_quad(&thit, &view_page_ctm);
+ fz_quad thit = fz_transform_quad(search_hit_quads[i], view_page_ctm);
glVertex2f(thit.ul.x, thit.ul.y);
glVertex2f(thit.ur.x, thit.ur.y);
glVertex2f(thit.lr.x, thit.lr.y);
@@ -567,9 +560,7 @@ static void do_forms(void)
if (!pdf || search_active)
return;
- p.x = ui.x;
- p.y = ui.y;
- fz_transform_point(&p, &view_page_inv_ctm);
+ p = fz_transform_point_xy(ui.x, ui.y, view_page_inv_ctm);
if (ui.down && !ui.active)
{
@@ -1131,10 +1122,9 @@ static void do_canvas(void)
view_page_ctm = draw_page_ctm;
view_page_ctm.e += page_x;
view_page_ctm.f += page_y;
- fz_invert_matrix(&view_page_inv_ctm, &view_page_ctm);
- view_page_bounds = page_bounds;
- fz_transform_rect(&view_page_bounds, &view_page_ctm);
- fz_irect_from_rect(&view_page_area, &view_page_bounds);
+ view_page_inv_ctm = fz_invert_matrix(view_page_ctm);
+ view_page_bounds = fz_transform_rect(page_bounds, view_page_ctm);
+ view_page_area = fz_irect_from_rect(view_page_bounds);
ui_draw_image(&page_tex, page_x, page_y);
diff --git a/platform/gl/gl-ui.c b/platform/gl/gl-ui.c
index 2d8fd5be..9539af7b 100644
--- a/platform/gl/gl-ui.c
+++ b/platform/gl/gl-ui.c
@@ -687,7 +687,7 @@ void ui_dialog_begin(int w, int h)
y = (ui.window_h-h)/3;
area = fz_make_irect(x, y, x+w, y+h);
ui_draw_bevel_rect(area, UI_COLOR_PANEL, 0);
- fz_expand_irect(&area, -14);
+ area = fz_expand_irect(area, -14);
ui_pack_push(area);
}
diff --git a/platform/java/mupdf_native.c b/platform/java/mupdf_native.c
index 2a8e517a..928732e5 100644
--- a/platform/java/mupdf_native.c
+++ b/platform/java/mupdf_native.c
@@ -1462,22 +1462,22 @@ static inline jobject to_Point_safe(fz_context *ctx, JNIEnv *env, fz_point point
return (*env)->NewObject(env, cls_Point, mid_Point_init, point.x, point.y);
}
-static inline jobject to_Rect_safe(fz_context *ctx, JNIEnv *env, const fz_rect *rect)
+static inline jobject to_Rect_safe(fz_context *ctx, JNIEnv *env, fz_rect rect)
{
- if (!ctx || !rect) return NULL;
+ if (!ctx) return NULL;
- return (*env)->NewObject(env, cls_Rect, mid_Rect_init, rect->x0, rect->y0, rect->x1, rect->y1);
+ return (*env)->NewObject(env, cls_Rect, mid_Rect_init, rect.x0, rect.y0, rect.x1, rect.y1);
}
-static inline jobject to_Quad_safe(fz_context *ctx, JNIEnv *env, const fz_quad *quad)
+static inline jobject to_Quad_safe(fz_context *ctx, JNIEnv *env, fz_quad quad)
{
- if (!ctx || !quad) return NULL;
+ if (!ctx) return NULL;
return (*env)->NewObject(env, cls_Quad, mid_Quad_init,
- quad->ul.x, quad->ul.y,
- quad->ur.x, quad->ur.y,
- quad->ll.x, quad->ll.y,
- quad->lr.x, quad->lr.y);
+ quad.ul.x, quad.ul.y,
+ quad.ur.x, quad.ur.y,
+ quad.ll.x, quad.ll.y,
+ quad.lr.x, quad.lr.y);
}
static inline jobjectArray to_jQuadArray_safe(fz_context *ctx, JNIEnv *env, const fz_quad *quads, jint n)
@@ -1492,7 +1492,7 @@ static inline jobjectArray to_jQuadArray_safe(fz_context *ctx, JNIEnv *env, cons
for (i = 0; i < n; i++)
{
- jobject jquad = to_Quad_safe(ctx, env, &quads[i]);
+ jobject jquad = to_Quad_safe(ctx, env, quads[i]);
if (!jquad) return NULL;
(*env)->SetObjectArrayElement(env, arr, i, jquad);
@@ -4108,7 +4108,7 @@ FUN(Path_transform)(JNIEnv *env, jobject self, jobject jctm)
if (!ctx || !path) return;
fz_try(ctx)
- fz_transform_path(ctx, path, &ctm);
+ fz_transform_path(ctx, path, ctm);
fz_catch(ctx)
jni_rethrow(env, ctx);
}
@@ -4146,14 +4146,14 @@ FUN(Path_getBounds)(JNIEnv *env, jobject self, jobject jstroke, jobject jctm)
if (!stroke) { jni_throw_arg(env, "stroke must not be null"); return NULL; }
fz_try(ctx)
- fz_bound_path(ctx, path, stroke, &ctm, &rect);
+ rect = fz_bound_path(ctx, path, stroke, ctm);
fz_catch(ctx)
{
jni_rethrow(env, ctx);
return NULL;
}
- return to_Rect_safe(ctx, env, &rect);
+ return to_Rect_safe(ctx, env, rect);
}
typedef struct
@@ -4247,7 +4247,7 @@ FUN(Rect_adjustForStroke)(JNIEnv *env, jobject self, jobject jstroke, jobject jc
if (!stroke) { jni_throw_arg(env, "stroke must not be null"); return; }
fz_try(ctx)
- fz_adjust_rect_for_stroke(ctx, &rect, stroke, &ctm);
+ rect = fz_adjust_rect_for_stroke(ctx, rect, stroke, ctm);
fz_catch(ctx)
{
jni_rethrow(env, ctx);
@@ -4424,14 +4424,14 @@ FUN(Text_getBounds)(JNIEnv *env, jobject self, jobject jstroke, jobject jctm)
if (!stroke) { jni_throw_arg(env, "stroke must not be null"); return NULL; }
fz_try(ctx)
- fz_bound_text(ctx, text, stroke, &ctm, &rect);
+ rect = fz_bound_text(ctx, text, stroke, ctm);
fz_catch(ctx)
{
jni_rethrow(env, ctx);
return NULL;
}
- return to_Rect_safe(ctx, env, &rect);
+ return to_Rect_safe(ctx, env, rect);
}
JNIEXPORT void JNICALL
@@ -4446,7 +4446,7 @@ FUN(Text_showGlyph)(JNIEnv *env, jobject self, jobject jfont, jobject jtrm, jint
if (!font) { jni_throw_arg(env, "font must not be null"); return; }
fz_try(ctx)
- fz_show_glyph(ctx, text, font, &trm, glyph, unicode, wmode, 0, FZ_BIDI_NEUTRAL, FZ_LANG_UNSET);
+ fz_show_glyph(ctx, text, font, trm, glyph, unicode, wmode, 0, FZ_BIDI_NEUTRAL, FZ_LANG_UNSET);
fz_catch(ctx)
jni_rethrow(env, ctx);
}
@@ -4773,14 +4773,14 @@ FUN(Annotation_getBounds)(JNIEnv *env, jobject self)
if (!ctx || !annot) return NULL;
fz_try(ctx)
- fz_bound_annot(ctx, annot, &rect);
+ rect = fz_bound_annot(ctx, annot);
fz_catch(ctx)
{
jni_rethrow(env, ctx);
return NULL;
}
- return to_Rect_safe(ctx, env, &rect);
+ return to_Rect_safe(ctx, env, rect);
}
JNIEXPORT jobject JNICALL
@@ -5386,14 +5386,14 @@ FUN(Page_getBounds)(JNIEnv *env, jobject self)
if (!ctx || !page) return NULL;
fz_try(ctx)
- fz_bound_page(ctx, page, &rect);
+ rect = fz_bound_page(ctx, page);
fz_catch(ctx)
{
jni_rethrow(env, ctx);
return NULL;
}
- return to_Rect_safe(ctx, env, &rect);
+ return to_Rect_safe(ctx, env, rect);
}
JNIEXPORT void JNICALL
@@ -5553,7 +5553,7 @@ FUN(Page_getLinks)(JNIEnv *env, jobject self)
jobject juri = NULL;
int page = 0;
- jbounds = to_Rect_safe(ctx, env, &link->rect);
+ jbounds = to_Rect_safe(ctx, env, link->rect);
if (!jbounds) return NULL;
if (fz_is_external_link(ctx, link->uri))
@@ -5692,10 +5692,8 @@ FUN(Page_textAsHtml)(JNIEnv *env, jobject self)
fz_try(ctx)
{
- fz_rect mediabox;
-
ctm = fz_identity;
- text = fz_new_stext_page(ctx, fz_bound_page(ctx, page, &mediabox));
+ text = fz_new_stext_page(ctx, fz_bound_page(ctx, page));
dev = fz_new_stext_device(ctx, text, NULL);
fz_run_page(ctx, page, dev, &ctm, NULL);
fz_close_device(ctx, dev);
@@ -5778,16 +5776,17 @@ FUN(Cookie_abort)(JNIEnv *env, jobject self)
/* DisplayList interface */
JNIEXPORT jlong JNICALL
-FUN(DisplayList_newNative)(JNIEnv *env, jobject self)
+FUN(DisplayList_newNative)(JNIEnv *env, jobject self, jobject jmediabox)
{
fz_context *ctx = get_context(env);
+ fz_rect mediabox = from_Rect(env, jmediabox);
fz_display_list *list = NULL;
if (!ctx) return 0;
fz_try(ctx)
- list = fz_new_display_list(ctx, NULL);
+ list = fz_new_display_list(ctx, mediabox);
fz_catch(ctx)
{
jni_rethrow(env, ctx);
@@ -6513,7 +6512,7 @@ FUN(StructuredText_getBlocks)(JNIEnv *env, jobject self)
if (!jblock) return NULL;
/* set block's bbox */
- jrect = to_Rect_safe(ctx, env, &(block->bbox));
+ jrect = to_Rect_safe(ctx, env, block->bbox);
if (!jrect) return NULL;
(*env)->SetObjectField(env, jblock, fid_TextBlock_bbox, jrect);
@@ -6534,7 +6533,7 @@ FUN(StructuredText_getBlocks)(JNIEnv *env, jobject self)
if (!jline) return NULL;
/* set line's bbox */
- jrect = to_Rect_safe(ctx, env, &(line->bbox));
+ jrect = to_Rect_safe(ctx, env, line->bbox);
if (!jrect) return NULL;
(*env)->SetObjectField(env, jline, fid_TextLine_bbox, jrect);
@@ -6556,7 +6555,7 @@ FUN(StructuredText_getBlocks)(JNIEnv *env, jobject self)
if (!jchar) return NULL;
/* set the char's bbox */
- jquad = to_Quad_safe(ctx, env, &ch->quad);
+ jquad = to_Quad_safe(ctx, env, ch->quad);
if (!jquad) return NULL;
(*env)->SetObjectField(env, jchar, fid_TextChar_quad, jquad);
@@ -7129,7 +7128,7 @@ FUN(PDFDocument_addPageBuffer)(JNIEnv *env, jobject self, jobject jmediabox, jin
if (!contents) { jni_throw_arg(env, "contents must not be null"); return NULL; }
fz_try(ctx)
- ind = pdf_add_page(ctx, pdf, &mediabox, rotate, resources, contents);
+ ind = pdf_add_page(ctx, pdf, mediabox, rotate, resources, contents);
fz_catch(ctx)
{
jni_rethrow(env, ctx);
@@ -7165,7 +7164,7 @@ FUN(PDFDocument_addPageString)(JNIEnv *env, jobject self, jobject jmediabox, jin
size_t len = strlen(scontents);
data = fz_malloc(ctx, len);
contents = fz_new_buffer_from_data(ctx, data, len);
- ind = pdf_add_page(ctx, pdf, &mediabox, rotate, resources, contents);
+ ind = pdf_add_page(ctx, pdf, mediabox, rotate, resources, contents);
}
fz_always(ctx)
{
@@ -8951,14 +8950,14 @@ FUN(PDFAnnotation_getRect)(JNIEnv *env, jobject self)
if (!ctx || !annot) return NULL;
fz_try(ctx)
- pdf_annot_rect(ctx, annot, &rect);
+ rect = pdf_annot_rect(ctx, annot);
fz_catch(ctx)
{
jni_rethrow(env, ctx);
return NULL;
}
- return to_Rect_safe(ctx, env, &rect);
+ return to_Rect_safe(ctx, env, rect);
}
JNIEXPORT void JNICALL
@@ -8971,7 +8970,7 @@ FUN(PDFAnnotation_setRect)(JNIEnv *env, jobject self, jobject jrect)
if (!ctx || !annot) return;
fz_try(ctx)
- pdf_set_annot_rect(ctx, annot, &rect);
+ pdf_set_annot_rect(ctx, annot, rect);
fz_catch(ctx)
jni_rethrow(env, ctx);
}
diff --git a/platform/java/mupdf_native.h b/platform/java/mupdf_native.h
index 3f223a13..37ea6ed2 100644
--- a/platform/java/mupdf_native.h
+++ b/platform/java/mupdf_native.h
@@ -466,10 +466,10 @@ JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_DisplayList_finalize
/*
* Class: com_artifex_mupdf_fitz_DisplayList
* Method: newNative
- * Signature: ()J
+ * Signature: (Lcom/artifex/mupdf/fitz/Rect;)J
*/
JNIEXPORT jlong JNICALL Java_com_artifex_mupdf_fitz_DisplayList_newNative
- (JNIEnv *, jobject);
+ (JNIEnv *, jobject, jobject);
/*
* Class: com_artifex_mupdf_fitz_DisplayList
diff --git a/platform/java/src/com/artifex/mupdf/fitz/DisplayList.java b/platform/java/src/com/artifex/mupdf/fitz/DisplayList.java
index c6c33f20..5b64583f 100644
--- a/platform/java/src/com/artifex/mupdf/fitz/DisplayList.java
+++ b/platform/java/src/com/artifex/mupdf/fitz/DisplayList.java
@@ -15,10 +15,10 @@ public class DisplayList
pointer = 0;
}
- private native long newNative();
+ private native long newNative(Rect mediabox);
- public DisplayList() {
- pointer = newNative();
+ public DisplayList(Rect mediabox) {
+ pointer = newNative(mediabox);
}
private DisplayList(long p) {
diff --git a/platform/x11/pdfapp.c b/platform/x11/pdfapp.c
index 17af3d0f..20f4cc46 100644
--- a/platform/x11/pdfapp.c
+++ b/platform/x11/pdfapp.c
@@ -148,8 +148,7 @@ void pdfapp_setresolution(pdfapp_t *app, int res)
void pdfapp_invert(pdfapp_t *app, const fz_rect *rect)
{
- fz_irect b;
- fz_invert_pixmap_rect(app->ctx, app->image, fz_round_rect(&b, rect));
+ fz_invert_pixmap_rect(app->ctx, app->image, fz_round_rect(*rect));
}
void pdfapp_reloadfile(pdfapp_t *app)
@@ -262,7 +261,7 @@ static int make_fake_doc(pdfapp_t *app)
/* Create enough copies of our blank(ish) page so that the
* page number is preserved if and when a subsequent load
* works. */
- page_obj = pdf_add_page(ctx, pdf, &mediabox, 0, NULL, contents);
+ page_obj = pdf_add_page(ctx, pdf, mediabox, 0, NULL, contents);
for (i = 0; i < app->pagecount; i++)
pdf_insert_page(ctx, pdf, -1, page_obj);
}
@@ -606,7 +605,7 @@ int pdfapp_preclose(pdfapp_t *app)
static void pdfapp_viewctm(fz_matrix *mat, pdfapp_t *app)
{
- fz_pre_rotate(fz_scale(mat, app->resolution/72.0f, app->resolution/72.0f), app->rotate);
+ *mat = fz_pre_rotate(fz_scale(app->resolution/72.0f, app->resolution/72.0f), app->rotate);
}
static void pdfapp_panview(pdfapp_t *app, int newx, int newy)
@@ -671,8 +670,7 @@ static void pdfapp_loadpage(pdfapp_t *app, int no_cache)
fz_try(app->ctx)
{
app->page = fz_load_page(app->ctx, app->doc, app->pageno - 1);
-
- fz_bound_page(app->ctx, app->page, &app->page_bbox);
+ app->page_bbox = fz_bound_page(app->ctx, app->page);
}
fz_catch(app->ctx)
{
@@ -687,7 +685,7 @@ static void pdfapp_loadpage(pdfapp_t *app, int no_cache)
{
fz_annot *annot;
/* Create display lists */
- app->page_list = fz_new_display_list(app->ctx, NULL);
+ app->page_list = fz_new_display_list(app->ctx, fz_infinite_rect);
mdev = fz_new_list_device(app->ctx, app->page_list);
if (no_cache)
fz_enable_device_hints(app->ctx, mdev, FZ_NO_CACHE);
@@ -696,7 +694,7 @@ static void pdfapp_loadpage(pdfapp_t *app, int no_cache)
fz_close_device(app->ctx, mdev);
fz_drop_device(app->ctx, mdev);
mdev = NULL;
- app->annotations_list = fz_new_display_list(app->ctx, NULL);
+ app->annotations_list = fz_new_display_list(app->ctx, fz_infinite_rect);
mdev = fz_new_list_device(app->ctx, app->annotations_list);
for (annot = fz_first_annot(app->ctx, app->page); annot; annot = fz_next_annot(app->ctx, annot))
fz_run_annot(app->ctx, annot, mdev, &fz_identity, &cookie);
@@ -757,7 +755,7 @@ static void pdfapp_recreate_annotationslist(pdfapp_t *app)
{
fz_annot *annot;
/* Create display list */
- app->annotations_list = fz_new_display_list(app->ctx, NULL);
+ app->annotations_list = fz_new_display_list(app->ctx, fz_infinite_rect);
mdev = fz_new_list_device(app->ctx, app->annotations_list);
for (annot = fz_first_annot(app->ctx, app->page); annot; annot = fz_next_annot(app->ctx, annot))
fz_run_annot(app->ctx, annot, mdev, &fz_identity, &cookie);
@@ -813,9 +811,10 @@ static void pdfapp_updatepage(pdfapp_t *app)
fz_annot *annot = (fz_annot*)pannot;
fz_rect bounds;
fz_irect ibounds;
- fz_transform_rect(fz_bound_annot(app->ctx, annot, &bounds), &ctm);
- fz_rect_from_irect(&bounds, fz_round_rect(&ibounds, &bounds));
- fz_clear_pixmap_rect_with_value(app->ctx, app->image, 255, &ibounds);
+ bounds = fz_transform_rect(fz_bound_annot(app->ctx, annot), ctm);
+ ibounds = fz_round_rect(bounds);
+ bounds = fz_rect_from_irect(ibounds);
+ fz_clear_pixmap_rect_with_value(app->ctx, app->image, 255, ibounds);
idev = fz_new_draw_device_with_bbox(app->ctx, NULL, app->image, &ibounds);
fz_try(app->ctx)
{
@@ -878,7 +877,8 @@ static void pdfapp_showpage(pdfapp_t *app, int loadpage, int drawpage, int repai
app->hit_count = 0;
/* Extract text */
- app->page_text = fz_new_stext_page(app->ctx, fz_bound_page(app->ctx, app->page, &mediabox));
+ mediabox = fz_bound_page(app->ctx, app->page);
+ app->page_text = fz_new_stext_page(app->ctx, mediabox);
if (app->page_list || app->annotations_list)
{
@@ -914,9 +914,9 @@ static void pdfapp_showpage(pdfapp_t *app, int loadpage, int drawpage, int repai
wintitle(app, buf);
pdfapp_viewctm(&ctm, app);
- bounds = app->page_bbox;
- fz_round_rect(&ibounds, fz_transform_rect(&bounds, &ctm));
- fz_rect_from_irect(&bounds, &ibounds);
+ bounds = fz_transform_rect(app->page_bbox, ctm);
+ ibounds = fz_round_rect(bounds);
+ bounds = fz_rect_from_irect(ibounds);
/* Draw */
fz_drop_pixmap(app->ctx, app->image);
@@ -931,7 +931,7 @@ static void pdfapp_showpage(pdfapp_t *app, int loadpage, int drawpage, int repai
fz_try(app->ctx)
{
- app->image = fz_new_pixmap_with_bbox(app->ctx, colorspace, &ibounds, NULL, 1);
+ app->image = fz_new_pixmap_with_bbox(app->ctx, colorspace, ibounds, NULL, 1);
fz_clear_pixmap_with_value(app->ctx, app->image, 255);
if (app->page_list || app->annotations_list)
{
@@ -958,7 +958,7 @@ static void pdfapp_showpage(pdfapp_t *app, int loadpage, int drawpage, int repai
colorspace = fz_device_gray(app->ctx);
else
colorspace = app->colorspace;
- app->image = fz_new_pixmap_with_bbox(app->ctx, colorspace, &ibounds, NULL, 1);
+ app->image = fz_new_pixmap_with_bbox(app->ctx, colorspace, ibounds, NULL, 1);
app->duration = 0;
fz_page_presentation(app->ctx, app->page, &app->transition, &app->duration);
if (app->duration == 0)
@@ -1051,7 +1051,8 @@ void pdfapp_inverthit(pdfapp_t *app)
for (i = 0; i < app->hit_count; i++)
{
bbox = fz_rect_from_quad(app->hit_bbox[i]);
- pdfapp_invert(app, fz_transform_rect(&bbox, &ctm));
+ bbox = fz_transform_rect(bbox, ctm);
+ pdfapp_invert(app, &bbox);
}
}
@@ -1624,14 +1625,14 @@ void pdfapp_onmouse(pdfapp_t *app, int x, int y, int btn, int modifiers, int sta
int processed = 0;
if (app->image)
- fz_pixmap_bbox(app->ctx, app->image, &irect);
+ irect = fz_pixmap_bbox(app->ctx, app->image);
p.x = x - app->panx + irect.x0;
p.y = y - app->pany + irect.y0;
pdfapp_viewctm(&ctm, app);
- fz_invert_matrix(&ctm, &ctm);
+ ctm = fz_invert_matrix(ctm);
- fz_transform_point(&p, &ctm);
+ p = fz_transform_point(p, ctm);
if (btn == 1 && (state == 1 || state == -1))
{
@@ -1767,8 +1768,7 @@ void pdfapp_onmouse(pdfapp_t *app, int x, int y, int btn, int modifiers, int sta
fz_annot *annot;
for (annot = fz_first_annot(app->ctx, app->page); annot; annot = fz_next_annot(app->ctx, annot))
{
- fz_rect rect;
- fz_bound_annot(app->ctx, annot, &rect);
+ fz_rect rect = fz_bound_annot(app->ctx, annot);
if (x >= rect.x0 && x < rect.x1)
if (y >= rect.y0 && y < rect.y1)
break;
@@ -1921,9 +1921,8 @@ void pdfapp_oncopy(pdfapp_t *app, unsigned short *ucsbuf, int ucslen)
fz_rect sel;
pdfapp_viewctm(&ctm, app);
- fz_invert_matrix(&ctm, &ctm);
- sel = app->selr;
- fz_transform_rect(&sel, &ctm);
+ ctm = fz_invert_matrix(ctm);
+ sel = fz_transform_rect(app->selr, ctm);
p = 0;
need_newline = 0;