Пример #1
0
 internal SerialNumberTag(SwfReader r)
     : base(TagType.SerialNumber)
 {
     Product         = r.GetInt32();
     Edition         = r.GetInt32();
     MajorVersion    = r.GetByte();
     MinorVersion    = r.GetByte();
     Build           = r.GetInt64();
     CompilationDate = r.GetInt64();
 }
Пример #2
0
        internal DefineFunction2(SwfReader r, ConstantPool cp)
        {
            this.cp      = cp;
            FunctionName = r.GetString();
            uint paramCount = r.GetUI16();

            RegisterCount = (uint)r.GetByte();

            Preloads = PreloadFlags.Empty;
            if (r.GetBit())
            {
                Preloads |= PreloadFlags.Parent;
            }
            if (r.GetBit())
            {
                Preloads |= PreloadFlags.Root;
            }

            SuppressSuperFlag = r.GetBit();

            if (r.GetBit())
            {
                Preloads |= PreloadFlags.Super;
            }

            SuppressArgumentsFlag = r.GetBit();

            if (r.GetBit())
            {
                Preloads |= PreloadFlags.Arguments;
            }

            SuppressThisFlag = r.GetBit();

            if (r.GetBit())
            {
                Preloads |= PreloadFlags.This;
            }

            r.GetBits(7);             // reserved

            if (r.GetBit())
            {
                Preloads |= PreloadFlags.Global;
            }

            for (int i = 0; i < paramCount; i++)
            {
                uint   reg  = r.GetByte();
                string name = r.GetString();
                Parameters.Add(reg, name);
            }
            ActionContainer.CodeSize = r.GetUI16();
        }
Пример #3
0
        internal DefineEditTextTag(SwfReader r)
            : base(TagType.DefineEditText)
        {
            CharacterID = r.GetUI16();
            Bounds      = new Rect(r);

            HasText      = r.GetBit();
            WordWrap     = r.GetBit();
            Multiline    = r.GetBit();
            Password     = r.GetBit();
            ReadOnly     = r.GetBit();
            HasTextColor = r.GetBit();
            HasMaxLength = r.GetBit();
            HasFont      = r.GetBit();
            r.GetBit();            // resreved
            AutoSize  = r.GetBit();
            HasLayout = r.GetBit();
            NoSelect  = r.GetBit();
            Border    = r.GetBit();
            r.GetBit();            // resreved
            HTML        = r.GetBit();
            UseOutlines = r.GetBit();

            if (HasFont)
            {
                FontID     = r.GetUI16();
                FontHeight = r.GetUI16();
            }
            if (HasTextColor)
            {
                TextColor = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte());
            }
            if (HasMaxLength)
            {
                MaxLength = r.GetUI16();
            }
            if (HasLayout)
            {
                Align       = (uint)r.GetByte();
                LeftMargin  = r.GetUI16();
                RightMargin = r.GetUI16();
                Indent      = r.GetUI16();
                Leading     = r.GetInt16();
            }
            VariableName = r.GetString();
            if (HasText)
            {
                InitialText = r.GetString();
            }
        }
Пример #4
0
        internal FilterGlow(SwfReader r)
        {
            GlowColor = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte());

            BlurX    = r.GetFixed16_16();
            BlurY    = r.GetFixed16_16();
            Strength = r.GetFixed8_8();

            InnerGlow       = r.GetBit();
            Knockout        = r.GetBit();
            CompositeSource = r.GetBit();
            Passes          = r.GetBits(5);

            r.Align();
        }
Пример #5
0
        internal DefineButton(SwfReader r)
            : base(TagType.DefineButton)
        {
            ButtonId = r.GetByte();
            while (r.PeekByte() != 0)
            {
                Characters.Add(new ButtonRecord(r, TagType.DefineButton));
            }
            r.GetByte();// 0, end ButtonRecords

            uint start = r.Position;

            ActionRecords          = new ActionRecords(r, int.MaxValue);
            ActionRecords.CodeSize = r.Position - start;
        }
Пример #6
0
        internal FilterDropShadow(SwfReader r)
        {
            DropShadowColor = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte());

            BlurX    = r.GetFixed16_16();
            BlurY    = r.GetFixed16_16();
            Angle    = r.GetFixed16_16();
            Distance = r.GetFixed16_16();
            Strength = r.GetFixed8_8();

            InnerShadow     = r.GetBit();
            Knockout        = r.GetBit();
            CompositeSource = r.GetBit();
            Passes          = (uint)r.GetBits(5);

            r.Align();
        }
