Пример #1
0
        public StraightEdgeRecord(SwfReader r)
        {
            this.DeltaX = 0;
            this.DeltaY = 0;

            uint nbits = r.GetBits(4) + 2;
            bool isGeneralLine = r.GetBit(); // not vertical or horizontal
            if (isGeneralLine)
            {
                DeltaX = r.GetSignedNBits(nbits);
                DeltaY = r.GetSignedNBits(nbits);
            }
            else
            {
                bool isHorz = r.GetBit();
                if (isHorz)
                {
                    DeltaY = r.GetSignedNBits(nbits);
                }
                else
                {
                    DeltaX = r.GetSignedNBits(nbits);
                }
            }
        }
Пример #2
0
        public StraightEdgeRecord(SwfReader r)
        {
            this.DeltaX = 0;
            this.DeltaY = 0;

            uint nbits         = r.GetBits(4) + 2;
            bool isGeneralLine = r.GetBit();             // not vertical or horizontal

            if (isGeneralLine)
            {
                DeltaX = r.GetSignedNBits(nbits);
                DeltaY = r.GetSignedNBits(nbits);
            }
            else
            {
                bool isHorz = r.GetBit();
                if (isHorz)
                {
                    DeltaY = r.GetSignedNBits(nbits);
                }
                else
                {
                    DeltaX = r.GetSignedNBits(nbits);
                }
            }
        }
Пример #3
0
        public CurvedEdgeRecord(SwfReader r)
        {
            uint nbits = r.GetBits(4) + 2;

            this.ControlX = r.GetSignedNBits(nbits);
            this.ControlY = r.GetSignedNBits(nbits);
            this.AnchorX = r.GetSignedNBits(nbits);
            this.AnchorY = r.GetSignedNBits(nbits);
        }
Пример #4
0
 public Rect(SwfReader r)
 {
     byte minBits = (byte)r.GetBits(5);
     XMin = r.GetSignedNBits(minBits);
     XMax = r.GetSignedNBits(minBits);
     YMin = r.GetSignedNBits(minBits);
     YMax = r.GetSignedNBits(minBits);
     r.Align();
 }
Пример #5
0
        public CurvedEdgeRecord(SwfReader r)
        {
            uint nbits = r.GetBits(4) + 2;

            this.ControlX = r.GetSignedNBits(nbits);
            this.ControlY = r.GetSignedNBits(nbits);
            this.AnchorX  = r.GetSignedNBits(nbits);
            this.AnchorY  = r.GetSignedNBits(nbits);
        }
Пример #6
0
        public Rect(SwfReader r)
        {
            byte minBits = (byte)r.GetBits(5);

            XMin = r.GetSignedNBits(minBits);
            XMax = r.GetSignedNBits(minBits);
            YMin = r.GetSignedNBits(minBits);
            YMax = r.GetSignedNBits(minBits);
            r.Align();
        }
Пример #7
0
        public Matrix(SwfReader r)
        {
            float sx = 1.0F;
            float sy = 1.0F;
            float r0 = 0.0F;
            float r1 = 0.0F;
            float tx = 0.0F;
            float ty = 0.0F;

            r.Align();
            bool hasScale = r.GetBit();

            if (hasScale)
            {
                uint scaleBits = r.GetBits(5);
                sx = r.GetFixedNBits(scaleBits);
                sy = r.GetFixedNBits(scaleBits);
            }
            bool hasRotate = r.GetBit();

            if (hasRotate)
            {
                uint nRotateBits = r.GetBits(5);
                r0 = r.GetFixedNBits(nRotateBits);
                r1 = r.GetFixedNBits(nRotateBits);
            }
            // always has translation
            uint nTranslateBits = r.GetBits(5);

            tx = r.GetSignedNBits(nTranslateBits);
            ty = r.GetSignedNBits(nTranslateBits);
            r.Align();

            this.ScaleX     = sx;
            this.Rotate0    = r0;
            this.Rotate1    = r1;
            this.ScaleY     = sy;
            this.TranslateX = tx;
            this.TranslateY = ty;
        }
Пример #8
0
        public GlyphEntry[] GlyphEntries;               // GLYPHENTRY[GlyphCount]

        public TextRecord(SwfReader r, uint glyphBits, uint advanceBits, bool hasAlpha)
        {
            TextRecordType       = r.GetBit();
            StyleFlagsReserved   = r.GetBits(3);
            StyleFlagsHasFont    = r.GetBit();
            StyleFlagsHasColor   = r.GetBit();
            StyleFlagsHasYOffset = r.GetBit();
            StyleFlagsHasXOffset = r.GetBit();

            if (StyleFlagsHasFont)
            {
                FontID = r.GetUI16();
            }
            if (StyleFlagsHasColor)
            {
                TextColor = new RGBA(r.GetByte(), r.GetByte(), r.GetByte());
                if (hasAlpha)
                {
                    TextColor.A = r.GetByte();
                }
            }
            if (StyleFlagsHasXOffset)
            {
                XOffset = r.GetInt16();
            }
            if (StyleFlagsHasYOffset)
            {
                YOffset = r.GetInt16();
            }
            if (StyleFlagsHasFont)
            {
                TextHeight = r.GetUI16();
            }

            GlyphCount   = (uint)r.GetByte();
            GlyphEntries = new GlyphEntry[GlyphCount];
            for (int i = 0; i < GlyphCount; i++)
            {
                uint index   = r.GetBits(glyphBits);
                int  advance = r.GetSignedNBits(advanceBits);
                GlyphEntries[i] = new GlyphEntry(index, advance);
            }
            r.Align();//
        }
