internal SerialNumberTag(SwfReader r) : base(TagType.SerialNumber) { Product = r.GetInt32(); Edition = r.GetInt32(); MajorVersion = r.GetByte(); MinorVersion = r.GetByte(); Build = r.GetInt64(); CompilationDate = r.GetInt64(); }
internal DefineFunction2(SwfReader r, ConstantPool cp) { this.cp = cp; FunctionName = r.GetString(); uint paramCount = r.GetUI16(); RegisterCount = (uint)r.GetByte(); Preloads = PreloadFlags.Empty; if (r.GetBit()) { Preloads |= PreloadFlags.Parent; } if (r.GetBit()) { Preloads |= PreloadFlags.Root; } SuppressSuperFlag = r.GetBit(); if (r.GetBit()) { Preloads |= PreloadFlags.Super; } SuppressArgumentsFlag = r.GetBit(); if (r.GetBit()) { Preloads |= PreloadFlags.Arguments; } SuppressThisFlag = r.GetBit(); if (r.GetBit()) { Preloads |= PreloadFlags.This; } r.GetBits(7); // reserved if (r.GetBit()) { Preloads |= PreloadFlags.Global; } for (int i = 0; i < paramCount; i++) { uint reg = r.GetByte(); string name = r.GetString(); Parameters.Add(reg, name); } ActionContainer.CodeSize = r.GetUI16(); }
internal DefineEditTextTag(SwfReader r) : base(TagType.DefineEditText) { CharacterID = r.GetUI16(); Bounds = new Rect(r); HasText = r.GetBit(); WordWrap = r.GetBit(); Multiline = r.GetBit(); Password = r.GetBit(); ReadOnly = r.GetBit(); HasTextColor = r.GetBit(); HasMaxLength = r.GetBit(); HasFont = r.GetBit(); r.GetBit(); // resreved AutoSize = r.GetBit(); HasLayout = r.GetBit(); NoSelect = r.GetBit(); Border = r.GetBit(); r.GetBit(); // resreved HTML = r.GetBit(); UseOutlines = r.GetBit(); if (HasFont) { FontID = r.GetUI16(); FontHeight = r.GetUI16(); } if (HasTextColor) { TextColor = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte()); } if (HasMaxLength) { MaxLength = r.GetUI16(); } if (HasLayout) { Align = (uint)r.GetByte(); LeftMargin = r.GetUI16(); RightMargin = r.GetUI16(); Indent = r.GetUI16(); Leading = r.GetInt16(); } VariableName = r.GetString(); if (HasText) { InitialText = r.GetString(); } }
internal FilterGlow(SwfReader r) { GlowColor = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte()); BlurX = r.GetFixed16_16(); BlurY = r.GetFixed16_16(); Strength = r.GetFixed8_8(); InnerGlow = r.GetBit(); Knockout = r.GetBit(); CompositeSource = r.GetBit(); Passes = r.GetBits(5); r.Align(); }
internal DefineButton(SwfReader r) : base(TagType.DefineButton) { ButtonId = r.GetByte(); while (r.PeekByte() != 0) { Characters.Add(new ButtonRecord(r, TagType.DefineButton)); } r.GetByte();// 0, end ButtonRecords uint start = r.Position; ActionRecords = new ActionRecords(r, int.MaxValue); ActionRecords.CodeSize = r.Position - start; }
internal FilterDropShadow(SwfReader r) { DropShadowColor = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte()); BlurX = r.GetFixed16_16(); BlurY = r.GetFixed16_16(); Angle = r.GetFixed16_16(); Distance = r.GetFixed16_16(); Strength = r.GetFixed8_8(); InnerShadow = r.GetBit(); Knockout = r.GetBit(); CompositeSource = r.GetBit(); Passes = (uint)r.GetBits(5); r.Align(); }
internal GradientRecord(SwfReader r, bool useAlpha) { Ratio = r.GetByte(); if (useAlpha) { Color = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte()); } else { Color = new RGBA(r.GetByte(), r.GetByte(), r.GetByte()); } }
internal DefineTextTag(SwfReader r, bool useAlpha) : base(TagType.DefineText) { if (useAlpha) { tagType = TagType.DefineText2; } CharacterId = r.GetUI16(); TextBounds = new Rect(r); TextMatrix = new Matrix(r); glyphBits = (uint)r.GetByte(); advanceBits = (uint)r.GetByte(); while (r.PeekByte() != 0x00) { TextRecords.Add(new TextRecord(r, glyphBits, advanceBits, useAlpha)); } byte end = r.GetByte(); }
internal FilterGradientBevel(SwfReader r) { NumColors = (uint)r.GetByte(); GradientColors = new RGBA[NumColors]; for (int i = 0; i < NumColors; i++) { GradientColors[i] = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte()); } GradientRatio = new uint[NumColors]; for (int i = 0; i < NumColors; i++) { GradientRatio[i] = (uint)r.GetByte(); } BlurX = r.GetFixed16_16(); BlurY = r.GetFixed16_16(); Angle = r.GetFixed16_16(); Distance = r.GetFixed16_16(); Strength = r.GetFixed8_8(); InnerShadow = r.GetBit(); Knockout = r.GetBit(); CompositeSource = r.GetBit(); OnTop = r.GetBit(); Passes = r.GetBits(4); r.Align(); }
internal LineStyle2(SwfReader r, ShapeType shapeType) { this.Width = r.GetUI16(); this.StartCapStyle = (CapStyle)r.GetBits(2); this.JoinStyle = (JoinStyle)r.GetBits(2); this.HasFillFlag = r.GetBit(); this.NoHScaleFlag = r.GetBit(); this.NoVScaleFlag = r.GetBit(); this.PixelHintingFlag = r.GetBit(); r.GetBits(5); // skip this.NoClose = r.GetBit(); this.EndCapStyle = (CapStyle)r.GetBits(2); if (this.JoinStyle == JoinStyle.MiterJoin) { this.MiterLimitFactor = (float)((r.GetByte() / 0x100) + r.GetByte()); } if (this.HasFillFlag) { this.FillStyle = FillStyleArray.ParseFillStyle2(r, shapeType); } else { this.Color = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte()); } }
internal SolidFill(SwfReader r, bool useAlpha) { if (useAlpha) { this.Color = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte()); } else { this.Color = new RGBA(r.GetByte(), r.GetByte(), r.GetByte()); } }
internal PrimitiveDouble(SwfReader r) { byte[] bytes = new byte[8]; bytes[4] = r.GetByte(); bytes[5] = r.GetByte(); bytes[6] = r.GetByte(); bytes[7] = r.GetByte(); bytes[0] = r.GetByte(); bytes[1] = r.GetByte(); bytes[2] = r.GetByte(); bytes[3] = r.GetByte(); DoubleValue = BitConverter.ToDouble(bytes, 0); }
internal LineStyle(SwfReader r, bool useAlpha) { this.Width = r.GetUI16(); if (useAlpha) { this.Color = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte()); } else { this.Color = new RGBA(r.GetByte(), r.GetByte(), r.GetByte()); } }
internal FillStyleArray(SwfReader r, ShapeType shapeType) { int fillCount = (int)r.GetByte(); if (fillCount == 0xFF) { fillCount = (int)r.GetUI16(); } for (int i = 0; i < fillCount; i++) { FillStyles.Add(ParseFillStyle2(r, shapeType)); } }
internal CSMTextSettingsTag(SwfReader r) : base(TagType.CSMTextSettings) { TextId = r.GetUI16(); UseFlashType = r.GetBits(2); GridFit = r.GetBits(3); r.GetBits(3); // reserved r.Align(); Thickness = r.GetFixedNBits(32); Sharpness = r.GetFixedNBits(32); r.GetByte(); // reserved }
internal LineStyleArray(SwfReader r, ShapeType shapeType) { int lineCount = (int)r.GetByte(); if (lineCount == 0xFF) { lineCount = (int)r.GetUI16(); } for (int i = 0; i < lineCount; i++) { ParseLineStyle(r, shapeType); } }
internal SwfHeader(SwfReader r) { this.CompressionMode = CompressionType.Error; this.CompressionRatio = 0; //byte[] __signature = r.GetBytes(3); this.Signature = r.GetString(3); //Signature = r.GetString(3); if (Signature == "CWS") { this.CompressionMode = CompressionType.ZLIB; uint __oldSize = r.Size; r.DecompressCWSSwf(); uint __newSize = r.Size; this.CompressionRatio = ((double)__oldSize / (double)__newSize) * 100; } else if (Signature == "ZWS") { this.CompressionMode = CompressionType.LZMA; //r.DecompressZWSSwf uint __oldSize = r.Size; r.DecompressCWSSwf(); uint __newSize = r.Size; this.CompressionRatio = (double)__oldSize / (double)__newSize; } else if (Signature == "FWS") { this.CompressionMode = CompressionType.None; } if (this.CompressionMode != CompressionType.Error) { this.Version = r.GetByte(); this.FileLength = r.GetUI32(); this.FrameSize = new Rect(r); UInt16 __frate = r.GetUI16(); this.FrameRate = (__frate >> 8) + ((__frate & 0xFF) / 0xFF); this.FrameCount = r.GetUI16(); } else { this.Version = 0; this.FileLength = 0; this.FrameSize = new Rect(0, 0, 0, 0); this.FrameRate = 0; this.FrameCount = 0; } }
internal FilterBevel(SwfReader r) { ShadowColor = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte()); HighlightColor = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte()); BlurX = r.GetFixed16_16(); BlurY = r.GetFixed16_16(); Angle = r.GetFixed16_16(); Distance = r.GetFixed16_16(); Strength = r.GetFixed8_8(); InnerShadow = r.GetBit(); Knockout = r.GetBit(); CompositeSource = r.GetBit(); OnTop = r.GetBit(); Passes = r.GetBits(4); r.Align(); }
internal ClipActionRecord(SwfReader r, bool isSwf6Plus) { uint highClip = r.GetBits(16) << 16; uint lowClip = 0; bool isEndRecord = false; if (highClip == 0) { if (isSwf6Plus) { lowClip = r.GetBits(16); if (lowClip == 0) { ClipEvents = (ClipEvents)0; ActionRecordSize = 4; isEndRecord = true; } } else { ClipEvents = (ClipEvents)0; ActionRecordSize = 2; isEndRecord = true; } } else { lowClip = r.GetBits(16); } if (!isEndRecord) { ClipEvents = (ClipEvents)(lowClip | highClip); ActionRecordSize = r.GetUI32(); if ((ClipEvents & ClipEvents.KeyPress) > 0) { KeyCode = r.GetByte(); } ActionRecords = new ActionRecords(r, ActionRecordSize); // always is init tag? } }
internal SoundInfo(SwfReader r) { r.GetBits(2); // reserved IsSyncStop = r.GetBit(); IsSyncNoMultiple = r.GetBit(); HasEnvelope = r.GetBit(); HasLoops = r.GetBit(); HasOutPoint = r.GetBit(); r.Align(); if (HasInPoint) { InPoint = r.GetUI32(); } if (HasOutPoint) { OutPoint = r.GetUI32(); } if (HasLoops) { LoopCount = r.GetUI16(); } if (HasEnvelope) { uint count = (uint)r.GetByte(); uint pos; uint left; uint right; EnvelopeRecords = new SoundEnvelope[count]; for (int i = 0; i < count; i++) { pos = r.GetUI32(); left = r.GetUI16(); right = r.GetUI16(); EnvelopeRecords[i] = new SoundEnvelope(pos, left, right); } } }
internal static IFillStyle ParseFillStyle2(SwfReader r, ShapeType shapeType) { IFillStyle result = null; FillType fsType = (FillType)r.GetByte(); bool useAlpha = shapeType > ShapeType.DefineShape2; switch (fsType) { case FillType.Solid: result = new SolidFill(r, useAlpha); break; case FillType.Linear: result = new Gradient(r, fsType, useAlpha); break; case FillType.Radial: result = new Gradient(r, fsType, useAlpha); break; case FillType.Focal: result = null; //throw new NotSupportedException("Currently FillType.Focal is not supported"); break; case FillType.RepeatingBitmap: case FillType.ClippedBitmap: case FillType.NSRepeatingBitmap: case FillType.NSClippedBitmap: uint charId = r.GetUI16(); Matrix bmpMatrix = new Matrix(r); result = new BitmapFill(charId, bmpMatrix, fsType); break; } return(result); }
internal DefineButton2(SwfReader r) : base(TagType.DefineButton2) { ButtonId = r.GetUI16(); r.GetBits(7); TrackAsMenu = r.GetBit(); ActionOffset = r.GetUI16(); while (r.PeekByte() != 0) { Characters.Add(new ButtonRecord(r, TagType.DefineButton2)); } r.GetByte();// 0, end ButtonRecords if (ActionOffset > 0) { ButtonCondAction bca; do { bca = new ButtonCondAction(r); ButtonCondActions.Add(bca); }while (bca.CondActionSize > 0); } }
internal FilterConvolution(SwfReader r) { MatrixX = (uint)r.GetByte(); MatrixY = (uint)r.GetByte(); Divisor = r.GetFloat32(); Bias = r.GetFloat32(); uint mxCount = MatrixX * MatrixY; Matrix = new float[mxCount]; for (int i = 0; i < mxCount; i++) { Matrix[i] = r.GetFloat32(); } DefaultColor = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte()); r.GetBits(6); Clamp = r.GetBit(); PreserveAlpha = r.GetBit(); r.Align(); }
internal ButtonRecord(SwfReader r, uint containerTag) { this.containerTag = containerTag; r.GetBits(2); ButtonHasBlendMode = r.GetBit(); ButtonHasFilterList = r.GetBit(); ButtonStateHitTest = r.GetBit(); ButtonStateDown = r.GetBit(); ButtonStateOver = r.GetBit(); ButtonStateUp = r.GetBit(); CharacterID = r.GetUI16(); PlaceDepth = r.GetUI16(); PlaceMatrix = new Matrix(r); if (containerTag == TagType.DefineButton2) { ColorTransform = new ColorTransform(r, true); if (ButtonHasFilterList) { // some dup code from placeObject3 : ( uint filterCount = (uint)r.GetByte(); FilterList = new List <IFilter>(); for (int i = 0; i < filterCount; i++) { FilterKind kind = (FilterKind)r.GetByte(); switch (kind) { case FilterKind.Bevel: FilterList.Add(new FilterBevel(r)); break; case FilterKind.Blur: FilterList.Add(new FilterBlur(r)); break; case FilterKind.ColorMatrix: FilterList.Add(new FilterColorMatrix(r)); break; case FilterKind.Convolution: FilterList.Add(new FilterConvolution(r)); break; case FilterKind.DropShadow: FilterList.Add(new FilterDropShadow(r)); break; case FilterKind.Glow: FilterList.Add(new FilterGlow(r)); break; case FilterKind.GradientBevel: FilterList.Add(new FilterGradientBevel(r)); break; case FilterKind.GradientGlow: FilterList.Add(new FilterGradientGlow(r)); break; default: // unsupported filter break; } } } if (ButtonHasBlendMode) { BlendMode = (BlendMode)r.GetByte(); } } }
internal StoreRegister(SwfReader r) { Register = (uint)r.GetByte(); }
internal DefineFont2_3(SwfReader r, bool isHighRes) : base(TagType.DefineFont2) { this.IsHighRes = isHighRes; // true; if (isHighRes) { this.tagType = TagType.DefineFont3; } this.FontId = r.GetUI16(); this.FontFlagsHasLayout = r.GetBit(); this.FontFlagsShiftJIS = r.GetBit(); this.FontFlagsSmallText = r.GetBit(); this.FontFlagsANSI = r.GetBit(); this.FontFlagsWideOffsets = r.GetBit(); this.FontFlagsWideCodes = r.GetBit(); this.FontFlagsItalic = r.GetBit(); this.FontFlagsBold = r.GetBit(); r.Align(); this.LanguageCode = (uint)r.GetByte(); uint fontNameLen = (uint)r.GetByte(); this.FontName = r.GetString(fontNameLen); this.NumGlyphs = r.GetUI16(); this.OffsetTable = new uint[this.NumGlyphs]; for (int i = 0; i < this.NumGlyphs; i++) { this.OffsetTable[i] = this.FontFlagsWideOffsets ? r.GetUI32() : r.GetUI16(); } this.CodeTableOffset = this.FontFlagsWideOffsets ? r.GetUI32() : r.GetUI16(); GlyphShapeTable = new List <Shape>(); for (int i = 0; i < this.NumGlyphs; i++) { Shape s = new Shape(r); GlyphShapeTable.Add(s); } this.CodeTable = new uint[this.NumGlyphs]; for (int i = 0; i < this.NumGlyphs; i++) { this.CodeTable[i] = r.GetUI16(); } if (this.FontFlagsHasLayout) { this.FontAscent = r.GetInt16(); this.FontDescent = r.GetInt16(); this.FontLeading = r.GetInt16(); this.FontAdvanceTable = new int[this.NumGlyphs]; for (int i = 0; i < this.NumGlyphs; i++) { this.FontAdvanceTable[i] = r.GetInt16(); } this.FontBoundsTable = new Rect[this.NumGlyphs]; for (int i = 0; i < this.NumGlyphs; i++) { this.FontBoundsTable[i] = new Rect(r); } this.KerningCount = r.GetUI16(); this.FontKerningTable = new KerningRecord[this.KerningCount]; if (this.FontFlagsWideCodes) { for (int i = 0; i < this.KerningCount; i++) { this.FontKerningTable[i] = new KerningRecord(r.GetUI16(), r.GetUI16(), r.GetInt16()); } } else { for (int i = 0; i < this.KerningCount; i++) { this.FontKerningTable[i] = new KerningRecord((uint)r.GetByte(), (uint)r.GetByte(), r.GetInt16()); } } } }
internal PrimitiveRegister(SwfReader r) { RegisterValue = r.GetByte(); }
internal WaitForFrame2(SwfReader r) { SkipCount = (uint)r.GetByte(); }
internal PrimitiveBoolean(SwfReader r) { BooleanValue = r.GetByte() > 0 ? true : false; // stored as byte }
internal PrimitiveConstant8(SwfReader r) { Constant8Value = (uint)r.GetByte(); }