X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fdevices%2Fswf.c;h=8cbfec0d51bd0c5f9b751327f1387806f81d09af;hb=619c598195de4fc32af95d6b6608ba00f91b5dfc;hp=f0b047304e08e5a8e9a08d5fb192870d8087c379;hpb=9b4370b4285ebe2cf446a07d9f50a3dc197594d6;p=swftools.git diff --git a/lib/devices/swf.c b/lib/devices/swf.c index f0b0473..8cbfec0 100644 --- a/lib/devices/swf.c +++ b/lib/devices/swf.c @@ -23,19 +23,26 @@ #include #include "../../config.h" #include +#ifdef HAVE_UNISTD_H #include +#endif +#ifdef HAVE_IO_H +#include +#endif #ifdef HAVE_ASSERT_H #include #else #define assert(a) #endif #include +#include "../mem.h" #include "../log.h" #include "../rfxswf.h" #include "../gfxdevice.h" #include "../gfxtools.h" #include "../art/libart.h" -#include "artsutils.c" +#include "swf.h" +#include "artsutils.h" #define CHARDATAMAX 8192 #define CHARMIDX 0 @@ -74,7 +81,6 @@ typedef struct _swfoutput_internal int config_drawonlyshapes; int config_jpegquality; int config_storeallcharacters; - int config_generate_fake_tags; int config_enablezlib; int config_insertstoptag; int config_flashversion; @@ -227,7 +233,6 @@ static swfoutput_internal* init_internal_struct() i->config_jpegquality=85; i->config_storeallcharacters=0; i->config_enablezlib=0; - i->config_generate_fake_tags=0; i->config_insertstoptag=0; i->config_flashversion=6; i->config_framerate=0.25; @@ -722,6 +727,10 @@ static int drawchar(gfxdevice_t*dev, SWFFONT *swffont, int charid, float x, floa p.y = (SCOORD)((- x * i->fontmatrix.r0/65536.0 + y * i->fontmatrix.sx/65536.0)*det); RGBA rgba = *(RGBA*)col; + + msg(" Drawing char %d in font %d at %d,%d in color %02x%02x%02x%02x", + charid, swffont->id, p.x,p.y, rgba.r, rgba.g, rgba.b, rgba.a); + putcharacter(dev, swffont->id, charid,p.x,p.y,i->current_font_size, rgba); swf_FontUseGlyph(swffont, charid); return 1; @@ -853,7 +862,7 @@ void swf_endframe(gfxdevice_t*dev) if(!i->pagefinished) endpage(dev); - if(i->config_insertstoptag) { + if( (i->swf->fileVersion <= 8) && (i->config_insertstoptag) ) { ActionTAG*atag=0; atag = action_Stop(atag); atag = action_End(atag); @@ -929,7 +938,6 @@ void gfxdevice_swf_init(gfxdevice_t* dev) swfoutput_internal*i = (swfoutput_internal*)dev->internal; i->dev = dev; - SRECT r; RGBA rgb; msg(" initializing swf output\n", i->max_x,i->max_y); @@ -1174,7 +1182,6 @@ void wipeSWF(SWF*swf) } } - void swfoutput_finalize(gfxdevice_t*dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; @@ -1216,7 +1223,7 @@ void swfoutput_finalize(gfxdevice_t*dev) } endpage(dev); - fontlist_t *tmp,*iterator = i->fontlist; + fontlist_t *iterator = i->fontlist; while(iterator) { TAG*mtag = i->swf->firstTag; if(iterator->swffont) { @@ -1225,7 +1232,7 @@ void swfoutput_finalize(gfxdevice_t*dev) swf_FontReduce(iterator->swffont); } int used = iterator->swffont->use && iterator->swffont->use->used_glyphs; - if(i->config_storeallcharacters || used) { + if(used) { mtag = swf_InsertTag(mtag, ST_DEFINEFONT2); swf_FontSetDefine2(mtag, iterator->swffont); } @@ -1251,6 +1258,10 @@ void swfoutput_finalize(gfxdevice_t*dev) i->swf->compressed = 1; } + /* Initialize AVM2 if it is a Flash9 file */ + if(i->config_flashversion>=9 && i->config_insertstoptag) { + AVM2_InsertStops(i->swf); + } // if(i->config_reordertags) // swf_Optimize(i->swf); } @@ -1269,13 +1280,8 @@ int swfresult_save(gfxresult_t*gfx, const char*filename) return -1; } - if(swf->compressed) { - if FAILED(swf_WriteSWC(fi,swf)) - msg(" WriteSWC() failed.\n"); - } else { - if FAILED(swf_WriteSWF(fi,swf)) - msg(" WriteSWF() failed.\n"); - } + if FAILED(swf_WriteSWF(fi,swf)) + msg(" WriteSWF() failed.\n"); if(filename) close(fi); @@ -1592,12 +1598,10 @@ static void drawlink(gfxdevice_t*dev, ActionTAG*actions1, ActionTAG*actions2, gf SRECT r; int lsid=0; int fsid; - plotxy_t p1,p2,p3,p4; int myshapeid; int myshapeid2; double posx = 0; double posy = 0; - int t; int buttonid = getNewID(dev); gfxbbox_t bbox = gfxline_getbbox(points); @@ -1798,8 +1802,6 @@ int swf_setparameter(gfxdevice_t*dev, const char*name, const char*value) if(i->config_protect && i->tag) { i->tag = swf_InsertTag(i->tag, ST_PROTECT); } - } else if(!strcmp(name, "faketags")) { - i->config_generate_fake_tags = atoi(value); } else if(!strcmp(name, "flashversion")) { i->config_flashversion = atoi(value); if(i->swf) { @@ -2043,8 +2045,6 @@ static void swf_fillbitmap(gfxdevice_t*dev, gfxline_t*line, gfximage_t*img, gfxm double fy = (double)img->height / (double)newheight; MATRIX m; - float m00,m10,tx; - float m01,m11,ty; m.sx = (int)(65536*20*matrix->m00*fx); m.r1 = (int)(65536*20*matrix->m10*fy); m.r0 = (int)(65536*20*matrix->m01*fx); m.sy = (int)(65536*20*matrix->m11*fy); m.tx = (int)(matrix->tx*20); @@ -2470,8 +2470,8 @@ static SWFFONT* gfxfont_to_swffont(gfxfont_t*font, const char* id) advance = xmax; } - if(advance<32768) { - swffont->glyph[t].advance = advance; + if(advance<32768/20) { + swffont->glyph[t].advance = advance*20; } else { swffont->glyph[t].advance = 32767; } @@ -2489,6 +2489,9 @@ static SWFFONT* gfxfont_to_swffont(gfxfont_t*font, const char* id) swffont->layout->descent = (bounds.ymax - bounds.ymin)/2; swffont->layout->leading = bounds.ymax - bounds.ymin; } + swffont->layout->descent= (bounds.ymax - bounds.ymin); + swffont->layout->ascent = 0; + swffont->layout->leading = bounds.ymax - bounds.ymin; return swffont; } @@ -2567,8 +2570,10 @@ static void swf_switchfont(gfxdevice_t*dev, const 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) + if(!font) { + msg(" swf_drawchar called (glyph %d) without font", glyph); return; + } if(!i->swffont || !i->swffont->name || strcmp((char*)i->swffont->name,font->id)) // not equal to current font {