private bool CheckControlOverlap(Control_AnimationFrameItem item, double leftMarginDelta = 0.0, double widthDelta = 0.0) { Rect itemPosition = new Rect(); itemPosition.Location = item.PointToScreen(new Point(leftMarginDelta + 0, 0)); itemPosition.Height = item.ActualHeight; itemPosition.Width = item.ActualWidth + widthDelta; bool doesIntersect = false; foreach (var child in gridTrackItems.Children) { if (child is Control_AnimationFrameItem && (child as Control_AnimationFrameItem) != item) { Rect childPos = new Rect(); childPos.Location = (child as Control_AnimationFrameItem).PointToScreen(new Point(0, 0)); childPos.Height = (child as Control_AnimationFrameItem).ActualHeight; childPos.Width = (child as Control_AnimationFrameItem).ActualWidth; if (itemPosition.IntersectsWith(childPos)) { doesIntersect = true; break; } } } return(doesIntersect); }
private void UpdateControls() { txtblkTrackName.Text = ContextTrack.GetName(); if (ContextTrack.SupportedAnimationType == typeof(AnimationFilledCircle)) { this.imgTrackType.Source = new BitmapImage(new Uri(@"/Aurora;component/Resources/FreeForm_CircleFilled.png", UriKind.Relative)); this.imgTrackType.ToolTip = "Filled Circle Track"; } else if (ContextTrack.SupportedAnimationType == typeof(AnimationCircle)) { this.imgTrackType.Source = new BitmapImage(new Uri(@"/Aurora;component/Resources/FreeForm_Circle.png", UriKind.Relative)); this.imgTrackType.ToolTip = "Circle Track"; } else if (ContextTrack.SupportedAnimationType == typeof(AnimationFilledRectangle)) { this.imgTrackType.Source = new BitmapImage(new Uri(@"/Aurora;component/Resources/FreeForm_RectangleFilled.png", UriKind.Relative)); this.imgTrackType.ToolTip = "Filled Rectangle Track"; } else if (ContextTrack.SupportedAnimationType == typeof(AnimationRectangle)) { this.imgTrackType.Source = new BitmapImage(new Uri(@"/Aurora;component/Resources/FreeForm_Rectangle.png", UriKind.Relative)); this.imgTrackType.ToolTip = "Rectangle Track"; } else if (ContextTrack.SupportedAnimationType == typeof(AnimationLine)) { this.imgTrackType.Source = new BitmapImage(new Uri(@"/Aurora;component/Resources/FreeForm_Line.png", UriKind.Relative)); this.imgTrackType.ToolTip = "Line Track"; } else if (ContextTrack.SupportedAnimationType == typeof(AnimationManualColorFrame)) { this.imgTrackType.Source = new BitmapImage(new Uri(@"/Aurora;component/Resources/FreeForm_ManualColor.png", UriKind.Relative)); this.imgTrackType.ToolTip = "Manual Color Track"; } gridTrackItems.Children.Clear(); foreach (var kvp in ContextTrack.GetAnimations()) { Control_AnimationFrameItem newFrame = new Control_AnimationFrameItem() { ContextFrame = kvp.Value, Margin = new Thickness(ConvertToLocation(kvp.Key, ContextTrack.GetShift()), 0, 0, 0), HorizontalAlignment = HorizontalAlignment.Left, Width = ConvertToLocation(kvp.Value.Duration) }; newFrame.LeftSplitterDrag += Control_AnimationFrameItem_LeftSplitterDrag; newFrame.RightSplitterDrag += Control_AnimationFrameItem_RightSplitterDrag; newFrame.ContentSplitterDrag += Control_AnimationFrameItem_ContentSplitterDrag; newFrame.CompletedDrag += Control_AnimationFrameItem_CompletedDrag; newFrame.PreviewMouseDown += Control_AnimationFrameItem_PreviewMouseDown; newFrame.AnimationFrameItemUpdated += Control_AnimationFrameItem_AnimationFrameItemUpdated; gridTrackItems.Children.Add(newFrame); } }
private void UpdateAnimationTrack() { ContextTrack.Clear(); foreach (var child in gridTrackItems.Children) { if (child is Control_AnimationFrameItem) { Control_AnimationFrameItem item = (child as Control_AnimationFrameItem); if (item.ContextFrame != null) { ContextTrack.SetFrame(ConvertToTime(item.Margin.Left, ContextTrack.GetShift()), item.ContextFrame); } } } AnimationTrackUpdated?.Invoke(this, ContextTrack); }