Пример #7
0
 internal GradientRecord(SwfReader r, bool useAlpha)
 {
     Ratio = r.GetByte();
     if (useAlpha)
     {
         Color = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte());
     }
     else
     {
         Color = new RGBA(r.GetByte(), r.GetByte(), r.GetByte());
     }
 }
Пример #8
0
        internal DefineTextTag(SwfReader r, bool useAlpha)
            : base(TagType.DefineText)
        {
            if (useAlpha)
            {
                tagType = TagType.DefineText2;
            }
            CharacterId = r.GetUI16();
            TextBounds  = new Rect(r);
            TextMatrix  = new Matrix(r);
            glyphBits   = (uint)r.GetByte();
            advanceBits = (uint)r.GetByte();

            while (r.PeekByte() != 0x00)
            {
                TextRecords.Add(new TextRecord(r, glyphBits, advanceBits, useAlpha));
            }
            byte end = r.GetByte();
        }
Пример #9
0
        internal FilterGradientBevel(SwfReader r)
        {
            NumColors      = (uint)r.GetByte();
            GradientColors = new RGBA[NumColors];
            for (int i = 0; i < NumColors; i++)
            {
                GradientColors[i] = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte());
            }

            GradientRatio = new uint[NumColors];
            for (int i = 0; i < NumColors; i++)
            {
                GradientRatio[i] = (uint)r.GetByte();
            }

            BlurX    = r.GetFixed16_16();
            BlurY    = r.GetFixed16_16();
            Angle    = r.GetFixed16_16();
            Distance = r.GetFixed16_16();
            Strength = r.GetFixed8_8();

            InnerShadow     = r.GetBit();
            Knockout        = r.GetBit();
            CompositeSource = r.GetBit();
            OnTop           = r.GetBit();
            Passes          = r.GetBits(4);

            r.Align();
        }
Пример #10
0
        internal LineStyle2(SwfReader r, ShapeType shapeType)
        {
            this.Width            = r.GetUI16();
            this.StartCapStyle    = (CapStyle)r.GetBits(2);
            this.JoinStyle        = (JoinStyle)r.GetBits(2);
            this.HasFillFlag      = r.GetBit();
            this.NoHScaleFlag     = r.GetBit();
            this.NoVScaleFlag     = r.GetBit();
            this.PixelHintingFlag = r.GetBit();
            r.GetBits(5);             // skip
            this.NoClose     = r.GetBit();
            this.EndCapStyle = (CapStyle)r.GetBits(2);

            if (this.JoinStyle == JoinStyle.MiterJoin)
            {
                this.MiterLimitFactor = (float)((r.GetByte() / 0x100) + r.GetByte());
            }

            if (this.HasFillFlag)
            {
                this.FillStyle = FillStyleArray.ParseFillStyle2(r, shapeType);
            }
            else
            {
                this.Color = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte());
            }
        }
Пример #11
0
 internal SolidFill(SwfReader r, bool useAlpha)
 {
     if (useAlpha)
     {
         this.Color = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte());
     }
     else
     {
         this.Color = new RGBA(r.GetByte(), r.GetByte(), r.GetByte());
     }
 }
Пример #12
0
        internal PrimitiveDouble(SwfReader r)
        {
            byte[] bytes = new byte[8];
            bytes[4] = r.GetByte();
            bytes[5] = r.GetByte();
            bytes[6] = r.GetByte();
            bytes[7] = r.GetByte();

            bytes[0] = r.GetByte();
            bytes[1] = r.GetByte();
            bytes[2] = r.GetByte();
            bytes[3] = r.GetByte();

            DoubleValue = BitConverter.ToDouble(bytes, 0);
        }
Пример #13
0
 internal LineStyle(SwfReader r, bool useAlpha)
 {
     this.Width = r.GetUI16();
     if (useAlpha)
     {
         this.Color = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte());
     }
     else
     {
         this.Color = new RGBA(r.GetByte(), r.GetByte(), r.GetByte());
     }
 }
Пример #14
0
        internal FillStyleArray(SwfReader r, ShapeType shapeType)
        {
            int fillCount = (int)r.GetByte();

            if (fillCount == 0xFF)
            {
                fillCount = (int)r.GetUI16();
            }

            for (int i = 0; i < fillCount; i++)
            {
                FillStyles.Add(ParseFillStyle2(r, shapeType));
            }
        }
