Пример #1
0
        /// <summary>
        /// A colored rectangle that acts like a button.
        /// </summary>
        public static bool Box(this Data.Selection selection, ref bool IsPressed, Event e, Color normal, Color hovered, Color pressed, Action onPressed = null)
        {
            var wasPressed = false;
            var color      = normal;

            selection.immediate.rect.Draw().Selection().Area(ref IsPressed, false, out wasPressed, e, () => { color = normal; }, () => { }, () => { color = pressed; });

            if (IsPressed)
            {
                EditorGUI.DrawRect(selection.immediate.rect, pressed);
                onPressed?.Invoke();
            }
            else
            {
                if (e.Mouse().Is().Inside(selection.immediate.rect))
                {
                    EditorGUI.DrawRect(selection.immediate.rect, hovered);
                }
                else
                {
                    EditorGUI.DrawRect(selection.immediate.rect, normal);
                }
            }

            return(IsPressed);
        }
Пример #2
0
        /// <summary>
        /// A rect that has callbacks for when its hovered, pressed, or doing nothing.
        /// </summary>
        public static void Area(this Data.Selection selection, ref bool isBeingPressed, bool isActiveSelection, out bool wasPressed, Event e, Action normal, Action active, Action pressed)
        {
            bool justReleased = false;

            wasPressed = false;

            if (e.type == EventType.MouseDown)
            {
                isBeingPressed = true;
            }

            if (e.type == EventType.MouseUp)
            {
                if (isBeingPressed == true)
                {
                    justReleased = true;
                }

                isBeingPressed = false;
            }

            if (isActiveSelection)
            {
                active?.Invoke();
                isBeingPressed = false;
            }
            else
            {
                if (e.Mouse().Is().Inside(selection.immediate.rect))
                {
                    if (isBeingPressed)
                    {
                        pressed.Invoke();
                    }
                    else
                    {
                        if (justReleased)
                        {
                            normal.Invoke();
                            wasPressed     = true;
                            isBeingPressed = false;
                        }
                        else
                        {
                            active?.Invoke();
                            isBeingPressed = false;
                        }
                    }
                }
                else
                {
                    isBeingPressed = false;
                    normal?.Invoke();
                }
            }
        }