예제 #1
0
        /// <summary>
        /// Fires the LayerMoved event.
        /// </summary>
        /// <param name="sender">The layer that was moved.</param>
        /// <param name="e">LayerEventArgs.</param>
        protected virtual void OnLayerMoved(object sender, LayerMovedEventArgs e)
        {
            if (EventsSuspended)
            {
                return;
            }

            LayerMoved?.Invoke(sender, e);
        }
예제 #2
0
        /// <summary>
        /// Moves a layer from one point to another in the frame.
        /// If the layer index and the new index are the same, nothing is done
        /// </summary>
        /// <param name="layerIndex">The index of the layer to swap</param>
        /// <param name="newIndex">The index of the second layer to swap</param>
        public void MoveLayer(int layerIndex, int newIndex)
        {
            if (layerIndex == newIndex)
            {
                return;
            }

            // Notify before event
            BeforeLayerMoved?.Invoke(this, new LayerControllerLayerMovedEventArgs(layerIndex, newIndex));

            // Move layer
            if (layerIndex < newIndex)
            {
                // Move layer by swapping it until it is in the new desired place
                for (int i = layerIndex; i < newIndex; i++)
                {
                    _frame.SwapLayers(i, i + 1);
                }
            }
            else if (layerIndex > newIndex)
            {
                // Move layer by swapping it until it is in the new desired place
                for (int i = layerIndex; i > newIndex; i--)
                {
                    _frame.SwapLayers(i, i - 1);
                }
            }

            // Notify after event
            LayerMoved?.Invoke(this, new LayerControllerLayerMovedEventArgs(layerIndex, newIndex));

            // Update active layer index
            if (ActiveLayerIndex == layerIndex)
            {
                ActiveLayerIndex = newIndex;
            }
            else if (ActiveLayerIndex == newIndex)
            {
                ActiveLayerIndex = layerIndex;
            }
        }
예제 #3
0
 private void OnLayerMoved(ILayer layer)
 {
     LayerMoved?.Invoke(layer);
 }