git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
more ttf bug fixes
[swftools.git]
/
lib
/
devices
/
pdf.c
diff --git
a/lib/devices/pdf.c
b/lib/devices/pdf.c
index
5ab55fa
..
8ecfa87
100644
(file)
--- a/
lib/devices/pdf.c
+++ b/
lib/devices/pdf.c
@@
-59,19
+59,25
@@
typedef struct _internal {
double m00, m01, m10, m11;
} internal_t;
double m00, m01, m10, m11;
} internal_t;
-static void set_matrix(internal_t*i, double m00, double m01, double m10, double m11)
+static void restore_matrix(internal_t*i)
{
if(i->has_matrix) {
PDF_restore(i->p);
{
if(i->has_matrix) {
PDF_restore(i->p);
+ i->has_matrix=0;
}
}
+}
+static void set_matrix(internal_t*i, double m00, double m01, double m10, double m11)
+{
+ restore_matrix(i);
+
i->m00 = m00;
i->m01 = m01;
i->m10 = m10;
i->m11 = m11;
i->m00 = m00;
i->m01 = m01;
i->m10 = m10;
i->m11 = m11;
- i->has_matrix = 1;
PDF_save(i->p);
PDF_save(i->p);
- PDF_setmatrix(i->p, m00, -m01, m10, -m11, 0, i->height);
+ PDF_setmatrix(i->p, m00, -m01, m10, -m11, 0, i->height+2*i->config_ypad);
+ i->has_matrix = 1;
}
static void reset_matrix(internal_t*i)
{
}
static void reset_matrix(internal_t*i)
{
@@
-184,17
+190,21
@@
static int mkline(gfxline_t*line, PDF*p, double mx, double my, double scale, cha
void pdf_startclip(gfxdevice_t*dev, gfxline_t*line)
{
internal_t*i = (internal_t*)dev->internal;
void pdf_startclip(gfxdevice_t*dev, gfxline_t*line)
{
internal_t*i = (internal_t*)dev->internal;
- reset_matrix(i);
+
+ restore_matrix(i);
PDF_save(i->p);
PDF_save(i->p);
+
if(mkline(line, i->p, i->config_xpad, i->config_ypad, 1.0, 1))
PDF_clip(i->p);
else
; // TODO: strictly speaking, an empty clip clears everything
if(mkline(line, i->p, i->config_xpad, i->config_ypad, 1.0, 1))
PDF_clip(i->p);
else
; // TODO: strictly speaking, an empty clip clears everything
-
+
+ reset_matrix(i);
}
void pdf_endclip(gfxdevice_t*dev)
{
internal_t*i = (internal_t*)dev->internal;
}
void pdf_endclip(gfxdevice_t*dev)
{
internal_t*i = (internal_t*)dev->internal;
+ restore_matrix(i);
PDF_restore(i->p);
}
void pdf_stroke(gfxdevice_t*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit)
PDF_restore(i->p);
}
void pdf_stroke(gfxdevice_t*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit)
@@
-325,13
+335,14
@@
void pdf_fillgradient(gfxdevice_t*dev, gfxline_t*line, gfxgradient_t*gradient, g
internal_t*i = (internal_t*)dev->internal;
}
internal_t*i = (internal_t*)dev->internal;
}
-static const char type3 = 1;
-static const char ttf = 0;
+static const char type3 = 0;
+static const char ttf = 1;
void pdf_addfont(gfxdevice_t*dev, gfxfont_t*font)
{
internal_t*i = (internal_t*)dev->internal;
void pdf_addfont(gfxdevice_t*dev, gfxfont_t*font)
{
internal_t*i = (internal_t*)dev->internal;
+ int num = font->num_glyphs<256-32?font->num_glyphs:256-32;
if(type3) {
int fontid = 0;
if(!gfxfontlist_hasfont(i->fontlist, font)) {
if(type3) {
int fontid = 0;
if(!gfxfontlist_hasfont(i->fontlist, font)) {
@@
-348,7
+359,6
@@
void pdf_addfont(gfxdevice_t*dev, gfxfont_t*font)
}
PDF_begin_font(i->p, fontname2, l*2, 1.0, 0.0, 0.0, -1.0, 0.0, 0.0, "");
}
PDF_begin_font(i->p, fontname2, l*2, 1.0, 0.0, 0.0, -1.0, 0.0, 0.0, "");
- int num = font->num_glyphs<256-32?font->num_glyphs:256-32;
for(t=0;t<num;t++) {
gfxglyph_t*g = &font->glyphs[t];
gfxbbox_t bbox = gfxline_getbbox(g->line);
for(t=0;t<num;t++) {
gfxglyph_t*g = &font->glyphs[t];
gfxbbox_t bbox = gfxline_getbbox(g->line);
@@
-375,18
+385,21
@@
void pdf_addfont(gfxdevice_t*dev, gfxfont_t*font)
fontnr++;
const char*old_id = font->id;
font->id = fontname;
fontnr++;
const char*old_id = font->id;
font->id = fontname;
+ int t;
+ for(t=0;t<num;t++) {
+ font->glyphs[t].unicode = 32+t;
+ }
+ font->unicode2glyph = 0;
gfxfont_save(font, filename);
font->id=old_id;
int l = strlen(font->id);
gfxfont_save(font, filename);
font->id=old_id;
int l = strlen(font->id);
- int t;
for(t=0;t<l+1;t++) {
fontname2[t*2+0] = fontname[t];
fontname2[t*2+1] = 0;
}
for(t=0;t<l+1;t++) {
fontname2[t*2+0] = fontname[t];
fontname2[t*2+1] = 0;
}
- fontid = PDF_load_font(i->p, fontname2, l*2, "host", "");
+ fontid = PDF_load_font(i->p, fontname2, l*2, "host", "embedding=true");
i->fontlist = gfxfontlist_addfont2(i->fontlist, font, (void*)(ptroff_t)fontid);
i->fontlist = gfxfontlist_addfont2(i->fontlist, font, (void*)(ptroff_t)fontid);
- unlink(fontname);
}
}
}
}
}
}
@@
-417,10
+430,15
@@
void pdf_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color
int fontid = (int)(ptroff_t)gfxfontlist_getuserdata(i->fontlist, font->id);
gfxmatrix_t m = *matrix;
int fontid = (int)(ptroff_t)gfxfontlist_getuserdata(i->fontlist, font->id);
gfxmatrix_t m = *matrix;
+
m.m00*=64;
m.m01*=64;
m.m10*=64;
m.m11*=64;
m.m00*=64;
m.m01*=64;
m.m10*=64;
m.m11*=64;
+ if(ttf) {
+ m.m10 = -m.m10;
+ m.m11 = -m.m11;
+ }
if(!(fabs(m.m00 - i->m00) < 1e-6 &&
fabs(m.m01 - i->m01) < 1e-6 &&
if(!(fabs(m.m00 - i->m00) < 1e-6 &&
fabs(m.m01 - i->m01) < 1e-6 &&
@@
-431,8
+449,7
@@
void pdf_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color
double tx, ty;
transform_back(i, m.tx+i->config_xpad, m.ty+i->config_ypad, &tx, &ty);
double tx, ty;
transform_back(i, m.tx+i->config_xpad, m.ty+i->config_ypad, &tx, &ty);
- //PDF_setfont(i->p, fontid, 1.0/64.0); // downscaling is done in glyph itself
- PDF_setfont(i->p, fontid, 1.0);
+ PDF_setfont(i->p, fontid, ttf?16.0:1.0);
PDF_setrgbcolor_fill(i->p, color->r/255.0, color->g/255.0, color->b/255.0);
char name[32];
PDF_setrgbcolor_fill(i->p, color->r/255.0, color->g/255.0, color->b/255.0);
char name[32];
@@
-457,9
+474,7
@@
void pdf_drawlink(gfxdevice_t*dev, gfxline_t*line, const char*action)
void pdf_endpage(gfxdevice_t*dev)
{
internal_t*i = (internal_t*)dev->internal;
void pdf_endpage(gfxdevice_t*dev)
{
internal_t*i = (internal_t*)dev->internal;
- if(i->has_matrix) {
- PDF_restore(i->p); i->has_matrix = 0;
- }
+ restore_matrix(i);
PDF_end_page(i->p);
}
PDF_end_page(i->p);
}
@@
-562,4
+577,3
@@
void gfxdevice_pdf_init(gfxdevice_t*dev)
i->has_matrix = 0;
i->p = PDF_new();
}
i->has_matrix = 0;
i->p = PDF_new();
}
-