Exemple #1
0
 public void Dump(XmlWriter writer, SwfTagCode shapeType)
 {
     writer.WriteStartElement("record");
     writer.WriteAttributeString("type", Type.ToString());
     DumpBody(writer, shapeType);
     writer.WriteEndElement();
 }
Exemple #2
0
        public override void Write(SwfWriter writer, SwfTagCode shapeType)
        {
            if (DeltaX == 0 && DeltaY == 0)
            {
                return;
            }

            writer.WriteBit(true); //edge flag
            writer.WriteBit(true); //strait flag

            if (DeltaX == 0)       //vert
            {
                WriteCoord(writer, DeltaY, true);
            }
            else if (DeltaY == 0) //horz
            {
                WriteCoord(writer, DeltaX, false);
            }
            else
            {
                int x    = DeltaX.ToTwips();
                int y    = DeltaY.ToTwips();
                int bits = _bits;
                if (!_read)
                {
                    bits = Math.Max(x.GetMinBits(y), 2);
                }
                writer.WriteUB((uint)(bits - 2), 4);
                writer.WriteBit(true); //gl
                writer.WriteSB(x, bits);
                writer.WriteSB(y, bits);
            }
        }
Exemple #3
0
        private static SwfTag ReadChar(SwfReader reader, SwfTagCode tagCode, byte[] tagData)
        {
            var ch = new SwfCharacterAny(tagCode);

            ch.ReadTagData(tagData, reader);
            return(ch);
        }
Exemple #4
0
 protected override void DumpBody(XmlWriter writer, SwfTagCode shapeType)
 {
     writer.WriteAttributeString("cdx", ControlDeltaX.ToString());
     writer.WriteAttributeString("cdy", ControlDeltaY.ToString());
     writer.WriteAttributeString("adx", AnchorDeltaX.ToString());
     writer.WriteAttributeString("ady", AnchorDeltaY.ToString());
 }
Exemple #5
0
        public override void Read(SwfReader reader, SwfTagCode shapeType)
        {
            int  bits = (int)reader.ReadUB(4) + 2;
            bool gl   = reader.ReadBit(); //general line, x and y

            if (gl)
            {
                DeltaX = reader.ReadTwip(bits);
                DeltaY = reader.ReadTwip(bits);
            }
            else
            {
                bool vl = reader.ReadBit(); //vertical line
                if (vl)
                {
                    DeltaY = reader.ReadTwip(bits);
                }
                else
                {
                    DeltaX = reader.ReadTwip(bits);
                }
            }
            _bits = bits;
            _read = true;
        }
Exemple #6
0
        protected override void DumpBody(XmlWriter writer, SwfTagCode shapeType)
        {
            writer.WriteAttributeString("state", State.ToString());

            if ((State & SwfStyleState.HasMoveTo) != 0)
            {
                writer.WriteAttributeString("dx", DeltaX.ToString());
                writer.WriteAttributeString("dy", DeltaY.ToString());
            }

            if ((State & SwfStyleState.HasFillStyle0) != 0)
            {
                writer.WriteAttributeString("fs0", FillStyle0.ToString());
            }

            if ((State & SwfStyleState.HasFillStyle1) != 0)
            {
                writer.WriteAttributeString("fs1", FillStyle1.ToString());
            }

            if ((State & SwfStyleState.HasLineStyle) != 0)
            {
                writer.WriteAttributeString("ls", LineStyle.ToString());
            }

            if ((State & SwfStyleState.HasNewStyles) != 0)
            {
                Styles.Dump(writer, shapeType);
            }
        }
