public static bool LogSlider(String title, ref float value, float min, float max, float defaultValue = 1.0f, int decimals = 0, String units = "", params GUILayoutOption[] options) { if (min < 0) { throw new Exception("LogSlider - min value: {min} must be >= 0"); } UI.BeginHorizontal(options); UI.Label(title.cyan(), UI.Width(300)); UI.Space(25); value = Math.Max(min, Math.Min(max, value)); // clamp it var offset = 1; var places = (int)Math.Max(0, Math.Min(15, 2.01 - Math.Log10(value + offset))); var logMin = 100f * (float)Math.Log10(min + offset); var logMax = 100f * (float)Math.Log10(max + offset); var logValue = 100f * (float)Math.Log10(value + offset); var logNewValue = (float)(GL.HorizontalSlider(logValue, logMin, logMax, UI.Width(200))); var newValue = (float)Math.Round(Math.Pow(10, logNewValue / 100f) - offset, places); UI.Space(25); UI.FloatTextField(ref newValue, null, UI.Width(75)); if (units.Length > 0) { UI.Label($"{units}".orange().bold(), UI.Width(25 + GUI.skin.label.CalcSize(new GUIContent(units)).x)); } UI.Space(25); UI.ActionButton("Reset", () => { newValue = defaultValue; }, UI.AutoWidth()); UI.EndHorizontal(); bool changed = value != newValue; value = newValue; return(changed); }
public static bool Slider(String title, ref float value, float min, float max, float defaultValue = 1.0f, int decimals = 0, String units = "", params GUILayoutOption[] options) { value = Math.Max(min, Math.Min(max, value)); // clamp it UI.BeginHorizontal(options); UI.Label(title.cyan(), UI.Width(300)); UI.Space(25); float newValue = (float)Math.Round(GL.HorizontalSlider(value, min, max, UI.Width(200)), decimals); UI.Space(25); UI.FloatTextField(ref newValue, null, UI.Width(75)); if (units.Length > 0) { UI.Label($"{units}".orange().bold(), UI.Width(25 + GUI.skin.label.CalcSize(new GUIContent(units)).x)); } UI.Space(25); UI.ActionButton("Reset", () => { newValue = defaultValue; }, UI.AutoWidth()); UI.EndHorizontal(); bool changed = value != newValue; value = newValue; return(changed); }