コード例 #1
0
        public void ToSwf(SwfWriter w, ref uint fillBits, ref uint lineBits, ShapeType shapeType)
        {
            w.AppendBit(true);
            w.AppendBit(true);
            uint bits = SwfWriter.MinimumBits(DeltaX, DeltaY);

            bits = bits < 2 ? 2 : bits; // min 2 bits

            w.AppendBits(bits - 2, 4);
            if (DeltaX != 0 && DeltaY != 0)
            {
                w.AppendBit(true);
                w.AppendSignedNBits(DeltaX, bits);
                w.AppendSignedNBits(DeltaY, bits);
            }
            else if (DeltaX == 0)
            {
                w.AppendBit(false);
                w.AppendBit(true);
                w.AppendSignedNBits(DeltaY, bits);
            }
            else
            {
                w.AppendBit(false);
                w.AppendBit(false);
                w.AppendSignedNBits(DeltaX, bits);
            }
        }
コード例 #2
0
ファイル: ColorTransform.cs プロジェクト: yzqlwt/Swf2XNA
        public void ToSwf(SwfWriter w, bool useAlpha)
        {
            w.AppendBit(HasAddTerms);
            w.AppendBit(HasMultTerms);
            uint bits = SwfWriter.MinimumBits(RMultTerm, GMultTerm, BMultTerm, AMultTerm, RAddTerm, GAddTerm, BAddTerm, AAddTerm);

            w.AppendBits(bits, 4);

            if (HasMultTerms)
            {
                w.AppendSignedNBits(RMultTerm, bits);
                w.AppendSignedNBits(GMultTerm, bits);
                w.AppendSignedNBits(BMultTerm, bits);
                if (useAlpha)
                {
                    w.AppendSignedNBits(AMultTerm, bits);
                }
            }
            if (HasAddTerms)
            {
                w.AppendSignedNBits(RAddTerm, bits);
                w.AppendSignedNBits(GAddTerm, bits);
                w.AppendSignedNBits(BAddTerm, bits);
                if (useAlpha)
                {
                    w.AppendSignedNBits(AAddTerm, bits);
                }
            }

            w.Align();
        }
コード例 #3
0
        public void ToSwf(SwfWriter w, ref uint fillBits, ref uint lineBits, ShapeType shapeType)
        {
            w.AppendBit(true);
            w.AppendBit(false);

            uint bits = SwfWriter.MinimumBits(ControlX, ControlY, AnchorX, AnchorY);

            bits = bits < 2 ? 2 : bits; // min 2 bits
            w.AppendBits(bits - 2, 4);

            w.AppendSignedNBits(ControlX, bits);
            w.AppendSignedNBits(ControlY, bits);
            w.AppendSignedNBits(AnchorX, bits);
            w.AppendSignedNBits(AnchorY, bits);
        }
コード例 #4
0
        public void ToSwf(SwfWriter w, uint glyphBits, uint advanceBits, bool hasAlpha)
        {
            w.AppendBit(TextRecordType);
            w.AppendBits(StyleFlagsReserved, 3);
            w.AppendBit(StyleFlagsHasFont);
            w.AppendBit(StyleFlagsHasColor);
            w.AppendBit(StyleFlagsHasYOffset);
            w.AppendBit(StyleFlagsHasXOffset);
            w.Align();

            if (StyleFlagsHasFont)
            {
                w.AppendUI16(FontID);
            }
            if (StyleFlagsHasColor)
            {
                w.AppendByte(TextColor.R);
                w.AppendByte(TextColor.G);
                w.AppendByte(TextColor.B);
                if (hasAlpha)
                {
                    w.AppendByte(TextColor.A);
                }
            }
            if (StyleFlagsHasXOffset)
            {
                w.AppendInt16(XOffset);
            }
            if (StyleFlagsHasYOffset)
            {
                w.AppendInt16(YOffset);
            }
            if (StyleFlagsHasFont)
            {
                w.AppendUI16(TextHeight);
            }

            w.AppendByte((byte)GlyphEntries.Length);

            for (int i = 0; i < GlyphEntries.Length; i++)
            {
                w.AppendBits(GlyphEntries[i].GlyphIndex, glyphBits);
                w.AppendSignedNBits(GlyphEntries[i].GlyphAdvance, advanceBits);
            }
            w.Align();
        }
コード例 #5
0
ファイル: StraightEdgeRecord.cs プロジェクト: Hamsand/Swf2XNA
        public void ToSwf(SwfWriter w, ref uint fillBits, ref uint lineBits, ShapeType shapeType)
        {
            w.AppendBit(true);
            w.AppendBit(true);
            uint bits = SwfWriter.MinimumBits(DeltaX, DeltaY);
            bits = bits < 2 ? 2 : bits; // min 2 bits

            w.AppendBits(bits - 2, 4);
            if (DeltaX != 0 && DeltaY != 0)
            {
                w.AppendBit(true);
                w.AppendSignedNBits(DeltaX, bits);
                w.AppendSignedNBits(DeltaY, bits);
            }
            else if (DeltaX == 0)
            {
                w.AppendBit(false);
                w.AppendBit(true);
                w.AppendSignedNBits(DeltaY, bits);
            }
            else
            {
                w.AppendBit(false);
                w.AppendBit(false);
                w.AppendSignedNBits(DeltaX, bits);
            }
        }
