- U16 count;
- int t;
- int num=0;
- if(tag->id == ST_DEFINESHAPE)
- num = 1;
- else if(tag->id == ST_DEFINESHAPE2)
- num = 2;
- else if(tag->id == ST_DEFINESHAPE3)
- num = 3;
- else return 0;
-
- count = swf_GetU8(tag);
- if(count == 0xff && num>1) // defineshape2,3 only
- count = swf_GetU16(tag);
-
- for(t=0;t<count;t++)
- {
- int type;
- U8*pos;
- swf_ResetReadBits(tag);
- type = swf_GetU8(tag); //type
- if(type == 0) {
- if(num == 3)
- swf_GetRGBA(tag, NULL);
- else
- swf_GetRGB(tag, NULL);
- }
- else if(type == 0x10 || type == 0x12)
- {
- swf_ResetReadBits(tag);
- swf_GetMatrix(tag, NULL);
- swf_ResetReadBits(tag);
- swf_GetGradient(tag, NULL, alpha num>=3?1:0);
- }
- else if(type == 0x40 || type == 0x41)
- {
- swf_ResetReadBits(tag);
- // we made it.
- if(tag->data[tag->pos] != 0xff ||
- tag->data[tag->pos+1] != 0xff)
- //(callback)(tag, tag->pos, callback_data);
-
- swf_GetU16(tag);
- swf_ResetReadBits(tag);
- swf_GetMatrix(tag, NULL);
- swf_GetMatrix(tag, NULL);
- }
- else {
- fprintf(stderr, "rfxswf:swftools.c Unknown fillstyle:0x%02x\n",type);
- }
- }
- swf_ResetReadBits(tag);
- count = swf_GetU8(tag); // line style array
- if(count == 0xff)
- count = swf_GetU16(tag);
- for(t=0;t<count;t++)
- {
- swf_GetU16(tag);
- swf_GetU16(tag);
- if(num == 3)
- swf_GetRGBA(tag, NULL);
- else
- swf_GetRGB(tag, NULL);
- }
-}*/
-
-/*SHAPE2* parseDefineShape(TAG*tag)
-{
- int num = 0;
- SHAPE2*shape;
- U16 fill,line;
- if(tag->id == ST_DEFINESHAPE)
- num = 1;
- else if(tag->id == ST_DEFINESHAPE2)
- num = 2;
- else if(tag->id == ST_DEFINESHAPE3)
- num = 3;
- else return 0;
-
- swf_GetU16();
-
- shape = (SHAPE2*)malloc(sizeof(SHAPE2));
-
-// LINESTYLE * linestyles;
-// int numlinestyles;
-// FILLSTYLE* fillstyles;
-// int numfillstyles;
-// struct _SHAPELINE * lines;
-// SRECT* bbox; // may be NULL
-
- swf_GetRect();
- swf_ResetReadBits(t);
- fill = (U16)swf_GetBits(t,4);
- line = (U16)swf_GetBits(t,4);
-
- swf_Get
-
-
-
-
-
-
- return 0;
-}*/
-
-
-SHAPE* swf_Shape2ToShape(SHAPE2*shape)
-{
- /* todo */
- fprintf(stderr, "Not implemented yet!\n");
- exit(1);
- return 0;
-}
-
-int swf_SetShape2(TAG*tag, SHAPE2*shape)
-{
- /* todo */
- fprintf(stderr, "Not implemented yet!\n");
- exit(1);
- return 0;
+ SHAPE*shape;
+ MATRIX m;
+ RGBA rgb;
+ SRECT r;
+ int lines = 0;
+ int ls=0,fs;
+ swf_ShapeNew(&shape);
+ rgb.b = rgb.g = rgb.r = 0xff;
+ if(lines)
+ ls = swf_ShapeAddLineStyle(shape,20,&rgb);
+ swf_GetMatrix(NULL,&m);
+ m.sx = 20*65536;
+ m.sy = 20*65536;
+
+ fs = swf_ShapeAddBitmapFillStyle(shape,&m,gfxid,0);
+ r.xmin = 0;
+ r.ymin = 0;
+ r.xmax = width*20;
+ r.ymax = height*20;
+ swf_SetRect(tag,&r);
+
+ swf_SetShapeStyles(tag,shape);
+ swf_ShapeCountBits(shape,NULL,NULL);
+ swf_SetShapeBits(tag,shape);
+
+ swf_ShapeSetAll(tag,shape,0,0,lines?ls:0,fs,0);
+
+ swf_ShapeSetLine(tag,shape,width*20,0);
+ swf_ShapeSetLine(tag,shape,0,height*20);
+ swf_ShapeSetLine(tag,shape,-width*20,0);
+ swf_ShapeSetLine(tag,shape,0,-height*20);
+ swf_ShapeSetEnd(tag);
+ swf_ShapeFree(shape);