Пример #15
0
        internal CSMTextSettingsTag(SwfReader r)
            : base(TagType.CSMTextSettings)
        {
            TextId       = r.GetUI16();
            UseFlashType = r.GetBits(2);
            GridFit      = r.GetBits(3);
            r.GetBits(3);             // reserved
            r.Align();

            Thickness = r.GetFixedNBits(32);
            Sharpness = r.GetFixedNBits(32);

            r.GetByte();             // reserved
        }
Пример #16
0
        internal LineStyleArray(SwfReader r, ShapeType shapeType)
        {
            int lineCount = (int)r.GetByte();

            if (lineCount == 0xFF)
            {
                lineCount = (int)r.GetUI16();
            }

            for (int i = 0; i < lineCount; i++)
            {
                ParseLineStyle(r, shapeType);
            }
        }
Пример #17
0
 internal SwfHeader(SwfReader r)
 {
     this.CompressionMode  = CompressionType.Error;
     this.CompressionRatio = 0;
     //byte[] __signature = r.GetBytes(3);
     this.Signature = r.GetString(3);
     //Signature = r.GetString(3);
     if (Signature == "CWS")
     {
         this.CompressionMode = CompressionType.ZLIB;
         uint __oldSize = r.Size;
         r.DecompressCWSSwf();
         uint __newSize = r.Size;
         this.CompressionRatio = ((double)__oldSize / (double)__newSize) * 100;
     }
     else if (Signature == "ZWS")
     {
         this.CompressionMode = CompressionType.LZMA;
         //r.DecompressZWSSwf
         uint __oldSize = r.Size;
         r.DecompressCWSSwf();
         uint __newSize = r.Size;
         this.CompressionRatio = (double)__oldSize / (double)__newSize;
     }
     else if (Signature == "FWS")
     {
         this.CompressionMode = CompressionType.None;
     }
     if (this.CompressionMode != CompressionType.Error)
     {
         this.Version    = r.GetByte();
         this.FileLength = r.GetUI32();
         this.FrameSize  = new Rect(r);
         UInt16 __frate = r.GetUI16();
         this.FrameRate  = (__frate >> 8) + ((__frate & 0xFF) / 0xFF);
         this.FrameCount = r.GetUI16();
     }
     else
     {
         this.Version    = 0;
         this.FileLength = 0;
         this.FrameSize  = new Rect(0, 0, 0, 0);
         this.FrameRate  = 0;
         this.FrameCount = 0;
     }
 }
Пример #18
0
        internal FilterBevel(SwfReader r)
        {
            ShadowColor    = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte());
            HighlightColor = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte());

            BlurX    = r.GetFixed16_16();
            BlurY    = r.GetFixed16_16();
            Angle    = r.GetFixed16_16();
            Distance = r.GetFixed16_16();
            Strength = r.GetFixed8_8();

            InnerShadow     = r.GetBit();
            Knockout        = r.GetBit();
            CompositeSource = r.GetBit();
            OnTop           = r.GetBit();
            Passes          = r.GetBits(4);

            r.Align();
        }
Пример #19
0
        internal ClipActionRecord(SwfReader r, bool isSwf6Plus)
        {
            uint highClip    = r.GetBits(16) << 16;
            uint lowClip     = 0;
            bool isEndRecord = false;

            if (highClip == 0)
            {
                if (isSwf6Plus)
                {
                    lowClip = r.GetBits(16);
                    if (lowClip == 0)
                    {
                        ClipEvents       = (ClipEvents)0;
                        ActionRecordSize = 4;
                        isEndRecord      = true;
                    }
                }
                else
                {
                    ClipEvents       = (ClipEvents)0;
                    ActionRecordSize = 2;
                    isEndRecord      = true;
                }
            }
            else
            {
                lowClip = r.GetBits(16);
            }

            if (!isEndRecord)
            {
                ClipEvents       = (ClipEvents)(lowClip | highClip);
                ActionRecordSize = r.GetUI32();
                if ((ClipEvents & ClipEvents.KeyPress) > 0)
                {
                    KeyCode = r.GetByte();
                }
                ActionRecords = new ActionRecords(r, ActionRecordSize);                 // always is init tag?
            }
        }
