Skip to content
This repository has been archived by the owner on Oct 4, 2021. It is now read-only.

Commit

Permalink
[Ide] Dynamically add ~contrast~dark~sel resource mappings
Browse files Browse the repository at this point in the history
to avoid adding duplicate EmbeddedResource entries to project files.
  • Loading branch information
sevoku committed Jan 23, 2020
1 parent b624686 commit 11fd096
Showing 1 changed file with 35 additions and 2 deletions.
37 changes: 35 additions & 2 deletions main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ImageService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -929,12 +929,45 @@ public IEnumerable<string> GetAlternativeFiles (string fileName, string baseName
resourceList.Sort (); // sort resources by name
}

return resourceList.Where (r => r.StartsWith (baseName) && r.EndsWith (ext));
return GetFinalFilelist (resourceList, baseName, ext);
}

IEnumerable<string> GetFinalFilelist (IEnumerable<string> source, string baseName, string ext)
{
foreach (var name in source) {
if (name.StartsWith (baseName) && name.EndsWith (ext)) {
yield return name;

var tagPortion = name.Substring (baseName.Length, name.Length - baseName.Length - ext.Length);
// to avoid duplicate resource entries in project files, add virtual file mappings for
// high contrast icons in selected state
if (tagPortion == "~dark~sel" || tagPortion == "~dark~sel@2x") {
var map = name.Replace ("~dark~sel", "~contrast~dark~sel");
if (virtualMappings == null) {
virtualMappings = new Dictionary<string, string> ();
}
if (!virtualMappings.ContainsKey (map)) {
virtualMappings.Add (map, name);
}
yield return map;
} else {
// remove existing mapping if a resource with the same name exists.
// note: we know that the source is sorted
virtualMappings?.Remove (name);
}
}
}
}

Dictionary<string, string> virtualMappings;

public Stream LoadImage (string fileName)
{
return addin.GetResource (fileName, true);
// load original resource if a mapping exists
if (virtualMappings != null && virtualMappings.TryGetValue (fileName, out var mapsTo))
return addin.GetResource (mapsTo, true);
else
return addin.GetResource (fileName, true);
}
}
}

0 comments on commit 11fd096

Please sign in to comment.