refactor git colours

This commit is contained in:
Matt Parker
2025-12-03 18:44:16 +10:00
parent 91cb6d7991
commit e8f4303b07
5 changed files with 44 additions and 19 deletions

View File

@@ -18,7 +18,7 @@ public class SharpIdeFile : ISharpIdeNode, IChildSharpIdeNode, IFileOrFolder
public bool IsCshtmlFile => Path.EndsWith(".cshtml", StringComparison.OrdinalIgnoreCase);
public bool IsCsharpFile => Path.EndsWith(".cs", StringComparison.OrdinalIgnoreCase);
public bool IsRoslynWorkspaceFile => IsCsharpFile || IsRazorFile || IsCshtmlFile;
public GitStatus GitStatus { get; set; } = GitStatus.Unaltered;
public GitFileStatus GitStatus { get; set; } = GitFileStatus.Unaltered;
public required ReactiveProperty<bool> IsDirty { get; init; }
public required bool SuppressDiskChangeEvents { get; set; } // probably has concurrency issues
public required DateTimeOffset? LastIdeWriteTime { get; set; }

View File

@@ -27,10 +27,10 @@ public static class VsPersistenceMapper
var mappedGitStatus = entry.State switch
{
FileStatus.NewInIndex | FileStatus.ModifiedInWorkdir => GitStatus.Added, // I've seen these appear together
FileStatus.NewInIndex or FileStatus.NewInWorkdir => GitStatus.Added,
FileStatus.ModifiedInIndex or FileStatus.ModifiedInWorkdir => GitStatus.Modified,
_ => GitStatus.Unaltered // TODO: handle other kinds?
FileStatus.NewInIndex | FileStatus.ModifiedInWorkdir => GitFileStatus.Added, // I've seen these appear together
FileStatus.NewInIndex or FileStatus.NewInWorkdir => GitFileStatus.Added,
FileStatus.ModifiedInIndex or FileStatus.ModifiedInWorkdir => GitFileStatus.Modified,
_ => GitFileStatus.Unaltered // TODO: handle other kinds?
};
fileInSolution.GitStatus = mappedGitStatus;
@@ -40,7 +40,7 @@ public static class VsPersistenceMapper
}
}
public enum GitStatus
public enum GitFileStatus
{
Unaltered,
Modified,

View File

@@ -0,0 +1,35 @@
using Godot;
using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence;
namespace SharpIDE.Godot.Features.Git;
public static class GitColours
{
private const string NewFileColourHexCode = "50964c";
private const string EditedFileColourHexCode = "6496ba";
private const string UnalteredFileColourHexCode = "d4d4d4";
public static readonly Color GitNewFileColour = new Color(NewFileColourHexCode);
public static readonly Color GitEditedFileColour = new Color(EditedFileColourHexCode);
public static readonly Color GitUnalteredFileColour = new Color(UnalteredFileColourHexCode);
public static readonly Color GitNewFileTransparentColour = new Color(NewFileColourHexCode, 0.4f);
public static readonly Color GitEditedFileTransparentColour = new Color(EditedFileColourHexCode, 0.4f);
public static readonly Color GitUnalteredFileTransparentColour = new Color(UnalteredFileColourHexCode, 0.4f);
public static Color GetColorForGitFileStatus(GitFileStatus fileStatus) => fileStatus switch
{
GitFileStatus.Added => GitNewFileColour,
GitFileStatus.Modified => GitEditedFileColour,
GitFileStatus.Unaltered => GitUnalteredFileColour,
_ => GitUnalteredFileColour
};
public static Color GetColorForGitLineStatus(GitFileStatus fileStatus) => fileStatus switch
{
GitFileStatus.Added => GitNewFileTransparentColour,
GitFileStatus.Modified => GitEditedFileTransparentColour,
GitFileStatus.Unaltered => GitUnalteredFileTransparentColour,
_ => GitUnalteredFileTransparentColour
};
}

View File

@@ -0,0 +1 @@
uid://ccdmpjeuj1lmy

View File

@@ -8,6 +8,7 @@ using SharpIDE.Application.Features.NavigationHistory;
using SharpIDE.Application.Features.SolutionDiscovery;
using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence;
using SharpIDE.Godot.Features.Common;
using SharpIDE.Godot.Features.Git;
using SharpIDE.Godot.Features.Problems;
namespace SharpIDE.Godot.Features.SolutionExplorer;
@@ -24,10 +25,6 @@ public partial class SolutionExplorerPanel : MarginContainer
public Texture2D CsprojIcon { get; set; } = null!;
[Export]
public Texture2D SlnIcon { get; set; } = null!;
private readonly Color _gitNewFileColour = new Color("50964c");
private readonly Color _gitEditedFileColour = new Color("6496ba");
private readonly Color _gitUnalteredFileColour = new Color("d4d4d4");
public SharpIdeSolutionModel SolutionModel { get; set; } = null!;
private Tree _tree = null!;
@@ -300,7 +297,7 @@ public partial class SolutionExplorerPanel : MarginContainer
var fileItem = tree.CreateItem(parent, newStartingIndex);
fileItem.SetText(0, sharpIdeFile.Name);
fileItem.SetIconsForFileExtension(sharpIdeFile);
fileItem.SetCustomColor(0, GetColorForGitStatus(sharpIdeFile.GitStatus));
fileItem.SetCustomColor(0, GitColours.GetColorForGitFileStatus(sharpIdeFile.GitStatus));
fileItem.SetMetadata(0, new RefCountedContainer<SharpIdeFile>(sharpIdeFile));
Observable.EveryValueChanged(sharpIdeFile, file => file.Name)
@@ -339,12 +336,4 @@ public partial class SolutionExplorerPanel : MarginContainer
{
await this.InvokeAsync(() => item?.Free());
}
private Color GetColorForGitStatus(GitStatus status) => status switch
{
GitStatus.Added => _gitNewFileColour,
GitStatus.Modified => _gitEditedFileColour,
GitStatus.Unaltered => _gitUnalteredFileColour,
_ => _gitUnalteredFileColour
};
}