Пример #1
0
        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));
                }
            }
        }