X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fdevices%2Fswf.c;h=8ba141a5fa302fcf5054580ae106083da46febf9;hb=5b97294f0d92194820e794198456542dcf1bf3fe;hp=87e9f0255c864ff465ca936c41f5ef920e76c5c5;hpb=23da1a9feaa8378d29ebbceb9e72c981ee23f5f2;p=swftools.git diff --git a/lib/devices/swf.c b/lib/devices/swf.c index 87e9f02..8ba141a 100644 --- a/lib/devices/swf.c +++ b/lib/devices/swf.c @@ -78,6 +78,7 @@ typedef struct _swfoutput_internal int config_enablezlib; int config_insertstoptag; int config_flashversion; + int config_reordertags; int config_splinemaxerror; int config_fontsplinemaxerror; int config_filloverlap; @@ -234,6 +235,7 @@ static swfoutput_internal* init_internal_struct() i->config_linktarget=0; i->config_internallinkfunction=0; i->config_externallinkfunction=0; + i->config_reordertags=1; i->config_linkcolor.r = i->config_linkcolor.g = i->config_linkcolor.b = 255; i->config_linkcolor.a = 0x40; @@ -738,6 +740,18 @@ static void endtext(gfxdevice_t*dev) putcharacters(dev, i->tag); swf_SetU8(i->tag,0); + + if(i->swf->fileVersion >= 8) { + i->tag = swf_InsertTag(i->tag, ST_CSMTEXTSETTINGS); + swf_SetU16(i->tag, i->textid); + //swf_SetU8(i->tag, /*subpixel grid*/(2<<3)|/*flashtype*/0x40); + //swf_SetU8(i->tag, /*grid*/(1<<3)|/*flashtype*/0x40); + //swf_SetU8(i->tag, /*grid*/(0<<3)|/*flashtype*/0x40); + swf_SetU8(i->tag, /*grid*/(1<<3)|/*no flashtype*/0x00); + swf_SetU32(i->tag, 0);//thickness + swf_SetU32(i->tag, 0);//sharpness + swf_SetU8(i->tag, 0);//reserved + } i->tag = swf_InsertTag(i->tag,ST_PLACEOBJECT2); swf_ObjectPlace(i->tag,i->textid,getNewDepth(dev),&i->page_matrix,NULL,NULL); @@ -1109,7 +1123,7 @@ static void endshape(gfxdevice_t*dev) changeRect(dev, i->tag, i->bboxrectpos, &i->bboxrect); - msg(" Placing shape id %d", i->shapeid); + msg(" Placing shape ID %d", i->shapeid); i->tag = swf_InsertTag(i->tag,ST_PLACEOBJECT2); MATRIX m = i->page_matrix; @@ -1219,7 +1233,8 @@ void swfoutput_finalize(gfxdevice_t*dev) i->swf->compressed = 1; } - swf_Optimize(i->swf); + if(i->config_reordertags) + swf_Optimize(i->swf); } int swfresult_save(gfxresult_t*gfx, char*filename) @@ -1646,6 +1661,7 @@ static void drawlink(gfxdevice_t*dev, ActionTAG*actions1, ActionTAG*actions2, gf } } + msg(" Placing link ID %d", buttonid); i->tag = swf_InsertTag(i->tag,ST_PLACEOBJECT2); if(posx!=0 || posy!=0) { @@ -1742,6 +1758,8 @@ int swf_setparameter(gfxdevice_t*dev, const char*name, const char*value) i->config_enablezlib = atoi(value); } else if(!strcmp(name, "bboxvars")) { i->config_bboxvars = atoi(value); + } else if(!strcmp(name, "reordertags")) { + i->config_reordertags = atoi(value); } else if(!strcmp(name, "internallinkfunction")) { i->config_internallinkfunction = strdup(value); } else if(!strcmp(name, "externallinkfunction")) { @@ -1804,7 +1822,6 @@ int swf_setparameter(gfxdevice_t*dev, const char*name, const char*value) i->config_linkcolor.a); } else { - fprintf(stderr, "unknown parameter: %s (=%s)\n", name, value); return 0; } return 1; @@ -1828,10 +1845,10 @@ static CXFORM gfxcxform_to_cxform(gfxcxform_t* c) cx.r0 = (S16)(c->rr*256); cx.g0 = (S16)(c->gg*256); cx.b0 = (S16)(c->bb*256); - cx.a1 = c->t.a; - cx.r1 = c->t.r; - cx.g1 = c->t.g; - cx.b1 = c->t.b; + cx.a1 = c->ta; + cx.r1 = c->tr; + cx.g1 = c->tg; + cx.b1 = c->tb; return cx; } @@ -1859,16 +1876,20 @@ static int add_image(swfoutput_internal*i, gfximage_t*img, int targetwidth, int /// { if(is_jpeg && i->config_jpegsubpixels) { - newsizex = (int)(targetwidth*i->config_jpegsubpixels+0.5); - newsizey = (int)(targetheight*i->config_jpegsubpixels+0.5); + newsizex = (int)(targetwidth*i->config_jpegsubpixels + 0.5); + newsizey = (int)(targetheight*i->config_jpegsubpixels + 0.5); } else if(!is_jpeg && i->config_ppmsubpixels) { - newsizex = (int)(targetwidth*i->config_ppmsubpixels+0.5); - newsizey = (int)(targetheight*i->config_ppmsubpixels+0.5); + newsizex = (int)(targetwidth*i->config_ppmsubpixels + 0.5); + newsizey = (int)(targetheight*i->config_ppmsubpixels + 0.5); } /// } - if(sizex<=0 || sizey<=0 || newsizex<=0 || newsizey<=0) + if(sizex<=0 || sizey<=0) return -1; + if(newsizex<=0) + newsizex = 1; + if(newsizey<=0) + newsizey = 1; /* TODO: cache images */ @@ -1886,10 +1907,10 @@ static int add_image(swfoutput_internal*i, gfximage_t*img, int targetwidth, int int num_colors = swf_ImageGetNumberOfPaletteEntries(mem,sizex,sizey,0); int has_alpha = swf_ImageHasAlpha(mem,sizex,sizey); - msg(" Drawing %dx%d %s%simage at size %dx%d (%dx%d), %s%d colors", + msg(" Drawing %dx%d %s%simage (id %d) at size %dx%d (%dx%d), %s%d colors", sizex, sizey, has_alpha?(has_alpha==2?"semi-transparent ":"transparent "):"", - is_jpeg?"jpeg-":"", + is_jpeg?"jpeg-":"", i->currentswfid+1, newsizex, newsizey, targetwidth, targetheight, /*newsizex, newsizey,*/ @@ -1989,6 +2010,7 @@ static void swf_fillbitmap(gfxdevice_t*dev, gfxline_t*line, gfximage_t*img, gfxm swf_ShapeSetEnd(i->tag); swf_ShapeFree(shape); + msg(" Placing bitmap ID %d", myshapeid); i->tag = swf_InsertTag(i->tag,ST_PLACEOBJECT2); CXFORM cxform2 = gfxcxform_to_cxform(cxform); swf_ObjectPlace(i->tag,myshapeid,getNewDepth(dev),&i->page_matrix,&cxform2,NULL); @@ -2033,6 +2055,7 @@ static void swf_startclip(gfxdevice_t*dev, gfxline_t*line) /* TODO: remember the bbox, and check all shapes against it */ + msg(" Placing clip ID %d", myshapeid); i->tag = swf_InsertTag(i->tag,ST_PLACEOBJECT2); i->cliptags[i->clippos] = i->tag; i->clipshapes[i->clippos] = myshapeid;