Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Unity Editor Font Size Changer -- EditorStyles

Unity Editor font size editor for the editor styles and skins

Preview Added custom styles ( 600+ ) Added Global Zoom ( increment all styles in the same time )

GIF PREVIEW : https://imgur.com/8jsy8sN

#if UNITY_EDITOR
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.Reflection;
public class EditorFontSize : EditorWindow
{
[MenuItem("Window/Editor Font Size")]
static void Open() => GetWindow<EditorFontSize>("Editor Font Size").minSize = new Vector2(180, 30);
Dictionary<string, bool> foldouts;
bool Header( string s )
{
if( foldouts == null ) foldouts = new Dictionary<string, bool>();
if( ! foldouts.ContainsKey( s ) ) foldouts.Add( s, true );
GUILayout.Space(5);
var foldout = EditorGUILayout.Foldout( ! foldouts[ s ], s, true );
foldouts[ s ] = ! foldout;
return foldout;
}
private void OnDisable()
{
guiSkins = null;
editorStyles = null;
propFontSizevalidity?.Clear();
propFontSizevalidity = null;
}
static List<GUIStyle> styles;
PropertyInfo[] editorStyles;
PropertyInfo[] guiSkins;
void GrapProperties()
{
if (editorStyles == null || editorStyles.Length < 1)
{
var flags = BindingFlags.Static | BindingFlags.Public | BindingFlags.GetProperty;
editorStyles = typeof(EditorStyles).GetProperties(flags);
}
if (guiSkins == null || guiSkins.Length < 1)
{
guiSkins = GUI.skin.GetType().GetProperties();
}
}
Vector2 scroll;
private void OnGUI()
{
rowCount = -1;
GrapProperties();
InitStyles();
var delta = FontSizeRow("Global Zoom", EditorStyles.miniLabel.fontSize.ToString() );
if (delta != 0 && EditorStyles.miniLabel.fontSize + delta > 0 )
{
// Keep watch for duplicates ( Prevent double modifications )
styles = new List<GUIStyle>();
foreach (var x in editorStyles)
{
if (!ValidFontProp(x, null)) continue;
var s = (GUIStyle)x.GetValue(null, null);
if (styles.Contains(s)) continue;
styles.Add(s);
s.fontSize += delta;
}
foreach (var x in guiSkins)
{
if (!ValidFontProp(x, GUI.skin)) continue;
var s = (GUIStyle)x.GetValue(GUI.skin, null);
if (styles.Contains(s)) continue;
styles.Add(s);
s.fontSize += delta;
}
foreach (var x in GUI.skin.customStyles)
{
if (!ValidFontStyle(x) || styles.Contains(x)) continue;
FixZeroSize(x);
styles.Add(x);
x.fontSize += delta;
}
styles.Clear();
RepaintAll();
}
GUILayout.Label("", GUI.skin.horizontalSlider);
using( var scope = new GUILayout.ScrollViewScope(scroll) )
{
scroll = scope.scrollPosition;
if( Header("Editor Styles" ) )
foreach (var x in editorStyles )
ModifyProp( x, null );
if( Header("GUI skins") )
foreach (var x in guiSkins )
ModifyProp(x, GUI.skin );
if( Header("Custom Styles") )
foreach( var x in GUI.skin.customStyles )
{
FontSizeRow( x );
RepaintAll();
}
}
}
void RepaintAll() { foreach ( var w in Resources.FindObjectsOfTypeAll<EditorWindow>() ) w.Repaint(); }
Dictionary<PropertyInfo, bool> propFontSizevalidity;
bool ValidFontProp( PropertyInfo x , object item)
{
if (propFontSizevalidity == null) propFontSizevalidity = new Dictionary<PropertyInfo, bool>();
if (propFontSizevalidity.ContainsKey(x)) return propFontSizevalidity[x];
propFontSizevalidity.Add(x, true);
if (string.IsNullOrEmpty(x.Name)) propFontSizevalidity[x] = false;
else if (x.PropertyType != typeof(GUIStyle)) propFontSizevalidity[x] = false;
else if (x.GetValue(item, null) == null) propFontSizevalidity[x] = false;
else if (((GUIStyle)x.GetValue(item, null)).fontSize < 1 ) propFontSizevalidity[x] = false;
return propFontSizevalidity[x];
}
void ModifyProp( PropertyInfo x, object item )
{
if (!ValidFontProp(x, item)) return;
var style = ((GUIStyle)x.GetValue(item, null));
var val = style.fontSize;
int ret = FontSizeRow( x.Name, val.ToString() );
if (ret == 0 || val + ret <= 0) return;
style.fontSize = val + ret;
RepaintAll();
}
GUIStyle evenBG;
GUIStyle oddBG;
void InitStyles()
{
if (evenBG != null) return;
GUIStyle s = "CN EntryBackEven";
evenBG = new GUIStyle(s);
s = "CN EntryBackodd";
oddBG = new GUIStyle(s);
evenBG.contentOffset = oddBG.contentOffset = new Vector2();
evenBG.clipping = oddBG.clipping = TextClipping.Clip;
evenBG.margin = oddBG.margin =
evenBG.padding = oddBG.padding = new RectOffset();
}
int rowCount = 0;
void FixZeroSize(GUIStyle s) => s.fontSize = s.fontSize < 1 ? 11 : s.fontSize;
bool ValidFontStyle( GUIStyle s ) => ! ( s == null || string.IsNullOrEmpty(s.name) );
void FontSizeRow( GUIStyle s )
{
if ( ! ValidFontStyle(s) ) return;
FixZeroSize( s );
var x = FontSizeRow(s.name, s.fontSize.ToString());
if (x != 0 && x + s.fontSize > 0) s.fontSize += x;
}
int FontSizeRow( string name, string size )
{
if (string.IsNullOrEmpty(name) || size == "0") return 0;
rowCount ++ ;
var width = GUILayout.MaxWidth(Screen.width);
using ( new GUILayout.HorizontalScope( rowCount % 2 == 0 ? evenBG : oddBG, width ) )
{
GUILayout.Label(name);
GUILayout.FlexibleSpace();
if (GUILayout.Button("-", EditorStyles.miniButtonLeft)) return -1;
using (new EditorGUI.DisabledGroupScope(true))
GUILayout.Label(size, EditorStyles.miniButtonMid, GUILayout.Width(30));
if (GUILayout.Button("+", EditorStyles.miniButtonRight)) return +1;
}
return 0;
}
}
#endif
@Dzynek