コード例 #6
0
ファイル: StyleChangedRecord.cs プロジェクト: Hamsand/Swf2XNA
        public void ToSwf(SwfWriter w, ref uint fillBits, ref uint lineBits, ShapeType shapeType)
        {
            // TypeFlag				UB[1]	Non-edge record flag. Always 0.
            // StateNewStyles		UB[1]	New styles flag. Used by DefineShape2 and DefineShape3 only.
            // StateLineStyle		UB[1]	Line style change flag.
            // StateFillStyle1		UB[1]	Fill style 1 change flag.
            // StateFillStyle0		UB[1]	Fill style 0 change flag.
            // StateMoveTo			UB[1]	Move to flag.

            if (shapeType == ShapeType.Glyph)
            {
                w.AppendBit(false);
                w.AppendBit(false);//this.HasNewStyles);

                w.AppendBit(false);//HasLineStyle);
                w.AppendBit(false);//HasFillStyle1);
                w.AppendBit(HasFillStyle0);
                w.AppendBit(HasMove);//HasMove);

                if (HasMove)
                {
                    // not relative moves
                    uint bits = SwfWriter.MinimumBits(this.MoveDeltaX, this.MoveDeltaY);
                    w.AppendBits(bits, 5);
                    w.AppendSignedNBits(this.MoveDeltaX, bits);
                    w.AppendSignedNBits(this.MoveDeltaY, bits);
                }

                if (HasFillStyle0)
                {
                    w.AppendBits(this.FillStyle0, fillBits);
                }
            }
            else
            {
                w.AppendBit(false);
                w.AppendBit(this.HasNewStyles);

                w.AppendBit(HasLineStyle);
                w.AppendBit(HasFillStyle1);
                w.AppendBit(HasFillStyle0);
                w.AppendBit(HasMove);

                if (HasMove)
                {
                    uint bits = SwfWriter.MinimumBits(this.MoveDeltaX, this.MoveDeltaY);
                    w.AppendBits(bits, 5);
                    w.AppendSignedNBits(this.MoveDeltaX, bits);
                    w.AppendSignedNBits(this.MoveDeltaY, bits);
                }

                if (HasFillStyle0)
                {
                    w.AppendBits(this.FillStyle0, fillBits);
                }

                if (HasFillStyle1)
                {
                    w.AppendBits(this.FillStyle1, fillBits);
                }

                if (HasLineStyle)
                {
                    w.AppendBits(this.LineStyle, lineBits);
                }

                if (HasNewStyles)
                {
                    w.Align();
                    FillStyles.ToSwf(w, shapeType);
                    LineStyles.ToSwf(w, shapeType);

                    fillBits = SwfWriter.MinimumBits((uint)FillStyles.FillStyles.Count);
                    lineBits = SwfWriter.MinimumBits((uint)LineStyles.LineStyles.Count); ;

                    w.AppendBits(fillBits, 4);
                    w.AppendBits(lineBits, 4);
                }
            }
        }
コード例 #7
0
ファイル: StyleChangedRecord.cs プロジェクト: yzqlwt/Swf2XNA
        public void ToSwf(SwfWriter w, ref uint fillBits, ref uint lineBits, ShapeType shapeType)
        {
            // TypeFlag				UB[1]	Non-edge record flag. Always 0.
            // StateNewStyles		UB[1]	New styles flag. Used by DefineShape2 and DefineShape3 only.
            // StateLineStyle		UB[1]	Line style change flag.
            // StateFillStyle1		UB[1]	Fill style 1 change flag.
            // StateFillStyle0		UB[1]	Fill style 0 change flag.
            // StateMoveTo			UB[1]	Move to flag.

            if (shapeType == ShapeType.Glyph)
            {
                w.AppendBit(false);
                w.AppendBit(false);   //this.HasNewStyles);

                w.AppendBit(false);   //HasLineStyle);
                w.AppendBit(false);   //HasFillStyle1);
                w.AppendBit(HasFillStyle0);
                w.AppendBit(HasMove); //HasMove);

                if (HasMove)
                {
                    // not relative moves
                    uint bits = SwfWriter.MinimumBits(this.MoveDeltaX, this.MoveDeltaY);
                    w.AppendBits(bits, 5);
                    w.AppendSignedNBits(this.MoveDeltaX, bits);
                    w.AppendSignedNBits(this.MoveDeltaY, bits);
                }

                if (HasFillStyle0)
                {
                    w.AppendBits(this.FillStyle0, fillBits);
                }
            }
            else
            {
                w.AppendBit(false);
                w.AppendBit(this.HasNewStyles);

                w.AppendBit(HasLineStyle);
                w.AppendBit(HasFillStyle1);
                w.AppendBit(HasFillStyle0);
                w.AppendBit(HasMove);

                if (HasMove)
                {
                    uint bits = SwfWriter.MinimumBits(this.MoveDeltaX, this.MoveDeltaY);
                    w.AppendBits(bits, 5);
                    w.AppendSignedNBits(this.MoveDeltaX, bits);
                    w.AppendSignedNBits(this.MoveDeltaY, bits);
                }

                if (HasFillStyle0)
                {
                    w.AppendBits(this.FillStyle0, fillBits);
                }

                if (HasFillStyle1)
                {
                    w.AppendBits(this.FillStyle1, fillBits);
                }

                if (HasLineStyle)
                {
                    w.AppendBits(this.LineStyle, lineBits);
                }

                if (HasNewStyles)
                {
                    w.Align();
                    FillStyles.ToSwf(w, shapeType);
                    LineStyles.ToSwf(w, shapeType);

                    fillBits = SwfWriter.MinimumBits((uint)FillStyles.FillStyles.Count);
                    lineBits = SwfWriter.MinimumBits((uint)LineStyles.LineStyles.Count);;

                    w.AppendBits(fillBits, 4);
                    w.AppendBits(lineBits, 4);
                }
            }
        }
