implemented new version of finish()
authorkramm <kramm>
Thu, 2 Jun 2005 17:06:41 +0000 (17:06 +0000)
committerkramm <kramm>
Thu, 2 Jun 2005 17:06:41 +0000 (17:06 +0000)
pdf2swf/SWFOutputDev.cc
pdf2swf/swfoutput.cc
pdf2swf/swfoutput.h

index e246867..b0fd6cb 100644 (file)
@@ -253,7 +253,9 @@ public:
 
   void finish();
 
-  SWF*swf; //filled upon completion
+  gfxresult_t*result; //filled when complete
+
+  char outer_clip_box; //whether the page clip box is still on
 
   SWFOutputState states[64];
   int statepos;
@@ -378,7 +380,8 @@ SWFOutputDev::SWFOutputDev()
     current_text_stroke = 0;
     current_text_clip = 0;
     fontlist = 0;
-    swf = 0;
+    result = 0;
+    outer_clip_box = 0;
     output = (gfxdevice_t*)malloc(sizeof(gfxdevice_t));
     memset(output, 0, sizeof(output));
 };
@@ -399,9 +402,17 @@ void SWFOutputDev::setClip(int x1,int y1,int x2,int y2)
     this->user_clipx2 = x2;
     this->user_clipy2 = y2;
 }
+
 void SWFOutputDev::getDimensions(int*x1,int*y1,int*x2,int*y2)
 {
-    return gfxdevice_swf_getdimensions(output, x1,y1,x2,y2);
+    if(result) {
+       *x1 = (int)result->get(result, "xmin");
+       *y1 = (int)result->get(result, "ymin");
+       *x2 = (int)result->get(result, "xmax");
+       *y2 = (int)result->get(result, "ymax");
+    } else {
+       *x1 = *y1 = *x2 = *y2 = 0;
+    }
 }
 
 static char*getFontID(GfxFont*font)
@@ -648,7 +659,7 @@ void dump_outline(gfxline_t*line)
     }
 }
 
