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;
                });
            }
        }
Ejemplo n.º 10
0
 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);
 }
Ejemplo n.º 11
0
 void IReceiveEvents.receiveMoveDelta(TargettedMoveDelta delta)
 {
     MoveDeltaAvailable(this, new MoveDeltaAvailableEventArgs { moveDelta = delta });
 }