From 8e2159e4eba213a624dbb759bd5ff130207590b3 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 28 Jan 2020 15:07:37 +0900 Subject: [PATCH] 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. --- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 21 ++++++++++++++----- .../Compose/Components/BlueprintContainer.cs | 8 +++---- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index c413d25f09..1d97567b39 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -58,6 +58,8 @@ public abstract class HitObjectComposer : HitObjectComposer, IPlacement private InputManager inputManager; + private RadioButtonCollection toolboxCollection; + protected HitObjectComposer(Ruleset ruleset) { Ruleset = ruleset; @@ -100,7 +102,6 @@ private void load(IFrameBasedClock framedClock) layerContainers.Add(layerBelowRuleset); layerContainers.Add(layerAboveRuleset); - RadioButtonCollection toolboxCollection; InternalChild = new GridContainer { RelativeSizeAxes = Axes.Both, @@ -142,7 +143,7 @@ private void load(IFrameBasedClock framedClock) .Select(t => new RadioButton(t.Name, () => toolSelected(t))) .ToList(); - toolboxCollection.Items.First().Select(); + setSelectTool(); blueprintContainer.SelectionChanged += selectionChanged; } @@ -181,12 +182,19 @@ private void selectionChanged(IEnumerable selectedHitObjects) { var hitObjects = selectedHitObjects.ToArray(); - if (!hitObjects.Any()) - distanceSnapGridContainer.Hide(); - else + if (hitObjects.Any()) + { + // ensure in selection mode if a selection is made. + setSelectTool(); + showGridFor(hitObjects); + } + else + distanceSnapGridContainer.Hide(); } + private void setSelectTool() => toolboxCollection.Items.First().Select(); + private void toolSelected(HitObjectCompositionTool tool) { blueprintContainer.CurrentTool = tool; @@ -194,7 +202,10 @@ private void toolSelected(HitObjectCompositionTool tool) if (tool is SelectTool) distanceSnapGridContainer.Hide(); else + { + EditorBeatmap.SelectedHitObjects.Clear(); showGridFor(Enumerable.Empty()); + } } private void showGridFor(IEnumerable selectedHitObjects) diff --git a/osu.Game/Screens/Edit/Compose/Components/BlueprintContainer.cs b/osu.Game/Screens/Edit/Compose/Components/BlueprintContainer.cs index 6b21f56567..675b2b648d 100644 --- a/osu.Game/Screens/Edit/Compose/Components/BlueprintContainer.cs +++ b/osu.Game/Screens/Edit/Compose/Components/BlueprintContainer.cs @@ -74,12 +74,16 @@ private void load() { foreach (var o in objects) selectionBlueprints.FirstOrDefault(b => b.HitObject == o)?.Select(); + + SelectionChanged?.Invoke(selectedHitObjects); }; selectedHitObjects.ItemsRemoved += objects => { foreach (var o in objects) selectionBlueprints.FirstOrDefault(b => b.HitObject == o)?.Deselect(); + + SelectionChanged?.Invoke(selectedHitObjects); }; } @@ -332,8 +336,6 @@ private void onBlueprintSelected(SelectionBlueprint blueprint) selectionHandler.HandleSelected(blueprint); selectionBlueprints.ChangeChildDepth(blueprint, 1); beatmap.SelectedHitObjects.Add(blueprint.HitObject); - - SelectionChanged?.Invoke(selectionHandler.SelectedHitObjects); } private void onBlueprintDeselected(SelectionBlueprint blueprint) @@ -341,8 +343,6 @@ private void onBlueprintDeselected(SelectionBlueprint blueprint) selectionHandler.HandleDeselected(blueprint); selectionBlueprints.ChangeChildDepth(blueprint, 0); beatmap.SelectedHitObjects.Remove(blueprint.HitObject); - - SelectionChanged?.Invoke(selectionHandler.SelectedHitObjects); } #endregion