Example #1
0
        public static void WriteColorTransformRGB(this ISwfStreamWriter writer, ref ColorTransformRGB tranform)
        {
            var bitsCounter = new SignedBitsCount(0);

            if (tranform.HasAddTerms)
            {
                bitsCounter.AddValue(tranform.RedAddTerm);
                bitsCounter.AddValue(tranform.GreenAddTerm);
                bitsCounter.AddValue(tranform.BlueAddTerm);
            }
            if (tranform.HasMultTerms)
            {
                bitsCounter.AddValue(tranform.RedMultTerm);
                bitsCounter.AddValue(tranform.GreenMultTerm);
                bitsCounter.AddValue(tranform.BlueMultTerm);
            }
            writer.WriteBit(tranform.HasAddTerms);
            writer.WriteBit(tranform.HasMultTerms);
            var bits = bitsCounter.GetBits();

            writer.WriteUnsignedBits(bits, 4);
            if (tranform.HasMultTerms)
            {
                writer.WriteSignedBits(tranform.RedMultTerm, bits);
                writer.WriteSignedBits(tranform.GreenMultTerm, bits);
                writer.WriteSignedBits(tranform.BlueMultTerm, bits);
            }
            if (tranform.HasAddTerms)
            {
                writer.WriteSignedBits(tranform.RedAddTerm, bits);
                writer.WriteSignedBits(tranform.GreenAddTerm, bits);
                writer.WriteSignedBits(tranform.BlueAddTerm, bits);
            }
            writer.FlushBits();
        }
Example #2
0
        SwfTagData ISwfTagVisitor <ISwfStreamWriter, SwfTagData> .Visit(DefineText2Tag tag, ISwfStreamWriter writer)
        {
            writer.WriteUInt16(tag.CharacterID);
            writer.WriteRect(tag.TextBounds);
            writer.WriteMatrix(ref tag.TextMatrix);
            var glyphBitsCounter   = new UnsignedBitsCount(0);
            var advanceBitsCounter = new SignedBitsCount(0);

            foreach (var textRecord in tag.TextRecords)
            {
                foreach (var glyph in textRecord.Glyphs)
                {
                    glyphBitsCounter.AddValue(glyph.GlyphIndex);
                    advanceBitsCounter.AddValue(glyph.GlyphAdvance);
                }
            }
            var glyphBits   = glyphBitsCounter.GetBits();
            var advanceBits = advanceBitsCounter.GetBits();

            writer.WriteByte((byte)glyphBits);
            writer.WriteByte((byte)advanceBits);
            foreach (var textRecord in tag.TextRecords)
            {
                writer.WriteTextRecordRGBA(textRecord, glyphBits, advanceBits);
                writer.FlushBits();
            }
            writer.FlushBits();
            return(null);
        }
Example #3
0
        private static void WriteStyleChangeShapeRecord(ISwfStreamWriter writer, StyleChangeShapeRecord record, ref uint fillStylesBits, ref uint lineStylesBits)
        {
            writer.WriteBit(false);
            var stateNewStyles  = record.StateNewStyles;
            var stateFillStyle0 = record.FillStyle0.HasValue;
            var stateFillStyle1 = record.FillStyle1.HasValue;
            var stateLineStyle  = record.LineStyle.HasValue;
            var stateMoveTo     = record.StateMoveTo;

            writer.WriteBit(stateNewStyles);
            writer.WriteBit(stateLineStyle);
            writer.WriteBit(stateFillStyle1);
            writer.WriteBit(stateFillStyle0);
            writer.WriteBit(stateMoveTo);
            if (stateMoveTo)
            {
                var cnt      = new SignedBitsCount(record.MoveDeltaX, record.MoveDeltaY);
                var moveBits = cnt.GetBits();
                writer.WriteUnsignedBits(moveBits, 5);
                writer.WriteSignedBits(record.MoveDeltaX, moveBits);
                writer.WriteSignedBits(record.MoveDeltaY, moveBits);
            }
            if (stateFillStyle0)
            {
                writer.WriteUnsignedBits(record.FillStyle0.Value, fillStylesBits);
            }
            if (stateFillStyle1)
            {
                writer.WriteUnsignedBits(record.FillStyle1.Value, fillStylesBits);
            }
            if (stateLineStyle)
            {
                writer.WriteUnsignedBits(record.LineStyle.Value, lineStylesBits);
            }
        }
