1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-11 17:07:38 +08:00

Ensure selection tool correctly matches selection state

- When a selection is made (via the timeline) the selection tool should become the select tool.
- When the selection tool is changed to anything *but* the select tool, the selection should be cleared.
This commit is contained in:
Dean Herbert 2020-01-28 15:07:37 +09:00
parent e81d3c51ed
commit 8e2159e4eb
2 changed files with 20 additions and 9 deletions

View File

@ -58,6 +58,8 @@ namespace osu.Game.Rulesets.Edit
private InputManager inputManager; private InputManager inputManager;
private RadioButtonCollection toolboxCollection;
protected HitObjectComposer(Ruleset ruleset) protected HitObjectComposer(Ruleset ruleset)
{ {
Ruleset = ruleset; Ruleset = ruleset;
@ -100,7 +102,6 @@ namespace osu.Game.Rulesets.Edit
layerContainers.Add(layerBelowRuleset); layerContainers.Add(layerBelowRuleset);
layerContainers.Add(layerAboveRuleset); layerContainers.Add(layerAboveRuleset);
RadioButtonCollection toolboxCollection;
InternalChild = new GridContainer InternalChild = new GridContainer
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
@ -142,7 +143,7 @@ namespace osu.Game.Rulesets.Edit
.Select(t => new RadioButton(t.Name, () => toolSelected(t))) .Select(t => new RadioButton(t.Name, () => toolSelected(t)))
.ToList(); .ToList();
toolboxCollection.Items.First().Select(); setSelectTool();
blueprintContainer.SelectionChanged += selectionChanged; blueprintContainer.SelectionChanged += selectionChanged;
} }
@ -181,12 +182,19 @@ namespace osu.Game.Rulesets.Edit
{ {
var hitObjects = selectedHitObjects.ToArray(); var hitObjects = selectedHitObjects.ToArray();
if (!hitObjects.Any()) if (hitObjects.Any())
distanceSnapGridContainer.Hide(); {
else // ensure in selection mode if a selection is made.
setSelectTool();
showGridFor(hitObjects); showGridFor(hitObjects);
}
else
distanceSnapGridContainer.Hide();
} }
private void setSelectTool() => toolboxCollection.Items.First().Select();
private void toolSelected(HitObjectCompositionTool tool) private void toolSelected(HitObjectCompositionTool tool)
{ {
blueprintContainer.CurrentTool = tool; blueprintContainer.CurrentTool = tool;
@ -194,7 +202,10 @@ namespace osu.Game.Rulesets.Edit
if (tool is SelectTool) if (tool is SelectTool)
distanceSnapGridContainer.Hide(); distanceSnapGridContainer.Hide();
else else
{
EditorBeatmap.SelectedHitObjects.Clear();
showGridFor(Enumerable.Empty<HitObject>()); showGridFor(Enumerable.Empty<HitObject>());
}
} }
private void showGridFor(IEnumerable<HitObject> selectedHitObjects) private void showGridFor(IEnumerable<HitObject> selectedHitObjects)

View File

@ -74,12 +74,16 @@ namespace osu.Game.Screens.Edit.Compose.Components
{ {
foreach (var o in objects) foreach (var o in objects)
selectionBlueprints.FirstOrDefault(b => b.HitObject == o)?.Select(); selectionBlueprints.FirstOrDefault(b => b.HitObject == o)?.Select();
SelectionChanged?.Invoke(selectedHitObjects);
}; };
selectedHitObjects.ItemsRemoved += objects => selectedHitObjects.ItemsRemoved += objects =>
{ {
foreach (var o in objects) foreach (var o in objects)
selectionBlueprints.FirstOrDefault(b => b.HitObject == o)?.Deselect(); selectionBlueprints.FirstOrDefault(b => b.HitObject == o)?.Deselect();
SelectionChanged?.Invoke(selectedHitObjects);
}; };
} }
@ -332,8 +336,6 @@ namespace osu.Game.Screens.Edit.Compose.Components
selectionHandler.HandleSelected(blueprint); selectionHandler.HandleSelected(blueprint);
selectionBlueprints.ChangeChildDepth(blueprint, 1); selectionBlueprints.ChangeChildDepth(blueprint, 1);
beatmap.SelectedHitObjects.Add(blueprint.HitObject); beatmap.SelectedHitObjects.Add(blueprint.HitObject);
SelectionChanged?.Invoke(selectionHandler.SelectedHitObjects);
} }
private void onBlueprintDeselected(SelectionBlueprint blueprint) private void onBlueprintDeselected(SelectionBlueprint blueprint)
@ -341,8 +343,6 @@ namespace osu.Game.Screens.Edit.Compose.Components
selectionHandler.HandleDeselected(blueprint); selectionHandler.HandleDeselected(blueprint);
selectionBlueprints.ChangeChildDepth(blueprint, 0); selectionBlueprints.ChangeChildDepth(blueprint, 0);
beatmap.SelectedHitObjects.Remove(blueprint.HitObject); beatmap.SelectedHitObjects.Remove(blueprint.HitObject);
SelectionChanged?.Invoke(selectionHandler.SelectedHitObjects);
} }
#endregion #endregion