Exemple #7
0
        public override void Read(SwfReader reader, SwfTagCode shapeType)
        {
            if ((State & SwfStyleState.HasMoveTo) != 0)
            {
                int bits = (int)reader.ReadUB(5);
                DeltaX = reader.ReadTwip(bits);
                DeltaY = reader.ReadTwip(bits);
                _bits  = bits;
                _read  = true;
            }

            if ((State & SwfStyleState.HasFillStyle0) != 0)
            {
                FillStyle0 = reader.ReadFillStyle();
            }

            if ((State & SwfStyleState.HasFillStyle1) != 0)
            {
                FillStyle1 = reader.ReadFillStyle();
            }

            if ((State & SwfStyleState.HasLineStyle) != 0)
            {
                LineStyle = reader.ReadLineStyle();
            }

            if ((State & SwfStyleState.HasNewStyles) != 0)
            {
                Styles = new SwfStyles();
                Styles.Read(reader, shapeType);
            }
        }
Exemple #8
0
 public void Dump(XmlWriter writer, SwfTagCode shapeType)
 {
     writer.WriteStartElement("fill-style");
     writer.WriteAttributeString("kind", Kind.ToString());
     DumpBody(writer, shapeType);
     writer.WriteEndElement();
 }
Exemple #9
0
        public static SwfFillStyle Create(SwfReader reader, SwfTagCode shapeType)
        {
            var kind = (SwfFillKind)reader.ReadUInt8();
            var fs   = Create(kind);

            fs.Read(reader, shapeType);
            return(fs);
        }
Exemple #10
0
 protected override void WriteBody(SwfWriter writer, SwfTagCode shapeType)
 {
     writer.WriteUInt16(BitmapId);
     writer.WriteMatrix(Matrix);
     if (SwfShape.IsMorph(shapeType))
     {
         writer.WriteMatrix(EndMatrix);
     }
 }
Exemple #11
0
 public override void Read(SwfReader reader, SwfTagCode shapeType)
 {
     BitmapId = reader.ReadUInt16();
     Matrix   = reader.ReadMatrix();
     if (SwfShape.IsMorph(shapeType))
     {
         EndMatrix = reader.ReadMatrix();
     }
 }
Exemple #12
0
 protected override void DumpBody(XmlWriter writer, SwfTagCode shapeType)
 {
     writer.WriteElementString("matrix", Matrix.GetMatrixString());
     if (SwfShape.IsMorph(shapeType))
     {
         writer.WriteElementString("end-matrix", EndMatrix.GetMatrixString());
     }
     Gradient.Dump(writer, shapeType);
 }
Exemple #13
0
 public void Dump(XmlWriter writer, SwfTagCode shapeType)
 {
     writer.WriteStartElement("styles");
     writer.WriteAttributeString("fill-bits", _fillBits.ToString());
     writer.WriteAttributeString("line-bits", _lineBits.ToString());
     _fillStyles.Dump(writer, shapeType);
     _lineStyles.Dump(writer, shapeType);
     writer.WriteEndElement();
 }
Exemple #14
0
 protected override void DumpBody(XmlWriter writer, SwfTagCode shapeType)
 {
     writer.WriteElementString("bmp-id", BitmapId.ToString());
     writer.WriteElementString("matrix", Matrix.GetMatrixString());
     if (SwfShape.IsMorph(shapeType))
     {
         writer.WriteElementString("end-matrix", EndMatrix.GetMatrixString());
     }
 }
Exemple #15
0
        public void Write(SwfWriter writer, SwfTagCode shapeType)
        {
            writer.WriteTwipU16(Width);
            if (shapeType == SwfTagCode.DefineMorphShape)
            {
                writer.WriteTwipU16(EndWidth);
                writer.WriteRGBA(Color);
                writer.WriteRGBA(EndColor);
            }
            else if (shapeType == SwfTagCode.DefineShape4 || shapeType == SwfTagCode.DefineMorphShape2)
            {
                bool isMorph = shapeType == SwfTagCode.DefineMorphShape2;
                if (isMorph)
                {
                    writer.WriteTwipU16(EndWidth);
                }

                writer.WriteUB((uint)StartCapStyle, 2);
                writer.WriteUB((uint)JoinStyle, 2);

                writer.WriteBit(Fill != null); //hasFill
                writer.WriteBit((Flags & SwfLineFlags.NoHScale) != 0);
                writer.WriteBit((Flags & SwfLineFlags.NoVScale) != 0);
                writer.WriteBit((Flags & SwfLineFlags.PixelHinting) != 0);
                writer.WriteUB(0, 5); //reserved
                writer.WriteBit((Flags & SwfLineFlags.NoClose) != 0);

                writer.WriteUB((uint)EndCapStyle, 2);

                if (JoinStyle == SwfJoinStyle.Miter)
                {
                    writer.WriteFixed16(MiterLimit);
                }

                if (Fill != null)
                {
                    Fill.Write(writer, shapeType);
                }
                else
                {
                    writer.WriteRGBA(Color);
                    if (isMorph)
                    {
                        writer.WriteRGBA(EndColor);
                    }
                }
            }
            else if (shapeType == SwfTagCode.DefineShape3)
            {
                writer.WriteRGBA(Color);
            }
            else
            {
                writer.WriteRGB(Color);
            }
        }
