Add UI scale

Limited to (relatively) sane values until we eventually get around to adjusting UI to allow higher extermities.
This commit is contained in:
Dean Herbert 2019-01-09 19:01:33 +09:00
parent e4ff36a5bc
commit 4f5c208672
4 changed files with 50 additions and 4 deletions

View File

@ -105,6 +105,8 @@ protected override void InitialiseDefaults()
Set(OsuSetting.ScalingPositionX, 0.5f, 0f, 1f);
Set(OsuSetting.ScalingPositionY, 0.5f, 0f, 1f);
Set(OsuSetting.UIScale, 1f, 0.8f, 1.6f, 0.01f);
}
public OsuConfigManager(Storage storage)
@ -167,6 +169,7 @@ public enum OsuSetting
ScalingPositionX,
ScalingPositionY,
ScalingSizeX,
ScalingSizeY
ScalingSizeY,
UIScale
}
}

View File

@ -46,10 +46,37 @@ public ScalingContainer(ScalingMode? targetMode = null)
RelativeSizeAxes = Axes.Both,
RelativePositionAxes = Axes.Both,
CornerRadius = 10,
Child = content = new DrawSizePreservingFillContainer()
Child = content = new ScalingDrawSizePreservingFillContainer(targetMode != ScalingMode.Gameplay)
};
}
private class ScalingDrawSizePreservingFillContainer : DrawSizePreservingFillContainer
{
private readonly bool applyUIScale;
private Bindable<float> uiScale;
public ScalingDrawSizePreservingFillContainer(bool applyUIScale)
{
this.applyUIScale = applyUIScale;
}
[BackgroundDependencyLoader]
private void load(OsuConfigManager osuConfig)
{
if (applyUIScale)
{
uiScale = osuConfig.GetBindable<float>(OsuSetting.UIScale);
uiScale.BindValueChanged(scaleChanged, true);
}
}
private void scaleChanged(float value)
{
this.ScaleTo(new Vector2(value), 500, Easing.Out);
this.ResizeTo(new Vector2(1 / value), 500, Easing.Out);
}
}
[BackgroundDependencyLoader]
private void load(OsuConfigManager config)
{

View File

@ -359,7 +359,10 @@ protected override void LoadComplete()
{
RelativeSizeAxes = Axes.Both,
},
mainContent = new DrawSizePreservingFillContainer(),
mainContent = new Container
{
RelativeSizeAxes = Axes.Both,
},
overlayContent = new Container { RelativeSizeAxes = Axes.Both, Depth = float.MinValue },
idleTracker = new IdleTracker(6000)
});

View File

@ -63,9 +63,16 @@ private void load(FrameworkConfigManager config, OsuConfigManager osuConfig, Osu
RelativeSizeAxes = Axes.X,
AutoSizeAxes = Axes.Y
},
new SettingsSlider<float, UIScaleSlider>
{
LabelText = "UI Scaling",
TransferValueOnCommit = true,
Bindable = osuConfig.GetBindable<float>(OsuSetting.UIScale),
KeyboardStep = 0.01f
},
new SettingsEnumDropdown<ScalingMode>
{
LabelText = "Scaling",
LabelText = "Screen Scaling",
Bindable = osuConfig.GetBindable<ScalingMode>(OsuSetting.Scaling),
},
scalingSettings = new FillFlowContainer<SettingsSlider<float>>
@ -141,6 +148,7 @@ private void load(FrameworkConfigManager config, OsuConfigManager osuConfig, Osu
scalingSettings.ResizeHeightTo(0, transition_duration, Easing.OutQuint);
scalingSettings.ForEach(s => s.TransferValueOnCommit = mode == ScalingMode.Everything);
}, true);
}
@ -202,6 +210,11 @@ public ScalingPreview()
}
}
private class UIScaleSlider : OsuSliderBar<float>
{
public override string TooltipText => base.TooltipText + "x";
}
private class ResolutionSettingsDropdown : SettingsDropdown<Size>
{
protected override OsuDropdown<Size> CreateDropdown() => new ResolutionDropdownControl { Items = Items };