Пример #9
0
        private bool TextRecordType; // UB[1]

        #endregion Fields

        #region Constructors

        public TextRecord(SwfReader r,  uint glyphBits, uint advanceBits, bool hasAlpha)
        {
            TextRecordType = r.GetBit();
            StyleFlagsReserved = r.GetBits(3);
            StyleFlagsHasFont = r.GetBit();
            StyleFlagsHasColor = r.GetBit();
            StyleFlagsHasYOffset = r.GetBit();
            StyleFlagsHasXOffset = r.GetBit();

            if(StyleFlagsHasFont)
            {
                FontID = r.GetUI16();
            }
            if(StyleFlagsHasColor)
            {
                TextColor = new RGBA(r.GetByte(), r.GetByte(), r.GetByte());
                if(hasAlpha)
                {
                    TextColor.A = r.GetByte();
                }
            }
            if(StyleFlagsHasXOffset)
            {
                XOffset = r.GetInt16();
            }
            if(StyleFlagsHasYOffset)
            {
                YOffset = r.GetInt16();
            }
            if(StyleFlagsHasFont)
            {
                TextHeight = r.GetUI16();
            }

            GlyphCount = (uint)r.GetByte();
            GlyphEntries = new GlyphEntry[GlyphCount];
            for (int i = 0; i < GlyphCount; i++)
            {
                uint index = r.GetBits(glyphBits);
                int advance = r.GetSignedNBits(advanceBits);
                GlyphEntries[i] = new GlyphEntry(index, advance);
            }
            r.Align();//
        }
Пример #10
0
        public ColorTransform(SwfReader r, bool useAlpha)
        {
            this.HasAddTerms  = r.GetBit();
            this.HasMultTerms = r.GetBit();
            uint nbits = r.GetBits(4);

            if (HasMultTerms)
            {
                RMultTerm = r.GetSignedNBits(nbits);
                GMultTerm = r.GetSignedNBits(nbits);
                BMultTerm = r.GetSignedNBits(nbits);
                AMultTerm = (useAlpha) ? r.GetSignedNBits(nbits) : 0xFF;
            }
            else
            {
                RMultTerm = 0;
                GMultTerm = 0;
                BMultTerm = 0;
                AMultTerm = 0;
            }
            if (HasAddTerms)
            {
                RAddTerm = r.GetSignedNBits(nbits);
                GAddTerm = r.GetSignedNBits(nbits);
                BAddTerm = r.GetSignedNBits(nbits);
                AAddTerm = (useAlpha) ? r.GetSignedNBits(nbits) : 0xFF;
            }
            else
            {
                RAddTerm = 0;
                GAddTerm = 0;
                BAddTerm = 0;
                AAddTerm = 0;
            }
            r.Align();
        }
Пример #11
0
        public ColorTransform(SwfReader r, bool useAlpha)
        {
            this.HasAddTerms = r.GetBit();
            this.HasMultTerms = r.GetBit();
            uint nbits = r.GetBits(4);

            if (HasMultTerms)
            {
                RMultTerm = r.GetSignedNBits(nbits);
                GMultTerm = r.GetSignedNBits(nbits);
                BMultTerm = r.GetSignedNBits(nbits);
                AMultTerm = (useAlpha) ? r.GetSignedNBits(nbits) : 0xFF;
            }
            else
            {
                RMultTerm = 0;
                GMultTerm = 0;
                BMultTerm = 0;
                AMultTerm = 0;
            }
            if (HasAddTerms)
            {
                RAddTerm = r.GetSignedNBits(nbits);
                GAddTerm = r.GetSignedNBits(nbits);
                BAddTerm = r.GetSignedNBits(nbits);
                AAddTerm = (useAlpha) ? r.GetSignedNBits(nbits) : 0xFF;
            }
            else
            {
                RAddTerm = 0;
                GAddTerm = 0;
                BAddTerm = 0;
                AAddTerm = 0;
            }
            r.Align();
        }
