mirror of
https://github.com/ppy/osu.git
synced 2025-03-11 16:57:21 +08:00
Avoid using a BufferedContainer for backgrounds unless required
This commit is contained in:
parent
115dcc3147
commit
6c7b97931e
@ -6,23 +6,28 @@ using osu.Framework.Graphics;
|
|||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
using osu.Framework.Graphics.Textures;
|
using osu.Framework.Graphics.Textures;
|
||||||
|
using osu.Framework.Graphics.Transforms;
|
||||||
|
using osuTK;
|
||||||
|
|
||||||
namespace osu.Game.Graphics.Backgrounds
|
namespace osu.Game.Graphics.Backgrounds
|
||||||
{
|
{
|
||||||
public class Background : BufferedContainer
|
/// <summary>
|
||||||
|
/// A background which offer blurring on demand.
|
||||||
|
/// </summary>
|
||||||
|
public class Background : CompositeDrawable
|
||||||
{
|
{
|
||||||
public Sprite Sprite;
|
public Sprite Sprite;
|
||||||
|
|
||||||
private readonly string textureName;
|
private readonly string textureName;
|
||||||
|
|
||||||
|
private BufferedContainer bufferedContainer;
|
||||||
|
|
||||||
public Background(string textureName = @"")
|
public Background(string textureName = @"")
|
||||||
{
|
{
|
||||||
CacheDrawnFrameBuffer = true;
|
|
||||||
|
|
||||||
this.textureName = textureName;
|
this.textureName = textureName;
|
||||||
RelativeSizeAxes = Axes.Both;
|
RelativeSizeAxes = Axes.Both;
|
||||||
|
|
||||||
Add(Sprite = new Sprite
|
AddInternal(Sprite = new Sprite
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
@ -37,5 +42,28 @@ namespace osu.Game.Graphics.Backgrounds
|
|||||||
if (!string.IsNullOrEmpty(textureName))
|
if (!string.IsNullOrEmpty(textureName))
|
||||||
Sprite.Texture = textures.Get(textureName);
|
Sprite.Texture = textures.Get(textureName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Vector2 BlurSigma => bufferedContainer?.BlurSigma ?? Vector2.Zero;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Smoothly adjusts <see cref="IBufferedContainer.BlurSigma"/> over time.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A <see cref="TransformSequence{T}"/> to which further transforms can be added.</returns>
|
||||||
|
public void BlurTo(Vector2 newBlurSigma, double duration = 0, Easing easing = Easing.None)
|
||||||
|
{
|
||||||
|
if (bufferedContainer == null)
|
||||||
|
{
|
||||||
|
RemoveInternal(Sprite);
|
||||||
|
|
||||||
|
AddInternal(bufferedContainer = new BufferedContainer
|
||||||
|
{
|
||||||
|
CacheDrawnFrameBuffer = true,
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
Child = Sprite
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
bufferedContainer.BlurTo(newBlurSigma, duration, easing);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user