Example #1
0
        /// <summary>
        /// Обновляет множество выделенных элементов на рабочем холсте
        /// </summary>
        private void UpdateSelection()
        {
            Rect selectionRect = new Rect(SelectionStartPoint.Value, SelectionEndPoint.Value);

            foreach (UIElement element in Canvas.Children)
            {
                if (!(element is StoryboardItem))
                {
                    continue;
                }

                StoryboardItem storyboardItem = (StoryboardItem)element;

                Rect itemRect   = VisualTreeHelper.GetDescendantBounds(storyboardItem);
                Rect itemBounds = storyboardItem.TransformToAncestor(Canvas).TransformBounds(itemRect);

                if (selectionRect.Contains(itemBounds))
                {
                    storyboardItem.IsSelected = true;
                }
                else
                {
                    storyboardItem.IsSelected = false;
                }
            }
        }
Example #2
0
        /// <summary>
        /// Инициирует операцию перемещения путем запоминания в данном объекте элемента, который пользователь начал перетаскивать, и рабочего холста, на котором происходит операция перемещения
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="eventArgs"></param>
        private void DragThumb_DragStarted(object sender, DragStartedEventArgs eventArgs)
        {
            CurrentItem = DataContext as StoryboardItem;

            if (CurrentItem != null)
            {
                CurrentCanvas = VisualTreeHelper.GetParent(CurrentItem) as StoryboardCanvas;
            }
        }
Example #3
0
        /// <summary>
        /// Загружает документ-раскадровку с рабочего холста программы
        /// </summary>
        /// <param name="storyboardCanvas">Рабочий холст программы, с которой предполагается загрузить документ-раскадровку</param>
        /// <returns></returns>
        public static StoryboardDocument LoadFromCanvas(StoryboardCanvas storyboardCanvas)
        {
            StoryboardDocument newDocument = new StoryboardDocument();

            newDocument.Template = storyboardCanvas.BackgroundManager.CurrentTempalte;

            List <ImageSource> frameBackgrounds = new List <ImageSource>();

            for (int i = 0; i < storyboardCanvas.BackgroundManager.CurrentTempalte.NumFrames; i++)
            {
                frameBackgrounds.Add(storyboardCanvas.BackgroundManager.GetImageOfFrame(i));
            }

            newDocument.FrameBackgrounds = frameBackgrounds;

            List <ItemTuple> storyboardItems = new List <ItemTuple>();

            UIElement[] storyboardCanvasChildren = new UIElement[storyboardCanvas.Children.Count];

            storyboardCanvas.Children.CopyTo(storyboardCanvasChildren, 0);

            foreach (UIElement element in storyboardCanvasChildren.OrderBy(x => Panel.GetZIndex(x)))
            {
                StoryboardItem item = element as StoryboardItem;

                if (item != null)
                {
                    RotateTransform itemTransform = item.RenderTransform as RotateTransform;

                    item.RenderTransform = null;

                    Rect itemRect = new Rect();

                    itemRect.X      = Canvas.GetLeft(item);
                    itemRect.Y      = Canvas.GetTop(item);
                    itemRect.Width  = item.ActualWidth;
                    itemRect.Height = item.ActualHeight;

                    item.RenderTransform = itemTransform;

                    Image itemImageSource = (Image)item.Content;

                    ItemTuple newTuple = new ItemTuple(itemRect, itemTransform, itemImageSource.Source);

                    storyboardItems.Add(newTuple);
                }
            }

            newDocument.StoryboardItems = storyboardItems;

            return(newDocument);
        }
Example #4
0
        /// <summary>
        /// Обрабатывает перетаскивание на данный рабочий холст элементов раскадровки и изображений-фонов с панелей инструментов
        /// </summary>
        /// <param name="eventArgs"></param>
        protected override void OnDrop(DragEventArgs eventArgs)
        {
            base.OnDrop(eventArgs);

            string xamlString;

            Point position = eventArgs.GetPosition(this);

            if ((xamlString = eventArgs.Data.GetData("STORYBOARD_ITEM") as string) != null)
            {
                FrameworkElement content = XamlReader.Load(XmlReader.Create(new StringReader(xamlString))) as FrameworkElement;

                if (content != null)
                {
                    StoryboardItem newItem = new StoryboardItem();
                    newItem.Content = content;

                    if (content.MinHeight != 0 && content.MinWidth != 0)
                    {
                        newItem.Width  = content.MinWidth * 2;;
                        newItem.Height = content.MinHeight * 2;
                    }
                    else
                    {
                        newItem.Width  = 65;
                        newItem.Height = 65;
                    }

                    SetLeft(newItem, Math.Max(0, position.X - newItem.Width / 2));
                    SetTop(newItem, Math.Max(0, position.Y - newItem.Height / 2));

                    Children.Add(newItem);

                    DeselectAll();
                    newItem.IsSelected = true;
                }

                eventArgs.Handled = true;
            }
            else if ((xamlString = eventArgs.Data.GetData("STORYBOARD_BACKGROUND") as string) != null)
            {
                Image content = XamlReader.Load(XmlReader.Create(new StringReader(xamlString))) as Image;

                if (content != null && BackgroundManager != null)
                {
                    BackgroundManager.AddImageAt(position, content.Source);
                }
            }
        }
Example #5
0
        /// <summary>
        /// Удаляет выделенные на данный момент элементы раскадровки
        /// </summary>
        public void DeleteSelectedItems()
        {
            for (int i = 0; i < Children.Count; i++)
            {
                StoryboardItem item = Children[i] as StoryboardItem;

                if (item != null)
                {
                    if (item.IsSelected)
                    {
                        Children.RemoveAt(i--);
                    }
                }
            }
        }
Example #6
0
        /// <summary>
        /// Выгружает данный документ-раскадровку на рабочий холст программы
        /// </summary>
        /// <param name="storyboardCanvas">Рабочий холст программы, на который предполагается выгрузить данный документ-раскадроку</param>
        public void UnloadOntoCanvas(StoryboardCanvas storyboardCanvas)
        {
            storyboardCanvas.Children.Clear();

            BackgroundManager backgoundManager = new BackgroundManager(Template);

            backgoundManager.InitializeCanvas(storyboardCanvas);

            for (int i = 0; i < Template.NumFrames; i++)
            {
                if (FrameBackgrounds[i] != null)
                {
                    backgoundManager.AddImageToFrame(i, FrameBackgrounds[i]);
                }
            }

            foreach (ItemTuple itemTuple in StoryboardItems)
            {
                Image newImage = new Image();

                newImage.Source           = itemTuple.Item3;
                newImage.IsHitTestVisible = false;

                StoryboardItem newItem = new StoryboardItem();

                newItem.Content = newImage;

                Rect itemRect = itemTuple.Item1;

                newItem.Width  = itemRect.Width;
                newItem.Height = itemRect.Height;

                Canvas.SetLeft(newItem, itemRect.X);
                Canvas.SetTop(newItem, itemRect.Y);

                newItem.RenderTransform = itemTuple.Item2;

                storyboardCanvas.Children.Add(newItem);
            }
        }
Example #7
0
 /// <summary>
 /// Перемещает переданный элемент раскадровки на передний план
 /// </summary>
 /// <param name="item">Элемент раскадровки, который предполагается переместить на передний план</param>
 public void BringToFront(StoryboardItem item)
 {
     SetZIndex(item, ++MaximumZIndex);
 }