public static void AreEqual(PlaceObject3Tag expected, PlaceObject3Tag actual) { Assert.AreEqual(expected.CharacterID, actual.CharacterID); Assert.AreEqual(expected.Depth, actual.Depth); AssertData.AreEqual(expected.Matrix, actual.Matrix, "Matrix"); AssertFilters.AreEqual(expected.Filters, actual.Filters, "PlaceObject3.Filters"); Assert.AreEqual(expected.RestData, actual.RestData); }
public static void AreEqual(PlaceObject3Tag expected, PlaceObject3Tag actual) { Assert.AreEqual(expected.CharacterID, actual.CharacterID); Assert.AreEqual(expected.Depth, actual.Depth); AssertData.AreEqual(expected.Matrix, actual.Matrix, "Matrix"); AssertFilters.AreEqual(expected.Filters, actual.Filters, "PlaceObject3.Filters"); Assert.AreEqual(expected.RestData, actual.RestData); }
SwfTagData ISwfTagVisitor <ISwfStreamWriter, SwfTagData> .Visit(PlaceObject3Tag tag, ISwfStreamWriter writer) { writer.WriteBit(tag.HasClipActions); writer.WriteBit(tag.ClipDepth.HasValue); writer.WriteBit(tag.Name != null); writer.WriteBit(tag.Ratio.HasValue); writer.WriteBit(tag.ColorTransform.HasValue); writer.WriteBit(tag.HasMatrix); writer.WriteBit(tag.HasCharacter); writer.WriteBit(tag.Move); writer.WriteBit(tag.Reserved); writer.WriteBit(tag.HasOpaqueBackground); writer.WriteBit(tag.Visible.HasValue); writer.WriteBit(tag.HasImage); writer.WriteBit(tag.ClassName != null); writer.WriteBit(tag.BitmapCache.HasValue); writer.WriteBit(tag.BlendMode.HasValue); writer.WriteBit(tag.HasFilterList); writer.WriteUInt16(tag.Depth); if (tag.ClassName != null) //Adobe says class name is also present when (hasImage && hasCharacter) { writer.WriteString(tag.ClassName); } if (tag.HasCharacter) { writer.WriteUInt16(tag.CharacterID); } if (tag.HasMatrix) { writer.WriteMatrix(ref tag.Matrix); } if (tag.ColorTransform.HasValue) { writer.WriteColorTransformRGBA(tag.ColorTransform.Value); } if (tag.Ratio.HasValue) { writer.WriteUInt16(tag.Ratio.Value); } if (tag.Name != null) { writer.WriteString(tag.Name); } if (tag.ClipDepth.HasValue) { writer.WriteUInt16(tag.ClipDepth.Value); } if (tag.HasFilterList) { writer.WriteFilterList(tag.Filters); } if (tag.BlendMode.HasValue) { writer.WriteByte((byte)tag.BlendMode.Value); } if (tag.BitmapCache.HasValue) { writer.WriteByte(tag.BitmapCache.Value); } if (tag.Visible.HasValue) { writer.WriteByte(tag.Visible.Value); writer.WriteRGBA(tag.BackgroundColor); } if (tag.HasClipActions) { writer.WriteClipActions(_file.FileInfo.Version, tag.ClipActions); } return(null); }
SwfTagBase ISwfTagVisitor <ISwfStreamReader, SwfTagBase> .Visit(PlaceObject3Tag tag, ISwfStreamReader reader) { tag.HasClipActions = reader.ReadBit(); tag.HasClipDepth = reader.ReadBit(); tag.HasName = reader.ReadBit(); tag.HasRatio = reader.ReadBit(); tag.HasColorTransform = reader.ReadBit(); tag.HasMatrix = reader.ReadBit(); tag.HasCharacter = reader.ReadBit(); tag.Move = reader.ReadBit(); tag.Reserved = reader.ReadBit(); tag.HasOpaqueBackground = reader.ReadBit(); tag.HasVisible = reader.ReadBit(); tag.HasImage = reader.ReadBit(); tag.HasClassName = reader.ReadBit(); tag.HasCacheAsBitmap = reader.ReadBit(); tag.HasBlendMode = reader.ReadBit(); tag.HasFilterList = reader.ReadBit(); tag.Depth = reader.ReadUInt16(); if (tag.HasClassName) //Adobe says class name is also present when (hasImage && hasCharacter) { tag.ClassName = reader.ReadString(); } if (tag.HasCharacter) { tag.CharacterID = reader.ReadUInt16(); } if (tag.HasMatrix) { tag.Matrix = reader.ReadMatrix(); } if (tag.HasColorTransform) { tag.ColorTransform = reader.ReadColorTransformRGBA(); } if (tag.HasRatio) { tag.Ratio = reader.ReadUInt16(); } if (tag.HasName) { tag.Name = reader.ReadString(); } if (tag.HasClipDepth) { tag.ClipDepth = reader.ReadUInt16(); } if (tag.HasFilterList) { reader.ReadFilterList(tag.Filters); } if (tag.HasBlendMode) { tag.BlendMode = (BlendMode?)reader.ReadByte(); } if (tag.HasVisible) { tag.Visible = reader.ReadByte(); if (reader.BytesLeft > 0) { tag.BackgroundColor = reader.ReadRGBA(); } } if (tag.HasClipActions) { reader.ReadClipActions(_file.FileInfo.Version, tag.ClipActions); } return(tag); }
static SwfTagBase Create(SwfTagData tag_data) { var reader = new SwfStreamReader(tag_data.TagData); switch (tag_data.TagId) { // Display list case (int)SwfTagType.PlaceObject: return(PlaceObjectTag.Create(reader)); case (int)SwfTagType.PlaceObject2: return(PlaceObject2Tag.Create(reader)); case (int)SwfTagType.PlaceObject3: return(PlaceObject3Tag.Create(reader)); case (int)SwfTagType.RemoveObject: return(RemoveObjectTag.Create(reader)); case (int)SwfTagType.RemoveObject2: return(RemoveObject2Tag.Create(reader)); case (int)SwfTagType.ShowFrame: return(ShowFrameTag.Create(reader)); // Control case (int)SwfTagType.SetBackgroundColor: return(SetBackgroundColorTag.Create(reader)); case (int)SwfTagType.FrameLabel: return(FrameLabelTag.Create(reader)); case (int)SwfTagType.Protect: return(ProtectTag.Create(reader)); case (int)SwfTagType.End: return(EndTag.Create(reader)); case (int)SwfTagType.ExportAssets: return(ExportAssetsTag.Create(reader)); case (int)SwfTagType.ImportAssets: return(UnsupportedTag.Create(SwfTagType.ImportAssets)); case (int)SwfTagType.EnableDebugger: return(EnableDebuggerTag.Create(reader)); case (int)SwfTagType.EnableDebugger2: return(EnableDebugger2Tag.Create(reader)); case (int)SwfTagType.ScriptLimits: return(ScriptLimitsTag.Create(reader)); case (int)SwfTagType.SetTabIndex: return(UnsupportedTag.Create(SwfTagType.SetTabIndex)); case (int)SwfTagType.ImportAssets2: return(UnsupportedTag.Create(SwfTagType.ImportAssets2)); case (int)SwfTagType.SymbolClass: return(SymbolClassTag.Create(reader)); case (int)SwfTagType.Metadata: return(MetadataTag.Create(reader)); case (int)SwfTagType.DefineScalingGrid: return(UnsupportedTag.Create(SwfTagType.DefineScalingGrid)); case (int)SwfTagType.DefineSceneAndFrameLabelData: return(DefineSceneAndFrameLabelDataTag.Create(reader)); // Actions case (int)SwfTagType.DoAction: return(UnsupportedTag.Create(SwfTagType.DoAction)); case (int)SwfTagType.DoInitAction: return(UnsupportedTag.Create(SwfTagType.DoInitAction)); case (int)SwfTagType.DoABC: return(DoABCTag.Create(reader)); // Shape case (int)SwfTagType.DefineShape: return(DefineShapeTag.Create(reader)); case (int)SwfTagType.DefineShape2: return(DefineShape2Tag.Create(reader)); case (int)SwfTagType.DefineShape3: return(DefineShape3Tag.Create(reader)); case (int)SwfTagType.DefineShape4: return(DefineShape4Tag.Create(reader)); // Bitmaps case (int)SwfTagType.DefineBits: return(UnsupportedTag.Create(SwfTagType.DefineBits)); case (int)SwfTagType.JPEGTables: return(UnsupportedTag.Create(SwfTagType.JPEGTables)); case (int)SwfTagType.DefineBitsJPEG2: return(UnsupportedTag.Create(SwfTagType.DefineBitsJPEG2)); case (int)SwfTagType.DefineBitsJPEG3: return(UnsupportedTag.Create(SwfTagType.DefineBitsJPEG3)); case (int)SwfTagType.DefineBitsLossless: return(DefineBitsLosslessTag.Create(reader)); case (int)SwfTagType.DefineBitsLossless2: return(DefineBitsLossless2Tag.Create(reader)); case (int)SwfTagType.DefineBitsJPEG4: return(UnsupportedTag.Create(SwfTagType.DefineBitsJPEG4)); // Shape Morphing case (int)SwfTagType.DefineMorphShape: return(UnsupportedTag.Create(SwfTagType.DefineMorphShape)); case (int)SwfTagType.DefineMorphShape2: return(UnsupportedTag.Create(SwfTagType.DefineMorphShape2)); // Fonts and Text case (int)SwfTagType.DefineFont: return(UnsupportedTag.Create(SwfTagType.DefineFont)); case (int)SwfTagType.DefineFontInfo: return(UnsupportedTag.Create(SwfTagType.DefineFontInfo)); case (int)SwfTagType.DefineFontInfo2: return(UnsupportedTag.Create(SwfTagType.DefineFontInfo2)); case (int)SwfTagType.DefineFont2: return(UnsupportedTag.Create(SwfTagType.DefineFont2)); case (int)SwfTagType.DefineFont3: return(UnsupportedTag.Create(SwfTagType.DefineFont3)); case (int)SwfTagType.DefineFontAlignZones: return(UnsupportedTag.Create(SwfTagType.DefineFontAlignZones)); case (int)SwfTagType.DefineFontName: return(UnsupportedTag.Create(SwfTagType.DefineFontName)); case (int)SwfTagType.DefineText: return(UnsupportedTag.Create(SwfTagType.DefineText)); case (int)SwfTagType.DefineText2: return(UnsupportedTag.Create(SwfTagType.DefineText2)); case (int)SwfTagType.DefineEditText: return(UnsupportedTag.Create(SwfTagType.DefineEditText)); case (int)SwfTagType.CSMTextSettings: return(UnsupportedTag.Create(SwfTagType.CSMTextSettings)); case (int)SwfTagType.DefineFont4: return(UnsupportedTag.Create(SwfTagType.DefineFont4)); // Sounds case (int)SwfTagType.DefineSound: return(UnsupportedTag.Create(SwfTagType.DefineSound)); case (int)SwfTagType.StartSound: return(UnsupportedTag.Create(SwfTagType.StartSound)); case (int)SwfTagType.StartSound2: return(UnsupportedTag.Create(SwfTagType.StartSound2)); case (int)SwfTagType.SoundStreamHead: return(UnsupportedTag.Create(SwfTagType.SoundStreamHead)); case (int)SwfTagType.SoundStreamHead2: return(UnsupportedTag.Create(SwfTagType.SoundStreamHead2)); case (int)SwfTagType.SoundStreamBlock: return(UnsupportedTag.Create(SwfTagType.SoundStreamBlock)); // Buttons case (int)SwfTagType.DefineButton: return(UnsupportedTag.Create(SwfTagType.DefineButton)); case (int)SwfTagType.DefineButton2: return(UnsupportedTag.Create(SwfTagType.DefineButton2)); case (int)SwfTagType.DefineButtonCxform: return(UnsupportedTag.Create(SwfTagType.DefineButtonCxform)); case (int)SwfTagType.DefineButtonSound: return(UnsupportedTag.Create(SwfTagType.DefineButtonSound)); // Sprites and Movie Clips case (int)SwfTagType.DefineSprite: return(DefineSpriteTag.Create(reader)); // Video case (int)SwfTagType.DefineVideoStream: return(UnsupportedTag.Create(SwfTagType.DefineVideoStream)); case (int)SwfTagType.VideoFrame: return(UnsupportedTag.Create(SwfTagType.VideoFrame)); // Metadata case (int)SwfTagType.FileAttributes: return(FileAttributesTag.Create(reader)); case (int)SwfTagType.EnableTelemetry: return(EnableTelemetryTag.Create(reader)); case (int)SwfTagType.DefineBinaryData: return(DefineBinaryDataTag.Create(reader)); default: return(UnknownTag.Create(tag_data.TagId)); } }
ITagFormatter ISwfTagVisitor <object, ITagFormatter> .Visit(PlaceObject3Tag tag, object arg) { return(new PlaceObject3TagFormatter()); }
public SwfDisplayList Visit(PlaceObject3Tag tag, SwfDisplayList dl) { var is_shape = tag.HasCharacter && Library.HasDefine <SwfLibraryShapeDefine>(tag.CharacterId); var is_sprite = tag.HasCharacter && Library.HasDefine <SwfLibrarySpriteDefine>(tag.CharacterId); if (tag.HasCharacter) { SwfDisplayInstance old_inst = null; if (tag.Move) // replace character { if (dl.Instances.TryGetValue(tag.Depth, out old_inst)) { dl.Instances.Remove(tag.Depth); } } // new character SwfDisplayInstance new_inst = null; if (is_shape) { new_inst = new SwfDisplayShapeInstance(); } else if (is_sprite) { new_inst = new SwfDisplaySpriteInstance(); } if (new_inst != null) { new_inst.Id = tag.CharacterId; new_inst.Depth = tag.Depth; new_inst.ClipDepth = tag.HasClipDepth ? tag.ClipDepth : (old_inst != null ? old_inst.ClipDepth : (ushort)0); new_inst.Visible = tag.HasVisible ? tag.Visible : (old_inst != null ? old_inst.Visible : true); new_inst.Matrix = tag.HasMatrix ? tag.Matrix : (old_inst != null ? old_inst.Matrix : SwfMatrix.identity); new_inst.BlendMode = tag.HasBlendMode ? tag.BlendMode : (old_inst != null ? old_inst.BlendMode : SwfBlendMode.identity); new_inst.FilterList = tag.HasFilterList ? tag.SurfaceFilters : (old_inst != null ? old_inst.FilterList : SwfSurfaceFilters.identity); new_inst.ColorTransform = tag.HasColorTransform ? tag.ColorTransform : (old_inst != null ? old_inst.ColorTransform : SwfColorTransform.identity); dl.Instances.Add(new_inst.Depth, new_inst); } } else if (tag.Move) // move character { SwfDisplayInstance inst; if (dl.Instances.TryGetValue(tag.Depth, out inst)) { if (tag.HasClipDepth) { inst.ClipDepth = tag.ClipDepth; } if (tag.HasVisible) { inst.Visible = tag.Visible; } if (tag.HasMatrix) { inst.Matrix = tag.Matrix; } if (tag.HasBlendMode) { inst.BlendMode = tag.BlendMode; } if (tag.HasFilterList) { inst.FilterList = tag.SurfaceFilters; } if (tag.HasColorTransform) { inst.ColorTransform = tag.ColorTransform; } } } return(dl); }