Example #4
0
        ShapeRecordWriteContext IShapeRecordVisitor <ShapeRecordWriteContext, ShapeRecordWriteContext> .Visit(StraightEdgeShapeRecord record, ShapeRecordWriteContext ctx)
        {
            var writer = ctx.Writer;

            writer.WriteBit(true);
            writer.WriteBit(true);
            var actualBits = new SignedBitsCount(record.DeltaX, record.DeltaY).GetBits();

            if (actualBits < 2)
            {
                actualBits = 2;
            }
            writer.WriteUnsignedBits(actualBits - 2u, 4);
            bool genLineFlags = record.DeltaX != 0 && record.DeltaY != 0;

            writer.WriteBit(genLineFlags);
            bool vertFlag = record.DeltaX == 0;

            if (!genLineFlags)
            {
                writer.WriteBit(vertFlag);
            }
            if (genLineFlags || !vertFlag)
            {
                writer.WriteSignedBits(record.DeltaX, actualBits);
            }
            if (genLineFlags || vertFlag)
            {
                writer.WriteSignedBits(record.DeltaY, actualBits);
            }
            return(ctx);
        }
Example #5
0
        public void GetBitsPositiveTest()
        {
            var bits = new SignedBitsCount(0);

            bits.AddValue(127);
            bits.AddValue(260);
            bits.AddValue(15);
            bits.AddValue(514);
            Assert.AreEqual(11, bits.GetBits());
        }
Example #6
0
        public void WriteNegativeFixedPoint16FromBitsTest()
        {
            var mem    = new MemoryStream();
            var writer = new SwfStreamWriter(mem);
            var bits   = new SignedBitsCount(-81920).GetBits();

            writer.WriteFixedPoint16(-1.25, bits);
            writer.FlushBits();
            mem.Seek(0, SeekOrigin.Begin);
            var reader = new SwfStreamReader(mem);
            int actual = reader.ReadSignedBits(bits);

            Assert.AreEqual(-81920, actual);
        }
Example #7
0
        public void ReadNegativeFixedPoint16FromBitsTest()
        {
            var       mem    = new MemoryStream();
            var       writer = new SwfStreamWriter(mem);
            const int val    = -81920;
            var       bits   = new SignedBitsCount(val).GetBits();

            writer.WriteSignedBits(val, bits);
            writer.FlushBits();
            mem.Seek(0, SeekOrigin.Begin);
            var    reader = new SwfStreamReader(mem);
            double actual = reader.ReadFixedPoint16(bits);

            Assert.AreEqual(-1.25, actual);
        }
Example #8
0
        /// <summary>
        /// Writes rectangle to the writer.
        /// </summary>
        /// <param name="writer">Writer to which to write rectangle.</param>
        /// <param name="rect">Rectangle to be written.</param>
        public static void WriteRect(this ISwfStreamWriter writer, ref SwfRect rect)
        {
            var btCount = new SignedBitsCount(rect.XMin, rect.XMax, rect.YMin, rect.YMax);
            var bits    = btCount.GetBits();

            if (bits < 1)
            {
                bits = 1;
            }
            writer.WriteUnsignedBits(bits, 5);
            writer.WriteSignedBits(rect.XMin, bits);
            writer.WriteSignedBits(rect.XMax, bits);
            writer.WriteSignedBits(rect.YMin, bits);
            writer.WriteSignedBits(rect.YMax, bits);
            writer.FlushBits();
        }
