コード例 #1
0
        /// <summary>
        /// Set PseudoState into visualElement to mimic input behaviour.
        /// </summary>
        /// <param name="visualElement">VisualElement instance.</param>
        /// <param name="state">Pseudo state of a VisualElement: Active, Hover, Checked, Disabled, Focus, Root.</param>
        public static void SetPseudoState(this VisualElement visualElement, PseudoStates state)
        {
            int intState = (int)state;
            var property = typeof(VisualElement).GetProperty("pseudoStates", BindingFlags.Instance | BindingFlags.NonPublic);

            property?.SetMethod?.Invoke(visualElement, new object[] { intState });
        }
コード例 #2
0
        private static T Add <T>(VisualElement parent, PseudoStates pseudo = 0) where T : VisualElement, new()
        {
            var element = new T();

            element.pseudoStates |= pseudo;
            if ((pseudo & PseudoStates.Disabled) == PseudoStates.Disabled)
            {
                element.SetEnabled(false);
            }

            ApplyModificationsToInputs(element, BaseField <int> .inputUssClassName, pseudo);

            IgnoreAllInputsRecursive(element);

            var description = pseudo.ToString();

            if (pseudo == 0)
            {
                description = "Normal";
            }

            if (element is TextElement)
            {
                (element as TextElement).text = description;
            }
            else if (element is BaseField <bool> )
            {
                (element as BaseField <bool>).label = description;
            }
            else if (element is BaseField <float> )
            {
                (element as BaseField <float>).label = description;
            }
            else if (element is BaseField <string> )
            {
                (element as BaseField <string>).label = description;
            }
            else if (element is BaseField <Vector3> )
            {
                (element as BaseField <Vector3>).label = description;
            }
            else if (element is BaseField <Rect> )
            {
                (element as BaseField <Rect>).label = description;
            }
            else if (element is Foldout)
            {
                var foldout = element as Foldout;
                foldout.text  = description;
                foldout.value = (pseudo & PseudoStates.Checked) == PseudoStates.Checked;

                var contents = new Label("Content with Border");
                contents.AddToClassList(s_StyleFoldoutClassName);
                foldout.Add(contents);
            }

            parent.Add(element);
            return(element);
        }
コード例 #3
0
        internal void CachePseudoStateMasks()
        {
            // If we have already cached data on this selector, skip it
            if (selectors[0].pseudoStateMask != -1)
            {
                return;
            }

            // lazily build a cache of pseudo state names
            if (s_PseudoStates == null)
            {
                s_PseudoStates             = new Dictionary <string, PseudoStateData>();
                s_PseudoStates["active"]   = new PseudoStateData(PseudoStates.Active, false);
                s_PseudoStates["hover"]    = new PseudoStateData(PseudoStates.Hover, false);
                s_PseudoStates["checked"]  = new PseudoStateData(PseudoStates.Checked, false);
                s_PseudoStates["selected"] = new PseudoStateData(PseudoStates.Checked, false); //for backward-compatibility
                s_PseudoStates["disabled"] = new PseudoStateData(PseudoStates.Disabled, false);
                s_PseudoStates["focus"]    = new PseudoStateData(PseudoStates.Focus, false);
                s_PseudoStates["root"]     = new PseudoStateData(PseudoStates.Root, false);

                // A few substates can be negated, meaning them match if the flag is not set
                s_PseudoStates["inactive"] = new PseudoStateData(PseudoStates.Active, true);
                s_PseudoStates["enabled"]  = new PseudoStateData(PseudoStates.Disabled, true);
            }

            for (int j = 0, subCount = selectors.Length; j < subCount; j++)
            {
                StyleSelector       selector               = selectors[j];
                StyleSelectorPart[] parts                  = selector.parts;
                PseudoStates        pseudoClassMask        = 0;
                PseudoStates        negatedPseudoClassMask = 0;
                for (int i = 0; i < selector.parts.Length; i++)
                {
                    if (selector.parts[i].type == StyleSelectorType.PseudoClass)
                    {
                        PseudoStateData data;
                        if (s_PseudoStates.TryGetValue(parts[i].value, out data))
                        {
                            if (!data.negate)
                            {
                                pseudoClassMask |= data.state;
                            }
                            else
                            {
                                negatedPseudoClassMask |= data.state;
                            }
                        }
                        else
                        {
                            Debug.LogWarningFormat("Unknown pseudo class \"{0}\"", parts[i].value);
                        }
                    }
                }
                selector.pseudoStateMask        = (int)pseudoClassMask;
                selector.negatedPseudoStateMask = (int)negatedPseudoClassMask;
            }
        }