Пример #20
0
        internal SoundInfo(SwfReader r)
        {
            r.GetBits(2);             // reserved

            IsSyncStop       = r.GetBit();
            IsSyncNoMultiple = r.GetBit();
            HasEnvelope      = r.GetBit();
            HasLoops         = r.GetBit();
            HasOutPoint      = r.GetBit();

            r.Align();
            if (HasInPoint)
            {
                InPoint = r.GetUI32();
            }
            if (HasOutPoint)
            {
                OutPoint = r.GetUI32();
            }
            if (HasLoops)
            {
                LoopCount = r.GetUI16();
            }
            if (HasEnvelope)
            {
                uint count = (uint)r.GetByte();

                uint pos;
                uint left;
                uint right;
                EnvelopeRecords = new SoundEnvelope[count];
                for (int i = 0; i < count; i++)
                {
                    pos   = r.GetUI32();
                    left  = r.GetUI16();
                    right = r.GetUI16();
                    EnvelopeRecords[i] = new SoundEnvelope(pos, left, right);
                }
            }
        }
Пример #21
0
        internal static IFillStyle ParseFillStyle2(SwfReader r, ShapeType shapeType)
        {
            IFillStyle result = null;

            FillType fsType   = (FillType)r.GetByte();
            bool     useAlpha = shapeType > ShapeType.DefineShape2;

            switch (fsType)
            {
            case FillType.Solid:
                result = new SolidFill(r, useAlpha);
                break;

            case FillType.Linear:
                result = new Gradient(r, fsType, useAlpha);
                break;

            case FillType.Radial:
                result = new Gradient(r, fsType, useAlpha);
                break;

            case FillType.Focal:
                result = null;
                //throw new NotSupportedException("Currently FillType.Focal is not supported");
                break;

            case FillType.RepeatingBitmap:
            case FillType.ClippedBitmap:
            case FillType.NSRepeatingBitmap:
            case FillType.NSClippedBitmap:
                uint   charId    = r.GetUI16();
                Matrix bmpMatrix = new Matrix(r);
                result = new BitmapFill(charId, bmpMatrix, fsType);
                break;
            }
            return(result);
        }
Пример #22
0
        internal DefineButton2(SwfReader r)
            : base(TagType.DefineButton2)
        {
            ButtonId = r.GetUI16();
            r.GetBits(7);
            TrackAsMenu  = r.GetBit();
            ActionOffset = r.GetUI16();

            while (r.PeekByte() != 0)
            {
                Characters.Add(new ButtonRecord(r, TagType.DefineButton2));
            }
            r.GetByte();// 0, end ButtonRecords

            if (ActionOffset > 0)
            {
                ButtonCondAction bca;
                do
                {
                    bca = new ButtonCondAction(r);
                    ButtonCondActions.Add(bca);
                }while (bca.CondActionSize > 0);
            }
        }
Пример #23
0
        internal FilterConvolution(SwfReader r)
        {
            MatrixX = (uint)r.GetByte();
            MatrixY = (uint)r.GetByte();
            Divisor = r.GetFloat32();
            Bias    = r.GetFloat32();

            uint mxCount = MatrixX * MatrixY;

            Matrix = new float[mxCount];
            for (int i = 0; i < mxCount; i++)
            {
                Matrix[i] = r.GetFloat32();
            }

            DefaultColor = new RGBA(r.GetByte(), r.GetByte(), r.GetByte(), r.GetByte());

            r.GetBits(6);
            Clamp         = r.GetBit();
            PreserveAlpha = r.GetBit();

            r.Align();
        }
Пример #24
0
        internal ButtonRecord(SwfReader r, uint containerTag)
        {
            this.containerTag = containerTag;

            r.GetBits(2);
            ButtonHasBlendMode  = r.GetBit();
            ButtonHasFilterList = r.GetBit();
            ButtonStateHitTest  = r.GetBit();
            ButtonStateDown     = r.GetBit();
            ButtonStateOver     = r.GetBit();
            ButtonStateUp       = r.GetBit();

            CharacterID = r.GetUI16();
            PlaceDepth  = r.GetUI16();
            PlaceMatrix = new Matrix(r);

            if (containerTag == TagType.DefineButton2)
            {
                ColorTransform = new ColorTransform(r, true);

                if (ButtonHasFilterList)
                {
                    // some dup code from placeObject3 : (
                    uint filterCount = (uint)r.GetByte();
                    FilterList = new List <IFilter>();
                    for (int i = 0; i < filterCount; i++)
                    {
                        FilterKind kind = (FilterKind)r.GetByte();
                        switch (kind)
                        {
                        case FilterKind.Bevel:
                            FilterList.Add(new FilterBevel(r));
                            break;

                        case FilterKind.Blur:
                            FilterList.Add(new FilterBlur(r));
                            break;

                        case FilterKind.ColorMatrix:
                            FilterList.Add(new FilterColorMatrix(r));
                            break;

                        case FilterKind.Convolution:
                            FilterList.Add(new FilterConvolution(r));
                            break;

                        case FilterKind.DropShadow:
                            FilterList.Add(new FilterDropShadow(r));
                            break;

                        case FilterKind.Glow:
                            FilterList.Add(new FilterGlow(r));
                            break;

                        case FilterKind.GradientBevel:
                            FilterList.Add(new FilterGradientBevel(r));
                            break;

                        case FilterKind.GradientGlow:
                            FilterList.Add(new FilterGradientGlow(r));
                            break;

                        default:
                            // unsupported filter
                            break;
                        }
                    }
                }
                if (ButtonHasBlendMode)
                {
                    BlendMode = (BlendMode)r.GetByte();
                }
            }
        }
