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); } }
private static void ReadStyleChange(StyleChangeShapeRecord record, XElement xShape) { foreach (var attribute in xShape.Attributes()) { switch (attribute.Name.LocalName) { case "fillStyle0": record.FillStyle0 = uint.Parse(attribute.Value); break; case "fillStyle1": record.FillStyle1 = uint.Parse(attribute.Value); break; case "lineStyle": record.LineStyle = uint.Parse(attribute.Value); break; case "x": record.StateMoveTo = true; record.MoveDeltaX = int.Parse(attribute.Value); break; case "y": record.StateMoveTo = true; record.MoveDeltaY = int.Parse(attribute.Value); break; default: OnUnknownAttributeFound(attribute); break; } } }
private static XElement FormatShapeSetup(StyleChangeShapeRecord styleChange) { var setup = new XElement("ShapeSetup"); if (styleChange.StateMoveTo) { setup.Add(new XAttribute("x", styleChange.MoveDeltaX)); setup.Add(new XAttribute("y", styleChange.MoveDeltaY)); } if (styleChange.FillStyle0.HasValue) { setup.Add(new XAttribute("fillStyle0", styleChange.FillStyle0.Value)); } if (styleChange.FillStyle1.HasValue) { setup.Add(new XAttribute("fillStyle1", styleChange.FillStyle1.Value)); } if (styleChange.LineStyle.HasValue) { setup.Add(new XAttribute("lineStyle", styleChange.LineStyle.Value)); } return(setup); }
public static void AreEqual(StyleChangeShapeRecord expected, StyleChangeShapeRecord actual, string message) { Assert.AreEqual(expected.FillStyle0, actual.FillStyle0, "{0}: FillStyle0", message); Assert.AreEqual(expected.FillStyle1, actual.FillStyle1, "{0}: FillStyle1", message); Assert.AreEqual(expected.LineStyle, actual.LineStyle, "{0}: LineStyle", message); Assert.AreEqual(expected.StateMoveTo, actual.StateMoveTo, "{0}: StateMoveTo", message); Assert.AreEqual(expected.MoveDeltaX, actual.MoveDeltaX, "{0}: MoveDeltaX", message); Assert.AreEqual(expected.MoveDeltaY, actual.MoveDeltaY, "{0}: MoveDeltaY", message); Assert.AreEqual(expected.StateNewStyles, actual.StateNewStyles, "{0}: StateNewStyles", message); if (expected is StyleChangeShapeRecordRGB && actual is StyleChangeShapeRecordRGB) { AreEqual((StyleChangeShapeRecordRGB)expected, (StyleChangeShapeRecordRGB)actual, message); } else if (expected is StyleChangeShapeRecordRGBA && actual is StyleChangeShapeRecordRGBA) { AreEqual((StyleChangeShapeRecordRGBA)expected, (StyleChangeShapeRecordRGBA)actual, message); } else { throw new NotSupportedException(string.Format("{0}: Can't compare {1} and {2}", message, expected.GetType(), actual.GetType())); } }