示例#1
0
        public override void OnVersionChanged(VisualElement ve, VersionChangeType versionChangeType)
        {
            if ((versionChangeType & (VersionChangeType.Transform | VersionChangeType.Size | VersionChangeType.Overflow | VersionChangeType.Hierarchy | VersionChangeType.BorderWidth | VersionChangeType.EventCallbackCategories)) == 0)
            {
                return;
            }

            // According to the flags, what operations must be done?
            bool mustDirtyWorldTransform        = (versionChangeType & VersionChangeType.Transform) != 0;
            bool mustDirtyWorldClip             = (versionChangeType & (VersionChangeType.Transform | VersionChangeType.Size | VersionChangeType.Overflow | VersionChangeType.BorderWidth)) != 0;
            bool mustDirtyEventParentCategories = (versionChangeType & (VersionChangeType.Hierarchy | VersionChangeType.EventCallbackCategories)) != 0;

            VisualElementFlags mustDirtyFlags =
                (mustDirtyWorldTransform ? VisualElementFlags.WorldTransformDirty | VisualElementFlags.WorldBoundingBoxDirty : 0) |
                (mustDirtyWorldClip ? VisualElementFlags.WorldClipDirty : 0) |
                (mustDirtyEventParentCategories ? VisualElementFlags.EventCallbackParentCategoriesDirty : 0);

            var needDirtyFlags = mustDirtyFlags & ~ve.m_Flags;

            if (needDirtyFlags != 0)
            {
                DirtyHierarchy(ve, needDirtyFlags);
            }

            DirtyBoundingBoxHierarchy(ve);

            ++m_Version;
        }
示例#2
0
        static void DirtyHierarchy(VisualElement ve, VisualElementFlags mustDirtyFlags)
        {
            // We use VisualElementFlags to track changes across the hierarchy since all those values come from m_Flags.
            ve.m_Flags |= mustDirtyFlags;

            int count = ve.hierarchy.childCount;

            for (int i = 0; i < count; i++)
            {
                var child = ve.hierarchy[i];

                // Are these operations already done?
                var needDirtyFlags = mustDirtyFlags & ~child.m_Flags;
                if (needDirtyFlags != 0)
                {
                    DirtyHierarchy(child, needDirtyFlags);
                }
            }
        }