コード例 #1
0
        public void NewLayer(double PixelHeight, double PixelWidth)
        {
            string layerName = "NewLayer" + LayersWidgets.Count;
            var    layer     = new Layer(layerName, PixelWidth, PixelHeight, 1, 1, 1, 2, 1);

            mainCanvas.Children.Add(layer);
            LayersWidgets.Add(layer.Widget);

            layer.Background = new SolidColorBrush(Colors.White);

            // Replace layer to top of the list
            LayerWidget last = LayersWidgets.Last();

            for (int i = LayersWidgets.Count - 1; i > 0; i--)
            {
                LayersWidgets[i] = LayersWidgets[i - 1];
            }
            LayersWidgets[0] = last;

            if (widgetsCanvas.Items.Count > 0)
            {
                widgetsCanvas.SelectedIndex = 0;
            }

            GlobalState.LayersCount       = mainCanvas.Children.Count;
            widgetsCanvas.SelectedIndex   = GlobalState.LayersCount;
            GlobalState.CurrentLayerIndex = widgetsCanvas.SelectedIndex;
        }
コード例 #2
0
        private void DeleteLayer_Click(object sender, RoutedEventArgs e)
        {
            int index = GlobalState.CurrentLayerIndex;

            if (LayersWidgets.Count > 0 && index <= LayersWidgets.Count)
            {
                var         layer  = LayersWidgets[index].ThisLayer;
                LayerWidget widget = layer.Widget;

                layer.Children.Clear();
                mainCanvas.Children.Remove(layer);
                LayersWidgets.Remove(widget);
                widgetsCanvas.Items.Refresh();

                if (index != 0)
                {
                    widgetsCanvas.SelectedIndex = GlobalState.CurrentLayerIndex = index - 1;
                }
                else
                {
                    widgetsCanvas.SelectedIndex = GlobalState.CurrentLayerIndex = 0;
                }
            }
            GlobalState.LayersCount = mainCanvas.Children.Count;
            UpdateLayersZIndex();
        }
コード例 #3
0
ファイル: MainWindow.xaml.cs プロジェクト: artesdi/Paint.WPF
        /// <summary>
        ///     Добавление нового слоя на холст и обновление коллекции виджетов
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void LayerAdd_Click(object sender, RoutedEventArgs e)
        {
            var layer = new LayerControl();

            MainCanvas.Children.Add(layer);
            LayersWidgets.Add(layer.Widget);

            // Перемещение элемента в самый верх списка, для наглядности отображения верхних слоев пользователю
            LayerWidget last = LayersWidgets.Last();

            for (int i = LayersWidgets.Count - 1; i > 0; i--)
            {
                LayersWidgets[i] = LayersWidgets[i - 1];
            }
            LayersWidgets[0] = last;

            GlobalState.LayersIndexes++;

            if (LayerList.Items.Count > 0)
            {
                LayerList.SelectedIndex = 0;
            }

            layer.CheckedChanged += SelectLayer;
            layer.Delete         += DeleteLayer;
        }
コード例 #4
0
        /// <summary>
        /// new layer
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void LayerAdd_Click(object sender, RoutedEventArgs e)
        {
            var layer = new LayerControl();

            MainCanvas.Children.Add(layer);
            LayersWidgets.Add(layer.Widget);

            // new level ZOrder to top
            LayerWidget last = LayersWidgets.Last();

            for (int i = LayersWidgets.Count - 1; i > 0; i--)
            {
                LayersWidgets[i] = LayersWidgets[i - 1];
            }
            LayersWidgets[0] = last;

            GlobalState.LayersIndexes++;

            if (LayerList.Items.Count > 0)
            {
                LayerList.SelectedIndex = 0;
            }

            layer.CheckedChanged += SelectLayer;
            layer.Delete         += DeleteLayer;
        }
コード例 #5
0
        // LAYERS SWAP / OPACITY


        private void SwapLayers(int curIndx, int nextIndx)
        {
            LayerWidget curWidget  = LayersWidgets[curIndx];
            LayerWidget nextWidget = LayersWidgets[nextIndx];

            LayersWidgets[curIndx]  = LayersWidgets[nextIndx];
            LayersWidgets[nextIndx] = curWidget;

            UpdateLayersZIndex();

            GlobalState.CurrentLayerIndex = nextIndx;
            widgetsCanvas.SelectedIndex   = GlobalState.CurrentLayerIndex;
        }
コード例 #6
0
ファイル: MainWindow.xaml.cs プロジェクト: artesdi/Paint.WPF
        /// <summary>
        ///     Обмен слоев местами
        /// </summary>
        /// <param name="curIndx">Индекс выделенного слоя</param>
        /// <param name="nextIndx">Индекс обмениваемого слоя</param>
        private void SwapLayers(int curIndx, int nextIndx)
        {
            LayerWidget curWidget  = LayersWidgets[curIndx];
            LayerWidget nextWidget = LayersWidgets[nextIndx];

            LayersWidgets[curIndx]  = LayersWidgets[nextIndx];
            LayersWidgets[nextIndx] = curWidget;
            LayerList.SelectedIndex = nextIndx;

            int curZIndex  = Panel.GetZIndex(MainCanvas.Children[curWidget.ThisLayer.LayerIndex]);
            int nextZIndex = Panel.GetZIndex(MainCanvas.Children[nextWidget.ThisLayer.LayerIndex]);

            Panel.SetZIndex(MainCanvas.Children[curWidget.ThisLayer.LayerIndex], nextZIndex);
            Panel.SetZIndex(MainCanvas.Children[nextWidget.ThisLayer.LayerIndex], curZIndex);
        }
コード例 #7
0
ファイル: MainWindow.xaml.cs プロジェクト: artesdi/Paint.WPF
        /// <summary>
        ///     Изменение фокуса слоя, выделенного в отображаемом списке виджетов
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void LayerList_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (LayerList.SelectedItems.Count > 0)
            {
                LayerWidget selectedWidget = LayersWidgets[LayerList.SelectedIndex];
                UIElement   layer          = MainCanvas.Children[selectedWidget.ThisLayer.LayerIndex];
                layer.Focus();

                foreach (LayerControl child in MainCanvas.Children)
                {
                    if (child != layer)
                    {
                        child.NonFocus(null, null);
                    }
                }
            }
        }
コード例 #8
0
        private void LayerList_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (LayerList.SelectedItems.Count > 0)
            {
                LayerWidget selectedWidget = LayersWidgets[LayerList.SelectedIndex];
                object      layer          = null;
                if (MainCanvas.Children.Count > selectedWidget.ThisLayer.LayerIndex)
                {
                    layer = MainCanvas.Children[selectedWidget.ThisLayer.LayerIndex];
                }
                if (layer != null && layer is UIElement)
                {
                    (layer as UIElement).Focus();
                }
                else
                {
                    return;
                }

                foreach (var child in MainCanvas.Children)
                {
                    if (child is LayerControl && child != layer)
                    {
                        LayerControl layCtrl = child as LayerControl;
                        layCtrl.NonFocus(null, null);
                    }
                }
            }

            if (LayersWidgets.Count == 0)
            {
                return;
            }
            if (LayerList.SelectedIndex < 0)
            {
                LayerList.SelectedIndex = 0;
            }

            var selectedObj = LayersWidgets[LayerList.SelectedIndex];
            var host        = selectedObj.ThisLayer.VisualHost;

            SizeX.Text = Math.Round(host.SpaceSize.Width, 0).ToString();
            SizeY.Text = Math.Round(host.SpaceSize.Height, 0).ToString();
        }