1 /* rfxswf.h 2 3 Headers for rfxswf.c and modules 4 5 Part of the swftools package. 6 7 Copyright (c) 2000, 2001 Rainer B�hme <rfxswf@reflex-studio.de> 8 9 This program is free software; you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as published by 11 the Free Software Foundation; either version 2 of the License, or 12 (at your option) any later version. 13 14 This program is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 GNU General Public License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with this program; if not, write to the Free Software 21 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ 22 23 24 #ifndef __RFX_SWF_INCLUDED__ 25 #define __RFX_SWF_INCLUDED__ 26 27 #include <stdio.h> 28 #include <stdlib.h> 29 #include <math.h> 30 #include <string.h> 31 #ifndef WIN32 32 #include <unistd.h> 33 #endif 34 #include <fcntl.h> 35 #include <ctype.h> 36 #include "../config.h" 37 #include "./bitio.h" 38 #include "./drawer.h" 39 #include "./mem.h" 40 #include "./types.h" 41 42 #ifdef __cplusplus 43 extern "C" { 44 #endif 45 46 #define DEBUG_RFXSWF 47 #ifdef RFXSWF_DISABLESOUND 48 #define NO_MP3 49 #endif 50 51 typedef signed SFIXED; 52 typedef signed SCOORD; 53 54 #define SCOORD_MAX 0x7fffffffl 55 #define SCOORD_MIN -0x80000000l 56 57 // Basic Structures 58 59 typedef struct _SPOINT 60 { SCOORD x; 61 SCOORD y; 62 } SPOINT; 63 64 typedef struct _RGBA 65 { U8 a; 66 U8 r; 67 U8 g; 68 U8 b; 69 } RGBA; 70 71 typedef struct _YUV 72 { 73 U8 y,u,v; 74 } YUV; 75 76 typedef struct _SRECT 77 { SCOORD xmin; 78 SCOORD ymin; 79 SCOORD xmax; 80 SCOORD ymax; 81 } SRECT; 82 83 typedef struct _MATRIX 84 { SFIXED sx,r1, tx; 85 SFIXED r0,sy, ty; 86 } MATRIX; 87 88 typedef struct _CXFORM 89 { S16 a0, a1; /* mult, add */ 90 S16 r0, r1; 91 S16 g0, g1; 92 S16 b0, b1; 93 } CXFORM; 94 95 #define GRADIENT_LINEAR 0x10 96 #define GRADIENT_RADIAL 0x12 97 typedef struct _GRADIENT 98 { 99 int num; 100 U8* ratios; 101 RGBA* rgba; 102 } GRADIENT; 103 104 typedef struct _FILTER 105 { 106 U8 type; 107 } FILTER; 108 109 typedef struct _FILTERLIST 110 { 111 int num; 112 FILTER*filter[8]; 113 } FILTERLIST; 114 115 typedef struct _TAG // NEVER access a Tag-Struct directly ! 116 { U16 id; 117 U8 * data; 118 U32 memsize; // to minimize realloc() calls 119 120 U32 len; // for Set-Access 121 U32 pos; // for Get-Access 122 123 struct _TAG * next; 124 struct _TAG * prev; 125 126 U8 readBit; // for Bit-Manipulating Functions [read] 127 U8 writeBit; // [write] 128 129 } TAG; 130 131 #define swf_ResetReadBits(tag) if (tag->readBit) { tag->pos++; tag->readBit = 0; } 132 #define swf_ResetWriteBits(tag) if (tag->writeBit) { tag->writeBit = 0; } 133 134 typedef struct _SOUNDINFO 135 { 136 U8 stop; 137 U8 nomultiple; //continue playing if already started 138 139 U32 inpoint; 140 U32 outpoint; 141 142 U16 loops; 143 U8 envelopes; 144 145 //envelope: 146 U32* pos; 147 U32* left; 148 U32* right; 149 } SOUNDINFO; 150 151 #define FILEATTRIBUTE_USENETWORK 1 152 #define FILEATTRIBUTE_AS3 8 153 #define FILEATTRIBUTE_SYMBOLCLASS 16 154 #define FILEATTRIBUTE_USEACCELERATEDBLIT 32 155 #define FILEATTRIBUTE_USEHARDWAREGPU 64 156 157 typedef struct _SWF 158 { U8 fileVersion; 159 U8 compressed; // SWF or SWC? 160 U32 fileSize; // valid after load and save 161 SRECT movieSize; 162 U16 frameRate; 163 U16 frameCount; // valid after load and save 164 TAG * firstTag; 165 U32 fileAttributes; // for SWFs >= Flash9 166 } SWF; 167 168 // Basic Functions 169 170 SWF* swf_OpenSWF(char*filename); 171 int swf_ReadSWF2(reader_t*reader, SWF * swf); // Reads SWF via callback 172 int swf_ReadSWF(int handle,SWF * swf); // Reads SWF to memory (malloc'ed), returns length or <0 if fails 173 int swf_WriteSWF2(writer_t*writer, SWF * swf); // Writes SWF via callback, returns length or <0 if fails 174 int swf_WriteSWF(int handle,SWF * swf); // Writes SWF to file, returns length or <0 if fails 175 int swf_SaveSWF(SWF * swf, char*filename); 176 int swf_WriteCGI(SWF * swf); // Outputs SWF with valid CGI header to stdout 177 void swf_FreeTags(SWF * swf); // Frees all malloc'ed memory for swf 178 SWF* swf_CopySWF(SWF*swf); 179 void swf_ReadABCfile(char*filename, SWF*swf); 180 181 // for streaming: 182 int swf_WriteHeader(int handle,SWF * swf); // Writes Header of swf to file 183 int swf_WriteHeader2(writer_t*writer,SWF * swf); // Writes Header of swf to file 184 int swf_WriteTag(int handle,TAG * tag); // Writes TAG to file 185 int swf_WriteTag2(writer_t*writer, TAG * t); //Write TAG via callback 186 187 int swf_ReadHeader(reader_t*reader, SWF * swf); // Reads SWF Header via callback 188 189 // folding/unfolding: 190 191 void swf_FoldAll(SWF*swf); 192 void swf_UnFoldAll(SWF*swf); 193 void swf_FoldSprite(TAG*tag); 194 void swf_UnFoldSprite(TAG*tag); 195 int swf_IsFolded(TAG*tag); 196 197 // tag reordering: 198 199 void swf_OptimizeTagOrder(SWF*swf); 200 201 // basic routines: 202 203 TAG * swf_InsertTag(TAG * after,U16 id); // updates frames, if necessary 204 TAG * swf_InsertTagBefore(SWF*swf, TAG * before,U16 id); // like InsertTag, but insert tag before argument 205 TAG * swf_DeleteTag(SWF*swf, TAG * t); 206 207 void swf_ClearTag(TAG * t); //frees tag data 208 void swf_ResetTag(TAG*tag, U16 id); //set's tag position and length to 0, without freeing it 209 TAG* swf_CopyTag(TAG*tag, TAG*to_copy); //stores a copy of another tag into this taglist 210 211 void swf_SetTagPos(TAG * t,U32 pos); // resets Bitcount 212 U32 swf_GetTagPos(TAG * t); 213 214 TAG * swf_NextTag(TAG * t); 215 TAG * swf_PrevTag(TAG * t); 216 217 U16 swf_GetTagID(TAG * t); // ... TagGetID 218 U32 swf_GetTagLen(TAG * t); // ... TagGetTagLen 219 U8* swf_GetTagLenPtr(TAG * t); 220 221 U32 swf_GetBits(TAG * t,int nbits); 222 S32 swf_GetSBits(TAG * t,int nbits); 223 int swf_SetBits(TAG * t,U32 v,int nbits); 224 int swf_CountUBits(U32 v,int nbits); 225 int swf_CountBits(U32 v,int nbits); 226 227 int swf_GetBlock(TAG * t,U8 * b,int l); // resets Bitcount 228 int swf_SetBlock(TAG * t,const U8 * b,int l); 229 230 U8 swf_GetU8(TAG * t); // resets Bitcount 231 U16 swf_GetU16(TAG * t); 232 #define swf_GetS16(tag) ((S16)swf_GetU16(tag)) 233 U32 swf_GetU32(TAG * t); 234 float swf_GetF16(TAG * t); 235 void swf_GetRGB(TAG * t, RGBA * col); 236 void swf_GetRGBA(TAG * t, RGBA * col); 237 void swf_GetGradient(TAG * t, GRADIENT * gradient, char alpha); 238 void swf_SetGradient(TAG * tag, GRADIENT * gradient, char alpha); 239 void swf_FreeGradient(GRADIENT* gradient); 240 char* swf_GetString(TAG*t); 241 int swf_SetU8(TAG * t,U8 v); // resets Bitcount 242 int swf_SetU16(TAG * t,U16 v); 243 void swf_SetS16(TAG * t,int v); 244 int swf_SetU32(TAG * t,U32 v); 245 void swf_SetF16(TAG * t,float f); 246 void swf_SetString(TAG*t,const char*s); 247 248 float floatToF16(float f); 249 float F16toFloat(U16 x); 250 251 /* abc datatypes */ 252 U32 swf_GetU30(TAG*tag); 253 int swf_SetU30(TAG*tag, U32 u); 254 void swf_SetABCU32(TAG*tag, U32 u); 255 U32 swf_GetABCU32(TAG*tag); 256 void swf_SetABCS32(TAG*tag, S32 v); 257 S32 swf_GetABCS32(TAG*tag); 258 int swf_SetU30String(TAG*tag, const char*str, int len); 259 double swf_GetD64(TAG*tag); 260 int swf_SetD64(TAG*tag, double v); 261 int swf_GetU24(TAG*tag); 262 int swf_GetS24(TAG*tag); 263 int swf_SetU24(TAG*tag, U32 v); 264 int swf_SetS24(TAG*tag, U32 v); 265 266 //int swf_GetPoint(TAG * t,SPOINT * p); // resets Bitcount 267 int swf_GetRect(TAG * t,SRECT * r); 268 int swf_GetMatrix(TAG * t,MATRIX * m); 269 int swf_GetCXForm(TAG * t,CXFORM * cx,U8 alpha); 270 271 double swf_GetFixed(TAG * t); 272 void swf_SetFixed(TAG * t, double f); 273 float swf_GetFixed8(TAG * t); 274 void swf_SetFixed8(TAG * t, float f); 275 276 //int swf_SetPoint(TAG * t,SPOINT * p); // resets Bitcount 277 int swf_SetRect(TAG * t,SRECT * r); 278 int swf_SetMatrix(TAG * t,MATRIX * m); 279 int swf_SetCXForm(TAG * t,CXFORM * cx,U8 alpha); 280 int swf_SetRGB(TAG * t,RGBA * col); 281 int swf_SetRGBA(TAG * t,RGBA * col); 282 void swf_SetPassword(TAG * t, const char * password); 283 284 int swf_VerifyPassword(TAG * t, const char * password); 285 286 // helper functions: 287 288 SRECT swf_ClipRect(SRECT border, SRECT r); 289 void swf_ExpandRect(SRECT*src, SPOINT add); 290 void swf_ExpandRect2(SRECT*src, SRECT*add); 291 void swf_ExpandRect3(SRECT*src, SPOINT center, int radius); 292 SPOINT swf_TurnPoint(SPOINT p, MATRIX* m); 293 SRECT swf_TurnRect(SRECT r, MATRIX* m); 294 295 #ifndef FAILED 296 #define FAILED(b) ((b)<0) 297 #endif 298 299 // Tag IDs (adopted from J. C. Kessels' Form2Flash) 300 301 #define ST_END 0 302 #define ST_SHOWFRAME 1 303 #define ST_DEFINESHAPE 2 304 #define ST_FREECHARACTER 3 305 #define ST_PLACEOBJECT 4 306 #define ST_REMOVEOBJECT 5 307 #define ST_DEFINEBITS 6 308 #define ST_DEFINEBITSJPEG 6 309 #define ST_DEFINEBUTTON 7 310 #define ST_JPEGTABLES 8 311 #define ST_SETBACKGROUNDCOLOR 9 312 #define ST_DEFINEFONT 10 313 #define ST_DEFINETEXT 11 314 #define ST_DOACTION 12 315 #define ST_DEFINEFONTINFO 13 316 #define ST_DEFINESOUND 14 /* Event sound tags. */ 317 #define ST_STARTSOUND 15 318 #define ST_DEFINEBUTTONSOUND 17 319 #define ST_SOUNDSTREAMHEAD 18 320 #define ST_SOUNDSTREAMBLOCK 19 321 #define ST_DEFINEBITSLOSSLESS 20 /* A bitmap using lossless zlib compression. */ 322 #define ST_DEFINEBITSJPEG2 21 /* A bitmap using an internal JPEG compression table. */ 323 #define ST_DEFINESHAPE2 22 324 #define ST_DEFINEBUTTONCXFORM 23 325 #define ST_PROTECT 24 /* This file should not be importable for editing. */ 326 #define ST_PLACEOBJECT2 26 /* The new style place w/ alpha color transform and name. */ 327 #define ST_REMOVEOBJECT2 28 /* A more compact remove object that omits the character tag (just depth). */ 328 #define ST_FREEALL 31 /* ? */ 329 #define ST_DEFINESHAPE3 32 /* A shape V3 includes alpha values. */ 330 #define ST_DEFINETEXT2 33 /* A text V2 includes alpha values. */ 331 #define ST_DEFINEBUTTON2 34 /* A button V2 includes color transform, alpha and multiple actions */ 332 #define ST_DEFINEBITSJPEG3 35 /* A JPEG bitmap with alpha info. */ 333 #define ST_DEFINEBITSLOSSLESS2 36 /* A lossless bitmap with alpha info. */ 334 #define ST_DEFINEEDITTEXT 37 335 #define ST_DEFINEMOVIE 38 336 #define ST_DEFINESPRITE 39 /* Define a sequence of tags that describe the behavior of a sprite. */ 337 #define ST_NAMECHARACTER 40 /* Name a character definition, character id and a string, (used for buttons, bitmaps, sprites and sounds). */ 338 #define ST_SERIALNUMBER 41 339 #define ST_GENERATORTEXT 42 /* contains an id */ 340 #define ST_FRAMELABEL 43 /* A string label for the current frame. */ 341 #define ST_SOUNDSTREAMHEAD2 45 /* For lossless streaming sound, should not have needed this... */ 342 #define ST_DEFINEMORPHSHAPE 46 /* A morph shape definition */ 343 #define ST_DEFINEFONT2 48 344 #define ST_TEMPLATECOMMAND 49 345 #define ST_GENERATOR3 51 346 #define ST_EXTERNALFONT 52 347 #define ST_EXPORTASSETS 56 348 #define ST_IMPORTASSETS 57 349 #define ST_ENABLEDEBUGGER 58 350 #define ST_DOINITACTION 59 351 #define ST_DEFINEVIDEOSTREAM 60 352 #define ST_VIDEOFRAME 61 353 #define ST_DEFINEFONTINFO2 62 354 #define ST_MX4 63 /*(?) */ 355 #define ST_ENABLEDEBUGGER2 64 /* version 8 */ 356 #define ST_SCRIPTLIMITS 65 /* version 7- u16 maxrecursedepth, u16 scripttimeoutseconds */ 357 #define ST_SETTABINDEX 66 /* version 7- u16 depth(!), u16 tab order value */ 358 #define ST_FILEATTRIBUTES 69 /* version 8 (required)- */ 359 #define ST_PLACEOBJECT3 70 /* version 8 */ 360 #define ST_IMPORTASSETS2 71 /* version 8 */ 361 #define ST_RAWABC 72 /* version 9, used by flex */ 362 #define ST_DEFINEFONTALIGNZONES 73 /* version 8 */ 363 #define ST_CSMTEXTSETTINGS 74 /* version 8 */ 364 #define ST_DEFINEFONT3 75 /* version 8 */ 365 #define ST_SYMBOLCLASS 76 /* version 9 */ 366 #define ST_METADATA 77 /* version 8 */ 367 #define ST_DEFINESCALINGGRID 78 /* version 8 */ 368 #define ST_DOABC 82 /* version 9 */ 369 #define ST_DEFINESHAPE4 83 /* version 8 */ 370 #define ST_DEFINEMORPHSHAPE2 84 /* version 8 */ 371 #define ST_SCENEDESCRIPTION 86 /* version 9 */ 372 #define ST_DEFINEBINARY 87 /* version 9 */ 373 #define ST_DEFINEFONTNAME 88 /* version 9 */ 374 375 /* custom tags- only valid for swftools */ 376 #define ST_REFLEX 777 /* to identify generator software */ 377 #define ST_GLYPHNAMES 778 378 379 // Advanced Funtions 380 381 // swfshape.c 382 383 typedef struct _LINESTYLE 384 { U16 width; 385 RGBA color; 386 } LINESTYLE; 387 388 #define FILL_SOLID 0x00 389 #define FILL_LINEAR 0x10 // Gradient 390 #define FILL_RADIAL 0x12 391 #define FILL_TILED 0x40 // Bitmap 392 #define FILL_CLIPPED 0x41 393 394 typedef struct _FILLSTYLE 395 { U8 type; 396 RGBA color; 397 MATRIX m; 398 U16 id_bitmap; 399 GRADIENT gradient; 400 } FILLSTYLE; 401 402 typedef struct _SHAPE // NEVER access a Shape-Struct directly ! 403 { 404 struct 405 { LINESTYLE * data; 406 U16 n; 407 } linestyle; 408 409 struct 410 { FILLSTYLE * data; 411 U16 n; 412 } fillstyle; 413 414 struct 415 { U16 fill; 416 U16 line; 417 } bits; 418 // used by Get/SetSimpleShape and glyph handling 419 U8 * data; 420 U32 bitlen; // length of data in bits 421 } SHAPE; 422 423 /* SHAPE can be converted into SHAPE2: */ 424 425 struct _SHAPELINE; 426 typedef struct _SHAPE2 427 { 428 LINESTYLE * linestyles; 429 int numlinestyles; 430 FILLSTYLE* fillstyles; 431 int numfillstyles; 432 struct _SHAPELINE * lines; 433 SRECT* bbox; // may be NULL 434 } SHAPE2; 435 436 enum SHAPELINETYPE {moveTo, lineTo, splineTo}; 437 typedef struct _SHAPELINE 438 { 439 enum SHAPELINETYPE type; 440 SCOORD x,y; 441 SCOORD sx,sy; //only if type==splineTo 442 int fillstyle0; 443 int fillstyle1; 444 int linestyle; 445 struct _SHAPELINE * next; 446 } SHAPELINE; 447 448 // Shapes 449 450 int swf_ShapeNew(SHAPE ** s); 451 void swf_ShapeFree(SHAPE * s); 452 char swf_ShapeIsEmpty(SHAPE*s); 453 454 int swf_GetSimpleShape(TAG * t,SHAPE ** s); // without Linestyle/Fillstyle Record 455 int swf_SetSimpleShape(TAG * t,SHAPE * s); // without Linestyle/Fillstyle Record 456 457 int swf_ShapeAddLineStyle(SHAPE * s,U16 width,RGBA * color); 458 int swf_ShapeAddSolidFillStyle(SHAPE * s,RGBA * color); 459 int swf_ShapeAddBitmapFillStyle(SHAPE * s,MATRIX * m,U16 id_bitmap,int clip); 460 int swf_ShapeAddGradientFillStyle(SHAPE * s,MATRIX * m,GRADIENT* gradient,int radial); 461 int swf_ShapeAddFillStyle2(SHAPE * s,FILLSTYLE*fs); 462 463 int swf_SetShapeStyles(TAG * t,SHAPE * s); 464 int swf_ShapeCountBits(SHAPE * s,U8 * fbits,U8 * lbits); 465 int swf_SetShapeBits(TAG * t,SHAPE * s); 466 int swf_SetShapeHeader(TAG * t,SHAPE * s); // one call for upper three functions 467 468 int swf_ShapeSetMove(TAG * t,SHAPE * s,S32 x,S32 y); 469 int swf_ShapeSetStyle(TAG * t,SHAPE * s,int line,int fill0,int fill1); 470 #define UNDEFINED_COORD 0x7fffffff 471 int swf_ShapeSetAll(TAG * t,SHAPE * s,S32 x,S32 y,int line,int fill0,int fill1); 472 473 int swf_ShapeSetLine(TAG * t,SHAPE * s,S32 x,S32 y); 474 int swf_ShapeSetCurve(TAG * t,SHAPE * s,S32 x,S32 y,S32 ax,S32 ay); 475 int swf_ShapeSetCircle(TAG * t,SHAPE * s,S32 x,S32 y,S32 rx,S32 ry); 476 int swf_ShapeSetEnd(TAG * t); 477 int swf_SetShapeStyleCount(TAG * t,U16 n); 478 int swf_SetFillStyle(TAG * t,FILLSTYLE * f); 479 int swf_SetLineStyle(TAG * t,LINESTYLE * l); 480 481 482 void swf_ShapeSetRectangle(TAG*tag, U16 shapeid, int width, int height, RGBA*rgba); 483 void swf_ShapeSetRectangleWithBorder(TAG*tag, U16 shapeid, int width, int height, RGBA*rgba, int linewidth, RGBA*linecolor); 484 void swf_ShapeSetBitmapRect(TAG * t, U16 gfxid, int width, int height); 485 486 //SHAPELINE* swf_ParseShapeData(U8*data, int bits, int fillbits, int linebits); 487 SHAPE2* swf_ShapeToShape2(SHAPE*shape); 488 void swf_Shape2ToShape(SHAPE2*shape2, SHAPE*shape); 489 SRECT swf_GetShapeBoundingBox(SHAPE2*shape); 490 void swf_SetShape2(TAG*tag, SHAPE2*shape); 491 SHAPE2* swf_Shape2Clone(SHAPE2 * s); 492 void swf_Shape2Free(SHAPE2 * s); 493 void swf_DumpShape(SHAPE2*shape2); 494 495 void swf_ParseDefineShape(TAG*tag, SHAPE2*shape); 496 void swf_SetShape2(TAG*tag, SHAPE2*shape2); 497 498 void swf_RecodeShapeData(U8*data, int bitlen, int in_bits_fill, int in_bits_line, 499 U8**destdata, U32*destbitlen, int out_bits_fill, int out_bits_line); 500 501 // swfdraw.c 502 503 void swf_Shape10DrawerInit(drawer_t*draw, TAG*tag); 504 void swf_Shape01DrawerInit(drawer_t*draw, TAG*tag); 505 void swf_Shape11DrawerInit(drawer_t*draw, TAG*tag); 506 SHAPE* swf_ShapeDrawerToShape(drawer_t*draw); 507 SRECT swf_ShapeDrawerGetBBox(drawer_t*draw); 508 509 void swf_DrawString(drawer_t*draw, const char*source); 510 511 // swftext.c 512 513 typedef struct _KERNING 514 { 515 U16 char1; 516 U16 char2; 517 U16 adjustment; 518 } SWFKERNING; 519 520 typedef struct _SWFLAYOUT 521 { U16 ascent; 522 U16 descent; 523 U16 leading; 524 SRECT * bounds; 525 U16 kerningcount; 526 SWFKERNING * kerning; 527 } SWFLAYOUT; 528 529 typedef struct 530 { S16 advance; 531 SHAPE * shape; 532 } SWFGLYPH; 533 534 typedef struct _SWFGLYPHPAIR 535 { 536 U16 char1; 537 U16 char2; 538 int num; 539 } SWFGLYPHPAIR; 540 541 typedef struct _FONTUSAGE 542 { int* chars; 543 char is_reduced; 544 int used_glyphs; 545 int glyphs_specified; 546 U16 smallest_size; 547 548 SWFGLYPHPAIR* neighbors; 549 int num_neighbors; 550 int neighbors_size; 551 int* neighbors_hash; 552 int neighbors_hash_size; 553 } FONTUSAGE; 554 555 #define FONT_STYLE_BOLD 1 556 #define FONT_STYLE_ITALIC 2 557 #define FONT_ENCODING_UNICODE 1 558 #define FONT_ENCODING_ANSI 2 559 #define FONT_ENCODING_SHIFTJIS 4 560 561 #define FONTALIGN_THIN 0 562 #define FONTALIGN_MEDIUM 1 563 #define FONTALIGN_THICK 2 564 565 typedef struct _ALIGNZONE 566 { 567 U16 x,y; 568 U16 dx,dy; 569 } ALIGNZONE; 570 571 typedef struct _SWFFONT 572 { int id; // -1 = not set 573 U8 version; // 0 = not set, 1 = definefont, 2 = definefont2, 3 = definefont3 574 U8 * name; 575 SWFLAYOUT * layout; 576 int numchars; 577 int maxascii; // highest mapped ascii/unicode value 578 579 U8 style; 580 U8 encoding; 581 582 U16 * glyph2ascii; 583 int * ascii2glyph; 584 int * glyph2glyph; // only if the font is resorted 585 SWFGLYPH * glyph; 586 ALIGNZONE * alignzones; 587 U8 alignzone_flags; 588 U8 language; 589 char ** glyphnames; 590 591 FONTUSAGE * use; 592 593 } SWFFONT; 594 595 596 #define ET_HASTEXT 32768 597 #define ET_WORDWRAP 16384 598 #define ET_MULTILINE 8192 599 #define ET_PASSWORD 4096 600 #define ET_READONLY 2048 601 #define ET_HASTEXTCOLOR 1024 602 #define ET_HASMAXLENGTH 512 603 #define ET_HASFONT 256 604 #define ET_X3 128 605 #define ET_AUTOSIZE 64 /* MX */ 606 #define ET_HASLAYOUT 32 607 #define ET_NOSELECT 16 608 #define ET_BORDER 8 609 #define ET_X1 4 610 #define ET_HTML 2 /* MX? */ 611 #define ET_USEOUTLINES 1 612 613 #define ET_ALIGN_LEFT 0 614 #define ET_ALIGN_RIGHT 1 615 #define ET_ALIGN_CENTER 2 616 #define ET_ALIGN_JUSTIFY 3 617 618 typedef struct _EditTextLayout 619 { 620 U8 align; // 0=left, 1=right, 2=center, 3=justify 621 U16 leftmargin; 622 U16 rightmargin; 623 U16 indent; 624 U16 leading; 625 } EditTextLayout; 626 627 int swf_FontEnumerate(SWF * swf,void (*FontCallback) (void*,U16,U8*), void*self); 628 // -> void fontcallback(U16 id,U8 * name); returns number of defined fonts 629 630 int swf_FontExtract(SWF * swf,int id,SWFFONT ** f); 631 // Fetches all available information from DefineFont, DefineFontInfo, DefineText, ... 632 // id = FontID, id=0 -> Extract first Font 633 int swf_FontExtract_DefineFont2(int id, SWFFONT * font, TAG * tag); 634 int swf_FontExtract_DefineFontInfo(int id, SWFFONT * f, TAG * t); 635 int swf_FontExtract_DefineFont(int id, SWFFONT * f, TAG * t); 636 int swf_FontExtract_GlyphNames(int id, SWFFONT * f, TAG * tag); 637 int swf_FontExtract_DefineFontAlignZones(int id, SWFFONT * font, TAG * tag); 638 639 640 int swf_FontIsItalic(SWFFONT * f); 641 int swf_FontIsBold(SWFFONT * f); 642 643 int swf_FontSetID(SWFFONT * f,U16 id); 644 int swf_FontReduce(SWFFONT * f); 645 int swf_FontReduce_swfc(SWFFONT * f); 646 647 int swf_FontInitUsage(SWFFONT * f); 648 int swf_FontUseGlyph(SWFFONT * f, int glyph, U16 size); 649 void swf_FontUsePair(SWFFONT * f, int char1, int char2); 650 int swf_FontUseGetPair(SWFFONT * f, int char1, int char2); 651 int swf_FontUseAll(SWFFONT* f); 652 int swf_FontUseUTF8(SWFFONT * f, const U8 * s, U16 size); 653 int swf_FontUse(SWFFONT* f,U8 * s); 654 void swf_FontSort(SWFFONT * font); 655 656 int swf_FontSetDefine(TAG * t,SWFFONT * f); 657 int swf_FontSetDefine2(TAG * t,SWFFONT * f); 658 int swf_FontSetInfo(TAG * t,SWFFONT * f); 659 void swf_FontSetAlignZones(TAG*t, SWFFONT *f); 660 661 void swf_FontCreateLayout(SWFFONT*f); 662 void swf_FontCreateAlignZones(SWFFONT * f); 663 void swf_FontAddLayout(SWFFONT * f, int ascent, int descent, int leading); 664 void swf_FontPostprocess(SWF*swf); 665 666 int swf_ParseDefineText(TAG * t, void(*callback)(void*self, int*chars, int*xpos, int nr, int fontid, int fontsize, int xstart, int ystart, RGBA* color), void*self); 667 668 void swf_WriteFont(SWFFONT* font, char* filename); 669 SWFFONT* swf_ReadFont(const char* filename); 670 671 void swf_FontFree(SWFFONT * f); 672 673 U32 swf_TextGetWidth(SWFFONT * font,U8 * s,int scale); 674 int swf_TextCountBits(SWFFONT * font,U8 * s,int scale,U8 * gbits,U8 * abits); 675 676 #define SET_TO_ZERO 0x80000000 677 int swf_TextSetInfoRecord(TAG * t,SWFFONT * font,U16 size,RGBA * color,int dx,int dy); 678 int swf_TextSetCharRecord(TAG * t,SWFFONT * font,U8 * s,int scale,U8 gbits,U8 abits); 679 680 int swf_TextPrintDefineText(TAG * t,SWFFONT * f); 681 // Prints text defined in tag t with font f to stdout 682 683 void swf_FontPrepareForEditText(SWFFONT * f); 684 685 /* notice: if you set the fontid, make sure you call swf_FontPrepareForEditText() for the font first */ 686 void swf_SetEditText(TAG*tag, U16 flags, SRECT r, const char*text, RGBA*color, 687 int maxlength, U16 font, U16 height, EditTextLayout*layout, const char*variable); 688 689 SRECT swf_SetDefineText(TAG*tag, SWFFONT*font, RGBA*rgb, const char*text, int scale); 690 691 void swf_DrawText(drawer_t*draw, SWFFONT*font, int size, const char*text); 692 693 // swffont.c 694 695 SWFFONT* swf_LoadTrueTypeFont(const char*filename, char flashtype); 696 SWFFONT* swf_LoadT1Font(const char*filename); 697 SWFFONT* swf_LoadFont(const char*filename, char flashtype); 698 699 void swf_SetLoadFontParameters(int scale, int skip_unused, int full_unicode); 700 701 // swfdump.c 702 703 void swf_DumpHeader(FILE * f,SWF * swf); 704 void swf_DumpMatrix(FILE * f,MATRIX * m); 705 void swf_DumpTag(FILE * f,TAG * t); 706 void swf_DumpSWF(FILE * f,SWF*swf); 707 void swf_DumpGradient(FILE* f, GRADIENT*gradient); 708 char* swf_TagGetName(TAG*tag); 709 void swf_DumpFont(SWFFONT * font); 710 711 // swfbits.c 712 713 int swf_ImageHasAlpha(RGBA*img, int width, int height); 714 int swf_ImageGetNumberOfPaletteEntries(RGBA*img, int width, int height, RGBA*palette); 715 716 typedef int JPEGBITS; 717 JPEGBITS * swf_SetJPEGBitsStart(TAG * t,int width,int height,int quality); // deprecated 718 int swf_SetJPEGBitsLines(JPEGBITS * jpegbits,U8 ** data,int n); // deprecated 719 int swf_SetJPEGBitsLine(JPEGBITS * jpegbits,U8 * data); // deprecated 720 int swf_SetJPEGBitsFinish(JPEGBITS * jpegbits); // deprecated 721 722 void swf_GetJPEGSize(const char * fname, int*width, int*height); 723 724 int swf_SetJPEGBits(TAG * t,const char * fname,int quality); 725 void swf_SetJPEGBits2(TAG * t,U16 width,U16 height,RGBA * bitmap,int quality); 726 int swf_SetJPEGBits3(TAG * tag,U16 width,U16 height,RGBA* bitmap, int quality); 727 RGBA* swf_JPEG2TagToImage(TAG*tag, int*width, int*height); 728 void swf_RemoveJPEGTables(SWF*swf); 729 730 void swf_SaveJPEG(char*filename, RGBA*pixels, int width, int height, int quality); 731 732 #define BYTES_PER_SCANLINE(width) ((width+3)&0xfffffffc) 733 734 #define BMF_8BIT 3 // Bitmap formats 735 #define BMF_16BIT 4 736 #define BMF_32BIT 5 737 738 int swf_SetLosslessBits(TAG * t,U16 width,U16 height,void * bitmap,U8 bitmap_flags); 739 int swf_SetLosslessBitsIndexed(TAG * t,U16 width,U16 height,U8 * bitmap,RGBA * palette,U16 ncolors); 740 int swf_SetLosslessBitsGrayscale(TAG * t,U16 width,U16 height,U8 * bitmap); 741 void swf_SetLosslessImage(TAG*tag, RGBA*data, int width, int height); //WARNING: will change tag->id 742 743 RGBA* swf_DefineLosslessBitsTagToImage(TAG*tag, int*width, int*height); 744 745 RGBA* swf_ExtractImage(TAG*tag, int*dwidth, int*dheight); 746 TAG* swf_AddImage(TAG*tag, int bitid, RGBA*mem, int width, int height, int quality); 747 748 // swfsound.c 749 void swf_SetSoundStreamHead(TAG*tag, int avgnumsamples); 750 void swf_SetSoundStreamBlock(TAG*tag, S16*samples, int seek, char first); /* expects 2304 samples */ 751 void swf_SetSoundDefine(TAG*tag, S16*samples, int num); 752 void swf_SetSoundDefineMP3(TAG*tag, U8* data, unsigned length, 753 unsigned SampRate, 754 unsigned Channels, 755 unsigned NumFrames); 756 void swf_SetSoundInfo(TAG*tag, SOUNDINFO*info); 757 758 // swftools.c 759 760 void swf_Optimize(SWF*swf); 761 U8 swf_isDefiningTag(TAG * t); 762 U8 swf_isPseudoDefiningTag(TAG * t); 763 U8 swf_isAllowedSpriteTag(TAG * t); 764 U8 swf_isImageTag(TAG*tag); 765 U8 swf_isShapeTag(TAG*tag); 766 U8 swf_isTextTag(TAG*tag); 767 U8 swf_isFontTag(TAG*tag); 768 U8 swf_isPlaceTag(TAG*tag); 769 770 U16 swf_GetDefineID(TAG * t); 771 SRECT swf_GetDefineBBox(TAG * t); 772 void swf_SetDefineBBox(TAG * t, SRECT r); 773 774 void swf_SetDefineID(TAG * t, U16 newid); 775 U16 swf_GetPlaceID(TAG * t); //PLACEOBJECT, PLACEOBJECT2 (sometimes), REMOVEOBJECT 776 int swf_GetDepth(TAG * t); //PLACEOBJECT,PLACEOBJECT2,REMOVEOBJECT,REMOVEOBJECT2,SETTABINDEX 777 char* swf_GetName(TAG * t); //PLACEOBJECT2, FRAMELABEL 778 MATRIX * swf_MatrixJoin(MATRIX * d,MATRIX * s1,MATRIX * s2); 779 MATRIX * swf_MatrixMapTriangle(MATRIX * m,int dx,int dy, 780 int x0,int y0,int x1,int y1,int x2,int y2); 781 int swf_GetNumUsedIDs(TAG * t); 782 void swf_GetUsedIDs(TAG * t, int * positions); 783 char swf_Relocate(SWF*swf, char*bitmap); // bitmap is 65536 bytes, bitmap[a]==0 means id a is free 784 void swf_RelocateDepth(SWF*swf, char*bitmap); // bitmap is 65536 bytes, bitmap[d]==0 means depth d is free 785 786 TAG* swf_Concatenate (TAG*list1,TAG*list2); // warning: both list1 and list2 are invalid after this call. 787 788 RGBA swf_GetSWFBackgroundColor(SWF*swf); 789 790 // swfcgi.c 791 792 void swf_uncgi(); // same behaviour as Steven Grimm's uncgi-library 793 794 // as3/abc.c 795 void*swf_ReadABC(TAG*tag); 796 void*swf_DumpABC(FILE*fo, void*code, char*prefix); 797 void swf_WriteABC(TAG*tag, void*code); 798 void swf_FreeABC(void*code); 799 void swf_AddButtonLinks(SWF*swf, char stop_each_frame, char events); 800 TAG*swf_AddAS3FontDefine(TAG*tag, U16 id, char*fontname); 801 #include "as3/compiler.h" 802 #include "as3/import.h" 803 804 // swfaction.c 805 806 typedef struct _ActionTAG 807 { U8 op; 808 U16 len; 809 U8 * data; 810 811 struct _ActionTAG * next; 812 struct _ActionTAG * prev; 813 814 struct _ActionTAG * parent; 815 U8 tmp[8]; // store small operands here. 816 } ActionTAG; 817 818 typedef struct _ActionMarker 819 { 820 ActionTAG* atag; 821 } ActionMarker; 822 823 ActionTAG* swf_ActionGet(TAG*tag); 824 void swf_ActionFree(ActionTAG*tag); 825 void swf_ActionSet(TAG*tag, ActionTAG*actions); 826 void swf_DumpActions(ActionTAG*atag, char*prefix); 827 void swf_ActionEnumerateURLs(ActionTAG*atag, char*(*callback)(char*)); 828 void swf_ActionEnumerateTargets(ActionTAG*atag, char*(*callback)(char*)); 829 void swf_ActionEnumerateStrings(ActionTAG*atag, char*(*callback)(char*)); 830 831 // using action/actioncompiler.h: 832 ActionTAG* swf_ActionCompile(const char* source, int version); 833 834 #define ACTION__GOTOFRAME 0x81 835 #define ACTION__GETURL 0x83 836 ActionTAG* action_End(ActionTAG*atag); 837 ActionTAG* action_NextFrame(ActionTAG*atag); 838 ActionTAG* action_PreviousFrame(ActionTAG*atag); 839 ActionTAG* action_Play(ActionTAG*atag); 840 ActionTAG* action_Stop(ActionTAG*atag); 841 ActionTAG* action_ToggleQuality(ActionTAG*atag); 842 ActionTAG* action_StopSounds(ActionTAG*atag); 843 ActionTAG* action_Add(ActionTAG*atag); 844 ActionTAG* action_Subtract(ActionTAG*atag); 845 ActionTAG* action_Multiply(ActionTAG*atag); 846 ActionTAG* action_Divide(ActionTAG*atag); 847 ActionTAG* action_Equals(ActionTAG*atag); 848 ActionTAG* action_Less(ActionTAG*atag); 849 ActionTAG* action_And(ActionTAG*atag); 850 ActionTAG* action_Or(ActionTAG*atag); 851 ActionTAG* action_Not(ActionTAG*atag); 852 ActionTAG* action_StringEquals(ActionTAG*atag); 853 ActionTAG* action_StringLength(ActionTAG*atag); 854 ActionTAG* action_StringExtract(ActionTAG*atag); 855 ActionTAG* action_Pop(ActionTAG*atag); 856 ActionTAG* action_ToInteger(ActionTAG*atag); 857 ActionTAG* action_GetVariable(ActionTAG*atag); 858 ActionTAG* action_SetVariable(ActionTAG*atag); 859 ActionTAG* action_SetTarget2(ActionTAG*atag); 860 ActionTAG* action_StringAdd(ActionTAG*atag); 861 ActionTAG* action_GetProperty(ActionTAG*atag); 862 ActionTAG* action_SetProperty(ActionTAG*atag); 863 ActionTAG* action_CloneSprite(ActionTAG*atag); 864 ActionTAG* action_RemoveSprite(ActionTAG*atag); 865 ActionTAG* action_Trace(ActionTAG*atag); 866 ActionTAG* action_StartDrag(ActionTAG*atag); 867 ActionTAG* action_EndDrag(ActionTAG*atag); 868 ActionTAG* action_StringLess(ActionTAG*atag); 869 ActionTAG* action_RandomNumber(ActionTAG*atag); 870 ActionTAG* action_MBStringLength(ActionTAG*atag); 871 ActionTAG* action_CharToAscii(ActionTAG*atag); 872 ActionTAG* action_AsciiToChar(ActionTAG*atag); 873 ActionTAG* action_GetTime(ActionTAG*atag); 874 ActionTAG* action_MBStringExtract(ActionTAG*atag); 875 ActionTAG* action_MBCharToAscii(ActionTAG*atag); 876 ActionTAG* action_MBAsciiToChar(ActionTAG*atag); 877 ActionTAG* action_Delete(ActionTAG*atag); 878 ActionTAG* action_Delete2(ActionTAG*atag); 879 ActionTAG* action_DefineLocal(ActionTAG*atag); 880 ActionTAG* action_CallFunction(ActionTAG*atag); 881 ActionTAG* action_Return(ActionTAG*atag); 882 ActionTAG* action_Modulo(ActionTAG*atag); 883 ActionTAG* action_NewObject(ActionTAG*atag); 884 ActionTAG* action_DefineLocal2(ActionTAG*atag); 885 ActionTAG* action_InitArray(ActionTAG*atag); 886 ActionTAG* action_Makehash(ActionTAG*atag); 887 ActionTAG* action_TypeOf(ActionTAG*atag); 888 ActionTAG* action_TargetPath(ActionTAG*atag); 889 ActionTAG* action_Enumerate(ActionTAG*atag); 890 ActionTAG* action_Add2(ActionTAG*atag); 891 ActionTAG* action_Less2(ActionTAG*atag); 892 ActionTAG* action_Equals2(ActionTAG*atag); 893 ActionTAG* action_ToNumber(ActionTAG*atag); 894 ActionTAG* action_ToString(ActionTAG*atag); 895 ActionTAG* action_PushDuplicate(ActionTAG*atag); 896 ActionTAG* action_StackSwap(ActionTAG*atag); 897 ActionTAG* action_GetMember(ActionTAG*atag); 898 ActionTAG* action_SetMember(ActionTAG*atag); 899 ActionTAG* action_Increment(ActionTAG*atag); 900 ActionTAG* action_Decrement(ActionTAG*atag); 901 ActionTAG* action_CallMethod(ActionTAG*atag); 902 ActionTAG* action_NewMethod(ActionTAG*atag); 903 ActionTAG* action_BitAnd(ActionTAG*atag); 904 ActionTAG* action_BitOr(ActionTAG*atag); 905 ActionTAG* action_BitXor(ActionTAG*atag); 906 ActionTAG* action_BitLShift(ActionTAG*atag); 907 ActionTAG* action_BitRShift(ActionTAG*atag); 908 ActionTAG* action_BitURShift(ActionTAG*atag); 909 ActionTAG* action_GotoFrame(ActionTAG*atag, U16 frame); 910 ActionTAG* action_GetUrl(ActionTAG*atag, const char* url, char* label); 911 ActionTAG* action_StoreRegister(ActionTAG*atag, U8 reg); 912 ActionTAG* action_Constantpool(ActionTAG*atag, char* constantpool); 913 ActionTAG* action_WaitForFrame(ActionTAG*atag, U16 frame, U8 skip); 914 ActionTAG* action_SetTarget(ActionTAG*atag, const char* target); 915 ActionTAG* action_GotoLabel(ActionTAG*atag, char* label); 916 ActionTAG* action_WaitForFrame2(ActionTAG*atag, U8 skip); 917 ActionTAG* action_With(ActionTAG*atag, char*object); 918 ActionTAG* action_PushString(ActionTAG*atag, const char*str); 919 ActionTAG* action_PushFloat(ActionTAG*atag, float f); 920 ActionTAG* action_PushNULL(ActionTAG*atag); 921 ActionTAG* action_PushRegister(ActionTAG*atag, U8 reg); 922 ActionTAG* action_PushBoolean(ActionTAG*atag, char c); 923 ActionTAG* action_PushDouble(ActionTAG*atag, double d); 924 ActionTAG* action_PushInt(ActionTAG*atag, int i); 925 ActionTAG* action_PushLookup(ActionTAG*atag, U8 index); 926 ActionTAG* action_Jump(ActionTAG*atag, U16 branch); 927 ActionTAG* action_GetUrl2(ActionTAG*atag, U8 method); 928 ActionTAG* action_DefineFunction(ActionTAG*atag, U8*data, int len); 929 ActionTAG* action_If(ActionTAG*atag, U16 branch); 930 ActionTAG* action_Call(ActionTAG*atag); 931 ActionTAG* action_GotoFrame2(ActionTAG*atag, U8 method); 932 ActionMarker action_setMarker(ActionTAG*atag); 933 void action_fixjump(ActionMarker m1, ActionMarker m2); 934 935 // swfobject.c 936 937 // The following 3 routines only use placeobject2: 938 939 extern char*blendModeNames[]; 940 941 int swf_ObjectPlace(TAG * t,U16 id,U16 depth,MATRIX * m,CXFORM * cx,const char* name); 942 int swf_ObjectPlaceClip(TAG * t,U16 id,U16 depth,MATRIX * m,CXFORM * cx,const char* name, U16 clipaction); 943 int swf_ObjectPlaceBlend(TAG * t,U16 id,U16 depth,MATRIX * m,CXFORM * cx,const char* name, U8 blendmode); 944 int swf_ObjectMove(TAG * t,U16 depth,MATRIX * m,CXFORM * cx); 945 946 #define PF_MOVE 0x01 947 #define PF_CHAR 0x02 948 #define PF_MATRIX 0x04 949 #define PF_CXFORM 0x08 950 #define PF_RATIO 0x10 951 #define PF_NAME 0x20 952 #define PF_CLIPDEPTH 0x40 953 #define PF_ACTIONEVENT 0x80 954 955 #define PF2_FILTERS 0x01 956 #define PF2_BLENDMODE 0x02 957 #define PF2_ASBITMAP 0x04 958 //... 959 960 #define BLENDMODE_NORMAL 0 961 #define BLENDMODE_NORMAL2 1 962 #define BLENDMODE_LAYER 2 963 #define BLENDMODE_MULTIPLY 3 964 #define BLENDMODE_SCREEN 4 965 #define BLENDMODE_LIGHTEN 5 966 #define BLENDMODE_DARKEN 6 967 #define BLENDMODE_ADD 7 968 #define BLENDMODE_SUBSTRACT 8 969 #define BLENDMODE_DIFFERENCE 9 970 #define BLENDMODE_INVERT 10 971 #define BLENDMODE_ALPHA 11 972 #define BLENDMODE_ERASE 12 973 #define BLENDMODE_OVERLAY 13 974 #define BLENDMODE_HARDLIGHT 14 975 976 typedef struct _SWFPLACEOBJECT { 977 U8 flags; 978 U16 depth; 979 U16 id; // may be 0 980 char move; //true: move/replace character, false: set character 981 MATRIX matrix; 982 CXFORM cxform; 983 U16 ratio; 984 char*name; 985 U16 clipdepth; 986 ActionTAG* actions; 987 U8 blendmode; 988 FILTERLIST*filters; 989 } SWFPLACEOBJECT; 990 991 void swf_SetPlaceObject(TAG * t,SWFPLACEOBJECT* obj); 992 void swf_GetPlaceObject(TAG * t,SWFPLACEOBJECT* obj); 993 void swf_PlaceObjectFree(SWFPLACEOBJECT* obj); 994 995 // swfvideo.c 996 997 typedef struct _VIDEOSTREAM 998 { 999 int width; 1000 int height; 1001 int linex; 1002 1003 int owidth; 1004 int oheight; 1005 int olinex; 1006 1007 int frame; 1008 YUV*oldpic; 1009 YUV*current; 1010 int bbx; 1011 int bby; 1012 int*mvdx; 1013 int*mvdy; 1014 int quant; 1015 1016 /* modifyable: */ 1017 int do_motion; //enable motion compensation (slow!) 1018 1019 } VIDEOSTREAM; 1020 1021 void swf_SetVideoStreamDefine(TAG*tag, VIDEOSTREAM*stream, U16 frames, U16 width, U16 height); 1022 void swf_SetVideoStreamIFrame(TAG*tag, VIDEOSTREAM*s, RGBA*pic, int quant/* 1-31, 1=best quality, 31=best compression*/); 1023 void swf_SetVideoStreamBlackFrame(TAG*tag, VIDEOSTREAM*s); 1024 void swf_SetVideoStreamPFrame(TAG*tag, VIDEOSTREAM*s, RGBA*pic, int quant/* 1-31, 1=best quality, 31=best compression*/); 1025 void swf_SetVideoStreamMover(TAG*tag, VIDEOSTREAM*s, signed char* movex, signed char* movey, void** image, int quant); 1026 void swf_VideoStreamClear(VIDEOSTREAM*stream); 1027 1028 // swfbutton.c 1029 1030 // Button States 1031 1032 #define BS_HIT 0x08 1033 #define BS_DOWN 0x04 1034 #define BS_OVER 0x02 1035 #define BS_UP 0x01 1036 1037 // Button Conditions 1038 1039 /* missing: IDLE_OUTDOWN 1040 OUTDOWN_OVERUP 1041 OVERUP_OUTDOWN 1042 */ 1043 #define BC_OVERDOWN_IDLE 0x0100 1044 #define BC_IDLE_OVERDOWN 0x0080 1045 #define BC_OUTDOWN_IDLE 0x0040 1046 #define BC_OUTDOWN_OVERDOWN 0x0020 1047 #define BC_OVERDOWN_OUTDOWN 0x0010 1048 #define BC_OVERDOWN_OVERUP 0x0008 1049 #define BC_OVERUP_OVERDOWN 0x0004 1050 #define BC_OVERUP_IDLE 0x0002 1051 #define BC_IDLE_OVERUP 0x0001 1052 1053 #define BC_KEY(c) (c<<9) 1054 1055 #define BC_CURSORLEFT 0x0200 1056 #define BC_CURSORRIGHT 0x0400 1057 #define BC_POS1 0x0600 1058 #define BC_END 0x0800 1059 #define BC_INSERT 0x0a00 1060 #define BC_DELETE 0x0c00 1061 #define BC_CLEAR 0x0e00 1062 #define BC_BACKSPACE 0x1000 1063 #define BC_ENTER 0x1a00 1064 #define BC_CURSORUP 0x1c00 1065 #define BC_CURSORDOWN 0x1e00 1066 #define BC_PAGEUP 0x2000 1067 #define BC_PAGEDOWN 0x2200 1068 #define BC_TAB 0x2400 1069 #define BC_ESCAPE 0x3600 1070 #define BC_SPACE 0x4000 1071 1072 /* these are probably only valid with linux: 1073 Ctrl-A 0x0200 1074 Ctrl-X 0x3000 1075 Ctrl-Y 0x3200 1076 Ctrl-Z 0x3400 1077 Escape/Ctrl-[ 0x3600 1078 Ctrl-\ 0x3800 1079 Ctrl-] 0x3a00 1080 Ctrl-^ 0x3c00 1081 Ctrl-/ 0x3e00 1082 */ 1083 1084 /* everything above 0x4000 is standard ascii: 1085 0x4000 ' ' 0x4200 '!' 0x4600 '#' 0x4800 '$' 0x4a00 '%' 0x4c00 '&' ... 1086 0x6000 '0' ... 0x7200 '9' 1087 0x8000 '@' 1088 0x8200 'A' ... 0xb400 'Z' 1089 ... 1090 0xfc00 '~' 1091 */ 1092 1093 // Button Flag 1094 1095 #define BF_TRACKMENU 0x01 1096 1097 int swf_ButtonSetRecord(TAG * t,U8 state,U16 id,U16 layer,MATRIX * m,CXFORM * cx); 1098 int swf_ButtonSetCondition(TAG * t,U16 condition); // for DefineButton2 1099 int swf_ButtonSetFlags(TAG * t,U8 flags); // necessary for DefineButton2 1100 int swf_ButtonPostProcess(TAG * t,int anz_action); // Set all offsets in DefineButton2-Tags (how many conditions to process) 1101 ActionTAG* swf_ButtonGetAction(TAG*t); 1102 1103 // swfrender.c 1104 1105 typedef struct RENDERBUF 1106 { 1107 int width; 1108 int height; 1109 int posx,posy; 1110 void*internal; 1111 } RENDERBUF; 1112 1113 void swf_Render_Init(RENDERBUF*buf, int posx, int posy, int width, int height, int antialize, int multiply); 1114 void swf_Render_SetBackground(RENDERBUF*buf, RGBA*img, int width, int height); 1115 void swf_Render_SetBackgroundColor(RENDERBUF*buf, RGBA color); 1116 RGBA* swf_Render(RENDERBUF*dest); 1117 void swf_RenderShape(RENDERBUF*dest, SHAPE2*shape, MATRIX*m, CXFORM*c, U16 depth,U16 clipdepth); 1118 void swf_RenderSWF(RENDERBUF*buf, SWF*swf); 1119 void swf_Render_AddImage(RENDERBUF*buf, U16 id, RGBA*img, int width, int height); /* img is non-premultiplied */ 1120 void swf_Render_ClearCanvas(RENDERBUF*dest); 1121 void swf_Render_Delete(RENDERBUF*dest); 1122 1123 // swffilter.c 1124 1125 #define FILTERTYPE_DROPSHADOW 0 1126 #define FILTERTYPE_BLUR 1 1127 #define FILTERTYPE_GLOW 2 1128 #define FILTERTYPE_BEVEL 3 1129 #define FILTERTYPE_GRADIENTGLOW 4 1130 #define FILTERTYPE_CONVOLUTION 5 1131 #define FILTERTYPE_COLORMATRIX 6 1132 #define FILTERTYPE_GRADIENTBEVEL 7 1133 1134 extern char*filtername[]; 1135 1136 typedef struct _FILTER_GRADIENTGLOW { 1137 U8 type; 1138 GRADIENT*gradient; 1139 double blurx; 1140 double blury; 1141 double angle; 1142 double distance; 1143 float strength; 1144 char innershadow; 1145 char knockout; 1146 char composite; 1147 char ontop; 1148 int passes; 1149 } FILTER_GRADIENTGLOW; 1150 1151 typedef struct _FILTER_DROPSHADOW { 1152 U8 type; 1153 RGBA color; 1154 double blurx; 1155 double blury; 1156 double angle; 1157 double distance; 1158 float strength; 1159 char innershadow; 1160 char knockout; 1161 char composite; 1162 int passes; 1163 } FILTER_DROPSHADOW; 1164 1165 typedef struct _FILTER_BEVEL { 1166 U8 type; 1167 RGBA shadow; 1168 RGBA highlight; 1169 double blurx; 1170 double blury; 1171 double angle; 1172 double distance; 1173 float strength; 1174 char innershadow; 1175 char knockout; 1176 char composite; 1177 char ontop; 1178 int passes; 1179 } FILTER_BEVEL; 1180 1181 typedef struct _FILTER_BLUR { 1182 U8 type; 1183 double blurx; 1184 double blury; 1185 int passes; 1186 } FILTER_BLUR; 1187 1188 typedef struct _FILTER_GLOW { 1189 U8 type; 1190 RGBA rgba; 1191 double blurx; 1192 double blury; 1193 double strength; 1194 int passes; 1195 char innerglow; 1196 char knockout; 1197 char composite; 1198 } FILTER_GLOW; 1199 1200 void swf_SetFilter(TAG*tag, FILTER*f); 1201 FILTER*swf_GetFilter(TAG*tag); 1202 FILTER*swf_NewFilter(U8 type); 1203 void swf_DeleteFilter(FILTER*f); 1204 1205 #ifdef __cplusplus 1206 } 1207 #endif 1208 1209 #endif 1210