Basic icon for log window

It also clears the icon when you click on the window
This commit is contained in:
stefnotch
2021-02-21 12:53:08 +01:00
parent 09be8994e9
commit 1fb07a01d2
3 changed files with 79 additions and 6 deletions

View File

@@ -194,11 +194,22 @@ namespace FlaxEditor.GUI.Docking
bool isMouseOver = IsMouseOver && headerRect.Contains(MousePosition);
Render2D.FillRectangle(headerRect, containsFocus ? style.BackgroundSelected : isMouseOver ? style.BackgroundHighlighted : style.LightBackground);
float iconWidth = tab.Icon.IsValid ? DockPanel.DefaultButtonsSize + DockPanel.DefaultLeftTextMargin : 0;
if (tab.Icon.IsValid)
{
Render2D.DrawSprite(
tab.Icon,
new Rectangle(DockPanel.DefaultLeftTextMargin, (DockPanel.DefaultHeaderHeight - DockPanel.DefaultButtonsSize) / 2, DockPanel.DefaultButtonsSize, DockPanel.DefaultButtonsSize),
style.Foreground);
}
// Draw text
Render2D.DrawText(
style.FontMedium,
tab.Title,
new Rectangle(DockPanel.DefaultLeftTextMargin, 0, Width - DockPanel.DefaultLeftTextMargin - DockPanel.DefaultButtonsSize - 2 * DockPanel.DefaultButtonsMargin, DockPanel.DefaultHeaderHeight),
new Rectangle(DockPanel.DefaultLeftTextMargin + iconWidth, 0, Width - DockPanel.DefaultLeftTextMargin - DockPanel.DefaultButtonsSize - 2 * DockPanel.DefaultButtonsMargin, DockPanel.DefaultHeaderHeight),
style.Foreground,
TextAlignment.Near,
TextAlignment.Center);
@@ -223,7 +234,8 @@ namespace FlaxEditor.GUI.Docking
var tab = _panel.GetTab(i);
Color tabColor = Color.Black;
var titleSize = tab.TitleSize;
float width = titleSize.X + DockPanel.DefaultButtonsSize + 2 * DockPanel.DefaultButtonsMargin + DockPanel.DefaultLeftTextMargin + DockPanel.DefaultRightTextMargin;
float iconWidth = tab.Icon.IsValid ? DockPanel.DefaultButtonsSize + DockPanel.DefaultLeftTextMargin : 0;
float width = titleSize.X + DockPanel.DefaultButtonsSize + 2 * DockPanel.DefaultButtonsMargin + DockPanel.DefaultLeftTextMargin + DockPanel.DefaultRightTextMargin + iconWidth;
var tabRect = new Rectangle(x, 0, width, DockPanel.DefaultHeaderHeight);
bool isMouseOver = IsMouseOver && tabRect.Contains(MousePosition);
bool isSelected = _panel.SelectedTab == tab;
@@ -241,11 +253,20 @@ namespace FlaxEditor.GUI.Docking
Render2D.FillRectangle(tabRect, tabColor);
}
if (tab.Icon.IsValid)
{
Render2D.DrawSprite(
tab.Icon,
new Rectangle(x + DockPanel.DefaultLeftTextMargin, (DockPanel.DefaultHeaderHeight - DockPanel.DefaultButtonsSize) / 2, DockPanel.DefaultButtonsSize, DockPanel.DefaultButtonsSize),
style.Foreground);
}
// Draw text
Render2D.DrawText(
style.FontMedium,
tab.Title,
new Rectangle(x + DockPanel.DefaultLeftTextMargin, 0, 10000, DockPanel.DefaultHeaderHeight),
new Rectangle(x + DockPanel.DefaultLeftTextMargin + iconWidth, 0, 10000, DockPanel.DefaultHeaderHeight),
style.Foreground,
TextAlignment.Near,
TextAlignment.Center);

View File

@@ -88,6 +88,11 @@ namespace FlaxEditor.GUI.Docking
}
}
/// <summary>
/// Gets or sets the window icon
/// </summary>
public SpriteHandle Icon { get; set; }
/// <summary>
/// Gets the size of the title.
/// </summary>

View File

