Skip to content

Commit

Permalink
Merge pull request #2275 from andy840119/fix-preview-lyric-not-change…
Browse files Browse the repository at this point in the history
…-the-size-if-size-changed

Fix preview lyric not change the size if size changed.
  • Loading branch information
andy840119 authored Aug 19, 2024
2 parents 050e614 + 78282f9 commit f0a82b3
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 63 deletions.
7 changes: 7 additions & 0 deletions osu.Game.Rulesets.Karaoke/KaraokeEditInputManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -99,4 +99,11 @@ public enum KaraokeEditAction

[Description("Clear time")]
ClearTime,

// Action for compose mode.
[Description("Increase font size.")]
IncreasePreviewFontSize,

[Description("Decrease font size.")]
DecreasePreviewFontSize,
}
4 changes: 4 additions & 0 deletions osu.Game.Rulesets.Karaoke/KaraokeRuleset.cs
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,10 @@ public override IEnumerable<KeyBinding> GetDefaultKeyBindings(int variant = 0) =
new KeyBinding(InputKey.S, KaraokeEditAction.RemoveEndTimeTag),
new KeyBinding(InputKey.Enter, KaraokeEditAction.SetTime),
new KeyBinding(InputKey.BackSpace, KaraokeEditAction.ClearTime),

// Action for compose mode.
new KeyBinding(new[] { InputKey.Control, InputKey.Plus }, KaraokeEditAction.IncreasePreviewFontSize),
new KeyBinding(new[] { InputKey.Control, InputKey.Minus }, KaraokeEditAction.DecreasePreviewFontSize),
},
_ => Array.Empty<KeyBinding>(),
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,50 +38,55 @@ public LyricEditor()

bindableFocusedLyric.BindValueChanged(e =>
{
skinProvidingContainer.Clear();
refreshPreviewLyric(e.NewValue);
});

var lyric = e.NewValue;
if (lyric == null)
return;
bindableFontSize.BindValueChanged(e =>
{
skin.FontSize = e.NewValue;
refreshPreviewLyric(bindableFocusedLyric.Value);
});
}

const int border = 36;
private void refreshPreviewLyric(Lyric? lyric)
{
skinProvidingContainer.Clear();

if (lyric == null)
return;

const int border = 36;

skinProvidingContainer.Add(new InteractableLyric(lyric)
skinProvidingContainer.Add(new InteractableLyric(lyric)
{
Anchor = Anchor.CentreLeft,
Origin = Anchor.CentreLeft,
TextSizeChanged = (self, size) =>
{
Anchor = Anchor.CentreLeft,
Origin = Anchor.CentreLeft,
TextSizeChanged = (self, size) =>
{
self.Width = size.X + border * 2;
self.Height = size.Y + border * 2;
},
Loaders = new LayerLoader[]
self.Width = size.X + border * 2;
self.Height = size.Y + border * 2;
},
Loaders = new LayerLoader[]
{
new LayerLoader<GridLayer>
{
new LayerLoader<GridLayer>
OnLoad = layer =>
{
OnLoad = layer =>
{
layer.Spacing = 10;
},
layer.Spacing = 10;
},
new LayerLoader<LyricLayer>
},
new LayerLoader<LyricLayer>
{
OnLoad = layer =>
{
OnLoad = layer =>
{
layer.LyricPosition = new Vector2(border);
},
layer.LyricPosition = new Vector2(border);
},
new LayerLoader<EditLyricLayer>(),
new LayerLoader<TimeTagLayer>(),
new LayerLoader<CaretLayer>(),
new LayerLoader<BlueprintLayer>(),
},
});
});

bindableFontSize.BindValueChanged(e =>
{
skin.FontSize = e.NewValue;
new LayerLoader<EditLyricLayer>(),
new LayerLoader<TimeTagLayer>(),
new LayerLoader<CaretLayer>(),
new LayerLoader<BlueprintLayer>(),
},
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,11 @@ public abstract partial class ToolbarEditActionButton : ToolbarButton, IKeyBindi

public bool OnPressed(KeyBindingPressEvent<KaraokeEditAction> e)
{
if (e.Action == EditAction)
ToggleClickEffect();
if (e.Action != EditAction)
return false;

return false;
// press button should did the same things as click.
return TriggerClick();
}

public void OnReleased(KeyBindingReleaseEvent<KaraokeEditAction> e)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites;
using osu.Game.Graphics.Sprites;
using osu.Game.Graphics.UserInterface;
using osu.Game.Rulesets.Karaoke.Configuration;
using osu.Game.Rulesets.Karaoke.Utils;
using osuTK;
Expand All @@ -21,10 +20,7 @@ public partial class AdjustFontSizeButton : CompositeDrawable

public AdjustFontSizeButton()
{
IconButton previousSizeButton;
OsuSpriteText fontSizeSpriteText;
IconButton nextSizeButton;
float[] sizes = FontUtils.ComposerFontSize();

Height = SpecialActionToolbar.HEIGHT;
AutoSizeAxes = Axes.X;
Expand All @@ -36,18 +32,9 @@ public AdjustFontSizeButton()
Direction = FillDirection.Horizontal,
Children = new Drawable[]
{
previousSizeButton = new IconButton
new DecreasePreviewFontSizeActionButton
{
Size = new Vector2(SpecialActionToolbar.ICON_SIZE),
Icon = FontAwesome.Solid.Minus,
Action = () =>
{
float previousSize = sizes.GetPrevious(bindableFontSize.Value);
if (previousSize == default)
return;

bindableFontSize.Value = previousSize;
},
},
new Container
{
Expand All @@ -59,27 +46,16 @@ public AdjustFontSizeButton()
Origin = Anchor.Centre,
},
},
nextSizeButton = new IconButton
new IncreasePreviewFontSizeActionButton
{
Size = new Vector2(SpecialActionToolbar.ICON_SIZE),
Icon = FontAwesome.Solid.Plus,
Action = () =>
{
float nextSize = sizes.GetNext(bindableFontSize.Value);
if (nextSize == default)
return;

bindableFontSize.Value = nextSize;
},
},
},
};

bindableFontSize.BindValueChanged(e =>
{
fontSizeSpriteText.Text = FontUtils.GetText(e.NewValue);
previousSizeButton.Enabled.Value = sizes.GetPrevious(e.NewValue) != default;
nextSizeButton.Enabled.Value = sizes.GetNext(e.NewValue) != default;
});
}