Example #9
0
        public void WriteFixedPoint16FromBitsTest()
        {
            var          mem      = new MemoryStream();
            var          writer   = new SwfStreamWriter(mem);
            const int    val      = 0x03aa4523;
            const ushort hi       = val >> 16;
            const ushort low      = val & 0xffff;
            const double expected = hi + low / 65536.0;
            var          bits     = new SignedBitsCount(hi).GetBits() + 16;

            writer.WriteFixedPoint16(expected, bits);
            writer.FlushBits();
            mem.Seek(0, SeekOrigin.Begin);
            var    reader = new SwfStreamReader(mem);
            double actual = reader.ReadFixedPoint16(bits);

            Assert.AreEqual(expected, actual);
        }
Example #10
0
        ShapeRecordWriteContext IShapeRecordVisitor <ShapeRecordWriteContext, ShapeRecordWriteContext> .Visit(CurvedEdgeShapeRecord record, ShapeRecordWriteContext ctx)
        {
            var writer = ctx.Writer;

            writer.WriteBit(true);
            writer.WriteBit(false);
            var actualBits = new SignedBitsCount(record.ControlDeltaX, record.ControlDeltaY, record.AnchorDeltaX, record.AnchorDeltaY).GetBits();

            if (actualBits < 2)
            {
                actualBits = 2;
            }
            writer.WriteUnsignedBits(actualBits - 2u, 4);
            writer.WriteSignedBits(record.ControlDeltaX, actualBits);
            writer.WriteSignedBits(record.ControlDeltaY, actualBits);
            writer.WriteSignedBits(record.AnchorDeltaX, actualBits);
            writer.WriteSignedBits(record.AnchorDeltaY, actualBits);
            return(ctx);
        }
Example #11
0
        public static void WriteMatrix(this ISwfStreamWriter writer, ref SwfMatrix matrix)
        {
            var hasScale = matrix.HasScale;

            writer.WriteBit(hasScale);
            if (hasScale)
            {
                var sx        = (int)(matrix.ScaleX * 65536.0);
                var sy        = (int)(matrix.ScaleY * 65536.0);
                var scaleBits = new SignedBitsCount(sx, sy).GetBits();
                if (scaleBits < 1)
                {
                    scaleBits = 1;
                }
                writer.WriteUnsignedBits(scaleBits, 5);
                writer.WriteFixedPoint16(matrix.ScaleX, scaleBits);
                writer.WriteFixedPoint16(matrix.ScaleY, scaleBits);
            }
            var hasRotate = matrix.HasRotate;

            writer.WriteBit(hasRotate);
            if (hasRotate)
            {
                var rx         = (int)(matrix.RotateSkew0 * 65536.0);
                var ry         = (int)(matrix.RotateSkew1 * 65536.0);
                var rotateBits = new SignedBitsCount(rx, ry).GetBits();
                if (rotateBits < 1)
                {
                    rotateBits = 1;
                }
                writer.WriteUnsignedBits(rotateBits, 5);
                writer.WriteFixedPoint16(matrix.RotateSkew0, rotateBits);
                writer.WriteFixedPoint16(matrix.RotateSkew1, rotateBits);
            }
            var translateBits = new SignedBitsCount(matrix.TranslateX, matrix.TranslateY).GetBits();

            writer.WriteUnsignedBits(translateBits, 5);
            writer.WriteSignedBits(matrix.TranslateX, translateBits);
            writer.WriteSignedBits(matrix.TranslateY, translateBits);
            writer.FlushBits();
        }
Example #12
0
        public void GetBitsNegativeTwoTest()
        {
            var bits = new SignedBitsCount(-2);

            Assert.AreEqual(2, bits.GetBits());
        }
Example #13
0
        public void GetBitsNegativeOneTest()
        {
            var bits = new SignedBitsCount(-1);

            Assert.AreEqual(1, bits.GetBits());
        }
Example #14
0
        public void GetBitsPositiveOneTest()
        {
            var bits = new SignedBitsCount(1);

            Assert.AreEqual(2, bits.GetBits());
        }
Example #15
0
        public void GetBitsZeroTest()
        {
            var bits = new SignedBitsCount(0);

            Assert.AreEqual(1, bits.GetBits());
        }