From: kramm Date: Mon, 15 Sep 2003 16:06:39 +0000 (+0000) Subject: added swfdraw.c module. X-Git-Tag: release-0-5-0~159 X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=commitdiff_plain;h=e2c2e5e8d8216974b367f983f4fd5b1aa94eb54b added swfdraw.c module. --- diff --git a/lib/Makefile.in b/lib/Makefile.in index f60f5a4..30f8738 100644 --- a/lib/Makefile.in +++ b/lib/Makefile.in @@ -7,7 +7,7 @@ all: librfxswf.a q.o lame_objects = lame/psymodel.o lame/fft.o lame/newmdct.o lame/quantize.o lame/takehiro.o lame/reservoir.o lame/quantize_pvt.o lame/vbrquantize.o lame/encoder.o lame/id3tag.o lame/version.o lame/tables.o lame/util.o lame/bitstream.o lame/set_get.o lame/VbrTag.o lame/lame.o h263_objects = h.263/dct.o h.263/h263tables.o h.263/swfvideo.o -rfxswf_modules = modules/swfbits.c modules/swfaction.c modules/swfdump.c modules/swfcgi.c modules/swfbutton.c modules/swftext.c modules/swftools.c modules/swfsound.c modules/swfshape.c modules/swfobject.c h.263/swfvideo.c +rfxswf_modules = modules/swfbits.c modules/swfaction.c modules/swfdump.c modules/swfcgi.c modules/swfbutton.c modules/swftext.c modules/swftools.c modules/swfsound.c modules/swfshape.c modules/swfobject.c modules/swfdraw.c h.263/swfvideo.c bitio.o: bitio.c bitio.h $(C) bitio.c -o $@ diff --git a/lib/modules/swfdraw.c b/lib/modules/swfdraw.c new file mode 100644 index 0000000..8254d75 --- /dev/null +++ b/lib/modules/swfdraw.c @@ -0,0 +1,71 @@ +// swfdraw.c +void swf_DrawerInit(SWFSHAPEDRAWER*draw, TAG*tag) +{ + draw->tagfree = 0; + if(tag == 0) { + tag = swf_InsertTag(0, ST_DEFINESHAPE); + draw->tagfree = 1; + } + draw->tag = tag; + swf_ShapeNew(&draw->shape); + draw->pos = to; + + swf_SetU8(draw->tag,0); + draw->shape->bits.fill = 1; + draw->shape->bits.line = 0; + swf_ShapeSetStyle(draw->tag,draw->shape,0,1,0); +} +void swf_DrawerMoveTo(SWFSHAPEDRAWER*draw, FPOINT * to) +{ + swf_ShapeSetMove(draw->tag,draw->shape,(int)(to->x*20), (int)(to->y*20)); + draw->pos = to; +} +void swf_DrawerLineTo(SWFSHAPEDRAWER*draw, FPOINT * to) +{ + swf_ShapeSetMove(draw->tag,draw->shape,(int)(to->x*20), (int)(to->y*20)); + draw->pos = to; +} +void swf_DrawerSplineTo(SWFSHAPEDRAWER*draw, FPOINT * c1, FPOINT* to) +{ + swf_ShapeSetSpline(draw->tag,draw->shape, + (int)(c1->x*20), (int)(c1->y*20), + (int)(to->x*20), (int)(to->y*20), + ); + draw->pos = to; +} +void swf_DrawerCubicTo(SWFSHAPEDRAWER*draw, FPOINT* c1, FPOINT* c2, FPOINT* to) +{ + draw->pos = to; +} +void swf_DrawerConicTo(SWFSHAPEDRAWER*draw, FPOINT* c, FPOINT* to) +{ + FPOINT* pos = draw->pos; + FPOINT c1,c2; + c1.x = (pos->x + 2 * c->x) / 3; + c1.y = (pos->y + 2 * c->y) / 3; + c2.x = (2 * c->x + to->x) / 3; + c2.y = (2 * c->y + to->y) / 3; + swf_DrawerCubicTo(draw, &c1,&c2,to); + draw->pos = to; + return 0; +} +void swf_DrawerFinish(SWFSHAPEDRAWER*draw) +{ + swf_ShapeSetEnd(draw->tag); +} +void swf_Drawer2Shape(SWFSHAPEDRAWER*draw, SHAPE*shape) +{ + memset(shape, 0, sizeof(SHAPE)); + shape->bitlen = (draw->tag->len-1)*8; + shape->data = (U8*)malloc(draw->tag->len-1); + memcpy(shape->data, &draw->tag->data[1], draw->tag->len-1); +} +void swf_DrawerFree(SWFSHAPEDRAWER*draw) +{ + if(draw->tagfree) { + swf_DeleteTag(tag); + draw->tag = 0; + } + swf_ShapeFree(draw->s); + draw->s = 0; +} diff --git a/lib/rfxswf.h b/lib/rfxswf.h index d565c83..45ac72a 100644 --- a/lib/rfxswf.h +++ b/lib/rfxswf.h @@ -433,6 +433,28 @@ SRECT swf_GetShapeBoundingBox(SHAPE2*shape); void swf_SetShape2(TAG*tag, SHAPE2*shape); void swf_Shape2Free(SHAPE2 * s); +// swfdraw.c + +typedef struct _FPOINT +{ + float x,y; +} FPOINT; + +typedef struct _SWFSHAPEDRAWER +{ + FPOINT pos; + SHAPE*shape; + TAG*tag; + int tagfree; +} SWFSHAPEDRAWER; + +void swf_DrawerInit(SWFSHAPEDRAWER*draw); +void swf_DrawerMoveTo(SWFSHAPEDRAWER*draw, FPOINT * to); +void swf_DrawerLineTo(SWFSHAPEDRAWER*draw, FPOINT * to); +void swf_DrawerSplineTo(SWFSHAPEDRAWER*draw, FPOINT * control1, FPOINT* to); +void swf_DrawerCubicTo(SWFSHAPEDRAWER*draw, FPOINT* control1, FPOINT* control2, FPOINT* to); +void swf_DrawerConicTo(SWFSHAPEDRAWER*draw, FPOINT* control, FPOINT* to); + // swffont.c // does not support wide characters !