public void ReceiveMoveDelta(TargettedMoveDelta moveDelta, string recipient, bool processHistory) { if (!processHistory && sentDeltas.Contains(moveDelta.identity)) { //sentDeltas.Remove(moveDelta.identity); return; } if (moveDelta.HasSameTarget(Target)) { if (moveDelta.isDeleted) { ContentDelete(moveDelta); return; } if (moveDelta.newPrivacy != Privacy.NotSet) { ContentPrivacyChange(moveDelta); return; } ContentTranslateAndScale(moveDelta); } }
private void SendMoveDelta(TargettedMoveDelta moveDelta) { client.SendMoveDelta(moveDelta); }
public void receiveMoveDelta(TargettedMoveDelta moveDelta) { }
public void rememberSentMoveDelta(TargettedMoveDelta moveDelta) { sentDeltas.Add(moveDelta.identity); }
protected void ContentDelete(TargettedMoveDelta moveDelta) { var deadStrokes = new List<PrivateAwareStroke>(); var deadTextboxes = new List<TextBox>(); var deadImages = new List<MeTLImage>(); foreach (var inkId in moveDelta.inkIds) { foreach (var stroke in Canvas.Strokes.Where((s) => s is PrivateAwareStroke && s.tag().id == inkId.Identity).Select(s => s as PrivateAwareStroke)) { if(dirtiesThis(moveDelta,stroke)) { deadStrokes.Add(stroke); } } } foreach (var textId in moveDelta.textIds) { foreach (var textBox in Canvas.TextChildren().Where((t) => t.tag().id == textId.Identity)) { if(dirtiesThis(moveDelta,textBox)) { deadTextboxes.Add(textBox); } } } foreach (var imageId in moveDelta.imageIds) { foreach (var image in Canvas.ImageChildren().Where((i) => i.tag().id == imageId.Identity)) { if(dirtiesThis(moveDelta,image)) { deadImages.Add(image); } } } // improve the contentbuffer to remove items either: // - by using list.RemoveAll(predicate) // - iterating backwards and removing the item at the index // - find all the items to be removed then list.Except(listDeletions) on the list foreach (var text in deadTextboxes) { RemoveText(text); } foreach (var image in deadImages) { RemoveImage(image); } foreach (var stroke in deadStrokes) { RemoveStroke(stroke); } }
protected void ContentPrivacyChange(TargettedMoveDelta moveDelta) { var privacyStrokes = new List<PrivateAwareStroke>(); var privacyTextboxes = new List<TextBox>(); var privacyImages = new List<MeTLImage>(); foreach (var inkId in moveDelta.inkIds) { foreach (var stroke in Canvas.Strokes.Where((s) => s is PrivateAwareStroke && s.tag().id == inkId.Identity).Select(s => s as PrivateAwareStroke)) { if (dirtiesThis(moveDelta, stroke)) { privacyStrokes.Add(stroke); } } } foreach (var textId in moveDelta.textIds) { foreach (var textBox in Canvas.TextChildren().Where((t) => t.tag().id == textId.Identity)) { if (dirtiesThis(moveDelta, textBox)) { privacyTextboxes.Add(textBox); } } } foreach (var imageId in moveDelta.imageIds) { foreach (var image in Canvas.ImageChildren().Where((i) => i.tag().id == imageId.Identity)) { if (dirtiesThis(moveDelta, image)) { privacyImages.Add(image); } } } foreach (var stroke in privacyStrokes) { var oldTag = stroke.tag(); // RemoveStroke(stroke); stroke.tag(new StrokeTag(oldTag, moveDelta.privacy)); // AddStroke(stroke); } foreach (var image in privacyImages) { var oldTag = image.tag(); image.tag(new ImageTag(oldTag, moveDelta.privacy)); ChangeImagePrivacy(image, moveDelta.privacy); } foreach (var text in privacyTextboxes) { var oldTag = text.tag(); text.tag(new TextTag(oldTag, moveDelta.privacy)); ChangeTextPrivacy(text, moveDelta.privacy); } }
private bool dirtiesThis(TargettedMoveDelta moveDelta, TextBox elem) { return moveDelta.textIds.Any(i => elem.tag().id == i && elem.tag().privacy == moveDelta.privacy && elem.tag().timestamp < moveDelta.timestamp); }
private bool dirtiesThis(TargettedMoveDelta moveDelta, MeTLImage elem) { return moveDelta.imageIds.Any(i => elem.tag().id == i && elem.tag().privacy == moveDelta.privacy && elem.tag().timestamp < moveDelta.timestamp); }
protected void ContentTranslateAndScale(TargettedMoveDelta moveDelta) { var xTrans = moveDelta.xTranslate; var yTrans = moveDelta.yTranslate; var xScale = moveDelta.xScale; var yScale = moveDelta.yScale; var totalBounds = Double.IsNaN(moveDelta.yOrigin) || Double.IsNaN(moveDelta.xOrigin) ? contentBuffer.getBoundsOfMoveDelta(moveDelta) : new Rect(moveDelta.xOrigin, moveDelta.yOrigin, 0.0, 0.0); var tbX = totalBounds.Left - contentBuffer.logicalX; var tbY = totalBounds.Top - contentBuffer.logicalY; //var totalBounds = contentBuffer.getBoundsOfMoveDelta(moveDelta); foreach (var inkId in moveDelta.inkIds) { contentBuffer.adjustStrokeForMoveDelta(inkId, (s) => { if (dirtiesThis(moveDelta,s)){ var sBounds = s.GetBounds(); var internalX = sBounds.Left - tbX; var internalY = sBounds.Top - tbY; var offsetX = -(internalX - (internalX * xScale)); var offsetY = -(internalY - (internalY * yScale)); var adjustedStroke = AdjustVisual(s, xTrans + offsetX, yTrans + offsetY, xScale, yScale); RemoveStroke(s); AddStroke(adjustedStroke); return adjustedStroke; } return s; }); } foreach (var textId in moveDelta.textIds) { contentBuffer.adjustTextForMoveDelta(textId, (t) => { if (dirtiesThis(moveDelta, t)) { TranslateAndScale(t, xTrans, yTrans, xScale, yScale, totalBounds.Left,totalBounds.Top);//tbX,tbY); } return t; }); } foreach (var imageId in moveDelta.imageIds) { contentBuffer.adjustImageForMoveDelta(imageId, (i) => { if (dirtiesThis(moveDelta, i)) { TranslateAndScale(i, xTrans, yTrans, xScale, yScale, totalBounds.Left,totalBounds.Top);//tbX,tbY); } return i; }); } }
public Rect getBoundsOfMoveDelta(TargettedMoveDelta moveDelta) { var relevantImages = imageFilter.Images.Where(i => i is MeTLImage && moveDelta.imageIds.Select(id => id.Identity).Contains(((MeTLImage)i).tag().id)).Select(i => i as MeTLImage).ToList(); var relevantTexts = textFilter.TextBoxes.Where(t => t is MeTLTextBox && moveDelta.textIds.Select(id => id.Identity).Contains(((MeTLTextBox)t).tag().id)).Select(t => t as MeTLTextBox).ToList(); var relevantStrokes = strokeFilter.Strokes.Where(s => moveDelta.inkIds.Select(id => id.Identity).Contains((s).tag().id)).ToList(); return getLogicalBoundsOfContent(relevantImages, relevantTexts, relevantStrokes); }
void IReceiveEvents.receiveMoveDelta(TargettedMoveDelta delta) { MoveDeltaAvailable(this, new MoveDeltaAvailableEventArgs { moveDelta = delta }); }