This comment has been minimized.

Copy link

@Dzynek Dzynek commented May 13, 2020

image
Unity 5.6.7f1 errors

Assets/EditorFontSize.cs(11,24): error CS1644: Feature `expression bodied members' cannot be used because it is not part of the C# 4.0 language specification
Assets/EditorFontSize.cs(29,29): error CS1644: Feature `null propagating operator' cannot be used because it is not part of the C# 4.0 language specification
Assets/EditorFontSize.cs(167,34): error CS1644: Feature `expression bodied members' cannot be used because it is not part of the C# 4.0 language specification
Assets/EditorFontSize.cs(169,39): error CS1644: Feature `expression bodied members' cannot be used because it is not part of the C# 4.0 language specification
@camta005

This comment has been minimized.

Copy link

@camta005 camta005 commented May 15, 2020

This is fantastic, you saved my marriage!
I notice that it doesn't work for the package manager, any change of adding that?

@camta005

This comment has been minimized.

Copy link

@camta005 camta005 commented May 15, 2020

@Dzynek you need to put the script in a folder named Editor

@Dzynek

This comment has been minimized.

Copy link

@Dzynek Dzynek commented May 21, 2020

Putting it in the Editor directory where I have Unity installed, e.g. "D: \ Unity \ Editors \ 2019.3.12f1 \ Editor" does not work (I tested on Unity from 5.6 to 2019.3)

It works (from Unity 2017 upwards) to be uploaded to the Assets catalog.

@camta005

This comment has been minimized.

Copy link

@camta005 camta005 commented May 21, 2020

@Dzynek you need to create a folder called Editor in the assets folder of your project and put it in there.

@philippludwig

This comment has been minimized.

Copy link

@philippludwig philippludwig commented Jun 15, 2020

Thank you, this works really well!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.