File: MS\Internal\PtsHost\UpdateRecord.cs
Web Access
Project: src\src\Microsoft.DotNet.Wpf\src\PresentationFramework\PresentationFramework.csproj (PresentationFramework)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
 
//
// Description: Contains information about current state of upate process 
//              in the current container paragraph. 
//
 
 
using System;
using System.Diagnostics;
 
using MS.Internal.PtsHost.UnsafeNativeMethods;
 
namespace MS.Internal.PtsHost
{
    // ----------------------------------------------------------------------
    // Contains information about current state of upate process in the 
    // current container paragraph.
    // ----------------------------------------------------------------------
    internal sealed class UpdateRecord
    {
        // ------------------------------------------------------------------
        // Constructor
        // ------------------------------------------------------------------
        internal UpdateRecord()
        {
            Dtr = new DirtyTextRange(0,0,0);
            FirstPara = SyncPara = null;
            ChangeType = PTS.FSKCHANGE.fskchNone;
            Next = null;
            InProcessing = false;
        }
 
        // ------------------------------------------------------------------
        // Merge with next update record.
        // ------------------------------------------------------------------
        internal void MergeWithNext()
        {
            Debug.Assert(Next != null); // This is the last UR, cannot merge with next.
 
            // Merge DTRs
            int delta = Next.Dtr.StartIndex - Dtr.StartIndex;
 
            // Dtr.StartIndex is not changing
            Dtr.PositionsAdded   += delta + Next.Dtr.PositionsAdded;
            Dtr.PositionsRemoved += delta + Next.Dtr.PositionsRemoved;
 
            // Reasign sync point and next UpdateRecord
            SyncPara = Next.SyncPara;
            Next     = Next.Next;
        }
 
        // ------------------------------------------------------------------
        // Dirty text range.
        // ------------------------------------------------------------------
        internal DirtyTextRange Dtr;
 
        // ------------------------------------------------------------------
        // The first paragraph affected by the change.
        // ------------------------------------------------------------------
        internal BaseParagraph FirstPara;
 
        // ------------------------------------------------------------------
        // The first paragraph not affected by DTR, synchronization point for 
        // update process.
        // ------------------------------------------------------------------
        internal BaseParagraph SyncPara;
 
        // ------------------------------------------------------------------
        // Type of the change (none, new, inside).
        // ------------------------------------------------------------------
        internal PTS.FSKCHANGE ChangeType;
 
        // ------------------------------------------------------------------
        // Next UpdateRecord.
        // ------------------------------------------------------------------
        internal UpdateRecord Next;
 
        // ------------------------------------------------------------------
        // Update record is in processing mode?
        // ------------------------------------------------------------------
        internal bool InProcessing;
    }
}