public void Dispose()
            {
                if (oldSelection.IsEmpty)
                {
                    oldSelection.Start = SelectionRegion.Min(oldCaret, owner.view.Position);
                    oldSelection.End   = SelectionRegion.Max(oldCaret, owner.view.Position);
                }
                else if (oldSelection.Start == oldCaret)
                {
                    var pt = oldSelection.End;
                    oldSelection.Start = SelectionRegion.Min(pt, owner.view.Position);
                    oldSelection.End   = SelectionRegion.Max(pt, owner.view.Position);
                }
                else if (oldSelection.End == oldCaret)
                {
                    var pt = oldSelection.Start;
                    oldSelection.Start = SelectionRegion.Min(pt, owner.view.Position);
                    oldSelection.End   = SelectionRegion.Max(pt, owner.view.Position);
                }

                owner.view.Selection = oldSelection;
                owner.processing     = false;
                owner = null;

                GC.SuppressFinalize(this);
            }
            public void Dispose()
            {
                if (oldSelection.IsEmpty)
                {
                    oldSelection.Start = SelectionRegion.Min(oldCaret, owner.view.Position);
                    oldSelection.End = SelectionRegion.Max(oldCaret, owner.view.Position);
                }
                else if (oldSelection.Start == oldCaret)
                {
                    var pt = oldSelection.End;
                    oldSelection.Start = SelectionRegion.Min(pt, owner.view.Position);
                    oldSelection.End = SelectionRegion.Max(pt, owner.view.Position);
                }
                else if (oldSelection.End == oldCaret)
                {
                    var pt = oldSelection.Start;
                    oldSelection.Start = SelectionRegion.Min(pt, owner.view.Position);
                    oldSelection.End = SelectionRegion.Max(pt, owner.view.Position);
                }

                owner.view.Selection = oldSelection;
                owner.processing = false;
                owner = null;

                GC.SuppressFinalize(this);
            }
            public SelectionReset(PcSelectionMode owner)
            {
                this.owner = owner;

                owner.processing = true;
                oldSelection     = owner.view.Selection;
                oldCaret         = owner.view.Position;
            }
            public SelectionReset(PcSelectionMode owner)
            {
                this.owner = owner;

                owner.processing = true;
                oldSelection = owner.view.Selection;
                oldCaret = owner.view.Position;
            }
            public void Dispose()
            {
                if (oldSelection.IsEmpty)
                {
                    oldSelection.Start = SelectionRegion.minimum(oldCaret, owner.view.Caret);
                    oldSelection.End = SelectionRegion.maximum(oldCaret, owner.view.Caret);
                }
                else if (oldSelection.Start == oldCaret)
                {
                    Point pt = oldSelection.End;
                    oldSelection.Start = SelectionRegion.minimum(pt, owner.view.Caret);
                    oldSelection.End = SelectionRegion.maximum(pt, owner.view.Caret);
                }
                else if (oldSelection.End == oldCaret)
                {
                    Point pt = oldSelection.Start;
                    oldSelection.Start = SelectionRegion.minimum(pt, owner.view.Caret);
                    oldSelection.End = SelectionRegion.maximum(pt, owner.view.Caret);
                }

                owner.view.Selection = oldSelection;
                owner.processing = false;
                owner = null;
            }