git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed bug in reader_memread()
[swftools.git]
/
lib
/
devices
/
swf.c
diff --git
a/lib/devices/swf.c
b/lib/devices/swf.c
index
d0ac1c4
..
8cbfec0
100644
(file)
--- a/
lib/devices/swf.c
+++ b/
lib/devices/swf.c
@@
-23,19
+23,26
@@
#include <string.h>
#include "../../config.h"
#include <fcntl.h>
#include <string.h>
#include "../../config.h"
#include <fcntl.h>
+#ifdef HAVE_UNISTD_H
#include <unistd.h>
#include <unistd.h>
+#endif
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
#ifdef HAVE_ASSERT_H
#include <assert.h>
#else
#define assert(a)
#endif
#include <math.h>
#ifdef HAVE_ASSERT_H
#include <assert.h>
#else
#define assert(a)
#endif
#include <math.h>
+#include "../mem.h"
#include "../log.h"
#include "../rfxswf.h"
#include "../gfxdevice.h"
#include "../gfxtools.h"
#include "../art/libart.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
#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_drawonlyshapes;
int config_jpegquality;
int config_storeallcharacters;
- int config_generate_fake_tags;
int config_enablezlib;
int config_insertstoptag;
int config_flashversion;
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_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;
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;
p.y = (SCOORD)((- x * i->fontmatrix.r0/65536.0 + y * i->fontmatrix.sx/65536.0)*det);
RGBA rgba = *(RGBA*)col;
+
+ msg("<trace> 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;
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->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);
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;
swfoutput_internal*i = (swfoutput_internal*)dev->internal;
i->dev = dev;
- SRECT r;
RGBA rgb;
msg("<verbose> initializing swf output\n", i->max_x,i->max_y);
RGBA rgb;
msg("<verbose> 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;
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);
}
endpage(dev);
- fontlist_t *tmp,*iterator = i->fontlist;
+ fontlist_t *iterator = i->fontlist;
while(iterator) {
TAG*mtag = i->swf->firstTag;
if(iterator->swffont) {
while(iterator) {
TAG*mtag = i->swf->firstTag;
if(iterator->swffont) {
@@
-1251,6
+1258,10
@@
void swfoutput_finalize(gfxdevice_t*dev)
i->swf->compressed = 1;
}
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);
}
// if(i->config_reordertags)
// swf_Optimize(i->swf);
}
@@
-1269,13
+1280,8
@@
int swfresult_save(gfxresult_t*gfx, const char*filename)
return -1;
}
return -1;
}
- if(swf->compressed) {
- if FAILED(swf_WriteSWC(fi,swf))
- msg("<error> WriteSWC() failed.\n");
- } else {
- if FAILED(swf_WriteSWF(fi,swf))
- msg("<error> WriteSWF() failed.\n");
- }
+ if FAILED(swf_WriteSWF(fi,swf))
+ msg("<error> WriteSWF() failed.\n");
if(filename)
close(fi);
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;
SRECT r;
int lsid=0;
int fsid;
- plotxy_t p1,p2,p3,p4;
int myshapeid;
int myshapeid2;
double posx = 0;
double posy = 0;
int myshapeid;
int myshapeid2;
double posx = 0;
double posy = 0;
- int t;
int buttonid = getNewID(dev);
gfxbbox_t bbox = gfxline_getbbox(points);
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);
}
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) {
} 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;
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);
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;
}
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;
}
} 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)/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;
}
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;
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("<error> swf_drawchar called (glyph %d) without font", glyph);
return;
return;
+ }
if(!i->swffont || !i->swffont->name || strcmp((char*)i->swffont->name,font->id)) // not equal to current font
{
if(!i->swffont || !i->swffont->name || strcmp((char*)i->swffont->name,font->id)) // not equal to current font
{