implemented type3 fonts in pdf2pdf, added fontmatrix tests to testsuite
[swftools.git] / lib / gfxtools.c
index 9143507..d8aef3f 100644 (file)
@@ -28,6 +28,7 @@
 #include <assert.h>
 #include "gfxtools.h"
 #include "gfxfont.h"
+#include "jpeg.h"
 
 typedef struct _linedraw_internal
 {
@@ -794,7 +795,18 @@ char gfxfontlist_hasfont(gfxfontlist_t*list, gfxfont_t*font)
     }
     return 0;
 }
-gfxfontlist_t*gfxfontlist_addfont(gfxfontlist_t*list, gfxfont_t*font)
+void*gfxfontlist_getuserdata(gfxfontlist_t*list, const char*id)
+{
+    gfxfontlist_t*l = list;
+    while(l) {
+       if(!strcmp((char*)l->font->id, id)) {
+           return l->user;
+       }
+       l = l->next;
+    }
+    return 0;
+}
+gfxfontlist_t*gfxfontlist_addfont2(gfxfontlist_t*list, gfxfont_t*font, void*user)
 {
     gfxfontlist_t*last=0,*l = list;
     while(l) {
@@ -809,6 +821,7 @@ gfxfontlist_t*gfxfontlist_addfont(gfxfontlist_t*list, gfxfont_t*font)
     }
     l = (gfxfontlist_t*)rfx_calloc(sizeof(gfxfontlist_t));
     l->font = font;
+    l->user = user;
     l->next = 0;
     if(last) {
        last->next = l;
@@ -817,6 +830,10 @@ gfxfontlist_t*gfxfontlist_addfont(gfxfontlist_t*list, gfxfont_t*font)
        return l;
     }
 }
+gfxfontlist_t*gfxfontlist_addfont(gfxfontlist_t*list, gfxfont_t*font)
+{
+    return gfxfontlist_addfont2(list, font, 0);
+}
 void gfxfontlist_free(gfxfontlist_t*list, char deletefonts)
 {
     gfxfontlist_t*l = list;
@@ -831,7 +848,7 @@ void gfxfontlist_free(gfxfontlist_t*list, char deletefonts)
     }
 }
 
-gfxline_t*gfxline_makerectangle(int x1,int y1,int x2, int y2)
+gfxline_t*gfxline_makerectangle(double x1,double y1,double x2, double y2)
 {
     gfxline_t* line = (gfxline_t*)rfx_calloc(sizeof(gfxline_t)*5);
     line[0].x = x1;line[0].y = y1;line[0].type = gfx_moveTo;line[0].next = &line[1];
@@ -987,3 +1004,18 @@ void gfxline_dump(gfxline_t*line, FILE*fi, char*prefix)
     }
 }
 
+void gfximage_save_jpeg(gfximage_t*img, char*filename, int quality)
+{
+    unsigned char*data = malloc(img->width*img->height*3);
+    int t;
+    int size = img->width*img->height;
+    int s = 0;
+    for(t=0;t<size;t++) {
+       data[s+0] = img->data[t].r;
+       data[s+1] = img->data[t].g;
+       data[s+2] = img->data[t].b;
+       s+=3;
+    }
+    jpeg_save(data, img->width, img->height, quality, filename);
+}
+