-gfxline_t* gfxPath_to_gfxline(GfxState*state, GfxPath*path, int closed)
+gfxline_t* gfxPath_to_gfxline(GfxState*state, GfxPath*path, int closed, int user_movex, int user_movey)
 {
     int num = path->getNumSubpaths();
     int s,t;
@@ -669,7 +680,11 @@ gfxline_t* gfxPath_to_gfxline(GfxState*state, GfxPath*path, int closed)
 
        for(s=0;s<subnum;s++) {
           double x,y;
+          
           state->transform(subpath->getX(s),subpath->getY(s),&x,&y);
+          x += user_movex;
+          y += user_movey;
+
           if(s==0) {
                if(closed && needsfix && (fabs(posx-lastx)+fabs(posy-lasty))>0.001) {
                    draw.lineTo(&draw, lastx, lasty);
@@ -715,7 +730,7 @@ gfxline_t* gfxPath_to_gfxline(GfxState*state, GfxPath*path, int closed)
 void SWFOutputDev::stroke(GfxState *state) 
 {
     GfxPath * path = state->getPath();
-    gfxline_t*line= gfxPath_to_gfxline(state, path, 0);
+    gfxline_t*line= gfxPath_to_gfxline(state, path, 0, user_movex, user_movey);
     strokeGfxline(state, line);
     gfxline_free(line);
 }
@@ -824,7 +839,7 @@ void SWFOutputDev::fillGfxLine(GfxState *state, gfxline_t*line)
 void SWFOutputDev::fill(GfxState *state) 
 {
     GfxPath * path = state->getPath();
-    gfxline_t*line= gfxPath_to_gfxline(state, path, 1);
+    gfxline_t*line= gfxPath_to_gfxline(state, path, 1, user_movex, user_movey);
     fillGfxLine(state, line);
     gfxline_free(line);
 }
@@ -833,7 +848,7 @@ void SWFOutputDev::eoFill(GfxState *state)
     GfxPath * path = state->getPath();
     gfxcolor_t col = getFillColor(state);
 
-    gfxline_t*line= gfxPath_to_gfxline(state, path, 1);
+    gfxline_t*line= gfxPath_to_gfxline(state, path, 1, user_movex, user_movey);
 
     if(getLogLevel() >= LOGLEVEL_TRACE)  {
         msg("<trace> eofill\n");
@@ -847,7 +862,7 @@ void SWFOutputDev::eoFill(GfxState *state)
 void SWFOutputDev::clip(GfxState *state) 
 {
     GfxPath * path = state->getPath();
-    gfxline_t*line = gfxPath_to_gfxline(state, path, 1);
+    gfxline_t*line = gfxPath_to_gfxline(state, path, 1, user_movex, user_movey);
     clipToGfxLine(state, line);
     gfxline_free(line);
 }
@@ -865,7 +880,7 @@ void SWFOutputDev::clipToGfxLine(GfxState *state, gfxline_t*line)
 void SWFOutputDev::eoClip(GfxState *state) 
 {
     GfxPath * path = state->getPath();
-    gfxline_t*line = gfxPath_to_gfxline(state, path, 1);
+    gfxline_t*line = gfxPath_to_gfxline(state, path, 1, user_movex, user_movey);
 
     if(getLogLevel() >= LOGLEVEL_TRACE)  {
         msg("<trace> eoclip\n");
@@ -880,21 +895,32 @@ void SWFOutputDev::eoClip(GfxState *state)
 /* pass through functions for swf_output */
 int SWFOutputDev::save(char*filename)
 {
-    return gfxdevice_swf_save(output, filename);
+    finish();
+    return result->save(result, filename);
 }
 void SWFOutputDev::pagefeed()
 {
+    if(outer_clip_box) {
+       output->endclip(output);
+       outer_clip_box = 0;
+    }
+
     swfoutput_pagefeed(output);
 }
 void* SWFOutputDev::getSWF()
 {
-    return (void*)gfxdevice_swf_get(output);
+    finish();
+    return result->get(result, "swf");
 }
 
 void SWFOutputDev::finish()
 {
+    if(outer_clip_box) {
+       output->endclip(output);
+       outer_clip_box = 0;
+    }
     if(output) {
-       this->swf = (SWF*)output->finish(output);
+       this->result = output->finish(output);
        free(output);output=0;
     }
 }
@@ -904,10 +930,9 @@ SWFOutputDev::~SWFOutputDev()
     finish();
     outputstarted = 0;
 
-    if(this->swf) {
-       swf_FreeTags(this->swf);
-       free(this->swf);
-       this->swf = 0;
+    if(this->result) {
+       this->result->destroy(this->result);
+       this->result = 0;
     }
 
     fontlist_t*l = this->fontlist;
@@ -1110,6 +1135,8 @@ void SWFOutputDev::drawChar(GfxState *state, double x, double y,
 
     gfxmatrix_t m = this->current_font_matrix;
     state->transform(x, y, &m.tx, &m.ty);
+    m.tx += user_movex;
+    m.ty += user_movey;
 
     if(render == RENDER_FILL) {
        output->drawchar(output, current_font_id, charid, &col, &m);
@@ -1211,7 +1238,12 @@ void SWFOutputDev::startPage(int pageNum, GfxState *state, double crop_x1, doubl
     this->currentpage = pageNum;
     double x1,y1,x2,y2;
     int rot = doc->getPageRotate(1);
+    gfxcolor_t white;
     laststate = state;
+    gfxline_t clippath[5];
+
+    white.r = white.g = white.b = white.a = 255;
+
     msg("<verbose> startPage %d (%f,%f,%f,%f)\n", pageNum, crop_x1, crop_y1, crop_x2, crop_y2);
     if(rot!=0)
         msg("<verbose> page is rotated %d degrees\n", rot);
@@ -1253,8 +1285,23 @@ void SWFOutputDev::startPage(int pageNum, GfxState *state, double crop_x1, doubl
         
        outputstarted = 1;
     }
-      
-    swfoutput_newpage(output, pageNum, user_movex, user_movey, (int)x1, (int)y1, (int)x2, (int)y2);
+
+    if(outer_clip_box) {
+       output->endclip(output);
+       outer_clip_box = 0;
+    }
+
+    msg("<notice> processing page %d (%dx%d:%d:%d)", pageNum, (int)x2-(int)x1,(int)y2-(int)y1, (int)x1, (int)y1);
+
+    swfoutput_newpage(output, (int)x1, (int)y1, (int)x2, (int)y2);
+
+    clippath[0].type = gfx_moveTo;clippath[0].x = x1; clippath[0].y = y1; clippath[0].next = &clippath[1];
+    clippath[1].type = gfx_lineTo;clippath[1].x = x2; clippath[1].y = y1; clippath[1].next = &clippath[2];
+    clippath[2].type = gfx_lineTo;clippath[2].x = x2; clippath[2].y = y2; clippath[2].next = &clippath[3];
+    clippath[3].type = gfx_lineTo;clippath[3].x = x1; clippath[3].y = y2; clippath[3].next = &clippath[4];
+    clippath[4].type = gfx_lineTo;clippath[4].x = x1; clippath[4].y = y1; clippath[4].next = 0;
+    output->startclip(output, clippath); outer_clip_box = 1;
+    output->fill(output, clippath, &white);
 }
 
 void SWFOutputDev::drawLink(Link *link, Catalog *catalog) 
@@ -1275,28 +1322,28 @@ void SWFOutputDev::drawLink(Link *link, Catalog *catalog)
     rgb.b = 1;
     cvtUserToDev(x1, y1, &x, &y);
     points[0].type = gfx_moveTo;
-    points[0].x = points[4].x = (int)x;
-    points[0].y = points[4].y = (int)y;
+    points[0].x = points[4].x = x + user_movex;
+    points[0].y = points[4].y = y + user_movey;
     points[0].next = &points[1];
     cvtUserToDev(x2, y1, &x, &y);
     points[1].type = gfx_lineTo;
-    points[1].x = (int)x;
-    points[1].y = (int)y;
+    points[1].x = x + user_movex;
+    points[1].y = y + user_movey;
     points[1].next = &points[2];
     cvtUserToDev(x2, y2, &x, &y);
     points[2].type = gfx_lineTo;
-    points[2].x = (int)x;
-    points[2].y = (int)y;
+    points[2].x = x + user_movex;
+    points[2].y = y + user_movey;
     points[2].next = &points[3];
     cvtUserToDev(x1, y2, &x, &y);
     points[3].type = gfx_lineTo;
-    points[3].x = (int)x;
-    points[3].y = (int)y;
+    points[3].x = x + user_movex;
+    points[3].y = y + user_movey;
     points[3].next = &points[4];
     cvtUserToDev(x1, y1, &x, &y);
     points[4].type = gfx_lineTo;
-    points[4].x = (int)x;
-    points[4].y = (int)y;
+    points[4].x = x + user_movex;
+    points[4].y = y + user_movey;
     points[4].next = 0;
 
     LinkAction*action=link->getAction();
@@ -2086,10 +2133,10 @@ void SWFOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str,
       return;
   }
   
-  state->transform(0, 1, &x1, &y1);
-  state->transform(0, 0, &x2, &y2);
-  state->transform(1, 0, &x3, &y3);
-  state->transform(1, 1, &x4, &y4);
+  state->transform(0, 1, &x1, &y1); x1 += user_movex; y1+= user_movey;
+  state->transform(0, 0, &x2, &y2); x2 += user_movex; y2+= user_movey;
+  state->transform(1, 0, &x3, &y3); x3 += user_movex; y3+= user_movey;
+  state->transform(1, 1, &x4, &y4); x4 += user_movex; y4+= user_movey;
 
   if(!pbminfo && !(str->getKind()==strDCT)) {
       if(!type3active) {
index 8e57b3a..179d9ed 100644 (file)
@@ -88,7 +88,7 @@ typedef struct _swfoutput_internal
     float config_minlinewidth;
     double config_caplinewidth;
 
-    SWF swf;
+    SWF* swf;
 
     fontlist_t* fontlist;
 
@@ -138,8 +138,6 @@ typedef struct _swfoutput_internal
     int bboxrectpos;
     SRECT bboxrect;
 
-    TAG*cliptag;
     chardata_t chardata[CHARDATAMAX];
     int chardatapos;
     int firstpage;
@@ -157,7 +155,6 @@ typedef struct _swfoutput_internal
 
 } swfoutput_internal;
     
-static void* swf_finish(gfxdevice_t*driver);
 static void swf_fillbitmap(gfxdevice_t*driver, gfxline_t*line, gfximage_t*img, gfxmatrix_t*move, gfxcxform_t*cxform);
 static int  swf_setparameter(gfxdevice_t*driver, const char*key, const char*value);
 static void swf_drawstroke(gfxdevice_t*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit);
@@ -170,6 +167,7 @@ static void swf_fillgradient(gfxdevice_t*dev, gfxline_t*line, gfxgradient_t*grad
 static void swf_drawchar(gfxdevice_t*dev, char*fontid, int glyph, gfxcolor_t*color, gfxmatrix_t*matrix);
 static void swf_addfont(gfxdevice_t*dev, char*fontid, gfxfont_t*font);
 static void swf_drawlink(gfxdevice_t*dev, gfxline_t*line, char*action);
+static gfxresult_t* swf_finish(gfxdevice_t*driver);
 
 int getCharID(SWFFONT *font, int charnr, char *charname, int u);
 
@@ -1142,40 +1140,27 @@ static void setBackground(gfxdevice_t*dev, int x1, int y1, int x2, int y2)
     swf_ObjectPlace(i->tag,shapeid,getNewDepth(dev),0,0,0);
     i->tag = swf_InsertTag(i->tag, ST_PLACEOBJECT2);
     swf_ObjectPlaceClip(i->tag,shapeid,getNewDepth(dev),0,0,0,65535);
-    i->cliptag = i->tag;
 }
 
-void swfoutput_newpage(gfxdevice_t*dev, int pageNum, int movex, int movey, int x1, int y1, int x2, int y2)
+void swfoutput_newpage(gfxdevice_t*dev, int x1, int y1, int x2, int y2)
 {
     swfoutput_internal*i = (swfoutput_internal*)dev->internal;
     if(!i->firstpage && !i->pagefinished)
         endpage(dev);
 
     swf_GetMatrix(0, &i->page_matrix);
-    i->page_matrix.tx = movex*20;
-    i->page_matrix.ty = movey*20;
-
-    if(i->cliptag && i->frameno == i->lastframeno) {
-        SWFPLACEOBJECT dev;
-        swf_GetPlaceObject(i->cliptag, &dev);
-        dev.clipdepth = i->depth;
-        swf_ResetTag(i->cliptag, i->cliptag->id);
-        swf_SetPlaceObject(i->cliptag, &dev);
-        swf_PlaceObjectFree(&dev);
-    }
-
+    i->page_matrix.tx = 0;
+    i->page_matrix.ty = 0;
     i->min_x = x1;
     i->min_y = y1;
     i->max_x = x2;
     i->max_y = y2;
     
-    msg("<notice> processing page %d (%dx%d:%d:%d)", pageNum,x2-x1,y2-y1, x1, y1);
-
     x1*=20;y1*=20;x2*=20;y2*=20;
 
     /* set clipping/background rectangle */
     /* TODO: this should all be done in SWFOutputDev */
-    setBackground(dev, x1, y1, x2, y2);
+    //setBackground(dev, x1, y1, x2, y2);
 
     /* increase SWF's bounding box */
     SRECT r;
@@ -1183,7 +1168,7 @@ void swfoutput_newpage(gfxdevice_t*dev, int pageNum, int movex, int movey, int x
     r.ymin = y1;
     r.xmax = x2;
     r.ymax = y2;
-    swf_ExpandRect2(&i->swf.movieSize, &r);
+    swf_ExpandRect2(&i->swf->movieSize, &r);
 
     i->lastframeno = i->frameno;
     i->firstpage = 0;
@@ -1220,18 +1205,17 @@ void gfxdevice_swf_init(gfxdevice_t* dev)
     msg("<verbose> initializing swf output for size %d*%d\n", i->max_x,i->max_y);
 
     i->swffont = 0;
+   
+    i->swf = (SWF*)rfx_calloc(sizeof(SWF));
+    i->swf->fileVersion    = i->config_flashversion;
+    i->swf->frameRate      = 0x0040; // 1 frame per 4 seconds
+    i->swf->movieSize.xmin = 0;
+    i->swf->movieSize.ymin = 0;
+    i->swf->movieSize.xmax = 0;
+    i->swf->movieSize.ymax = 0;
     
-    memset(&i->swf,0x00,sizeof(SWF));
-
-    i->swf.fileVersion    = i->config_flashversion;
-    i->swf.frameRate      = 0x0040; // 1 frame per 4 seconds
-    i->swf.movieSize.xmin = 0;
-    i->swf.movieSize.ymin = 0;
-    i->swf.movieSize.xmax = 0;
-    i->swf.movieSize.ymax = 0;
-    
-    i->swf.firstTag = swf_InsertTag(NULL,ST_SETBACKGROUNDCOLOR);
-    i->tag = i->swf.firstTag;
+    i->swf->firstTag = swf_InsertTag(NULL,ST_SETBACKGROUNDCOLOR);
+    i->tag = i->swf->firstTag;
     rgb.a = rgb.r = rgb.g = rgb.b = 0xff;
     swf_SetRGB(i->tag,&rgb);
 
@@ -1451,25 +1435,25 @@ void swfoutput_finalize(gfxdevice_t*dev)
         return; //already done
 
     if(i->config_bboxvars) {
-       TAG* tag = swf_InsertTag(i->swf.firstTag, ST_DOACTION);
+       TAG* tag = swf_InsertTag(i->swf->firstTag, ST_DOACTION);
        ActionTAG*a = 0;
        a = action_PushString(a, "xmin");
-       a = action_PushFloat(a, i->swf.movieSize.xmin / 20.0);
+       a = action_PushFloat(a, i->swf->movieSize.xmin / 20.0);
        a = action_SetVariable(a);
        a = action_PushString(a, "ymin");
-       a = action_PushFloat(a, i->swf.movieSize.ymin / 20.0);
+       a = action_PushFloat(a, i->swf->movieSize.ymin / 20.0);
        a = action_SetVariable(a);
        a = action_PushString(a, "xmax");
-       a = action_PushFloat(a, i->swf.movieSize.xmax / 20.0);
+       a = action_PushFloat(a, i->swf->movieSize.xmax / 20.0);
        a = action_SetVariable(a);
        a = action_PushString(a, "ymax");
-       a = action_PushFloat(a, i->swf.movieSize.ymax / 20.0);
+       a = action_PushFloat(a, i->swf->movieSize.ymax / 20.0);
        a = action_SetVariable(a);
        a = action_PushString(a, "width");
-       a = action_PushFloat(a, (i->swf.movieSize.xmax - i->swf.movieSize.xmin) / 20.0);
+       a = action_PushFloat(a, (i->swf->movieSize.xmax - i->swf->movieSize.xmin) / 20.0);
        a = action_SetVariable(a);
        a = action_PushString(a, "height");
-       a = action_PushFloat(a, (i->swf.movieSize.ymax - i->swf.movieSize.ymin) / 20.0);
+       a = action_PushFloat(a, (i->swf->movieSize.ymax - i->swf->movieSize.ymin) / 20.0);
        a = action_SetVariable(a);
        a = action_End(a);
        swf_ActionSet(tag, a);
@@ -1482,7 +1466,7 @@ void swfoutput_finalize(gfxdevice_t*dev)
     endpage(dev);
     fontlist_t *tmp,*iterator = i->fontlist;
     while(iterator) {
-       TAG*mtag = i->swf.firstTag;
+       TAG*mtag = i->swf->firstTag;
        if(iterator->swffont) {
            mtag = swf_InsertTag(mtag, ST_DEFINEFONT2);
            if(!i->config_storeallcharacters)
@@ -1504,35 +1488,16 @@ void swfoutput_finalize(gfxdevice_t*dev)
     }
     
     if(i->overflow) {
-       wipeSWF(&i->swf);
+       wipeSWF(i->swf);
+    }
+    if(i->config_enablezlib || i->config_flashversion>=6) {
+       i->swf->compressed = 1;
     }
 }
 
-void gfxdevice_swf_getdimensions(gfxdevice_t*dev, int*x1, int*y1, int*x2, int*y2)
-{
-    swfoutput_internal*i = (swfoutput_internal*)dev->internal;
-    if(x1) *x1 = i->swf.movieSize.xmin/20;
-    if(y1) *y1 = i->swf.movieSize.ymin/20;
-    if(x2) *x2 = i->swf.movieSize.xmax/20;
-    if(y2) *y2 = i->swf.movieSize.ymax/20;
-}
-
-static void swfoutput_destroy(gfxdevice_t* dev);
-
-void* swf_finish(gfxdevice_t* dev)
-{
-    swfoutput_internal*i = (swfoutput_internal*)dev->internal;
-    swfoutput_finalize(dev);
-    SWF* swf = swf_CopySWF(&i->swf);
-    swfoutput_destroy(dev);
-    return swf;
-}
-
-int gfxdevice_swf_save(gfxdevice_t* dev, char*filename) 
+int swfresult_save(gfxresult_t*gfx, char*filename)
 {
-    swfoutput_internal*i = (swfoutput_internal*)dev->internal;
-    swfoutput_finalize(dev);
-
+    SWF*swf = (SWF*)gfx->internal;
     int fi;
     if(filename)
      fi = open(filename, O_BINARY|O_CREAT|O_TRUNC|O_WRONLY, 0777);
@@ -1540,28 +1505,66 @@ int gfxdevice_swf_save(gfxdevice_t* dev, char*filename)
      fi = 1; // stdout
     
     if(fi<=0) {
-     msg("<fatal> Could not create \"%s\". ", FIXNULL(filename));
-     return 0;
+       msg("<fatal> Could not create \"%s\". ", FIXNULL(filename));
+       return -1;
     }
     
-    if(i->config_enablezlib || i->config_flashversion>=6) {
-      if FAILED(swf_WriteSWC(fi,&i->swf)) 
-       msg("<error> WriteSWC() failed.\n");
+    if(swf->compressed) {
+       if FAILED(swf_WriteSWC(fi,swf)) 
+           msg("<error> WriteSWC() failed.\n");
     } else {
-      if FAILED(swf_WriteSWF(fi,&i->swf)) 
-       msg("<error> WriteSWF() failed.\n");
+       if FAILED(swf_WriteSWF(fi,swf)) 
+           msg("<error> WriteSWF() failed.\n");
     }
 
     if(filename)
      close(fi);
-    return 1;
+    return 0;
+}
+void* swfresult_get(gfxresult_t*gfx, char*name)
+{
+    SWF*swf = (SWF*)gfx->internal;
+    if(!strcmp(name, "swf")) {
+       return (void*)swf_CopySWF(swf);
+    } else if(!strcmp(name, "xmin")) {
+       return (void*)(swf->movieSize.xmin/20);
+    } else if(!strcmp(name, "ymin")) {
+       return (void*)(swf->movieSize.ymin/20);
+    } else if(!strcmp(name, "xmax")) {
+       return (void*)(swf->movieSize.xmax/20);
+    } else if(!strcmp(name, "ymax")) {
+       return (void*)(swf->movieSize.ymax/20);
+    }
+    return 0;
+}
+void swfresult_destroy(gfxresult_t*gfx)
+{
+    if(gfx->internal) {
+       swf_FreeTags((SWF*)gfx->internal);
+       free(gfx->internal);
+       gfx->internal = 0;
+    }
+    memset(gfx, 0, sizeof(gfxresult_t));
 }
 
-void* gfxdevice_swf_get(gfxdevice_t*dev)
+static void swfoutput_destroy(gfxdevice_t* dev);
+
+gfxresult_t* swf_finish(gfxdevice_t* dev)
 {
     swfoutput_internal*i = (swfoutput_internal*)dev->internal;
+    gfxresult_t*result;
+
     swfoutput_finalize(dev);
-    return (void*)swf_CopySWF(&i->swf);
+    SWF* swf = i->swf;i->swf = 0;
+    swfoutput_destroy(dev);
+
+    result = (gfxresult_t*)rfx_calloc(sizeof(gfxresult_t));
+    result->internal = swf;
+    result->save = swfresult_save;
+    result->write = 0;
+    result->get = swfresult_get;
+    result->destroy = swfresult_destroy;
+    return result;
 }
 
 /* Perform cleaning up */
@@ -1582,7 +1585,7 @@ static void swfoutput_destroy(gfxdevice_t* dev)
         iterator = iterator->next;
         delete tmp;
     }
-    swf_FreeTags(&i->swf);
+    if(i->swf) {swf_FreeTags(i->swf);free(i->swf);i->swf = 0;}
 
     free(i);i=0;
     memset(dev, 0, sizeof(gfxdevice_t));
index 23f388a..4c19d1f 100644 (file)
 
 void gfxdevice_swf_init(gfxdevice_t*);
 
-void* gfxdevice_swf_get(gfxdevice_t*);
-int gfxdevice_swf_save(gfxdevice_t*, char*filename);
-
+void swfoutput_newpage(gfxdevice_t*, int x1, int y1, int x2, int y2);
 void swfoutput_pagefeed(gfxdevice_t*obj);
-void swfoutput_newpage(gfxdevice_t*, int pageNum, int movex, int movey, int x1, int y1, int x2, int y2);
-void gfxdevice_swf_getdimensions(gfxdevice_t*, int*x1, int*y1, int*x2, int*y2);
 
 #endif //__swfoutput_h__