public override void DrawRectangle(Brush brush, Pen pen, Rect rectangle) { if (brush == null && pen == null) { return; } unsafe { EnsureContent(); if (!this.content.ReadRecord(out DrawRectangleCommand record)) {//different record type: append new record record.BrushIndex = this.content.AddDependentResource(brush); record.PenIndex = this.content.AddDependentResource(pen); record.Rectangle = rectangle; this.content.WriteRecord(RecordType.DrawRectangle, (byte *)&record, sizeof(DrawRectangleCommand)); return; } //same type: update record if different bool recordNeedOverwrite = false; if (!Rect.AlmostEqual(record.Rectangle, rectangle)) { record.Rectangle = rectangle; recordNeedOverwrite = true; } if (this.content.ReadDependentResource(record.PenIndex, out Pen oldPen)) { if (!oldPen.Equals(pen)) { record.PenIndex = this.content.AddDependentResource(pen); recordNeedOverwrite = true; } } else { record.PenIndex = this.content.AddDependentResource(pen); recordNeedOverwrite = true; } if (this.content.ReadDependentResource(record.BrushIndex, out Brush oldBrush)) { if (!oldBrush.Equals(brush)) { record.BrushIndex = this.content.AddDependentResource(brush); recordNeedOverwrite = true; } } else { record.BrushIndex = this.content.AddDependentResource(brush); recordNeedOverwrite = true; } if (recordNeedOverwrite) { content.WriteRecord(RecordType.DrawRectangle, (byte *)&record, sizeof(DrawRectangleCommand)); } } }