From e72c009dd73dd81e5add4c8b5ba6e903e6a406c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Tue, 18 Jul 2017 10:53:41 +0300 Subject: [PATCH 1/5] Highlight custom-named users --- osu-framework | 2 +- osu.Game/Overlays/Chat/ChatLine.cs | 50 +++++++++++++++++++----------- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/osu-framework b/osu-framework index 991177da4f..9669c3e067 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 991177da4fbed2dd8260c215f2d341ebc858b03e +Subproject commit 9669c3e06715330e1c8544676caf7fbc0328e92d diff --git a/osu.Game/Overlays/Chat/ChatLine.cs b/osu.Game/Overlays/Chat/ChatLine.cs index 3aaca7593c..d05284774b 100644 --- a/osu.Game/Overlays/Chat/ChatLine.cs +++ b/osu.Game/Overlays/Chat/ChatLine.cs @@ -8,6 +8,8 @@ using osu.Game.Graphics.Sprites; using osu.Game.Online.Chat; using OpenTK; using OpenTK.Graphics; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Graphics.Effects; namespace osu.Game.Overlays.Chat { @@ -53,15 +55,6 @@ namespace osu.Game.Overlays.Chat OsuColour.FromHex("992861"), }; - private Color4 getUsernameColour(Message message) - { - if (!string.IsNullOrEmpty(message.Sender?.Colour)) - return OsuColour.FromHex(message.Sender.Colour); - - //todo: use User instead of Message when user_id is correctly populated. - return username_colours[message.UserId % username_colours.Length]; - } - public const float LEFT_PADDING = message_padding + padding * 2; private const float padding = 15; @@ -77,6 +70,35 @@ namespace osu.Game.Overlays.Chat Padding = new MarginPadding { Left = padding, Right = padding }; + bool hasBackground = !string.IsNullOrEmpty(message.Sender?.Colour); + Drawable username = new OsuSpriteText + { + Origin = Anchor.TopRight, + Anchor = Anchor.TopRight, + Font = @"Exo2.0-BoldItalic", + Text = $@"{Message.Sender.Username}:", + Colour = hasBackground ? Color4.Black : username_colours[message.UserId % username_colours.Length], + TextSize = text_size, + }; + + if (hasBackground) + { + username = username.WithEffect(new EdgeEffect + { + CornerRadius = 4, + Parameters = new EdgeEffectParameters + { + Radius = 1, + Colour = OsuColour.FromHex(message.Sender.Colour), + Type = EdgeEffectType.Shadow, + } + }, d => + { + d.Padding = new MarginPadding { Top = -2 }; + d.Y = 2; + }); + } + Children = new Drawable[] { new Container @@ -94,15 +116,7 @@ namespace osu.Game.Overlays.Chat TextSize = text_size * 0.75f, Alpha = 0.4f, }, - new OsuSpriteText - { - Font = @"Exo2.0-BoldItalic", - Text = $@"{Message.Sender.Username}:", - Colour = getUsernameColour(Message), - TextSize = text_size, - Origin = Anchor.TopRight, - Anchor = Anchor.TopRight, - } + username } }, new Container From 52acd23a5af03b7936e064ce2165d84b2ad9c10a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Tue, 18 Jul 2017 10:54:57 +0300 Subject: [PATCH 2/5] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index 9669c3e067..2a3b245da9 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 9669c3e06715330e1c8544676caf7fbc0328e92d +Subproject commit 2a3b245da9eff604be09d473203f829690d2808c From e58ea97604b25b169ba655a00e0cd9273cd8d1b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Tue, 18 Jul 2017 12:26:05 +0300 Subject: [PATCH 3/5] Improve design as requested --- osu.Game/Overlays/Chat/ChatLine.cs | 44 ++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/osu.Game/Overlays/Chat/ChatLine.cs b/osu.Game/Overlays/Chat/ChatLine.cs index d05284774b..6985781c0d 100644 --- a/osu.Game/Overlays/Chat/ChatLine.cs +++ b/osu.Game/Overlays/Chat/ChatLine.cs @@ -8,8 +8,9 @@ using osu.Game.Graphics.Sprites; using osu.Game.Online.Chat; using OpenTK; using OpenTK.Graphics; -using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Effects; +using osu.Framework.Extensions.Color4Extensions; +using osu.Framework.Allocation; namespace osu.Game.Overlays.Chat { @@ -61,6 +62,8 @@ namespace osu.Game.Overlays.Chat private const float message_padding = 200; private const float text_size = 20; + private Color4 customUsernameColour; + public ChatLine(Message message) { Message = message; @@ -69,33 +72,58 @@ namespace osu.Game.Overlays.Chat AutoSizeAxes = Axes.Y; Padding = new MarginPadding { Left = padding, Right = padding }; + } - bool hasBackground = !string.IsNullOrEmpty(message.Sender?.Colour); + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + customUsernameColour = colours.ChatBlue; + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + bool hasBackground = !string.IsNullOrEmpty(Message.Sender?.Colour); Drawable username = new OsuSpriteText { Origin = Anchor.TopRight, Anchor = Anchor.TopRight, Font = @"Exo2.0-BoldItalic", - Text = $@"{Message.Sender.Username}:", - Colour = hasBackground ? Color4.Black : username_colours[message.UserId % username_colours.Length], + Text = $@"{Message.Sender.Username}" + (hasBackground ? "" : ":"), + Colour = hasBackground ? customUsernameColour : username_colours[Message.UserId % username_colours.Length], TextSize = text_size, }; if (hasBackground) { + // Background effect username = username.WithEffect(new EdgeEffect { CornerRadius = 4, Parameters = new EdgeEffectParameters { Radius = 1, - Colour = OsuColour.FromHex(message.Sender.Colour), + Colour = OsuColour.FromHex(Message.Sender.Colour), Type = EdgeEffectType.Shadow, } }, d => { - d.Padding = new MarginPadding { Top = -2 }; - d.Y = 2; + d.Padding = new MarginPadding { Left = 3, Right = 3, Bottom = 1, Top = -3 }; + d.Y = 3; + }) + // Drop shadow effect + .WithEffect(new EdgeEffect + { + CornerRadius = 4, + Parameters = new EdgeEffectParameters + { + Roundness = 1, + Offset = new Vector2(0, 3), + Radius = 3, + Colour = Color4.Black.Opacity(0.3f), + Type = EdgeEffectType.Shadow, + } }); } @@ -104,7 +132,7 @@ namespace osu.Game.Overlays.Chat new Container { Size = new Vector2(message_padding, text_size), - Children = new Drawable[] + Children = new[] { new OsuSpriteText { From fce5a191f10b47666aeb9ce98efd226fd94e6acf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Tue, 18 Jul 2017 12:26:27 +0300 Subject: [PATCH 4/5] Migrate padding into the scroll content to not cut off effects --- osu.Game/Overlays/Chat/DrawableChannel.cs | 3 +++ osu.Game/Overlays/ChatOverlay.cs | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/osu.Game/Overlays/Chat/DrawableChannel.cs b/osu.Game/Overlays/Chat/DrawableChannel.cs index e51f931959..8a2fa95ed1 100644 --- a/osu.Game/Overlays/Chat/DrawableChannel.cs +++ b/osu.Game/Overlays/Chat/DrawableChannel.cs @@ -29,6 +29,9 @@ namespace osu.Game.Overlays.Chat scroll = new OsuScrollContainer { RelativeSizeAxes = Axes.Both, + // Some chat lines have effects that slightly protrude to the bottom, + // which we do not want to mask away, hence the padding. + Padding = new MarginPadding { Bottom = 5 }, Children = new Drawable[] { flow = new FillFlowContainer diff --git a/osu.Game/Overlays/ChatOverlay.cs b/osu.Game/Overlays/ChatOverlay.cs index 700889ed26..1f9f7e57ca 100644 --- a/osu.Game/Overlays/ChatOverlay.cs +++ b/osu.Game/Overlays/ChatOverlay.cs @@ -111,7 +111,7 @@ namespace osu.Game.Overlays RelativeSizeAxes = Axes.Both, Padding = new MarginPadding { - Bottom = textbox_height + padding + Bottom = textbox_height }, }, new Container From a225b542d5a36aa6886d5e89fd718f6dd3c3ecb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Tue, 18 Jul 2017 12:35:36 +0300 Subject: [PATCH 5/5] Sender is always non-null --- osu.Game/Overlays/Chat/ChatLine.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Overlays/Chat/ChatLine.cs b/osu.Game/Overlays/Chat/ChatLine.cs index 6985781c0d..198a2a9419 100644 --- a/osu.Game/Overlays/Chat/ChatLine.cs +++ b/osu.Game/Overlays/Chat/ChatLine.cs @@ -84,7 +84,7 @@ namespace osu.Game.Overlays.Chat { base.LoadComplete(); - bool hasBackground = !string.IsNullOrEmpty(Message.Sender?.Colour); + bool hasBackground = !string.IsNullOrEmpty(Message.Sender.Colour); Drawable username = new OsuSpriteText { Origin = Anchor.TopRight,