Expand All @@ -88,4 +64,58 @@ private void load(KaraokeRulesetLyricEditorConfigManager lyricEditorConfigManage
{
lyricEditorConfigManager.BindWith(KaraokeRulesetLyricEditorSetting.FontSizeInComposer, bindableFontSize);
}

private partial class DecreasePreviewFontSizeActionButton : PreviewFontSizeActionButton
{
protected override KaraokeEditAction EditAction => KaraokeEditAction.DecreasePreviewFontSize;

protected override float GetTriggeredFontSize(float[] sizes, float currentFontSize) => sizes.GetPrevious(currentFontSize);

public DecreasePreviewFontSizeActionButton()
{
SetIcon(FontAwesome.Solid.Minus);
}
}

private partial class IncreasePreviewFontSizeActionButton : PreviewFontSizeActionButton
{
protected override KaraokeEditAction EditAction => KaraokeEditAction.IncreasePreviewFontSize;

protected override float GetTriggeredFontSize(float[] sizes, float currentFontSize) => sizes.GetNext(currentFontSize);

public IncreasePreviewFontSizeActionButton()
{
SetIcon(FontAwesome.Solid.Plus);
}
}

private abstract partial class PreviewFontSizeActionButton : ToolbarEditActionButton
{
private static readonly float[] sizes = FontUtils.ComposerFontSize();

private readonly Bindable<float> bindableFontSize = new();

protected PreviewFontSizeActionButton()
{
Action = () =>
{
float triggeredFontSize = GetTriggeredFontSize(sizes, bindableFontSize.Value);
bindableFontSize.Value = triggeredFontSize != default ? triggeredFontSize : bindableFontSize.Value;
};

bindableFontSize.BindValueChanged(e =>
{
float triggeredFontSize = GetTriggeredFontSize(sizes, e.NewValue);
SetState(triggeredFontSize != default);
});
}

protected abstract float GetTriggeredFontSize(float[] sizes, float currentFontSize);

[BackgroundDependencyLoader]
private void load(KaraokeRulesetLyricEditorConfigManager lyricEditorConfigManager)
{
lyricEditorConfigManager.BindWith(KaraokeRulesetLyricEditorSetting.FontSizeInComposer, bindableFontSize);
}
}
}

0 comments on commit f0a82b3

Please sign in to comment.