5 Extension module for the rfxswf library.
\r
6 Part of the swftools package.
\r
8 Copyright (c) 2000, 2001 Rainer Böhme <rfxswf@reflex-studio.de>
\r
10 This file is distributed under the GPL, see file COPYING for details
\r
14 int swf_ButtonSetRecord(TAG * t,U8 state,U16 id,U16 layer,MATRIX * m,CXFORM * cx)
\r
16 { swf_SetU8(t,state);
\r
18 swf_SetU16(t,layer);
\r
20 if (swf_GetTagID(t)==ST_DEFINEBUTTON2) swf_SetCXForm(t,cx,0);
\r
24 int swf_ButtonSetCondition(TAG * t,U16 condition)
\r
25 { swf_SetU16(t,0); // dummy for Action Offset -> later set by ButtonPostProcess
\r
26 swf_SetU16(t,condition);
\r
30 int swf_ButtonSetFlags(TAG * t,U8 flags)
\r
31 { if (swf_GetTagID(t)==ST_DEFINEBUTTON2)
\r
32 { swf_SetU8(t,flags);
\r
33 swf_SetU16(t,0); // dummy for Action Offset -> later set by ButtonPostProcess
\r
38 void swf_SetButtonOffset(TAG * t,U32 offsetpos)
\r
39 { U32 now = swf_GetTagPos(t);
\r
40 U16 diff = now-offsetpos;
\r
41 swf_SetTagPos(t,offsetpos);
\r
42 t->data[t->pos++] = (U8)(diff&0xff);
\r
43 t->data[t->pos++] = (U8)(diff>>8);
\r
44 swf_SetTagPos(t,now);
\r
47 int swf_ButtonPostProcess(TAG * t,int anz_action)
\r
48 { if (swf_GetTagID(t)==ST_DEFINEBUTTON2)
\r
52 oldTagPos = swf_GetTagPos(t);
\r
54 // scan DefineButton2 Record
\r
56 swf_GetU16(t); // Character ID
\r
57 swf_GetU8(t); // Flags;
\r
59 offsetpos = swf_GetTagPos(t); // first offset
\r
62 while (swf_GetU8(t)) // state -> parse ButtonRecord
\r
63 { swf_GetU16(t); // id
\r
64 swf_GetU16(t); // layer
\r
65 swf_GetMatrix(t,NULL); // matrix
\r
66 swf_GetCXForm(t,NULL,0);// CXForm
\r
69 swf_SetButtonOffset(t,offsetpos);
\r
74 offsetpos = swf_GetTagPos(t); // offset
\r
77 swf_GetU16(t); // condition
\r
79 while (a=swf_GetU8(t)) // skip action records
\r
81 { U16 l = swf_GetU16(t);
\r
82 swf_GetBlock(t,NULL,l);
\r
86 if (--anz_action) swf_SetButtonOffset(t,offsetpos);
\r
89 swf_SetTagPos(t,oldTagPos);
\r