Пример #25
0
 internal StoreRegister(SwfReader r)
 {
     Register = (uint)r.GetByte();
 }
Пример #26
0
        internal DefineFont2_3(SwfReader r, bool isHighRes)
            : base(TagType.DefineFont2)
        {
            this.IsHighRes = isHighRes; // true;
            if (isHighRes)
            {
                this.tagType = TagType.DefineFont3;
            }
            this.FontId               = r.GetUI16();
            this.FontFlagsHasLayout   = r.GetBit();
            this.FontFlagsShiftJIS    = r.GetBit();
            this.FontFlagsSmallText   = r.GetBit();
            this.FontFlagsANSI        = r.GetBit();
            this.FontFlagsWideOffsets = r.GetBit();
            this.FontFlagsWideCodes   = r.GetBit();
            this.FontFlagsItalic      = r.GetBit();
            this.FontFlagsBold        = r.GetBit();

            r.Align();

            this.LanguageCode = (uint)r.GetByte();
            uint fontNameLen = (uint)r.GetByte();

            this.FontName  = r.GetString(fontNameLen);
            this.NumGlyphs = r.GetUI16();

            this.OffsetTable = new uint[this.NumGlyphs];
            for (int i = 0; i < this.NumGlyphs; i++)
            {
                this.OffsetTable[i] = this.FontFlagsWideOffsets ? r.GetUI32() : r.GetUI16();
            }

            this.CodeTableOffset = this.FontFlagsWideOffsets ? r.GetUI32() : r.GetUI16();

            GlyphShapeTable = new List <Shape>();
            for (int i = 0; i < this.NumGlyphs; i++)
            {
                Shape s = new Shape(r);
                GlyphShapeTable.Add(s);
            }

            this.CodeTable = new uint[this.NumGlyphs];
            for (int i = 0; i < this.NumGlyphs; i++)
            {
                this.CodeTable[i] = r.GetUI16();
            }

            if (this.FontFlagsHasLayout)
            {
                this.FontAscent  = r.GetInt16();
                this.FontDescent = r.GetInt16();
                this.FontLeading = r.GetInt16();

                this.FontAdvanceTable = new int[this.NumGlyphs];
                for (int i = 0; i < this.NumGlyphs; i++)
                {
                    this.FontAdvanceTable[i] = r.GetInt16();
                }

                this.FontBoundsTable = new Rect[this.NumGlyphs];
                for (int i = 0; i < this.NumGlyphs; i++)
                {
                    this.FontBoundsTable[i] = new Rect(r);
                }

                this.KerningCount = r.GetUI16();

                this.FontKerningTable = new KerningRecord[this.KerningCount];
                if (this.FontFlagsWideCodes)
                {
                    for (int i = 0; i < this.KerningCount; i++)
                    {
                        this.FontKerningTable[i] = new KerningRecord(r.GetUI16(), r.GetUI16(), r.GetInt16());
                    }
                }
                else
                {
                    for (int i = 0; i < this.KerningCount; i++)
                    {
                        this.FontKerningTable[i] = new KerningRecord((uint)r.GetByte(), (uint)r.GetByte(), r.GetInt16());
                    }
                }
            }
        }
Пример #27
0
 internal PrimitiveRegister(SwfReader r)
 {
     RegisterValue = r.GetByte();
 }
Пример #28
0
 internal WaitForFrame2(SwfReader r)
 {
     SkipCount = (uint)r.GetByte();
 }
Пример #29
0
 internal PrimitiveBoolean(SwfReader r)
 {
     BooleanValue = r.GetByte() > 0 ? true : false;             // stored as byte
 }
Пример #30
0
 internal PrimitiveConstant8(SwfReader r)
 {
     Constant8Value = (uint)r.GetByte();
 }