summaryrefslogtreecommitdiff
path: root/xps
diff options
context:
space:
mode:
authorPaul Gardiner <paulg.artifex@glidos.net>2012-08-01 15:10:40 +0100
committerPaul Gardiner <paulg.artifex@glidos.net>2012-08-01 15:10:40 +0100
commitc8b8bbc851ae2089f515b5e65780198ad024c5cb (patch)
treeb1702dda67a2a6026e8870ec1a89d70545f69f2f /xps
parent55743b7682129deb6cc03e90ebde1b0e6e62d3b4 (diff)
parent4d36e9613da5190aba2c0c6c8281e5d35cf9758c (diff)
downloadmupdf-c8b8bbc851ae2089f515b5e65780198ad024c5cb.tar.xz
Merge branch 'master' into forms
Conflicts: pdf/mupdf-internal.h pdf/pdf_font.c
Diffstat (limited to 'xps')
-rw-r--r--xps/xps_glyphs.c5
-rw-r--r--xps/xps_path.c62
2 files changed, 18 insertions, 49 deletions
diff --git a/xps/xps_glyphs.c b/xps/xps_glyphs.c
index f75815f0..6a7a1dcc 100644
--- a/xps/xps_glyphs.c
+++ b/xps/xps_glyphs.c
@@ -332,6 +332,9 @@ xps_parse_glyphs_imp(xps_document *doc, fz_matrix ctm,
else
advance = mtx.hadv * 100;
+ if (font->ft_bold)
+ advance *= 1.02f;
+
if (is && *is)
{
is = xps_parse_glyph_metrics(is, &advance, &u_offset, &v_offset);
@@ -517,7 +520,7 @@ xps_parse_glyphs(xps_document *doc, fz_matrix ctm,
fz_try(doc->ctx)
{
- font = fz_new_font_from_memory(doc->ctx, part->data, part->size, subfontid, 1);
+ font = fz_new_font_from_memory(doc->ctx, NULL, part->data, part->size, subfontid, 1);
}
fz_catch(doc->ctx)
{
diff --git a/xps/xps_path.c b/xps/xps_path.c
index 696a78b9..8650fbb8 100644
--- a/xps/xps_path.c
+++ b/xps/xps_path.c
@@ -35,40 +35,6 @@ xps_parse_point(char *s_in, float *x, float *y)
return s_out;
}
-static fz_point
-fz_currentpoint(fz_path *path)
-{
- fz_point c, m;
- int i;
-
- c.x = c.y = m.x = m.y = 0;
- i = 0;
-
- while (i < path->len)
- {
- switch (path->items[i++].k)
- {
- case FZ_MOVETO:
- m.x = c.x = path->items[i++].v;
- m.y = c.y = path->items[i++].v;
- break;
- case FZ_LINETO:
- c.x = path->items[i++].v;
- c.y = path->items[i++].v;
- break;
- case FZ_CURVETO:
- i += 4;
- c.x = path->items[i++].v;
- c.y = path->items[i++].v;
- break;
- case FZ_CLOSE_PATH:
- c = m;
- }
- }
-
- return c;
-}
-
/* Draw an arc segment transformed by the matrix, we approximate with straight
* line segments. We cannot use the fz_arc function because they only draw
* circular arcs, we need to transform the line to make them elliptical but
@@ -160,7 +126,7 @@ xps_draw_arc(fz_context *doc, fz_path *path,
float sign;
float th1, dth;
- pt = fz_currentpoint(path);
+ pt = fz_currentpoint(doc, path);
x1 = pt.x;
y1 = pt.y;
x2 = point_x;
@@ -334,7 +300,7 @@ xps_parse_abbreviated_geometry(xps_document *doc, char *geom, int *fill_rule)
break;
case 'm':
if (i + 1 >= n) break;
- pt = fz_currentpoint(path);
+ pt = fz_currentpoint(doc->ctx, path);
fz_moveto(doc->ctx, path, pt.x + fz_atof(args[i]), pt.y + fz_atof(args[i+1]));
i += 2;
break;
@@ -346,33 +312,33 @@ xps_parse_abbreviated_geometry(xps_document *doc, char *geom, int *fill_rule)
break;
case 'l':
if (i + 1 >= n) break;
- pt = fz_currentpoint(path);
+ pt = fz_currentpoint(doc->ctx, path);
fz_lineto(doc->ctx, path, pt.x + fz_atof(args[i]), pt.y + fz_atof(args[i+1]));
i += 2;
break;
case 'H':
if (i >= n) break;
- pt = fz_currentpoint(path);
+ pt = fz_currentpoint(doc->ctx, path);
fz_lineto(doc->ctx, path, fz_atof(args[i]), pt.y);
i += 1;
break;
case 'h':
if (i >= n) break;
- pt = fz_currentpoint(path);
+ pt = fz_currentpoint(doc->ctx, path);
fz_lineto(doc->ctx, path, pt.x + fz_atof(args[i]), pt.y);
i += 1;
break;
case 'V':
if (i >= n) break;
- pt = fz_currentpoint(path);
+ pt = fz_currentpoint(doc->ctx, path);
fz_lineto(doc->ctx, path, pt.x, fz_atof(args[i]));
i += 1;
break;
case 'v':
if (i >= n) break;
- pt = fz_currentpoint(path);
+ pt = fz_currentpoint(doc->ctx, path);
fz_lineto(doc->ctx, path, pt.x, pt.y + fz_atof(args[i]));
i += 1;
break;
@@ -394,7 +360,7 @@ xps_parse_abbreviated_geometry(xps_document *doc, char *geom, int *fill_rule)
case 'c':
if (i + 5 >= n) break;
- pt = fz_currentpoint(path);
+ pt = fz_currentpoint(doc->ctx, path);
x1 = fz_atof(args[i+0]) + pt.x;
y1 = fz_atof(args[i+1]) + pt.y;
x2 = fz_atof(args[i+2]) + pt.x;
@@ -410,7 +376,7 @@ xps_parse_abbreviated_geometry(xps_document *doc, char *geom, int *fill_rule)
case 'S':
if (i + 3 >= n) break;
- pt = fz_currentpoint(path);
+ pt = fz_currentpoint(doc->ctx, path);
x1 = fz_atof(args[i+0]);
y1 = fz_atof(args[i+1]);
x2 = fz_atof(args[i+2]);
@@ -424,7 +390,7 @@ xps_parse_abbreviated_geometry(xps_document *doc, char *geom, int *fill_rule)
case 's':
if (i + 3 >= n) break;
- pt = fz_currentpoint(path);
+ pt = fz_currentpoint(doc->ctx, path);
x1 = fz_atof(args[i+0]) + pt.x;
y1 = fz_atof(args[i+1]) + pt.y;
x2 = fz_atof(args[i+2]) + pt.x;
@@ -438,7 +404,7 @@ xps_parse_abbreviated_geometry(xps_document *doc, char *geom, int *fill_rule)
case 'Q':
if (i + 3 >= n) break;
- pt = fz_currentpoint(path);
+ pt = fz_currentpoint(doc->ctx, path);
x1 = fz_atof(args[i+0]);
y1 = fz_atof(args[i+1]);
x2 = fz_atof(args[i+2]);
@@ -451,7 +417,7 @@ xps_parse_abbreviated_geometry(xps_document *doc, char *geom, int *fill_rule)
break;
case 'q':
if (i + 3 >= n) break;
- pt = fz_currentpoint(path);
+ pt = fz_currentpoint(doc->ctx, path);
x1 = fz_atof(args[i+0]) + pt.x;
y1 = fz_atof(args[i+1]) + pt.y;
x2 = fz_atof(args[i+2]) + pt.x;
@@ -473,7 +439,7 @@ xps_parse_abbreviated_geometry(xps_document *doc, char *geom, int *fill_rule)
break;
case 'a':
if (i + 6 >= n) break;
- pt = fz_currentpoint(path);
+ pt = fz_currentpoint(doc->ctx, path);
xps_draw_arc(doc->ctx, path,
fz_atof(args[i+0]), fz_atof(args[i+1]), fz_atof(args[i+2]),
atoi(args[i+3]), atoi(args[i+4]),
@@ -587,7 +553,7 @@ xps_parse_poly_quadratic_bezier_segment(fz_context *doc, fz_path *path, xml_elem
}
else
{
- pt = fz_currentpoint(path);
+ pt = fz_currentpoint(doc, path);
fz_curveto(doc, path,
(pt.x + 2 * x[0]) / 3, (pt.y + 2 * y[0]) / 3,
(x[1] + 2 * x[0]) / 3, (y[1] + 2 * y[0]) / 3,