|
@@ -1,5 +1,7 @@
|
|
using System;
|
|
using System;
|
|
using System.Buffers;
|
|
using System.Buffers;
|
|
|
|
+using System.Collections;
|
|
|
|
+using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Collections.ObjectModel;
|
|
using System.IO;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Linq;
|
|
@@ -152,7 +154,7 @@ namespace PixiEditor.Models.DataHolders
|
|
/// </summary>
|
|
/// </summary>
|
|
public void ClipCanvas()
|
|
public void ClipCanvas()
|
|
{
|
|
{
|
|
- DoubleCords points = GetEdgePoints();
|
|
|
|
|
|
+ DoubleCords points = GetEdgePoints(Layers);
|
|
int smallestX = points.Coords1.X;
|
|
int smallestX = points.Coords1.X;
|
|
int smallestY = points.Coords1.Y;
|
|
int smallestY = points.Coords1.Y;
|
|
int biggestX = points.Coords2.X;
|
|
int biggestX = points.Coords2.X;
|
|
@@ -171,7 +173,7 @@ namespace PixiEditor.Models.DataHolders
|
|
int oldWidth = Width;
|
|
int oldWidth = Width;
|
|
int oldHeight = Height;
|
|
int oldHeight = Height;
|
|
|
|
|
|
- MoveOffsets(moveVector);
|
|
|
|
|
|
+ MoveOffsets(Layers, moveVector);
|
|
Width = width;
|
|
Width = width;
|
|
Height = height;
|
|
Height = height;
|
|
|
|
|
|
@@ -187,11 +189,17 @@ namespace PixiEditor.Models.DataHolders
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// <summary>
|
|
- /// Centers content inside document.
|
|
|
|
|
|
+ /// Centers selected, visible layers inside document.
|
|
/// </summary>
|
|
/// </summary>
|
|
public void CenterContent()
|
|
public void CenterContent()
|
|
{
|
|
{
|
|
- DoubleCords points = GetEdgePoints();
|
|
|
|
|
|
+ var layersToCenter = Layers.Where(x => x.IsActive && x.IsVisible);
|
|
|
|
+ if(layersToCenter.Count() == 0)
|
|
|
|
+ {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ DoubleCords points = GetEdgePoints(layersToCenter);
|
|
|
|
|
|
int smallestX = points.Coords1.X;
|
|
int smallestX = points.Coords1.X;
|
|
int smallestY = points.Coords1.Y;
|
|
int smallestY = points.Coords1.Y;
|
|
@@ -209,13 +217,13 @@ namespace PixiEditor.Models.DataHolders
|
|
new Coordinates(Width, Height));
|
|
new Coordinates(Width, Height));
|
|
Coordinates moveVector = new Coordinates(documentCenter.X - contentCenter.X, documentCenter.Y - contentCenter.Y);
|
|
Coordinates moveVector = new Coordinates(documentCenter.X - contentCenter.X, documentCenter.Y - contentCenter.Y);
|
|
|
|
|
|
- MoveOffsets(moveVector);
|
|
|
|
|
|
+ MoveOffsets(layersToCenter, moveVector);
|
|
UndoManager.AddUndoChange(
|
|
UndoManager.AddUndoChange(
|
|
new Change(
|
|
new Change(
|
|
MoveOffsetsProcess,
|
|
MoveOffsetsProcess,
|
|
- new object[] { new Coordinates(-moveVector.X, -moveVector.Y) },
|
|
|
|
|
|
+ new object[] { layersToCenter, new Coordinates(-moveVector.X, -moveVector.Y) },
|
|
MoveOffsetsProcess,
|
|
MoveOffsetsProcess,
|
|
- new object[] { moveVector },
|
|
|
|
|
|
+ new object[] { layersToCenter, moveVector },
|
|
"Center content"));
|
|
"Center content"));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -264,35 +272,40 @@ namespace PixiEditor.Models.DataHolders
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
- private DoubleCords GetEdgePoints()
|
|
|
|
|
|
+ private DoubleCords GetEdgePoints(IEnumerable<Layer> layers)
|
|
{
|
|
{
|
|
- Layer firstLayer = Layers[0];
|
|
|
|
|
|
+ if (Layers.Count == 0)
|
|
|
|
+ {
|
|
|
|
+ throw new ArgumentException("Not enough layers");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Layer firstLayer = layers.First();
|
|
int smallestX = firstLayer.OffsetX;
|
|
int smallestX = firstLayer.OffsetX;
|
|
int smallestY = firstLayer.OffsetY;
|
|
int smallestY = firstLayer.OffsetY;
|
|
int biggestX = smallestX + firstLayer.Width;
|
|
int biggestX = smallestX + firstLayer.Width;
|
|
int biggestY = smallestY + firstLayer.Height;
|
|
int biggestY = smallestY + firstLayer.Height;
|
|
|
|
|
|
- for (int i = 0; i < Layers.Count; i++)
|
|
|
|
|
|
+ foreach (Layer layer in layers)
|
|
{
|
|
{
|
|
- Layers[i].ClipCanvas();
|
|
|
|
- if (Layers[i].OffsetX < smallestX)
|
|
|
|
|
|
+ layer.ClipCanvas();
|
|
|
|
+ if (layer.OffsetX < smallestX)
|
|
{
|
|
{
|
|
- smallestX = Layers[i].OffsetX;
|
|
|
|
|
|
+ smallestX = layer.OffsetX;
|
|
}
|
|
}
|
|
|
|
|
|
- if (Layers[i].OffsetX + Layers[i].Width > biggestX)
|
|
|
|
|
|
+ if (layer.OffsetX + layer.Width > biggestX)
|
|
{
|
|
{
|
|
- biggestX = Layers[i].OffsetX + Layers[i].Width;
|
|
|
|
|
|
+ biggestX = layer.OffsetX + layer.Width;
|
|
}
|
|
}
|
|
|
|
|
|
- if (Layers[i].OffsetY < smallestY)
|
|
|
|
|
|
+ if (layer.OffsetY < smallestY)
|
|
{
|
|
{
|
|
- smallestY = Layers[i].OffsetY;
|
|
|
|
|
|
+ smallestY = layer.OffsetY;
|
|
}
|
|
}
|
|
|
|
|
|
- if (Layers[i].OffsetY + Layers[i].Height > biggestY)
|
|
|
|
|
|
+ if (layer.OffsetY + layer.Height > biggestY)
|
|
{
|
|
{
|
|
- biggestY = Layers[i].OffsetY + Layers[i].Height;
|
|
|
|
|
|
+ biggestY = layer.OffsetY + layer.Height;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|