added "linkfunction" shortcut parameter
[swftools.git] / lib / devices / swf.c
index 67c6ac4..915f443 100644 (file)
@@ -92,6 +92,7 @@ typedef struct _swfoutput_internal
     char*config_internallinkfunction;
     char*config_externallinkfunction;
     char config_animate;
+    double config_framerate;
 
     SWF* swf;
 
@@ -227,6 +228,7 @@ static swfoutput_internal* init_internal_struct()
     i->config_generate_fake_tags=0;
     i->config_insertstoptag=0;
     i->config_flashversion=6;
+    i->config_framerate=0.25;
     i->config_splinemaxerror=1;
     i->config_fontsplinemaxerror=1;
     i->config_filloverlap=0;
@@ -933,7 +935,7 @@ void gfxdevice_swf_init(gfxdevice_t* dev)
    
     i->swf = (SWF*)rfx_calloc(sizeof(SWF));
     i->swf->fileVersion    = i->config_flashversion;
-    i->swf->frameRate      = 0x0040; // 1 frame per 4 seconds
+    i->swf->frameRate      = i->config_framerate*0x100;
     i->swf->movieSize.xmin = 0;
     i->swf->movieSize.ymin = 0;
     i->swf->movieSize.xmax = 0;
@@ -1778,6 +1780,9 @@ int swf_setparameter(gfxdevice_t*dev, const char*name, const char*value)
        i->config_internallinkfunction = strdup(value);
     } else if(!strcmp(name, "externallinkfunction")) {
        i->config_externallinkfunction = strdup(value);
+    } else if(!strcmp(name, "linkfunction")) { //sets both internallinkfunction and externallinkfunction
+       i->config_internallinkfunction = strdup(value);
+       i->config_externallinkfunction = strdup(value);
     } else if(!strcmp(name, "disable_polygon_conversion")) {
        i->config_disable_polygon_conversion = atoi(value);
     } else if(!strcmp(name, "insertstop")) {
@@ -1794,6 +1799,11 @@ int swf_setparameter(gfxdevice_t*dev, const char*name, const char*value)
        if(i->swf) {
            i->swf->fileVersion = i->config_flashversion;
        }
+    } else if(!strcmp(name, "framerate")) {
+       i->config_framerate = atoi(value);
+       if(i->swf) {
+           i->swf->frameRate = i->config_framerate*0x100;
+       }
     } else if(!strcmp(name, "minlinewidth")) {
        i->config_minlinewidth = atof(value);
     } else if(!strcmp(name, "caplinewidth")) {
@@ -1809,7 +1819,7 @@ int swf_setparameter(gfxdevice_t*dev, const char*name, const char*value)
     } else if(!strcmp(name, "jpegquality")) {
        int val = atoi(value);
        if(val<0) val=0;
-       if(val>100) val=100;
+       if(val>101) val=101;
        i->config_jpegquality = val;
     } else if(!strcmp(name, "splinequality")) {
        int v = atoi(value);
@@ -2482,6 +2492,8 @@ static void swf_switchfont(gfxdevice_t*dev, char*fontid)
 static void swf_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyph, gfxcolor_t*color, gfxmatrix_t*matrix)
 {
     swfoutput_internal*i = (swfoutput_internal*)dev->internal;
+    if(!font)
+       return;
        
     if(!i->swffont || !i->swffont->name || strcmp((char*)i->swffont->name,font->id)) // not equal to current font
     {