Skip to content

Instantly share code, notes, and snippets.

@Borod4r
Last active April 26, 2016 03:10
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Borod4r/07f9fc45e953a93dddbe to your computer and use it in GitHub Desktop.
Save Borod4r/07f9fc45e953a93dddbe to your computer and use it in GitHub Desktop.
CustomFolderIcons.cs
/*
* This script allows you to set custom icons for folders in project browser.
* Recommended icon sizes - small: 16x16 px, large: 64x64 px;
*
* author: Ivan Gadzhega.
* rev: 3
*/
using System.Diagnostics.CodeAnalysis;
using System.IO;
using UnityEditor;
using UnityEngine;
namespace Borodar.Editor
{
[InitializeOnLoad]
public class CustomFolderIcons
{
private const string ICONS_FOLDER_PATH = "Assets/Editor/Sprites/";
static CustomFolderIcons()
{
EditorApplication.projectWindowItemOnGUI += ReplaceFolderIcon;
}
static void ReplaceFolderIcon(string guid, Rect rect)
{
var path = AssetDatabase.GUIDToAssetPath(guid);
if (!AssetDatabase.IsValidFolder(path)) return;
string smallIconName, largeIconName;
switch (Path.GetFileName(path))
{
case "_Scripts":
smallIconName = "scripts_icon_16.png";
largeIconName = "scripts_icon_64.png";
break;
case "_Scenes":
smallIconName = "scenes_icon_16.png";
largeIconName = "scenes_icon_64.png";
break;
default:
return;
}
string spritePath;
if (rect.width > rect.height)
{
rect.width = rect.height;
spritePath = ICONS_FOLDER_PATH + smallIconName;
}
else
{
rect.height = rect.width;
spritePath = ICONS_FOLDER_PATH + largeIconName;
}
var sprite = AssetDatabase.LoadAssetAtPath(spritePath, typeof(Sprite)) as Sprite;
DrawTextureGUI(rect, sprite);
}
[SuppressMessage("ReSharper", "InconsistentNaming")]
private static void DrawTextureGUI(Rect position, Sprite sprite)
{
var actualSpriteRect = new Rect(sprite.rect.x / sprite.texture.width, sprite.rect.y / sprite.texture.height, sprite.rect.width / sprite.texture.width, sprite.rect.height / sprite.texture.height);
var actualSize = position.size;
actualSize.y *= (sprite.rect.height / sprite.rect.width);
var actualPosition = new Rect(position.x, position.y + (position.size.y - actualSize.y) / 2, actualSize.x, actualSize.y);
GUI.DrawTextureWithTexCoords(actualPosition, sprite.texture, actualSpriteRect);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment