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; } } }
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; } }
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; } }
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); } }
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; } } }