Exemple #16
0
        public override void Read(SwfReader reader, SwfTagCode shapeType)
        {
            bool hasAlpha = SwfShape.HasAlpha(shapeType);

            Color = hasAlpha ? reader.ReadRGBA() : reader.ReadRGB();
            if (SwfShape.IsMorph(shapeType))
            {
                EndColor = reader.ReadRGBA();
            }
        }
Exemple #17
0
 internal static bool IsMorph(SwfTagCode shapeType)
 {
     switch (shapeType)
     {
     case SwfTagCode.DefineMorphShape:
     case SwfTagCode.DefineMorphShape2:
         return(true);
     }
     return(false);
 }
Exemple #18
0
 public void Read(SwfReader reader, SwfTagCode shapeType)
 {
     reader.Align();
     _fillStyles.Read(reader, shapeType);
     _lineStyles.Read(reader, shapeType);
     _fillBits     = (int)reader.ReadUB(4);
     _lineBits     = (int)reader.ReadUB(4);
     _read         = true;
     reader.Styles = this;
 }
Exemple #19
0
        /// <summary>
        /// Returns minimum SWF version where tag with specified code was defined.
        /// </summary>
        /// <param name="code">tag code</param>
        /// <returns></returns>
        public static int GetTagVersion(SwfTagCode code)
        {
            if (_mapver == null)
            {
                _mapver = EnumReflector.GetAttributeMap <SwfTagCode, int, SwfVersionAttribute>(attr => attr.Version);
            }
            int result;

            return(_mapver.TryGetValue(code, out result) ? result : -1);
        }
Exemple #20
0
        public static SwfTagCategory GetTagCategory(SwfTagCode code)
        {
            if (_mapcat == null)
            {
                _mapcat = EnumReflector.GetAttributeMap <SwfTagCode, SwfTagCategory, SwfTagCategoryAttribute>(attr => attr.Category);
            }
            SwfTagCategory result;

            return(_mapcat.TryGetValue(code, out result) ? result : SwfTagCategory.Unknown);
        }
Exemple #21
0
        public void Write(SwfWriter writer, SwfTagCode tagCode)
        {
            int n = Count;

            for (int i = 0; i < n; ++i)
            {
                this[i].Write(writer, tagCode);
            }
            writer.WriteUInt8(0);
        }
Exemple #22
0
        public void Write(SwfWriter writer, SwfTagCode shapeType)
        {
            int n = Count;

            for (int i = 0; i < n; ++i)
            {
                var r = this[i];
                r.Write(writer, shapeType);
            }
            writer.WriteUB(0, 6); //EndShapeRecord
        }
Exemple #23
0
        public override void Read(SwfReader reader, SwfTagCode shapeType)
        {
            int bits = (int)reader.ReadUB(4) + 2;

            ControlDeltaX = reader.ReadTwip(bits);
            ControlDeltaY = reader.ReadTwip(bits);
            AnchorDeltaX  = reader.ReadTwip(bits);
            AnchorDeltaY  = reader.ReadTwip(bits);
            _bits         = bits;
            _read         = true;
        }
