mirror of
https://github.com/ppy/osu.git
synced 2025-03-28 09:37:23 +08:00
Reorder context menu items and tidy up surrounding code
This commit is contained in:
parent
91e6f4c4ee
commit
885ea4270b
@ -105,12 +105,9 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders.Components
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The slider can only be split on control points which connect two different slider segments.
|
|
||||||
private bool splittable(PathControlPointPiece p) => p.ControlPoint.Type.HasValue && p != Pieces[0] && p != Pieces[^1];
|
|
||||||
|
|
||||||
private bool splitSelected()
|
private bool splitSelected()
|
||||||
{
|
{
|
||||||
List<PathControlPoint> toSplit = Pieces.Where(p => p.IsSelected.Value && splittable(p)).Select(p => p.ControlPoint).ToList();
|
List<PathControlPoint> toSplit = Pieces.Where(p => p.IsSelected.Value && isSplittable(p)).Select(p => p.ControlPoint).ToList();
|
||||||
|
|
||||||
// Ensure that there are any points to be split
|
// Ensure that there are any points to be split
|
||||||
if (toSplit.Count == 0)
|
if (toSplit.Count == 0)
|
||||||
@ -127,6 +124,10 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders.Components
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool isSplittable(PathControlPointPiece p) =>
|
||||||
|
// A slider can only be split on control points which connect two different slider segments.
|
||||||
|
p.ControlPoint.Type.HasValue && p != Pieces.FirstOrDefault() && p != Pieces.LastOrDefault();
|
||||||
|
|
||||||
private void onControlPointsChanged(object sender, NotifyCollectionChangedEventArgs e)
|
private void onControlPointsChanged(object sender, NotifyCollectionChangedEventArgs e)
|
||||||
{
|
{
|
||||||
switch (e.Action)
|
switch (e.Action)
|
||||||
@ -345,38 +346,42 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders.Components
|
|||||||
if (count == 0)
|
if (count == 0)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
var splittablePieces = selectedPieces.Where(splittable).ToList();
|
var splittablePieces = selectedPieces.Where(isSplittable).ToList();
|
||||||
int splittableCount = splittablePieces.Count;
|
int splittableCount = splittablePieces.Count;
|
||||||
|
|
||||||
List<MenuItem> items = new List<MenuItem>();
|
List<MenuItem> curveTypeItems = new List<MenuItem>();
|
||||||
|
|
||||||
if (!selectedPieces.Contains(Pieces[0]))
|
if (!selectedPieces.Contains(Pieces[0]))
|
||||||
items.Add(createMenuItemForPathType(null));
|
curveTypeItems.Add(createMenuItemForPathType(null));
|
||||||
|
|
||||||
// todo: hide/disable items which aren't valid for selected points
|
// todo: hide/disable items which aren't valid for selected points
|
||||||
items.Add(createMenuItemForPathType(PathType.Linear));
|
curveTypeItems.Add(createMenuItemForPathType(PathType.Linear));
|
||||||
items.Add(createMenuItemForPathType(PathType.PerfectCurve));
|
curveTypeItems.Add(createMenuItemForPathType(PathType.PerfectCurve));
|
||||||
items.Add(createMenuItemForPathType(PathType.Bezier));
|
curveTypeItems.Add(createMenuItemForPathType(PathType.Bezier));
|
||||||
items.Add(createMenuItemForPathType(PathType.Catmull));
|
curveTypeItems.Add(createMenuItemForPathType(PathType.Catmull));
|
||||||
|
|
||||||
var menuItems = new MenuItem[splittableCount > 0 ? 3 : 2];
|
var menuItems = new List<MenuItem>
|
||||||
int i = 0;
|
{
|
||||||
|
new OsuMenuItem("Curve type")
|
||||||
menuItems[i++] = new OsuMenuItem($"Delete {"control point".ToQuantity(count, count > 1 ? ShowQuantityAs.Numeric : ShowQuantityAs.None)}", MenuItemType.Destructive,
|
{
|
||||||
() => DeleteSelected());
|
Items = curveTypeItems
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
if (splittableCount > 0)
|
if (splittableCount > 0)
|
||||||
{
|
{
|
||||||
menuItems[i++] = new OsuMenuItem($"Split {"control point".ToQuantity(splittableCount, splittableCount > 1 ? ShowQuantityAs.Numeric : ShowQuantityAs.None)}",
|
menuItems.Add(new OsuMenuItem($"Split {"control point".ToQuantity(splittableCount, splittableCount > 1 ? ShowQuantityAs.Numeric : ShowQuantityAs.None)}",
|
||||||
MenuItemType.Destructive, () => splitSelected());
|
MenuItemType.Destructive,
|
||||||
|
() => splitSelected()));
|
||||||
}
|
}
|
||||||
|
|
||||||
menuItems[i] = new OsuMenuItem("Curve type")
|
menuItems.Add(
|
||||||
{
|
new OsuMenuItem($"Delete {"control point".ToQuantity(count, count > 1 ? ShowQuantityAs.Numeric : ShowQuantityAs.None)}",
|
||||||
Items = items
|
MenuItemType.Destructive,
|
||||||
};
|
() => DeleteSelected())
|
||||||
|
);
|
||||||
|
|
||||||
return menuItems;
|
return menuItems.ToArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user