public static void WriteClipActionRecord(this ISwfStreamWriter writer, byte swfVersion, ClipActionRecord record) { writer.WriteClipEventFlags(swfVersion, record.Flags); if (record.Flags.IsEmpty) { return; } var awmem = new MemoryStream(); var aw = new ActionWriter(new SwfStreamWriter(awmem)); foreach (var action in record.Actions) { aw.WriteAction(action); } var size = awmem.Length + (record.Flags.ClipEventKeyPress ? 1 : 0); writer.WriteUInt32((uint)size); if (record.Flags.ClipEventKeyPress) { writer.WriteByte(record.KeyCode); } writer.WriteBytes(awmem.ToArray()); }
/// <summary> /// Writes the ARGB color to writer. /// </summary> /// <param name="writer">The writer to which to write color.</param> /// <param name="val">Color to be written.</param> public static void WriteARGB(this ISwfStreamWriter writer, SwfRGBA val) { writer.WriteByte(val.Alpha); writer.WriteByte(val.Red); writer.WriteByte(val.Green); writer.WriteByte(val.Blue); }
public static void WriteButtonRecordEx(this ISwfStreamWriter writer, ButtonRecordEx button) { writer.WriteUnsignedBits(button.Reserved, 2); writer.WriteBit(button.BlendMode.HasValue); writer.WriteBit(button.Filters.Count > 0); writer.WriteBit(button.StateHitTest); writer.WriteBit(button.StateDown); writer.WriteBit(button.StateOver); writer.WriteBit(button.StateUp); if (!button.IsEndButton) { writer.WriteUInt16(button.CharacterID); writer.WriteUInt16(button.PlaceDepth); writer.WriteMatrix(ref button.PlaceMatrix); writer.WriteColorTransformRGBA(button.ColorTransform); writer.FlushBits(); if (button.Filters.Count > 0) { writer.WriteFilterList(button.Filters); } if (button.BlendMode.HasValue) { writer.WriteByte((byte)button.BlendMode.Value); } } }
public static void WriteLineStyleEx(this ISwfStreamWriter writer, LineStyleEx lineStyle) { writer.WriteUInt16(lineStyle.Width); writer.WriteUnsignedBits((uint)lineStyle.StartCapStyle, 2); writer.WriteUnsignedBits((uint)lineStyle.JoinStyle, 2); writer.WriteBit(lineStyle.HasFill); writer.WriteBit(lineStyle.NoHScale); writer.WriteBit(lineStyle.NoVScale); writer.WriteBit(lineStyle.PixelHinting); writer.WriteUnsignedBits(lineStyle.Reserved, 5); writer.WriteBit(lineStyle.NoClose); writer.WriteUnsignedBits((uint)lineStyle.EndCapStyle, 2); if (lineStyle.JoinStyle == JoinStyle.Miter) { writer.WriteFixedPoint8(lineStyle.MilterLimitFactor); } if (lineStyle.HasFill) { writer.WriteFillStyleRGBA(lineStyle.FillStyle); } else { writer.WriteRGBA(lineStyle.Color); } }
public static void WriteClipEventFlags(this ISwfStreamWriter writer, byte swfVersion, ClipEventFlags flags) { writer.WriteBit(flags.ClipEventKeyUp); writer.WriteBit(flags.ClipEventKeyDown); writer.WriteBit(flags.ClipEventMouseUp); writer.WriteBit(flags.ClipEventMouseDown); writer.WriteBit(flags.ClipEventMouseMove); writer.WriteBit(flags.ClipEventUnload); writer.WriteBit(flags.ClipEventEnterFrame); writer.WriteBit(flags.ClipEventLoad); writer.WriteBit(flags.ClipEventDragOver); writer.WriteBit(flags.ClipEventRollOut); writer.WriteBit(flags.ClipEventRollOver); writer.WriteBit(flags.ClipEventReleaseOutside); writer.WriteBit(flags.ClipEventRelease); writer.WriteBit(flags.ClipEventPress); writer.WriteBit(flags.ClipEventInitialize); writer.WriteBit(flags.ClipEventData); if (swfVersion >= 6) { writer.WriteUnsignedBits(flags.Reserved, 5); writer.WriteBit(flags.ClipEventConstruct); writer.WriteBit(flags.ClipEventKeyPress); writer.WriteBit(flags.ClipEventDragOut); writer.WriteByte(flags.Reserved2); } }
public static void WriteClipActionRecords(this ISwfStreamWriter writer, byte swfVersion, IList <ClipActionRecord> source) { foreach (var record in source) { writer.WriteClipActionRecord(swfVersion, record); } }
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(); }
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); } }
public static void WriteFilterList(this ISwfStreamWriter writer, IList <BaseFilter> source) { writer.WriteByte((byte)source.Count); foreach (var filter in source) { writer.WriteFilter(filter); } }
public static void WriteTextRecordRGBA(this ISwfStreamWriter writer, TextRecordRGBA record, uint glyphBits, uint advanceBits) { if (record == null) { throw new ArgumentNullException("record"); } writer.WriteBit(record.Type); writer.WriteUnsignedBits(record.Reserved, 3); writer.WriteBit(record.FontID.HasValue); writer.WriteBit(record.TextColor.HasValue); writer.WriteBit(record.YOffset.HasValue); writer.WriteBit(record.XOffset.HasValue); var isEnd = !record.Type && record.Reserved == 0 && !record.FontID.HasValue && !record.TextColor.HasValue && !record.YOffset.HasValue && !record.XOffset.HasValue; if (!isEnd) { if (record.FontID.HasValue) { writer.WriteUInt16(record.FontID.Value); } if (record.TextColor.HasValue) { var color = record.TextColor.Value; writer.WriteRGBA(ref color); } if (record.XOffset.HasValue) { writer.WriteSInt16(record.XOffset.Value); } if (record.YOffset.HasValue) { writer.WriteSInt16(record.YOffset.Value); } if (record.FontID.HasValue) { if (!record.TextHeight.HasValue) { throw new InvalidOperationException("Font height must be specified when font is specified"); } writer.WriteUInt16(record.TextHeight.Value); } if (record.Glyphs.Count > 255) { throw new InvalidOperationException("Text record has too much glyphs specified"); } writer.WriteByte((byte)record.Glyphs.Count); foreach (var glyph in record.Glyphs) { writer.WriteGlyphEntry(glyph, glyphBits, advanceBits); } } writer.FlushBits(); }
public static void WriteShapeRecordsRGB(this ISwfStreamWriter writer, IList <IShapeRecordRGB> shapeRecords, uint fillStyleBits, uint lineStyleBits) { writer.WriteUnsignedBits(fillStyleBits, 4); writer.WriteUnsignedBits(lineStyleBits, 4); writer.FlushBits(); foreach (var shapeRecord in shapeRecords) { _shapeRecordWriter.WriteRGB(writer, shapeRecord, true, ref fillStyleBits, ref lineStyleBits); } }
private void Write(ISwfStreamWriter writer, IShapeRecord record, bool allowBigArray, ref uint fillBitsCount, ref uint lineBitsCount) { var ctx = new ShapeRecordWriteContext { FillStyleBits = fillBitsCount, LineStyleBits = lineBitsCount, AllowBigArray = allowBigArray, Writer = writer }; ctx = record.AcceptVisitor(this, ctx); fillBitsCount = ctx.FillStyleBits; lineBitsCount = ctx.LineStyleBits; }
public static void WriteKerningRecord(this ISwfStreamWriter writer, KerningRecord record, bool wideCodes) { if (wideCodes) { writer.WriteUInt16(record.LeftCode); writer.WriteUInt16(record.RightCode); } else { writer.WriteByte((byte)record.LeftCode); writer.WriteByte((byte)record.RightCode); } writer.WriteSInt16(record.Adjustment); }
public static void WriteTagData(this ISwfStreamWriter writer, SwfTagData data) { var bytes = data.Data; if (bytes.Length >= 0x3f) { writer.WriteUInt16((ushort)(((ushort)data.Type << 6) | 0x3f)); writer.WriteUInt32((uint)bytes.Length); } else { writer.WriteUInt16((ushort)(((ushort)data.Type << 6) | bytes.Length)); } writer.WriteBytes(bytes); }
/// <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(); }
public static void WriteGradientRGB(this ISwfStreamWriter writer, GradientRGB gradient) { writer.WriteUnsignedBits((uint)gradient.SpreadMode, 2); writer.WriteUnsignedBits((uint)gradient.InterpolationMode, 2); var count = gradient.GradientRecords.Count; if (count > 15) { throw new ArgumentOutOfRangeException("gradient", "Can't serialize more them 15 gradient points"); } writer.WriteUnsignedBits((uint)count, 4); for (var i = 0; i < count; i++) { GradientRecordRGB record = gradient.GradientRecords[i]; writer.WriteGradientRecordRGB(ref record); } }
public static void WriteLineStylesEx(this ISwfStreamWriter writer, IList <LineStyleEx> styles) { if (styles.Count < 255) { writer.WriteByte((byte)styles.Count); } else { writer.WriteByte(255); writer.WriteUInt16((ushort)styles.Count); } foreach (var lineStyle in styles) { var style = lineStyle; writer.WriteLineStyleEx(style); } }
public static void WriteFillStylesRGBA(this ISwfStreamWriter writer, IList <FillStyleRGBA> styles) { if (styles.Count < 255) { writer.WriteByte((byte)styles.Count); } else { writer.WriteByte(255); writer.WriteUInt16((ushort)styles.Count); } foreach (var fillStyle in styles) { var style = fillStyle; writer.WriteFillStyleRGBA(style); } }
public static void WriteButtonCondition(this ISwfStreamWriter writer, ButtonCondition cond) { writer.WriteBit(cond.IdleToOverDown); writer.WriteBit(cond.OutDownToIdle); writer.WriteBit(cond.OutDownToOverDown); writer.WriteBit(cond.OverDownToOutDown); writer.WriteBit(cond.OverDownToOverUp); writer.WriteBit(cond.OverUpToOverDown); writer.WriteBit(cond.OverUpToIdle); writer.WriteBit(cond.IdleToOverUp); writer.WriteUnsignedBits(cond.KeyPress, 7); writer.WriteBit(cond.OverDownToIdle); var aw = new ActionWriter(writer); foreach (var action in cond.Actions) { aw.WriteAction(action); } }
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(); }
public static void WriteLineStylesRGB(this ISwfStreamWriter writer, IList <LineStyleRGB> styles, bool allowBigArray) { if (styles.Count < 255) { writer.WriteByte((byte)styles.Count); } else { if (!allowBigArray) { throw new InvalidOperationException("DefineShape supports up to 255 fill style records"); } writer.WriteByte(255); writer.WriteUInt16((ushort)styles.Count); } foreach (var lineStyle in styles) { var style = lineStyle; writer.WriteLineStyleRGB(style); } }
public static void WriteSwfFileInfo(this ISwfStreamWriter writer, SwfFileInfo fileInfo) { string format = fileInfo.Format.ToString(); if (string.IsNullOrEmpty(format) || format.Length != 3) { throw new InvalidOperationException("Format should be of length 3"); } writer.WriteByte((byte)format[0]); writer.WriteByte((byte)format[1]); writer.WriteByte((byte)format[2]); writer.WriteByte(fileInfo.Version); var len = fileInfo.FileLength; writer.WriteByte((byte)((len >> 0) & 0xff)); writer.WriteByte((byte)((len >> 8) & 0xff)); writer.WriteByte((byte)((len >> 16) & 0xff)); writer.WriteByte((byte)((len >> 24) & 0xff)); }
protected override void Write(ISwfStreamWriter writer, GradientRGBA gradient) { writer.WriteGradientRGBA(gradient); }
protected abstract void Write(ISwfStreamWriter writer, T gradient);
public static void WriteClipActions(this ISwfStreamWriter writer, byte swfVersion, ClipActionsList clipActions) { writer.WriteUInt16(clipActions.Reserved); writer.WriteClipEventFlags(swfVersion, clipActions.Flags); writer.WriteClipActionRecords(swfVersion, clipActions.Records); }
public static void WriteGradientRecordRGBA(this ISwfStreamWriter writer, ref GradientRecordRGBA record) { writer.WriteByte(record.Ratio); writer.WriteRGBA(ref record.Color); }
public static void WriteMatrix(this ISwfStreamWriter writer, SwfMatrix matrix) { writer.WriteMatrix(ref matrix); }
public static void WriteFilter(this ISwfStreamWriter writer, BaseFilter filter) { _writer.Write(writer, filter); }
/// <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, SwfRect rect) { writer.WriteRect(ref rect); }
public static void WriteSwfHeader(this ISwfStreamWriter writer, SwfHeader header) { writer.WriteRect(header.FrameSize); writer.WriteFixedPoint8(header.FrameRate); writer.WriteUInt16(header.FrameCount); }