Пример #12
0
        public StyleChangedRecord(SwfReader r, uint flags, ref uint fillBits, ref uint lineBits, ShapeType shapeType)
        {
            MoveDeltaX = 0;
            MoveDeltaY = 0;
            FillStyle1 = 0;
            FillStyle0 = 0;
            LineStyle = 0;

            HasNewStyles    = (flags & 0x10) != 0;
            HasLineStyle    = (flags & 0x08) != 0;
            HasFillStyle1   = (flags & 0x04) != 0;
            HasFillStyle0   = (flags & 0x02) != 0;
            HasMove         = (flags & 0x01) != 0;

            if (shapeType == ShapeType.Glyph) // glyphs really should be a different style changed record imo : )
            {
                if (HasMove)
                {
                    uint moveBits = r.GetBits(5);
                    this.MoveDeltaX = r.GetSignedNBits(moveBits);
                    this.MoveDeltaY = r.GetSignedNBits(moveBits);
                }

                if (HasFillStyle0)
                {
                    this.FillStyle0 = r.GetBits(fillBits);
                }
            }
            else
            {
                if (HasMove)
                {
                    uint moveBits = r.GetBits(5);
                    this.MoveDeltaX = r.GetSignedNBits(moveBits);
                    this.MoveDeltaY = r.GetSignedNBits(moveBits);
                }
                if (HasFillStyle0)
                {
                    this.FillStyle0 = r.GetBits(fillBits);
                }

                if (HasFillStyle1)
                {
                    this.FillStyle1 = r.GetBits(fillBits);
                }

                if (HasLineStyle)
                {
                    this.LineStyle = r.GetBits(lineBits);
                }

                //r.Align();

                if (HasNewStyles)
                {
                    FillStyles = new FillStyleArray(r, shapeType);
                    LineStyles = new LineStyleArray(r, shapeType);
                    fillBits = r.GetBits(4);
                    lineBits = r.GetBits(4);
                }
                else
                {
                    FillStyles = new FillStyleArray();
                    LineStyles = new LineStyleArray();
                    HasNewStyles = false;
                }
            }
        }
Пример #13
0
        public StyleChangedRecord(SwfReader r, uint flags, ref uint fillBits, ref uint lineBits, ShapeType shapeType)
        {
            MoveDeltaX = 0;
            MoveDeltaY = 0;
            FillStyle1 = 0;
            FillStyle0 = 0;
            LineStyle  = 0;

            HasNewStyles  = (flags & 0x10) != 0;
            HasLineStyle  = (flags & 0x08) != 0;
            HasFillStyle1 = (flags & 0x04) != 0;
            HasFillStyle0 = (flags & 0x02) != 0;
            HasMove       = (flags & 0x01) != 0;

            if (shapeType == ShapeType.Glyph) // glyphs really should be a different style changed record imo : )
            {
                if (HasMove)
                {
                    uint moveBits = r.GetBits(5);
                    this.MoveDeltaX = r.GetSignedNBits(moveBits);
                    this.MoveDeltaY = r.GetSignedNBits(moveBits);
                }

                if (HasFillStyle0)
                {
                    this.FillStyle0 = r.GetBits(fillBits);
                }
            }
            else
            {
                if (HasMove)
                {
                    uint moveBits = r.GetBits(5);
                    this.MoveDeltaX = r.GetSignedNBits(moveBits);
                    this.MoveDeltaY = r.GetSignedNBits(moveBits);
                }
                if (HasFillStyle0)
                {
                    this.FillStyle0 = r.GetBits(fillBits);
                }

                if (HasFillStyle1)
                {
                    this.FillStyle1 = r.GetBits(fillBits);
                }

                if (HasLineStyle)
                {
                    this.LineStyle = r.GetBits(lineBits);
                }

                //r.Align();

                if (HasNewStyles)
                {
                    FillStyles = new FillStyleArray(r, shapeType);
                    LineStyles = new LineStyleArray(r, shapeType);
                    fillBits   = r.GetBits(4);
                    lineBits   = r.GetBits(4);
                }
                else
                {
                    FillStyles   = new FillStyleArray();
                    LineStyles   = new LineStyleArray();
                    HasNewStyles = false;
                }
            }
        }
Пример #14
0
        public Matrix(SwfReader r)
        {
            float sx = 1.0F;
            float sy = 1.0F;
            float r0 = 0.0F;
            float r1 = 0.0F;
            float tx = 0.0F;
            float ty = 0.0F;
            r.Align();
            bool hasScale = r.GetBit();
            if (hasScale)
            {
                uint scaleBits = r.GetBits(5);
                sx = r.GetFixedNBits(scaleBits);
                sy = r.GetFixedNBits(scaleBits);
            }
            bool hasRotate = r.GetBit();
            if (hasRotate)
            {
                uint nRotateBits = r.GetBits(5);
                r0 = r.GetFixedNBits(nRotateBits);
                r1 = r.GetFixedNBits(nRotateBits);
            }
            // always has translation
            uint nTranslateBits = r.GetBits(5);
            tx = r.GetSignedNBits(nTranslateBits);
            ty = r.GetSignedNBits(nTranslateBits);
            r.Align();

            this.ScaleX = sx;
            this.Rotate0 = r0;
            this.Rotate1 = r1;
            this.ScaleY = sy;
            this.TranslateX = tx;
            this.TranslateY = ty;
        }