123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // --------------------------------------------------
- // UnityInjector - SafeConsole.cs
- // Copyright (c) Usagirei 2015 - 2015
- // --------------------------------------------------
- using System;
- using System.Reflection;
- namespace UnityInjector.ConsoleUtil
- {
- internal static class SafeConsole
- {
- private static GetColorDelegate _getBackgroundColor;
- private static GetColorDelegate _getForegroundColor;
- private static SetColorDelegate _setBackgroundColor;
- private static SetColorDelegate _setForegroundColor;
- public static ConsoleColor BackgroundColor
- {
- get { return _getBackgroundColor(); }
- set { _setBackgroundColor(value); }
- }
- public static ConsoleColor ForegroundColor
- {
- get { return _getForegroundColor(); }
- set { _setForegroundColor(value); }
- }
- static SafeConsole()
- {
- var tConsole = typeof(Console);
- InitColors(tConsole);
- }
- private static void InitColors(Type tConsole)
- {
- const BindingFlags BINDING_FLAGS = BindingFlags.Public | BindingFlags.Static;
- var sfc = tConsole.GetMethod("set_ForegroundColor", BINDING_FLAGS);
- var sbc = tConsole.GetMethod("set_BackgroundColor", BINDING_FLAGS);
- var gfc = tConsole.GetMethod("get_ForegroundColor", BINDING_FLAGS);
- var gbc = tConsole.GetMethod("get_BackgroundColor", BINDING_FLAGS);
- _setForegroundColor = sfc != null
- ? (SetColorDelegate)Delegate.CreateDelegate(typeof(SetColorDelegate), sfc)
- : (value => { });
- _setBackgroundColor = sbc != null
- ? (SetColorDelegate)Delegate.CreateDelegate(typeof(SetColorDelegate), sbc)
- : (value => { });
- _getForegroundColor = gfc != null
- ? (GetColorDelegate)Delegate.CreateDelegate(typeof(GetColorDelegate), gfc)
- : (() => ConsoleColor.Gray);
- _getBackgroundColor = gbc != null
- ? (GetColorDelegate)Delegate.CreateDelegate(typeof(GetColorDelegate), gbc)
- : (() => ConsoleColor.Black);
- }
- private delegate ConsoleColor GetColorDelegate();
- private delegate void SetColorDelegate(ConsoleColor value);
- }
- }
|