The GLYPHENTRY structure describes a single character in a line of text. It is composed of

an index into the current font’s glyph table, and an advance value. The advance value is the

horizontal distance between the reference point of this character and the reference point of the

following character.

상속: AbstractSwfElement
예제 #1
0
        /// <summary>
        /// Parses this object out of a stream
        /// </summary>
        public void Parse(Stream input, TagTypes caller, byte glyphBits, byte advancedBits, byte firstByte)
        {
            this._textRecordType = GetBit(firstByte, 0);
            bool reserved1 = GetBit(firstByte, 1);
            bool reserved2 = GetBit(firstByte, 2);
            bool reserved3 = GetBit(firstByte, 3);
            this._StyleFlagsHasFont = GetBit(firstByte, 4);
            this._StyleFlagsHasColor = GetBit(firstByte, 5);
            this._StyleFlagsHasYOffset = GetBit(firstByte, 6);
            this._StyleFlagsHasXOffset = GetBit(firstByte, 7);

            if (!this._textRecordType || (reserved1 || reserved2 || reserved3))
            {
                SwfFormatException e = new SwfFormatException("The first four bits have to have the static values {1,0,0,0} but set different.");
               Log.Error(this, e.Message);
                throw e;
            }

            BinaryReader br = new BinaryReader(input);

            if (this._StyleFlagsHasFont)
            {
                this._fontID = br.ReadUInt16();
            }

            if (this._StyleFlagsHasColor)
            {
                if (caller.Equals(TagTypes.DefineFont2) || caller.Equals(TagTypes.DefineText2))
                {
                    this._textColor = new Rgba(this._SwfVersion);
                    this._textColor.Parse(input);
                }
                else
                {
                    this._textColor.Parse(input);
                }
            }
            if (this._StyleFlagsHasXOffset)
            {
                this._xOffset = br.ReadInt16();
            }
            if (this._StyleFlagsHasYOffset)
            {
                this._yOffset = br.ReadInt16();
            }
            if (this._StyleFlagsHasFont)
            {
                this._textHeight = br.ReadUInt16();
            }

            this._glyphCount = br.ReadByte();

            BitStream bits = new BitStream(input);

            GlyphEntry tempGlyph = null;

            for (int i = 0; i < this._glyphCount; i++)
            {
                tempGlyph = new GlyphEntry(this._SwfVersion);
                tempGlyph.Parse(bits, glyphBits, advancedBits);
                this._glyphEntries.Add(tempGlyph);
            }
        }