コード例 #4
0
 public static void CachePseudoStateMasks(this StyleComplexSelector complexSelector)
 {
     if (complexSelector.selectors[0].pseudoStateMask == -1)
     {
         if (StyleComplexSelectorExtensions.s_PseudoStates == null)
         {
             StyleComplexSelectorExtensions.s_PseudoStates             = new Dictionary <string, StyleComplexSelectorExtensions.PseudoStateData>();
             StyleComplexSelectorExtensions.s_PseudoStates["active"]   = new StyleComplexSelectorExtensions.PseudoStateData(PseudoStates.Active, false);
             StyleComplexSelectorExtensions.s_PseudoStates["hover"]    = new StyleComplexSelectorExtensions.PseudoStateData(PseudoStates.Hover, false);
             StyleComplexSelectorExtensions.s_PseudoStates["checked"]  = new StyleComplexSelectorExtensions.PseudoStateData(PseudoStates.Checked, false);
             StyleComplexSelectorExtensions.s_PseudoStates["selected"] = new StyleComplexSelectorExtensions.PseudoStateData(PseudoStates.Selected, false);
             StyleComplexSelectorExtensions.s_PseudoStates["disabled"] = new StyleComplexSelectorExtensions.PseudoStateData(PseudoStates.Disabled, false);
             StyleComplexSelectorExtensions.s_PseudoStates["focus"]    = new StyleComplexSelectorExtensions.PseudoStateData(PseudoStates.Focus, false);
             StyleComplexSelectorExtensions.s_PseudoStates["inactive"] = new StyleComplexSelectorExtensions.PseudoStateData(PseudoStates.Active, true);
             StyleComplexSelectorExtensions.s_PseudoStates["enabled"]  = new StyleComplexSelectorExtensions.PseudoStateData(PseudoStates.Disabled, true);
         }
         int i   = 0;
         int num = complexSelector.selectors.Length;
         while (i < num)
         {
             StyleSelector       styleSelector = complexSelector.selectors[i];
             StyleSelectorPart[] parts         = styleSelector.parts;
             PseudoStates        pseudoStates  = (PseudoStates)0;
             PseudoStates        pseudoStates2 = (PseudoStates)0;
             for (int j = 0; j < styleSelector.parts.Length; j++)
             {
                 if (styleSelector.parts[j].type == StyleSelectorType.PseudoClass)
                 {
                     StyleComplexSelectorExtensions.PseudoStateData pseudoStateData;
                     if (StyleComplexSelectorExtensions.s_PseudoStates.TryGetValue(parts[j].value, out pseudoStateData))
                     {
                         if (!pseudoStateData.negate)
                         {
                             pseudoStates |= pseudoStateData.state;
                         }
                         else
                         {
                             pseudoStates2 |= pseudoStateData.state;
                         }
                     }
                     else
                     {
                         Debug.LogWarningFormat("Unknown pseudo class \"{0}\"", new object[]
                         {
                             parts[j].value
                         });
                     }
                 }
             }
             styleSelector.pseudoStateMask        = (int)pseudoStates;
             styleSelector.negatedPseudoStateMask = (int)pseudoStates2;
             i++;
         }
     }
 }
コード例 #5
0
        public readonly PseudoStates dependencyPseudoMask; // what pseudo states if set, would have given a different result

        public MatchResultInfo(bool success, PseudoStates triggerPseudoMask, PseudoStates dependencyPseudoMask)
        {
            this.success              = success;
            this.triggerPseudoMask    = triggerPseudoMask;
            this.dependencyPseudoMask = dependencyPseudoMask;
        }
コード例 #6
0
 private static void ApplyModificationsToInputs(VisualElement element, string className, PseudoStates pseudo)
 {
     element.Query(classes: new string[] { className }).ForEach(e =>
     {
         e.pseudoStates |= pseudo;
     });
 }
コード例 #7
0
 private QueryBuilder <T> AddNegativePseudoState(PseudoStates s)
 {
     negatedPseudoStatesMask = negatedPseudoStatesMask | (int)s;
     return(this);
 }
コード例 #8
0
 private QueryBuilder <T> AddPseudoState(PseudoStates s)
 {
     pseudoStatesMask = pseudoStatesMask | (int)s;
     return(this);
 }
コード例 #9
0
 private UQuery.QueryBuilder <T> AddNegativePseudoState(PseudoStates s)
 {
     this.negatedPseudoStatesMask |= (int)s;
     return(this);
 }
コード例 #10
0
 private UQuery.QueryBuilder <T> AddPseudoState(PseudoStates s)
 {
     this.pseudoStatesMask |= (int)s;
     return(this);
 }
コード例 #11
0
 public PseudoStateData(PseudoStates state, bool negate)
 {
     this.state  = state;
     this.negate = negate;
 }
コード例 #12
0
        private static T Add <T>(VisualElement parent, PseudoStates pseudo = 0) where T : VisualElement, new()
        {
            var element = new T();

            // Pseudo states get cleared on attaching to panel, so this must be done each time that happens.
            // Doing it just when we create the window doesn't work because when docked, all views docked in the same
            // place share the panel and get attached/detached as we switch tabs.
            element.RegisterCallback <AttachToPanelEvent>(evt =>
            {
                element.pseudoStates |= pseudo;

                // The children will still attach to panel, so we need to delay the uQuery call until that's done.
                element.schedule.Execute(() => ApplyModificationsToInputs(element, BaseField <int> .inputUssClassName, pseudo));
            });

            if ((pseudo & PseudoStates.Disabled) == PseudoStates.Disabled)
            {
                element.SetEnabled(false);
            }

            IgnoreAllInputsRecursive(element);

            var description = pseudo.ToString();

            if (pseudo == 0)
            {
                description = "Normal";
            }

            if (element is TextElement)
            {
                (element as TextElement).text = description;
            }
            else if (element is BaseField <bool> )
            {
                (element as BaseField <bool>).label = description;
            }
            else if (element is BaseField <float> )
            {
                (element as BaseField <float>).label = description;
            }
            else if (element is BaseField <string> )
            {
                (element as BaseField <string>).label = description;
            }
            else if (element is BaseField <Vector3> )
            {
                (element as BaseField <Vector3>).label = description;
            }
            else if (element is BaseField <Rect> )
            {
                (element as BaseField <Rect>).label = description;
            }
            else if (element is Foldout)
            {
                var foldout = element as Foldout;
                foldout.text  = description;
                foldout.value = (pseudo & PseudoStates.Checked) == PseudoStates.Checked;

                var contents = new Label("Content with Border");
                contents.AddToClassList(s_StyleFoldoutClassName);
                foldout.Add(contents);
            }
            else if (element is HelpBox)
            {
                var helpBox = element as HelpBox;
                helpBox.text        = description;
                helpBox.messageType = HelpBoxMessageType.Info;
            }

            parent.Add(element);
            return(element);
        }