git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
multiply overflow fixes
[swftools.git]
/
lib
/
modules
/
swfrender.c
diff --git
a/lib/modules/swfrender.c
b/lib/modules/swfrender.c
index
8cb04c8
..
6c5262a
100644
(file)
--- a/
lib/modules/swfrender.c
+++ b/
lib/modules/swfrender.c
@@
-680,8
+680,6
@@
static void fill_gradient(RGBA*line, int*z, int y, int x1, int x2, MATRIX*m, GRA
RGBA col;
double xx = ( (x - rx) * m22 - (y - ry) * m21)*det;
double yy = (- (x - rx) * m12 + (y - ry) * m11)*det;
RGBA col;
double xx = ( (x - rx) * m22 - (y - ry) * m21)*det;
double yy = (- (x - rx) * m12 + (y - ry) * m11)*det;
- int ainv;
- ainv = 255-col.a;
if(type == FILL_LINEAR) {
int xr = xx*256;
if(type == FILL_LINEAR) {
int xr = xx*256;
@@
-698,7
+696,8
@@
static void fill_gradient(RGBA*line, int*z, int y, int x1, int x2, MATRIX*m, GRA
xr = 511;
col = palette[xr];
}
xr = 511;
col = palette[xr];
}
-
+ int ainv;
+ ainv = 255-col.a;
line[x].r = clamp(((line[x].r*ainv)>>8)+col.r);
line[x].g = clamp(((line[x].g*ainv)>>8)+col.g);
line[x].b = clamp(((line[x].b*ainv)>>8)+col.b);
line[x].r = clamp(((line[x].r*ainv)>>8)+col.r);
line[x].g = clamp(((line[x].g*ainv)>>8)+col.g);
line[x].b = clamp(((line[x].b*ainv)>>8)+col.b);
@@
-833,7
+832,7
@@
static void change_state(int y, state_t* state, renderpoint_t*p)
layer_t*before=0, *self=0, *after=0;
if(DEBUG&2) {
layer_t*before=0, *self=0, *after=0;
if(DEBUG&2) {
- printf("[(%d,%d)/%d/%d-%d]", p->x, y, p->depth, p->shapeline->fillstyle0, p->shapeline->fillstyle1);
+ printf("[(%f,%d)/%d/%d-%d]", p->x, y, p->depth, p->shapeline->fillstyle0, p->shapeline->fillstyle1);
}
search_layer(state, p->depth, &before, &self, &after);
}
search_layer(state, p->depth, &before, &self, &after);
@@
-1048,7
+1047,7
@@
typedef struct
SHAPE2**glyphs;
} font_t;
SHAPE2**glyphs;
} font_t;
-enum CHARACTER_TYPE {none_type, shape_type, image_type, text_type, font_type, sprite_type};
+enum CHARACTER_TYPE {none_type, shape_type, image_type, text_type, edittext_type, font_type, sprite_type};
typedef struct
{
TAG*tag;
typedef struct
{
TAG*tag;
@@
-1233,6
+1232,12
@@
static void renderFromTag(RENDERBUF*buf, character_t*idtable, TAG*firstTag, MATR
info.buf = buf;
swf_ParseDefineText(tag, textcallback, &info);
info.buf = buf;
swf_ParseDefineText(tag, textcallback, &info);
+ } else if(idtable[id].type == edittext_type) {
+ TAG* tag = idtable[id].tag;
+ U16 flags = swf_GetBits(tag, 16);
+ if(flags & ET_HASTEXT) {
+ fprintf(stderr, "edittext not supported yet (id %d)\n", id);
+ }
} else {
fprintf(stderr, "Unknown/Unsupported Object Type for id %d: %s\n", id, swf_TagGetName(idtable[id].tag));
}
} else {
fprintf(stderr, "Unknown/Unsupported Object Type for id %d: %s\n", id, swf_TagGetName(idtable[id].tag));
}
@@
-1247,6
+1252,7
@@
void swf_RenderSWF(RENDERBUF*buf, SWF*swf)
int t;
RGBA color;
int t;
RGBA color;
+ swf_OptimizeTagOrder(swf);
swf_FoldAll(swf);
character_t* idtable = (character_t*)rfx_calloc(sizeof(character_t)*65536); // id to character mapping
swf_FoldAll(swf);
character_t* idtable = (character_t*)rfx_calloc(sizeof(character_t)*65536); // id to character mapping
@@
-1302,6
+1308,8
@@
void swf_RenderSWF(RENDERBUF*buf, SWF*swf)
idtable[id].type = text_type;
} else if(tag->id == ST_DEFINESPRITE) {
idtable[id].type = sprite_type;
idtable[id].type = text_type;
} else if(tag->id == ST_DEFINESPRITE) {
idtable[id].type = sprite_type;
+ } else if(tag->id == ST_DEFINEEDITTEXT) {
+ idtable[id].type = edittext_type;
}
}
tag = tag->next;
}
}
tag = tag->next;