Basic UserCard implementation

This commit is contained in:
Andrei Zavatski 2020-03-04 08:41:21 +03:00
parent 72fba177bb
commit f425233527
3 changed files with 126 additions and 0 deletions

View File

@ -0,0 +1,35 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using System;
using System.Collections.Generic;
using osu.Framework.Graphics;
using osu.Game.Graphics.UserInterfaceV2.Users;
using osu.Game.Users;
namespace osu.Game.Tests.Visual.UserInterface
{
public class TestSceneUserCard : OsuTestScene
{
public override IReadOnlyList<Type> RequiredTypes => new[]
{
typeof(UserCard),
typeof(UserGridCard),
};
public TestSceneUserCard()
{
Add(new UserGridCard(new User
{
Username = @"flyte",
Id = 3103765,
Country = new Country { FlagName = @"JP" },
CoverUrl = @"https://osu.ppy.sh/images/headers/profile-covers/c6.jpg"
})
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
});
}
}
}

View File

@ -0,0 +1,73 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using System;
using osu.Framework.Allocation;
using osu.Game.Overlays;
using osu.Framework.Graphics.UserInterface;
using osu.Game.Graphics.UserInterface;
using osu.Framework.Graphics.Cursor;
using osu.Game.Graphics.Containers;
using osu.Game.Users;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using System.Collections.Generic;
using osu.Framework.Input.Events;
namespace osu.Game.Graphics.UserInterfaceV2.Users
{
public abstract class UserCard : OsuHoverContainer, IHasContextMenu
{
[Resolved(canBeNull:true)]
private UserProfileOverlay profileOverlay { get; set; }
protected override IEnumerable<Drawable> EffectTargets => null;
public User User { get; }
public UserCard(User user)
{
if (user == null)
throw new ArgumentNullException(nameof(user));
User = user;
}
[BackgroundDependencyLoader]
private void load(OsuColour colours)
{
Action = () => profileOverlay?.ShowUser(User);
Masking = true;
BorderColour = colours.GreyVioletLighter;
Add(new DelayedLoadUnloadWrapper(() => new UserCoverBackground
{
RelativeSizeAxes = Axes.Both,
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
User = User,
}, 300, 5000)
{
RelativeSizeAxes = Axes.Both,
});
}
protected override bool OnHover(HoverEvent e)
{
BorderThickness = 2;
return base.OnHover(e);
}
protected override void OnHoverLost(HoverLostEvent e)
{
BorderThickness = 0;
base.OnHoverLost(e);
}
public MenuItem[] ContextMenuItems => new MenuItem[]
{
new OsuMenuItem("View Profile", MenuItemType.Highlighted, Action),
};
}
}

View File

@ -0,0 +1,18 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using osu.Game.Users;
using osuTK;
namespace osu.Game.Graphics.UserInterfaceV2.Users
{
public class UserGridCard : UserCard
{
public UserGridCard(User user)
: base(user)
{
Size = new Vector2(290, 120);
CornerRadius = 10;
}
}
}