Skip to content

Instantly share code, notes, and snippets.

@daemon3000
Created August 18, 2015 16:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save daemon3000/ed9e617330e8b095bbf8 to your computer and use it in GitHub Desktop.
Save daemon3000/ed9e617330e8b095bbf8 to your computer and use it in GitHub Desktop.
BuiltInResourcesWindow
// From Unity wiki: http://wiki.unity3d.com/index.php/Show_Built_In_Resources
using System;
using UnityEditor;
using UnityEngine;
using System.Collections.Generic;
public class BuiltInResourcesWindow : EditorWindow
{
[MenuItem( "Window/Built-in styles and icons" )]
public static void ShowWindow()
{
BuiltInResourcesWindow w = (BuiltInResourcesWindow)EditorWindow.GetWindow<BuiltInResourcesWindow>();
w.Show();
}
private struct Drawing
{
public Rect Rect;
public Action Draw;
}
private List<Drawing> Drawings;
private List<UnityEngine.Object> _objects;
private float _scrollPos;
private float _maxY;
private Rect _oldPosition;
private bool _showingStyles = true;
private bool _showingIcons = false;
private string _search = "";
void OnGUI()
{
if( position.width != _oldPosition.width && Event.current.type == EventType.Layout )
{
Drawings = null;
_oldPosition = position;
}
GUILayout.BeginHorizontal();
if( GUILayout.Toggle( _showingStyles, "Styles", EditorStyles.toolbarButton ) != _showingStyles )
{
_showingStyles = !_showingStyles;
_showingIcons = !_showingStyles;
Drawings = null;
}
if( GUILayout.Toggle( _showingIcons, "Icons", EditorStyles.toolbarButton ) != _showingIcons )
{
_showingIcons = !_showingIcons;
_showingStyles = !_showingIcons;
Drawings = null;
}
GUILayout.EndHorizontal();
string newSearch = GUILayout.TextField(_search);
if (newSearch != _search)
{
_search = newSearch;
Drawings = null;
}
float top = 36;
if( Drawings == null )
{
string lowerSearch = _search.ToLower();
Drawings = new List<Drawing>();
GUIContent inactiveText = new GUIContent("inactive");
GUIContent activeText = new GUIContent( "active" );
float x = 5.0f;
float y = 5.0f;
if( _showingStyles )
{
foreach( GUIStyle ss in GUI.skin.customStyles )
{
if (lowerSearch != "" && !ss.name.ToLower().Contains(lowerSearch))
continue;
GUIStyle thisStyle = ss;
Drawing draw = new Drawing();
float width = Mathf.Max(
100.0f,
GUI.skin.button.CalcSize( new GUIContent( ss.name ) ).x,
ss.CalcSize( inactiveText ).x + ss.CalcSize( activeText ).x
) + 16.0f;
float height = 60.0f;
if( x + width > position.width - 32 && x > 5.0f )
{
x = 5.0f;
y += height + 10.0f;
}
draw.Rect = new Rect( x, y, width, height );
width -= 8.0f;
draw.Draw = () =>
{
if( GUILayout.Button( thisStyle.name, GUILayout.Width( width ) ) )
CopyText( "(GUIStyle)\"" + thisStyle.name + "\"" );
GUILayout.BeginHorizontal();
GUILayout.Toggle( false, inactiveText, thisStyle, GUILayout.Width( width / 2 ) );
GUILayout.Toggle( false, activeText, thisStyle, GUILayout.Width( width / 2 ) );
GUILayout.EndHorizontal();
};
x += width + 18.0f;
Drawings.Add( draw );
}
}
else if( _showingIcons )
{
if( _objects == null )
{
_objects = new List<UnityEngine.Object>( Resources.FindObjectsOfTypeAll( typeof( Texture2D ) ) );
_objects.Sort( ( pA, pB ) => System.String.Compare( pA.name, pB.name, System.StringComparison.OrdinalIgnoreCase ) );
}
float rowHeight = 0.0f;
foreach( UnityEngine.Object oo in _objects )
{
Texture2D texture = (Texture2D)oo;
if( texture.name == "" )
continue;
if (lowerSearch != "" && !texture.name.ToLower().Contains(lowerSearch))
continue;
Drawing draw = new Drawing();
float width = Mathf.Max(
GUI.skin.button.CalcSize( new GUIContent( texture.name ) ).x,
texture.width
) + 8.0f;
float height = texture.height + GUI.skin.button.CalcSize( new GUIContent( texture.name ) ).y + 8.0f;
if( x + width > position.width - 32.0f )
{
x = 5.0f;
y += rowHeight + 8.0f;
rowHeight = 0.0f;
}
draw.Rect = new Rect( x, y, width, height );
rowHeight = Mathf.Max( rowHeight, height );
width -= 8.0f;
draw.Draw = () =>
{
if( GUILayout.Button( texture.name, GUILayout.Width( width ) ) )
CopyText( "EditorGUIUtility.FindTexture( \"" + texture.name + "\" )" );
Rect textureRect = GUILayoutUtility.GetRect( texture.width, texture.width, texture.height, texture.height, GUILayout.ExpandHeight( false ), GUILayout.ExpandWidth( false ) );
EditorGUI.DrawTextureTransparent( textureRect, texture );
};
x += width + 8.0f;
Drawings.Add( draw );
}
}
_maxY = y;
}
Rect r = position;
r.y = top;
r.height -= r.y;
r.x = r.width - 16;
r.width = 16;
float areaHeight = position.height - top;
_scrollPos = GUI.VerticalScrollbar( r, _scrollPos, areaHeight, 0.0f, _maxY );
Rect area = new Rect(0, top, position.width - 16.0f, areaHeight);
GUILayout.BeginArea( area );
int count = 0;
foreach( Drawing draw in Drawings )
{
Rect newRect = draw.Rect;
newRect.y -= _scrollPos;
if( newRect.y + newRect.height > 0 && newRect.y < areaHeight )
{
GUILayout.BeginArea( newRect, GUI.skin.textField );
draw.Draw();
GUILayout.EndArea();
count++;
}
}
GUILayout.EndArea();
}
void CopyText( string pText )
{
TextEditor editor = new TextEditor();
editor.content = new GUIContent(pText);
editor.SelectAll();
editor.Copy();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment