Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/tooltips for truncated labels #16590

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 7 additions & 2 deletions OpenRA.Game/Graphics/SpriteFont.cs
Expand Up @@ -112,7 +112,7 @@ public void DrawTextWithContrast(string text, float2 location, Color fg, Color b

public void DrawTextWithContrast(string text, float2 location, Color fg, Color bgDark, Color bgLight, int offset)
{
DrawTextWithContrast(text, location, fg, WidgetUtils.GetContrastColor(fg, bgDark, bgLight), offset);
DrawTextWithContrast(text, location, fg, GetContrastColor(fg, bgDark, bgLight), offset);
}

public void DrawTextWithShadow(string text, float2 location, Color fg, Color bg, int offset)
Expand All @@ -125,7 +125,7 @@ public void DrawTextWithShadow(string text, float2 location, Color fg, Color bg,

public void DrawTextWithShadow(string text, float2 location, Color fg, Color bgDark, Color bgLight, int offset)
{
DrawTextWithShadow(text, location, fg, WidgetUtils.GetContrastColor(fg, bgDark, bgLight), offset);
DrawTextWithShadow(text, location, fg, GetContrastColor(fg, bgDark, bgLight), offset);
}

public int2 Measure(string text)
Expand Down Expand Up @@ -185,6 +185,11 @@ GlyphInfo CreateGlyph(Pair<char, Color> c)
return g;
}

static Color GetContrastColor(Color fgColor, Color bgDark, Color bgLight)
{
return fgColor == Color.White || fgColor.GetBrightness() > 0.33 ? bgDark : bgLight;
}

public void Dispose()
{
font.Dispose();
Expand Down
1 change: 1 addition & 0 deletions OpenRA.Mods.Cnc/CncLoadScreen.cs
Expand Up @@ -13,6 +13,7 @@
using System.Diagnostics;
using OpenRA.Graphics;
using OpenRA.Mods.Common.LoadScreens;
using OpenRA.Mods.Common.Widgets;
using OpenRA.Primitives;
using OpenRA.Widgets;

Expand Down
1 change: 1 addition & 0 deletions OpenRA.Mods.Common/LoadScreens/LogoStripeLoadScreen.cs
Expand Up @@ -12,6 +12,7 @@
using System.Collections.Generic;
using System.Diagnostics;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Widgets;
using OpenRA.Primitives;
using OpenRA.Widgets;

Expand Down
1 change: 1 addition & 0 deletions OpenRA.Mods.Common/LoadScreens/ModContentLoadScreen.cs
Expand Up @@ -14,6 +14,7 @@
using System.IO;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Widgets;
using OpenRA.Primitives;
using OpenRA.Widgets;

Expand Down
1 change: 1 addition & 0 deletions OpenRA.Mods.Common/Scripting/Global/UtilsGlobal.cs
Expand Up @@ -11,6 +11,7 @@

using System.Linq;
using Eluant;
using OpenRA.Mods.Common.Widgets;
using OpenRA.Scripting;
using OpenRA.Widgets;

Expand Down
4 changes: 3 additions & 1 deletion OpenRA.Mods.Common/Widgets/Logic/AssetBrowserLogic.cs
Expand Up @@ -287,7 +287,9 @@ void AddAsset(ScrollPanelWidget list, string filepath, IReadOnlyPackage package,
() => currentFilename == filepath && currentPackage == package,
() => { LoadAsset(package, filepath); });

item.Get<LabelWidget>("TITLE").GetText = () => filepath;
var label = item.Get<LabelWithTooltipWidget>("TITLE");
WidgetUtils.TruncateLabelToTooltip(label, filepath);

item.IsVisible = () =>
{
bool visible;
Expand Down
3 changes: 2 additions & 1 deletion OpenRA.Mods.Common/Widgets/Logic/GameSaveBrowserLogic.cs
Expand Up @@ -201,7 +201,8 @@ void LoadGames(ScrollItemWidget gameTemplate, ScrollItemWidget newTemplate)
item.OnDoubleClick = Load;

var title = Path.GetFileNameWithoutExtension(savePath);
item.Get<LabelWidget>("TITLE").GetText = () => title;
var label = item.Get<LabelWithTooltipWidget>("TITLE");
WidgetUtils.TruncateLabelToTooltip(label, title);

var date = File.GetLastWriteTime(savePath).ToString("yyyy-MM-dd HH:mm:ss");
item.Get<LabelWidget>("DATE").GetText = () => date;
Expand Down
8 changes: 4 additions & 4 deletions OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs
Expand Up @@ -185,16 +185,16 @@ void CreateMissionGroup(string title, IEnumerable<MapPreview> previews)
header.Get<LabelWidget>("LABEL").GetText = () => title;
missionList.AddChild(header);

foreach (var p in previews)
foreach (var preview in previews)
{
var preview = p;

var item = ScrollItemWidget.Setup(template,
() => selectedMap != null && selectedMap.Uid == preview.Uid,
() => SelectMap(preview),
StartMissionClicked);

item.Get<LabelWidget>("TITLE").GetText = () => preview.Title;
var label = item.Get<LabelWithTooltipWidget>("TITLE");
WidgetUtils.TruncateLabelToTooltip(label, preview.Title);

missionList.AddChild(item);
}
}
Expand Down
7 changes: 4 additions & 3 deletions OpenRA.Mods.Common/Widgets/Logic/MusicPlayerLogic.cs
Expand Up @@ -132,11 +132,12 @@ public void BuildMusicTable()
currentSong = musicPlaylist.CurrentSong();

musicList.RemoveChildren();
foreach (var s in music)
foreach (var song in music)
{
var song = s;
var item = ScrollItemWidget.Setup(song.Filename, itemTemplate, () => currentSong == song, () => { currentSong = song; Play(); }, () => { });
item.Get<LabelWidget>("TITLE").GetText = () => song.Title;
var label = item.Get<LabelWithTooltipWidget>("TITLE");
WidgetUtils.TruncateLabelToTooltip(label, song.Title);

item.Get<LabelWidget>("LENGTH").GetText = () => SongLengthLabel(song);
musicList.AddChild(item);
}
Expand Down
4 changes: 3 additions & 1 deletion OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs
Expand Up @@ -709,7 +709,9 @@ void AddReplay(ReplayMetadata replay, ScrollItemWidget template)
};

item.Text = Path.GetFileNameWithoutExtension(replay.FilePath);
item.Get<LabelWidget>("TITLE").GetText = () => item.Text;
var label = item.Get<LabelWithTooltipWidget>("TITLE");
WidgetUtils.TruncateLabelToTooltip(label, item.Text);

item.IsVisible = () => replayState[replay].Visible;
replayList.AddChild(item);
}
Expand Down
6 changes: 2 additions & 4 deletions OpenRA.Mods.Common/Widgets/Logic/ServerListLogic.cs
Expand Up @@ -594,12 +594,10 @@ List<Widget> LoadGameRows(List<GameServer> games, out ScrollItemWidget nextServe

var canJoin = game.IsJoinable;
var item = ScrollItemWidget.Setup(serverTemplate, () => currentServer == game, () => SelectServer(game), () => onJoin(game));
var title = item.GetOrNull<LabelWidget>("TITLE");
var title = item.GetOrNull<LabelWithTooltipWidget>("TITLE");
if (title != null)
{
var font = Game.Renderer.Fonts[title.Font];
var label = WidgetUtils.TruncateText(game.Name, title.Bounds.Width, font);
title.GetText = () => label;
WidgetUtils.TruncateLabelToTooltip(title, game.Name);
title.GetColor = () => canJoin ? title.TextColor : incompatibleGameColor;
}

Expand Down
Expand Up @@ -14,7 +14,7 @@
using OpenRA.Graphics;
using OpenRA.Primitives;

namespace OpenRA.Widgets
namespace OpenRA.Mods.Common.Widgets
{
public static class WidgetUtils
{
Expand Down Expand Up @@ -265,9 +265,16 @@ public static string TruncateText(string text, int width, SpriteFont font)
return trimmed;
}

public static Color GetContrastColor(Color fgColor, Color bgDark, Color bgLight)
public static void TruncateLabelToTooltip(LabelWithTooltipWidget label, string text)
{
return fgColor == Color.White || fgColor.GetBrightness() > 0.33 ? bgDark : bgLight;
var truncatedText = TruncateText(text, label.Bounds.Width, Game.Renderer.Fonts[label.Font]);

label.GetText = () => truncatedText;

if (text != truncatedText)
label.GetTooltipText = () => text;
else
label.GetTooltipText = null;
}
}

Expand Down
6 changes: 5 additions & 1 deletion mods/cnc/chrome/assetbrowser.yaml
Expand Up @@ -48,11 +48,14 @@ Container@ASSETBROWSER_PANEL:
X: 2
Y: 0
Visible: false
EnableChildMouseOver: True
Children:
Label@TITLE:
LabelWithTooltip@TITLE:
X: 10
Width: PARENT_RIGHT - 15
Height: 25
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
Label@FILENAME_DESC:
X: 15
Y: 340
Expand Down Expand Up @@ -200,3 +203,4 @@ Container@ASSETBROWSER_PANEL:
Width: 140
Height: 35
Text: Back
TooltipContainer@TOOLTIP_CONTAINER:
7 changes: 5 additions & 2 deletions mods/cnc/chrome/gamesave-browser.yaml
Expand Up @@ -48,11 +48,14 @@ Container@GAMESAVE_BROWSER_PANEL:
Height: 25
X: 2
Visible: false
EnableChildMouseOver: True
Children:
Label@TITLE:
LabelWithTooltip@TITLE:
X: 10
Width: PARENT_RIGHT - 200 - 10
Height: 25
TooltipContainer: GAMESAVE_TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
Label@DATE:
X: PARENT_RIGHT - WIDTH - 10
Width: 200
Expand Down Expand Up @@ -112,4 +115,4 @@ Container@GAMESAVE_BROWSER_PANEL:
Height: 35
Text: Save
Visible: False
TooltipContainer@TOOLTIP_CONTAINER:
TooltipContainer@GAMESAVE_TOOLTIP_CONTAINER:
pchote marked this conversation as resolved.
Show resolved Hide resolved
5 changes: 4 additions & 1 deletion mods/cnc/chrome/lobby-music.yaml
Expand Up @@ -154,11 +154,14 @@ Container@LOBBY_MUSIC_BIN:
Height: 25
X: 2
Visible: false
EnableChildMouseOver: True
Children:
Label@TITLE:
LabelWithTooltip@TITLE:
X: 10
Width: PARENT_RIGHT - 50
Height: 25
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
Label@LENGTH:
X: PARENT_RIGHT - 60
Width: 50
Expand Down
4 changes: 3 additions & 1 deletion mods/cnc/chrome/lobby-servers.yaml
Expand Up @@ -85,10 +85,12 @@ Container@LOBBY_SERVERS_BIN:
X: 2
EnableChildMouseOver: True
Children:
Label@TITLE:
LabelWithTooltip@TITLE:
X: 5
Width: 245
Height: 25
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
Image@PASSWORD_PROTECTED:
X: 272
Y: 6
Expand Down
6 changes: 5 additions & 1 deletion mods/cnc/chrome/missionbrowser.yaml
Expand Up @@ -39,11 +39,14 @@ Container@MISSIONBROWSER_PANEL:
Height: 25
X: 2
Visible: False
EnableChildMouseOver: True
Children:
Label@TITLE:
LabelWithTooltip@TITLE:
X: 10
Width: PARENT_RIGHT - 20
Height: 25
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
Container@MISSION_INFO:
X: 337
Y: 15
Expand Down Expand Up @@ -148,6 +151,7 @@ Container@MISSIONBROWSER_PANEL:
Y: 1
Width: 712
Height: 418
TooltipContainer@TOOLTIP_CONTAINER:

Background@FULLSCREEN_PLAYER:
Width: WINDOW_RIGHT
Expand Down
4 changes: 3 additions & 1 deletion mods/cnc/chrome/multiplayer-browser.yaml
Expand Up @@ -106,10 +106,12 @@ Container@MULTIPLAYER_PANEL:
X: 2
EnableChildMouseOver: True
Children:
Label@TITLE:
LabelWithTooltip@TITLE:
X: 5
Width: 245
Height: 25
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
Image@PASSWORD_PROTECTED:
X: 272
Y: 6
Expand Down
6 changes: 5 additions & 1 deletion mods/cnc/chrome/music.yaml
Expand Up @@ -30,11 +30,14 @@ Container@MUSIC_PANEL:
X: 2
Y: 0
Visible: false
EnableChildMouseOver: True
Children:
Label@TITLE:
LabelWithTooltip@TITLE:
X: 10
Width: PARENT_RIGHT - 50
Height: 25
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
Label@LENGTH:
Width: 50
X: PARENT_RIGHT - 60
Expand Down Expand Up @@ -192,3 +195,4 @@ Container@MUSIC_PANEL:
Width: 300
Height: 20
Font: Small
TooltipContainer@TOOLTIP_CONTAINER:
7 changes: 5 additions & 2 deletions mods/cnc/chrome/replaybrowser.yaml
Expand Up @@ -167,7 +167,7 @@ Container@REPLAYBROWSER_PANEL:
Container@REPLAY_LIST_CONTAINER:
X: 310
Y: 20
Width: 245
Width: 250
Height: PARENT_BOTTOM - 20 - 20
Children:
Label@REPLAYBROWSER_LABEL_TITLE:
Expand All @@ -188,11 +188,14 @@ Container@REPLAYBROWSER_PANEL:
Height: 25
X: 2
Visible: false
EnableChildMouseOver: True
Children:
Label@TITLE:
LabelWithTooltip@TITLE:
X: 10
Width: PARENT_RIGHT - 20
Height: 25
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
Container@MAP_PREVIEW_ROOT:
X: PARENT_RIGHT - WIDTH - 20
Y: 50
Expand Down
6 changes: 5 additions & 1 deletion mods/common/chrome/assetbrowser.yaml
Expand Up @@ -43,11 +43,14 @@ Background@ASSETBROWSER_PANEL:
X: 2
Y: 0
Visible: false
EnableChildMouseOver: True
Children:
Label@TITLE:
LabelWithTooltip@TITLE:
X: 10
Width: PARENT_RIGHT - 20
Height: 25
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
Label@FILENAME_DESC:
X: 20
Y: 370
Expand Down Expand Up @@ -203,3 +206,4 @@ Background@ASSETBROWSER_PANEL:
Height: 25
Font: Bold
Text: Close
TooltipContainer@TOOLTIP_CONTAINER:
7 changes: 5 additions & 2 deletions mods/common/chrome/gamesave-browser.yaml
Expand Up @@ -43,11 +43,14 @@ Background@GAMESAVE_BROWSER_PANEL:
Height: 25
X: 2
Visible: false
EnableChildMouseOver: True
Children:
Label@TITLE:
LabelWithTooltip@TITLE:
X: 10
Width: PARENT_RIGHT - 200 - 10
Height: 25
TooltipContainer: GAMESAVE_TOOLTIP_CONTAINER
pchote marked this conversation as resolved.
Show resolved Hide resolved
TooltipTemplate: SIMPLE_TOOLTIP
Label@DATE:
X: PARENT_RIGHT - WIDTH - 10
Width: 200
Expand Down Expand Up @@ -113,4 +116,4 @@ Background@GAMESAVE_BROWSER_PANEL:
Text: Save
Font: Bold
Visible: False
TooltipContainer@TOOLTIP_CONTAINER:
TooltipContainer@GAMESAVE_TOOLTIP_CONTAINER:
pchote marked this conversation as resolved.
Show resolved Hide resolved
5 changes: 4 additions & 1 deletion mods/common/chrome/lobby-music.yaml
Expand Up @@ -144,11 +144,14 @@ Container@LOBBY_MUSIC_BIN:
Height: 25
X: 2
Visible: false
EnableChildMouseOver: True
Children:
Label@TITLE:
LabelWithTooltip@TITLE:
X: 10
Width: PARENT_RIGHT - 50
Height: 25
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
Label@LENGTH:
X: PARENT_RIGHT - 60
Width: 50
Expand Down