Exemple #24
0
        public void Dump(XmlWriter writer, SwfTagCode shapeType)
        {
            writer.WriteStartElement("line-styles");
            int n = Count;

            writer.WriteAttributeString("count", n.ToString());
            for (int i = 0; i < n; ++i)
            {
                this[i].Dump(writer, shapeType);
            }
            writer.WriteEndElement();
        }
Exemple #25
0
 public static bool IsShape(SwfTagCode code)
 {
     switch (code)
     {
     case SwfTagCode.DefineShape:
     case SwfTagCode.DefineShape2:
     case SwfTagCode.DefineShape3:
     case SwfTagCode.DefineShape4:
         return(true);
     }
     return(false);
 }
Exemple #26
0
        public void Dump(XmlWriter writer, SwfTagCode tagCode)
        {
            writer.WriteStartElement("buttons");
            int n = Count;

            writer.WriteAttributeString("count", n.ToString());
            for (int i = 0; i < n; ++i)
            {
                this[i].Dump(writer, tagCode);
            }
            writer.WriteEndElement();
        }
Exemple #27
0
 protected override void WriteBody(SwfWriter writer, SwfTagCode shapeType)
 {
     if (_kind != SwfFillKind.FocalGradient)
     {
         writer.WriteMatrix(Matrix);
         if (SwfShape.IsMorph(shapeType))
         {
             writer.WriteMatrix(EndMatrix);
         }
     }
     Gradient.Write(writer, shapeType);
 }
Exemple #28
0
        private static SwfTag DecodeTag(SwfReader reader, int length, SwfTagCode tagCode)
        {
            if (length == 0)
            {
                return(new SwfTagEmpty(tagCode));
            }

            var opts    = reader.TagDecodeOptions;
            var tagData = reader.ReadUInt8(length);

            if (tagCode == SwfTagCode.DefineSprite &&
                (opts & SwfTagDecodeOptions.DonotDecodeSprites) == 0)
            {
                var sprite = new SwfSprite();
                sprite.ReadTagData(tagData, reader);
                return(sprite);
            }

            if ((opts & SwfTagDecodeOptions.DonotDecodeTags) != 0)
            {
                return(new SwfTagAny(tagCode, tagData));
            }

            bool isChar = SwfTag.IsCharacter(tagCode);

            if (isChar && (opts & SwfTagDecodeOptions.DonotDecodeCharacters) != 0)
            {
                return(ReadChar(reader, tagCode, tagData));
            }

            bool isImage = SwfTag.IsImage(tagCode);

            if (isImage && (opts & SwfTagDecodeOptions.DonotDecodeImages) != 0)
            {
                return(ReadChar(reader, tagCode, tagData));
            }

            var tag = SwfTagFactory.Create(tagCode);

            if (tag != null)
            {
                tag.ReadTagData(tagData, reader);
                return(tag);
            }

            if (isChar)
            {
                return(ReadChar(reader, tagCode, tagData));
            }

            return(new SwfTagAny(tagCode, tagData));
        }
Exemple #29
0
 public static bool IsImage(SwfTagCode code)
 {
     switch (code)
     {
     case SwfTagCode.DefineBitsJPEG:
     case SwfTagCode.DefineBitsJPEG2:
     case SwfTagCode.DefineBitsJPEG3:
     case SwfTagCode.DefineBitsLossless:
     case SwfTagCode.DefineBitsLossless2:
         return(true);
     }
     return(false);
 }
Exemple #30
0
 protected override void DumpBody(XmlWriter writer, SwfTagCode shapeType)
 {
     if (SwfShape.IsMorph(shapeType))
     {
         writer.WriteAttributeString("begin-color", Color.ToHtmlHex());
         writer.WriteAttributeString("end-color", EndColor.ToHtmlHex());
     }
     else
     {
         bool hasAlpha = SwfShape.HasAlpha(shapeType);
         writer.WriteAttributeString("color", Color.ToHtmlHex(hasAlpha));
     }
 }