mirror of
https://github.com/ppy/osu.git
synced 2024-12-13 08:32:57 +08:00
Add safe area support via ScalingContainer
This commit is contained in:
parent
180d583304
commit
52fdf0349f
@ -101,6 +101,9 @@ namespace osu.Game.Graphics.Containers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Resolved]
|
||||||
|
private ISafeArea safeArea { get; set; }
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(OsuConfigManager config)
|
private void load(OsuConfigManager config)
|
||||||
{
|
{
|
||||||
@ -118,6 +121,8 @@ namespace osu.Game.Graphics.Containers
|
|||||||
|
|
||||||
posY = config.GetBindable<float>(OsuSetting.ScalingPositionY);
|
posY = config.GetBindable<float>(OsuSetting.ScalingPositionY);
|
||||||
posY.ValueChanged += _ => updateSize();
|
posY.ValueChanged += _ => updateSize();
|
||||||
|
|
||||||
|
safeArea.SafeAreaPadding.BindValueChanged(_ => updateSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void LoadComplete()
|
protected override void LoadComplete()
|
||||||
@ -161,7 +166,10 @@ namespace osu.Game.Graphics.Containers
|
|||||||
|
|
||||||
var targetSize = scaling ? new Vector2(sizeX.Value, sizeY.Value) : Vector2.One;
|
var targetSize = scaling ? new Vector2(sizeX.Value, sizeY.Value) : Vector2.One;
|
||||||
var targetPosition = scaling ? new Vector2(posX.Value, posY.Value) * (Vector2.One - targetSize) : Vector2.Zero;
|
var targetPosition = scaling ? new Vector2(posX.Value, posY.Value) * (Vector2.One - targetSize) : Vector2.Zero;
|
||||||
bool requiresMasking = scaling && targetSize != Vector2.One;
|
bool requiresMasking = scaling && targetSize != Vector2.One
|
||||||
|
// For the top level scaling container, for now we apply masking if safe areas are in use.
|
||||||
|
// In the future this can likely be removed as more of the actual UI supports overflowing into the safe areas.
|
||||||
|
|| (targetMode == ScalingMode.Everything && safeArea.SafeAreaPadding.Value.Total != Vector2.Zero);
|
||||||
|
|
||||||
if (requiresMasking)
|
if (requiresMasking)
|
||||||
sizableContainer.Masking = true;
|
sizableContainer.Masking = true;
|
||||||
|
@ -299,16 +299,22 @@ namespace osu.Game
|
|||||||
|
|
||||||
GlobalActionContainer globalBindings;
|
GlobalActionContainer globalBindings;
|
||||||
|
|
||||||
var mainContent = new Drawable[]
|
base.Content.Add(new SafeAreaContainer
|
||||||
{
|
{
|
||||||
MenuCursorContainer = new MenuCursorContainer { RelativeSizeAxes = Axes.Both },
|
RelativeSizeAxes = Axes.Both,
|
||||||
// to avoid positional input being blocked by children, ensure the GlobalActionContainer is above everything.
|
Child = CreateScalingContainer().WithChildren(new Drawable[]
|
||||||
globalBindings = new GlobalActionContainer(this)
|
{
|
||||||
};
|
(MenuCursorContainer = new MenuCursorContainer
|
||||||
|
{
|
||||||
MenuCursorContainer.Child = content = new OsuTooltipContainer(MenuCursorContainer.Cursor) { RelativeSizeAxes = Axes.Both };
|
RelativeSizeAxes = Axes.Both
|
||||||
|
}).WithChild(content = new OsuTooltipContainer(MenuCursorContainer.Cursor)
|
||||||
base.Content.Add(CreateScalingContainer().WithChildren(mainContent));
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both
|
||||||
|
}),
|
||||||
|
// to avoid positional input being blocked by children, ensure the GlobalActionContainer is above everything.
|
||||||
|
globalBindings = new GlobalActionContainer(this)
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
KeyBindingStore = new RealmKeyBindingStore(realm, keyCombinationProvider);
|
KeyBindingStore = new RealmKeyBindingStore(realm, keyCombinationProvider);
|
||||||
KeyBindingStore.Register(globalBindings, RulesetStore.AvailableRulesets);
|
KeyBindingStore.Register(globalBindings, RulesetStore.AvailableRulesets);
|
||||||
|
Loading…
Reference in New Issue
Block a user