--- /dev/null
+(function(global) {
+ var FlappSWFFillStyles = function(ibit) {
+ ;
+ };
+ FlappSWFFillStyles.load = function(code, ibit) {
+ ibit.a();
+ var count = ibit.ui8();
+ if ((code > 2) && (count === 0xff)) {
+ count = ibit.ui16();
+ }
+ var fillStyles = new Array(count + 1);
+ fillStyles[0] = null;
+ var hasAlpha = (code < 32)?false:true;
+ for (var i = 1 ; i < count ; i++) {
+ fillStyles[i] = FlappSWFFillStyles.loadStyle(ibit, hasAlpha);
+ }
+ return fillStyles;
+ };
+ FlappSWFFillStyles.loadStyle = function(ibit, hasAlpha) {
+ ibit.a();
+ var style = {type: ibit.ui8()};
+ switch (type) {
+ case 0x00: // solid fill
+ style.color = FlappSWFRGBA.load(ibit, hasAlpha);
+ break;
+ case 0x10: // linear gradient fill
+ case 0x12: // radial gradient fill
+ style.matrix = FlappSWFMatrix.load(ibit);
+ style.gradient = new FlappSWFGradient(ibit, hasAlpha);
+ break;
+ case 0x13: // focal radial gradient fill
+ style.matrix = FlappSWFMatrix.load(ibit);
+ style.gradient = new FlappSWFGradient(ibit, hasAlpha);
+ break;
+ case 0x40: // repeating bitmap fill
+ case 0x41: // clipped bitmap fill
+ case 0x42: // non-smoothed repeating bitmap
+ case 0x43: // non-smoothed clipped bitmap
+ style.bitmapId = ibit.ui16();
+ style.matrix = FlappSWFMatrix.load(ibit);
+ break;
+ }
+ return style;
+ }
+
+ global.FlappSWFFillStyles = FlappSWFFillStyles;
+})(this);
--- /dev/null
+(function(global) {
+ var FlappSWFLineStyles = function(ibit) {
+ ;
+ };
+ FlappSWFLineStyles.load = function(code, ibit) {
+ ibit.a();
+ var nbit = ibit.ub(5);
+ return { xmin: ibit.sb(nbit) / 20,
+ xmax: ibit.sb(nbit) / 20,
+ ymin: ibit.sb(nbit) / 20,
+ ymax: ibit.sb(nbit) / 20 };
+ };
+
+ global.FlappSWFLineStyles = FlappSWFLineStyles;
+})(this);
--- /dev/null
+(function(global) {
+ var FlappSWFRGBA = function(ibit) {
+ ;
+ };
+ FlappSWFRGBA.load = function(ibit, hasAlpha) {
+ ibit.a();
+ if (hasAlpha) {
+ return { red: ibit.ui8(),
+ green: ibit.ui8(),
+ blue: ibit.ui8(),
+ alpha: ibit.ui8()
+ };
+ }
+ return { red: ibit.ui8(),
+ green: ibit.ui8(),
+ blue: ibit.ui8(),
+ alpha: 255
+ };
+ }
+ global.FlappSWFRGBA = FlappSWFRGBA;
+})(this);
--- /dev/null
+(function(global) {
+ var FlappSWFShapeRecords = function(ibit) {
+ ;
+ };
+ FlappSWFShapeRecords.load = function(code, ibit, fillStyles, lineStyles, numFillBits, numLineBits) {
+ ibit.a();
+ var nbit = ibit.ub(5);
+ return { xmin: ibit.sb(nbit) / 20,
+ xmax: ibit.sb(nbit) / 20,
+ ymin: ibit.sb(nbit) / 20,
+ ymax: ibit.sb(nbit) / 20 };
+ };
+
+ global.FlappSWFShapeRecords = FlappSWFShapeRecords;
+})(this);
--- /dev/null
+/*
+ DefineShape parser
+*/
+
+(function(global) {
+ var FlappSWFTagDefineShape = function(code, length, ibit) {
+// console.log("FlappSWFTagDefineShape(code:"+code+", length:"+length+", ibit)");
+ this.code = code;
+ this.length = length;
+ this.id = ibit.ui16();
+ this.bounds = FlappSWFRect.load(ibit);
+ var fillStyles = FlappSWFFillStyles.load(code, ibit);
+ var lineStyles = FlappSWFLineStyles.load(code, ibit);
+ ibit.a();
+ var numBits = bs.getUI8();
+ var numFillBits = numBits >> 4;
+ var numLineBits = numBits & 0x0f;
+
+ this.Shapes = FlappSWFTagShapeRecords.load(code, ibit, fillStyles, lineStyles, numFillBits, numLineBits);
+ }
+ global.FlappSWFTagDefineShape = FlappSWFTagDefineShape;
+})(this);