コード例 #1
0
        internal void OnClippingChanged(VisualElement ve, bool hierarchical)
        {
            RenderDataDirtyTypes current = ve.renderChainData.dirtiedValues;
            bool isInList = (current & (RenderDataDirtyTypes.Clipping | RenderDataDirtyTypes.ClippingHierarchy)) != 0;

            current |= RenderDataDirtyTypes.Clipping;
            if (hierarchical)
            {
                current |= RenderDataDirtyTypes.ClippingHierarchy;
            }
            ve.renderChainData.dirtiedValues = current;

            if (!isInList)
            {
                if (m_LastDirtyClipping != null)
                {
                    m_LastDirtyClipping.renderChainData.nextDirtyClipping = ve;
                    m_LastDirtyClipping = ve;
                }
                else
                {
                    m_FirstDirtyClipping = m_LastDirtyClipping = ve;
                }
            }
        }
コード例 #2
0
 public void ClearDirty(VisualElement ve, RenderDataDirtyTypes dirtyTypesInverse)
 {
     Debug.Assert(ve.renderChainData.dirtiedValues != 0);
     ve.renderChainData.dirtiedValues &= dirtyTypesInverse;
     if (ve.renderChainData.dirtiedValues == 0)
     {
         // Mend the chain
         if (ve.renderChainData.prevDirty != null)
         {
             ve.renderChainData.prevDirty.renderChainData.nextDirty = ve.renderChainData.nextDirty;
         }
         if (ve.renderChainData.nextDirty != null)
         {
             ve.renderChainData.nextDirty.renderChainData.prevDirty = ve.renderChainData.prevDirty;
         }
         if (tails[ve.renderChainData.hierarchyDepth] == ve)
         {
             Debug.Assert(ve.renderChainData.nextDirty == null);
             tails[ve.renderChainData.hierarchyDepth] = ve.renderChainData.prevDirty;
         }
         if (heads[ve.renderChainData.hierarchyDepth] == ve)
         {
             Debug.Assert(ve.renderChainData.prevDirty == null);
             heads[ve.renderChainData.hierarchyDepth] = ve.renderChainData.nextDirty;
         }
         ve.renderChainData.prevDirty = ve.renderChainData.nextDirty = null;
     }
 }
コード例 #3
0
            public void RegisterDirty(VisualElement ve, RenderDataDirtyTypes dirtyTypes, int dirtyTypeClassIndex)
            {
                Debug.Assert(dirtyTypes != 0);
                int depth = ve.renderChainData.hierarchyDepth;

                minDepths[dirtyTypeClassIndex] = depth < minDepths[dirtyTypeClassIndex] ? depth : minDepths[dirtyTypeClassIndex];
                maxDepths[dirtyTypeClassIndex] = depth > maxDepths[dirtyTypeClassIndex] ? depth : maxDepths[dirtyTypeClassIndex];
                if (ve.renderChainData.dirtiedValues != 0)
                {
                    ve.renderChainData.dirtiedValues |= dirtyTypes;
                    return;
                }

                ve.renderChainData.dirtiedValues = dirtyTypes;
                if (tails[depth] != null)
                {
                    tails[depth].renderChainData.nextDirty = ve;
                    ve.renderChainData.prevDirty           = tails[depth];
                    tails[depth] = ve;
                }
                else
                {
                    heads[depth] = tails[depth] = ve;
                }
            }
コード例 #4
0
        public void UIEOnTransformOrSizeChanged(VisualElement ve, bool transformChanged, bool sizeChanged)
        {
            if (ve.renderChainData.isInChain)
            {
                if (m_BlockDirtyRegistration)
                {
                    throw new InvalidOperationException("VisualElements cannot change size or transform under an active visual tree during generateVisualContent callback execution");
                }

                RenderDataDirtyTypes flags =
                    (transformChanged ? RenderDataDirtyTypes.Transform : RenderDataDirtyTypes.None) |
                    (sizeChanged ? RenderDataDirtyTypes.Size : RenderDataDirtyTypes.None);
                m_DirtyTracker.RegisterDirty(ve, flags, (int)RenderDataDirtyTypeClasses.TransformSize);
            }
        }
コード例 #5
0
        internal void OnTransformOrSizeChanged(VisualElement ve, bool transformChanged, bool sizeChanged)
        {
            RenderDataDirtyTypes current = ve.renderChainData.dirtiedValues;
            bool isInList = (current & (RenderDataDirtyTypes.Transform | RenderDataDirtyTypes.Size)) != 0;

            ve.renderChainData.dirtiedValues = current |
                                               (transformChanged ? RenderDataDirtyTypes.Transform : RenderDataDirtyTypes.None) |
                                               (sizeChanged ? RenderDataDirtyTypes.Size : RenderDataDirtyTypes.None);

            if (!isInList)
            {
                if (m_LastDirtyTransformOrSize != null)
                {
                    m_LastDirtyTransformOrSize.renderChainData.nextDirtyTransformOrSize = ve;
                    m_LastDirtyTransformOrSize = ve;
                }
                else
                {
                    m_FirstDirtyTransformOrSize = m_LastDirtyTransformOrSize = ve;
                }
            }
        }