コード例 #8
0
ファイル: ColorTransform.cs プロジェクト: Hamsand/Swf2XNA
        public void ToSwf(SwfWriter w, bool useAlpha)
        {
            w.AppendBit(HasAddTerms);
            w.AppendBit(HasMultTerms);
            uint bits = SwfWriter.MinimumBits(RMultTerm, GMultTerm, BMultTerm, AMultTerm, RAddTerm, GAddTerm, BAddTerm, AAddTerm);
            w.AppendBits(bits, 4);

            if (HasMultTerms)
            {
                w.AppendSignedNBits(RMultTerm, bits);
                w.AppendSignedNBits(GMultTerm, bits);
                w.AppendSignedNBits(BMultTerm, bits);
                if (useAlpha)
                {
                    w.AppendSignedNBits(AMultTerm, bits);
                }
            }
            if (HasAddTerms)
            {
                w.AppendSignedNBits(RAddTerm, bits);
                w.AppendSignedNBits(GAddTerm, bits);
                w.AppendSignedNBits(BAddTerm, bits);
                if (useAlpha)
                {
                    w.AppendSignedNBits(AAddTerm, bits);
                }
            }

            w.Align();
        }
コード例 #9
0
ファイル: CurvedEdgeRecord.cs プロジェクト: Hamsand/Swf2XNA
        public void ToSwf(SwfWriter w, ref uint fillBits, ref uint lineBits, ShapeType shapeType)
        {
            w.AppendBit(true);
            w.AppendBit(false);

            uint bits = SwfWriter.MinimumBits(ControlX, ControlY, AnchorX, AnchorY);
            bits = bits < 2 ? 2 : bits; // min 2 bits
            w.AppendBits(bits - 2, 4);

            w.AppendSignedNBits(ControlX, bits);
            w.AppendSignedNBits(ControlY, bits);
            w.AppendSignedNBits(AnchorX, bits);
            w.AppendSignedNBits(AnchorY, bits);
        }
コード例 #10
0
ファイル: TextRecord.cs プロジェクト: Hamsand/Swf2XNA
        public void ToSwf(SwfWriter w, uint glyphBits, uint advanceBits, bool hasAlpha)
        {
            w.AppendBit(TextRecordType);
            w.AppendBits(StyleFlagsReserved, 3);
            w.AppendBit(StyleFlagsHasFont);
            w.AppendBit(StyleFlagsHasColor);
            w.AppendBit(StyleFlagsHasYOffset);
            w.AppendBit(StyleFlagsHasXOffset);
            w.Align();

            if (StyleFlagsHasFont)
            {
                w.AppendUI16(FontID);
            }
            if (StyleFlagsHasColor)
            {
                w.AppendByte(TextColor.R);
                w.AppendByte(TextColor.G);
                w.AppendByte(TextColor.B);
                if (hasAlpha)
                {
                    w.AppendByte(TextColor.A);
                }
            }
            if (StyleFlagsHasXOffset)
            {
                w.AppendInt16(XOffset);
            }
            if (StyleFlagsHasYOffset)
            {
                w.AppendInt16(YOffset);
            }
            if (StyleFlagsHasFont)
            {
                w.AppendUI16(TextHeight);
            }

            w.AppendByte((byte)GlyphEntries.Length);

            for (int i = 0; i < GlyphEntries.Length; i++)
            {
                w.AppendBits(GlyphEntries[i].GlyphIndex, glyphBits);
                w.AppendSignedNBits(GlyphEntries[i].GlyphAdvance, advanceBits);
            }
            w.Align();
        }