Esempio n. 1
0
        public override void OnLabelDragged(InspectorField field)
        {
            if (InspectorPreferences.IsDragControl(InspectorPreferences.ValueScroll))
            {
                object result      = field.GetValues()[0];
                double sensitivity = CalculateDragSensitivity(result);
                result = Convert.ToDouble(result) + (double)(sensitivity * HandleUtility.niceMouseDelta);

                RangeValueAttribute rangeValue = field.GetAttribute <RangeValueAttribute>();
                if (rangeValue != null)
                {
                    result = Math.Min(Math.Max((double)result, rangeValue.Min), rangeValue.Max);
                }

                RangeAttribute range = field.GetAttribute <RangeAttribute>();
                if (range != null)
                {
                    result = Math.Min(Math.Max((double)result, range.min), range.max);
                }

                try
                {
                    result = Convert.ChangeType(result, field.Type);
                    field.SetValue(result);
                }
                catch (Exception)
                {
                    return;
                }
            }
        }
Esempio n. 2
0
 public override void OnLabelDraw(InspectorField field, Rect rect)
 {
     if (InspectorPreferences.IsDragControl(InspectorPreferences.ValueScroll))
     {
         EditorGUIUtility.AddCursorRect(rect, MouseCursor.ResizeHorizontal);
     }
 }
Esempio n. 3
0
        public override void OnLabelDragged(InspectorField field)
        {
            if (InspectorPreferences.IsDragControl(InspectorPreferences.ValueScroll))
            {
                object result = field.GetValues()[0];
                long   value  = Convert.ToInt64(result);
                result = (long)Math.Round(value + (CalculateDragSensitivity(value) * HandleUtility.niceMouseDelta * 0.1f));

                RangeValueAttribute rangeValue = field.GetAttribute <RangeValueAttribute>();
                if (rangeValue != null)
                {
                    result = Math.Min(Math.Max((long)result, (long)rangeValue.Min), (long)rangeValue.Max);
                }

                RangeAttribute range = field.GetAttribute <RangeAttribute>();
                if (range != null)
                {
                    result = Math.Min(Math.Max((long)result, (long)range.min), (long)range.max);
                }

                try
                {
                    result = Convert.ChangeType(result, field.Type);
                    field.SetValue(result);
                }
                catch (Exception)
                {
                    return;
                }
            }
        }
Esempio n. 4
0
        public static bool DrawFloatingNumber(GUIContent label, object[] values, RangeValueAttribute range, AngleAttribute angle, GUIStyle style, out object result, params GUILayoutOption[] options)
        {
            result = 0;

            EditorGUI.showMixedValue = false;
            result = values[0];
            Type type = result.GetType();

            for (int i = 1; i < values.Length; i++)
            {
                if (values[i].Equals(result))
                {
                    continue;
                }

                EditorGUI.showMixedValue = true;
                break;
            }

            EditorGUI.BeginChangeCheck();
            EditorGUILayout.BeginHorizontal();

            if (!string.IsNullOrEmpty(label.text))
            {
                int size = (int)GUI.skin.label.CalcSize(label).x;
                if (size > 4)
                {
                    size = Mathf.Max(size, 15);
                }

                GUILayout.Label(label, GUI.skin.label, GUILayout.Width(size));

                Event e         = Event.current;
                Rect  labelRect = GUILayoutUtility.GetLastRect();
                int   id        = EditorGUIUtility.GetControlID(FocusType.Native, labelRect);

                if (InspectorPreferences.IsDragControl(InspectorPreferences.ValueScroll))
                {
                    if (e.type == EventType.Repaint)
                    {
                        EditorGUIUtility.AddCursorRect(labelRect, MouseCursor.ResizeHorizontal);
                    }
                    else if (e.type == EventType.MouseDown && labelRect.Contains(e.mousePosition) && e.button == 0)
                    {
                        GUIUtility.hotControl      = id;
                        GUIUtility.keyboardControl = id;
                        EditorGUIUtility.SetWantsMouseJumping(1);
                        e.Use();
                    }
                    else if (e.type == EventType.MouseDrag && GUIUtility.hotControl == id)
                    {
                        double sensitivity = CalculateDragSensitivity(result);
                        result = Convert.ToDecimal(result) + (decimal)(sensitivity * HandleUtility.niceMouseDelta);

                        if (range != null)
                        {
                            result = Math.Min(Math.Max((double)result, (double)range.Min), (double)range.Max);
                        }

                        GUI.changed = true;
                        e.Use();
                    }
                    else if (e.type == EventType.MouseUp && GUIUtility.hotControl == id)
                    {
                        GUIUtility.hotControl = 0;
                        EditorGUIUtility.SetWantsMouseJumping(0);
                        e.Use();
                    }
                }
            }

            if (angle != null)
            {
                if (range != null)
                {
                    result = ExtraGUILayout.FloatAngle((float)result, angle.Snap, range.Min, range.Max);
                }
                else
                {
                    result = ExtraGUILayout.FloatAngle((float)result, angle.Snap);
                }
            }
            else
            {
                if (range != null)
                {
                    result = EditorGUILayout.Slider((float)result, range.Min, range.Max, options);
                }
                else
                {
                    if (style != null)
                    {
                        result = EditorGUILayout.TextField(result.ToString(), style, options);
                    }
                    else
                    {
                        result = EditorGUILayout.TextField(result.ToString(), options);
                    }
                }
            }

            try
            {
                result = Convert.ChangeType(result, type);
            }
            catch (Exception)
            {
                return(false);
            }

            EditorGUILayout.EndHorizontal();
            return(EditorGUI.EndChangeCheck());
        }