private bool EmitChangeEvent(Range currentRange, bool textChanged, bool propertiesChanged) { MarkerSnapshot oldState = PreviousEventState; currentRange = currentRange ?? GetRange(); if (!propertiesChanged && oldState.Valid == Valid && oldState.Tailed == Tailed && oldState.Reversed == Reversed && oldState.Range.CompareTo(currentRange) == 0) { return(false); } MarkerSnapshot newState = PreviousEventState = GetSnapshot(currentRange); Point oldHeadPosition, oldTailPosition, newHeadPosition, newTailPosition; if (oldState.Reversed) { oldHeadPosition = oldState.Range.Start; oldTailPosition = oldState.Range.End; } else { oldHeadPosition = oldState.Range.End; oldTailPosition = oldState.Range.Start; } if (newState.Reversed) { newHeadPosition = newState.Range.Start; newTailPosition = newState.Range.End; } else { newHeadPosition = newState.Range.End; newTailPosition = newState.Range.Start; } OnDidChange.Invoke( new OnDidChangeEventArgs( oldState.Valid, newState.Valid, oldState.Tailed, newState.Tailed, oldState.Properties, newState.Properties, oldHeadPosition, newHeadPosition, oldTailPosition, newTailPosition, textChanged)); return(true); }
/// <summary> /// Creates and returns a new {Marker} with the same properties as this /// marker. /// </summary> public Marker Copy(MarkerOptions options) { MarkerSnapshot snapshot = GetSnapshot(null); return(Layer.CreateMarker(GetRange(), snapshot.MergeOptions(options))); }