@@ -72,7 +72,7 @@ namespace FlaxEditor.Windows
/// <summary>
/// The default height of the entries.
/// </summary>
public const float DefaultHeight = 48.0f;
public const float DefaultHeight = 32.0f;
private DebugLogWindow _window;
public LogGroup Group;
@@ -128,10 +128,11 @@ namespace FlaxEditor.Windows
Render2D.FillRectangle(clientRect, style.Background * 0.9f);
// Icon
Render2D.DrawSprite(Icon, new Rectangle(5, 8, 32, 32), style.Foreground);
var iconColor = Group == LogGroup.Error ? Color.Red : (Group == LogGroup.Warning ? Color.Yellow : style.Foreground);
Render2D.DrawSprite(Icon, new Rectangle(5, 0, 32, 32), iconColor);
// Title
var textRect = new Rectangle(38, 6, clientRect.Width - 40, clientRect.Height - 10);
var textRect = new Rectangle(38, 2, clientRect.Width - 40, clientRect.Height - 10);
Render2D.PushClip(ref clientRect);
Render2D.DrawText(style.FontMedium, Desc.Title, textRect, style.Foreground);
Render2D.PopClip();
@@ -267,6 +268,8 @@ namespace FlaxEditor.Windows
private readonly ToolStripButton _pauseOnErrorButton;
private readonly ToolStripButton[] _groupButtons = new ToolStripButton[3];
private LogType _iconType = LogType.Info;
internal SpriteHandle IconInfo;
internal SpriteHandle IconWarning;
internal SpriteHandle IconError;
@@ -279,6 +282,7 @@ namespace FlaxEditor.Windows
: base(editor, true, ScrollBars.None)
{
Title = "Debug Log";
Icon = IconInfo;
OnEditorOptionsChanged(Editor.Options.Options);
// Toolstrip
@@ -333,6 +337,7 @@ namespace FlaxEditor.Windows
Editor.Options.OptionsChanged += OnEditorOptionsChanged;
Debug.Logger.LogHandler.SendLog += LogHandlerOnSendLog;
Debug.Logger.LogHandler.SendExceptionLog += LogHandlerOnSendExceptionLog;
}
private void OnEditorOptionsChanged(EditorOptions options)
@@ -381,6 +386,18 @@ namespace FlaxEditor.Windows
_pendingEntries.Add(newEntry);
}
if (newEntry.Group == LogGroup.Warning && _iconType < LogType.Warning)
{
_iconType = LogType.Warning;
UpdateIcon();
}
if (newEntry.Group == LogGroup.Error && _iconType < LogType.Error)
{
_iconType = LogType.Error;
UpdateIcon();
}
// Pause on Error (we should do it as fast as possible)
if (newEntry.Group == LogGroup.Error && _pauseOnErrorButton.Checked && Editor.StateMachine.CurrentState == Editor.StateMachine.PlayingState)
{
@@ -426,6 +443,12 @@ namespace FlaxEditor.Windows
UpdateCount((int)LogGroup.Error, " Error");
UpdateCount((int)LogGroup.Warning, " Warning");
UpdateCount((int)LogGroup.Info, " Message");
if (_logCountPerGroup[(int)LogGroup.Error] == 0)
{
_iconType = _logCountPerGroup[(int)LogGroup.Warning] == 0 ? LogType.Info : LogType.Warning;
UpdateIcon();
}
}
private void UpdateCount(int group, string msg)
@@ -435,6 +458,22 @@ namespace FlaxEditor.Windows
_groupButtons[group].Text = _logCountPerGroup[group] + msg;
}
private void UpdateIcon()
{
if (_iconType == LogType.Warning)
{
Icon = IconWarning;
}
else if (_iconType == LogType.Error)
{
Icon = IconError;
}
else
{
Icon = IconInfo;
}
}
private void LogHandlerOnSendLog(LogType level, string msg, Object o, string stackTrace)
{
var desc = new LogEntryDescription
@@ -566,6 +605,14 @@ namespace FlaxEditor.Windows
}
}
/// <inheritdoc />
public override void OnStartContainsFocus()
{
_iconType = LogType.Info;
UpdateIcon();
base.OnStartContainsFocus();
}
/// <inheritdoc />
public override void OnDestroy()
{