예제 #1
0
    protected override void OnEnable()
    {
        base.OnEnable();

        if (m_HorizontalScrollbar)
        {
            m_HorizontalScrollbar.onValueChanged.AddListener(SetHorizontalNormalizedPosition);
        }
        if (m_VerticalScrollbar)
        {
            m_VerticalScrollbar.onValueChanged.AddListener(SetVerticalNormalizedPosition);
        }

        CanvasUpdateRegistry.RegisterCanvasElementForLayoutRebuild(this);
    }
예제 #2
0
        public override void SetVerticesDirty()
        {
            if (m_verticesAlreadyDirty || this == null || !this.IsActive() || CanvasUpdateRegistry.IsRebuildingGraphics())
            {
                return;
            }

            m_verticesAlreadyDirty = true;
            CanvasUpdateRegistry.RegisterCanvasElementForGraphicRebuild((ICanvasElement)this);

            if (m_OnDirtyVertsCallback != null)
            {
                m_OnDirtyVertsCallback();
            }
        }
    /// <summary>
    /// Creates a new list item to be positioned in the list.
    /// </summary>
    private void GenerateListItem(int index, float position, bool topItem)
    {
        if (itemRendererFactory == null)
        {
            Debug.LogError("Item Renderer Factory is not set!");
            return;
        }

        int          itemType     = onGetItemType(index);
        ListItemInfo listItemInfo = GetPooledObj(itemType);

        // Get the list items object and set up some parameters
        listItemInfo.index = index;
        IListItemView view = listItemInfo.view;

        if (listItemInfo.obj == null)
        {
            listItemInfo.obj = itemRendererFactory(index, content);
            Assert.IsNotNull(listItemInfo.obj);
            view             = listItemInfo.obj.GetComponent <IListItemView>();
            view.OnSelected += OnSelectedItemBroadcast;
        }

        Assert.IsNotNull(view);
        Assert.IsNotNull(dataProvider);
        Assert.IsTrue(index >= 0 && index < dataProvider.Count, "DataProvider index is out of range!");

        view.isSelected   = (index == _isSelectedIndex);
        view.viewData     = dataProvider[index];
        listItemInfo.view = view;


        listItemInfo.obj.SetActive(true);
        listItemInfo.obj.transform.SetParent(content, false);

        SetupRectTransform(listItemInfo.obj.transform as RectTransform);

        visibleObjs.Add(listItemInfo);

        if (!CanvasUpdateRegistry.IsRebuildingLayout())
        {
            Canvas.ForceUpdateCanvases();
        }

        PositionListItem(listItemInfo, position, topItem);

        UpdateListItems();
    }
예제 #4
0
    protected override void OnDisable()
    {
        CanvasUpdateRegistry.UnRegisterCanvasElementForRebuild(this);

        if (m_HorizontalScrollbar)
        {
            m_HorizontalScrollbar.onValueChanged.RemoveListener(SetHorizontalNormalizedPosition);
        }
        if (m_VerticalScrollbar)
        {
            m_VerticalScrollbar.onValueChanged.RemoveListener(SetVerticalNormalizedPosition);
        }

        m_HasRebuiltLayout = false;
        base.OnDisable();
    }
        protected void SetDirty(RectTransform rectTransform)
        {
            if (!IsActive())
            {
                return;
            }

            if (!CanvasUpdateRegistry.IsRebuildingLayout())
            {
                LayoutRebuilder.MarkLayoutForRebuild(rectTransform);
            }
            else
            {
                StartCoroutine(DelayedSetDirty(rectTransform));
            }
        }
예제 #6
0
 protected override void OnRectTransformDimensionsChange()
 {
     Debug.Log("OnRectTransformDimensionsChange");
     if (gameObject.activeInHierarchy)
     {
         if (CanvasUpdateRegistry.IsRebuildingLayout())
         {
             SetVerticesDirty();
         }
         else
         {
             SetVerticesDirty();
             SetLayoutDirty();
         }
     }
 }
        protected override void OnValidate()
        {
            base.OnValidate();

            if (IsActive())
            {
                UpdateVisuals();
            }

            var prefabType = UnityEditor.PrefabUtility.GetPrefabType(this);

            if (prefabType != UnityEditor.PrefabType.Prefab && !Application.isPlaying)
            {
                CanvasUpdateRegistry.RegisterCanvasElementForLayoutRebuild(this);
            }
        }
예제 #8
0
        private void TextureRebuildCallback(Font targetFont)
        {
            Debug.LogWarningFormat("call texture rebulid callback {0}", font.name);

            if (font == targetFont)
            {
                if (CanvasUpdateRegistry.IsRebuildingGraphics() || CanvasUpdateRegistry.IsRebuildingLayout())
                {
                    UpdateGeometry();
                }
                else
                {
                    SetAllDirty();
                }
            }
        }
예제 #9
0
        protected override void OnValidate()
        {
            base.OnValidate();
            Set(m_IsOn, false);
            PlayEffect();

            if ((PrefabUtility.GetPrefabType(this) != PrefabType.Prefab) && !Application.isPlaying)
            {
                CanvasUpdateRegistry.RegisterCanvasElementForLayoutRebuild(this);
            }

            if (animationDuration < 0)
            {
                animationDuration = 0;
            }
        }
 public void SetDirty()
 {
     if (!IsActive())
     {
         return;
     }
     if (CanvasUpdateRegistry.IsRebuildingLayout())
     {
         StartCoroutine(DelayedSetDirty(rectTransform));
     }
     else
     {
         CanvasUpdateRegistry.RegisterCanvasElementForLayoutRebuild(this);
         LayoutRebuilder.MarkLayoutForRebuild(rectTransform);
     }
 }
        protected void SetDirty()
        {
            if (!IsActive() || m_awaitingRebuild)
            {
                return;
            }

            if (!CanvasUpdateRegistry.IsRebuildingLayout())
            {
                LayoutRebuilder.MarkLayoutForRebuild(transform as RectTransform);
            }
            else
            {
                m_awaitingRebuild = true;
                StartCoroutine(DelayedSetDirty(transform as RectTransform));
            }
        }
        protected virtual void MarkLayoutForRebuild()
        {
            if (IsDestroyed() || !IsActive())
            {
                return;
            }

            if (!CanvasUpdateRegistry.IsRebuildingLayout())
            {
                CancelInvoke("MarkLayoutForRebuild");
                LayoutRebuilder.MarkLayoutForRebuild(this.rectTransform);
            }
            else if (!IsInvoking("MarkLayoutForRebuild"))
            {
                Invoke("MarkLayoutForRebuild", 0);
            }
        }
예제 #13
0
            public bool AddToRebuild(IUILayout layout)
            {
                int hashcode = layout.GetHashCode();

                if (!m_MapLayouts.Contains(hashcode))
                {
                    m_ListLayouts.Add(layout);
                    m_MapLayouts.Add(hashcode);
                    //for register ui canvas rebuild system
                    CanvasUpdateRegistry.TryRegisterCanvasElementForLayoutRebuild(this);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
예제 #14
0
        /// <summary>
        ///
        /// </summary>
        public override void SetMaterialDirty()
        {
            //Debug.Log("SetMaterialDirty()");

            if (this == null || !this.IsActive() || CanvasUpdateRegistry.IsRebuildingGraphics())
            {
                return;
            }

            m_isMaterialDirty = true;
            CanvasUpdateRegistry.RegisterCanvasElementForGraphicRebuild((ICanvasElement)this);

            if (m_OnDirtyMaterialCallback != null)
            {
                m_OnDirtyMaterialCallback();
            }
        }
예제 #15
0
 /// <summary>
 ///   <para>See MonoBehaviour.OnDisable.</para>
 /// </summary>
 protected override void OnDisable()
 {
     CanvasUpdateRegistry.UnRegisterCanvasElementForRebuild((ICanvasElement)this);
     if ((bool)((UnityEngine.Object) this.m_HorizontalScrollbar))
     {
         this.m_HorizontalScrollbar.onValueChanged.RemoveListener(new UnityAction <float>(this.SetHorizontalNormalizedPosition));
     }
     if ((bool)((UnityEngine.Object) this.m_VerticalScrollbar))
     {
         this.m_VerticalScrollbar.onValueChanged.RemoveListener(new UnityAction <float>(this.SetVerticalNormalizedPosition));
     }
     this.m_HasRebuiltLayout = false;
     this.m_Tracker.Clear();
     this.m_Velocity = Vector2.zero;
     LayoutRebuilder.MarkLayoutForRebuild(this.rectTransform);
     base.OnDisable();
 }
예제 #16
0
    public static int IsRebuildingGraphics_s(IntPtr l)
    {
        int result;

        try
        {
            bool b = CanvasUpdateRegistry.IsRebuildingGraphics();
            LuaObject.pushValue(l, true);
            LuaObject.pushValue(l, b);
            result = 2;
        }
        catch (Exception e)
        {
            result = LuaObject.error(l, e);
        }
        return(result);
    }
예제 #17
0
        protected virtual void BaseOnDisable()
        {
#if FIX_NEW_INPUTSYSTEM_SUPPORT
            // the coroutine will be terminated, so this will ensure it restarts when we are next activated
            BlinkCoroutine = null;

            DeactivateInputField();
            if (m_TextComponent != null)
            {
                m_TextComponent.UnregisterDirtyVerticesCallback(MarkGeometryAsDirty);
                m_TextComponent.UnregisterDirtyVerticesCallback(UpdateLabel);

                if (m_VerticalScrollbar != null)
                {
                    var onScrollbarValueChangedHandler = (UnityAction <float>)System.Delegate.CreateDelegate(
                        typeof(UnityAction <float>), this, "OnScrollbarValueChange");
                    m_VerticalScrollbar.onValueChanged.RemoveListener(onScrollbarValueChangedHandler);
                }
            }
            CanvasUpdateRegistry.UnRegisterCanvasElementForRebuild(this);

            // Clear needs to be called otherwise sync never happens as the object is disabled.
            if (CachedInputRenderer != null)
            {
                CachedInputRenderer.Clear();
            }

            if (m_Mesh != null)
            {
                DestroyImmediate(m_Mesh);
            }

            m_Mesh = null;

            // Unsubscribe to event triggered when text object has been regenerated
            var onTextChangedHandler = (System.Action <Object>)System.Delegate.CreateDelegate(
                typeof(System.Action <Object>), this, "ON_TEXT_CHANGED");

            TMPro_EventManager.TEXT_CHANGED_EVENT.Remove(onTextChangedHandler);

            BaseSelectableOnDisable();
#else
            base.OnDisable();
#endif
        }
예제 #18
0
    public static int RegisterCanvasElementForGraphicRebuild_s(IntPtr l)
    {
        int result;

        try
        {
            ICanvasElement element;
            LuaObject.checkType <ICanvasElement>(l, 1, out element);
            CanvasUpdateRegistry.RegisterCanvasElementForGraphicRebuild(element);
            LuaObject.pushValue(l, true);
            result = 1;
        }
        catch (Exception e)
        {
            result = LuaObject.error(l, e);
        }
        return(result);
    }
예제 #19
0
        protected override void OnValidate()
        {
            base.OnValidate();

            if (Application.isPlaying && IsActive())
            {
                UpdateSliders();
            }

            _layoutTransform = _layoutGroup.GetComponent <RectTransform>();

            var prefabType = UnityEditor.PrefabUtility.GetPrefabType(this);

            if (prefabType != UnityEditor.PrefabType.Prefab && !Application.isPlaying)
            {
                CanvasUpdateRegistry.RegisterCanvasElementForLayoutRebuild(this);
            }
        }
예제 #20
0
        public override void SetVerticesDirty()

        {
            //Debug.Log("SetVerticesDirty() on Object ID: " + this.GetInstanceID());



            if (m_verticesAlreadyDirty || this == null || !this.IsActive() || CanvasUpdateRegistry.IsRebuildingGraphics())
            {
                return;
            }



            m_verticesAlreadyDirty = true;

            CanvasUpdateRegistry.RegisterCanvasElementForGraphicRebuild((ICanvasElement)this);
        }
예제 #21
0
    protected override void OnValidate()
    {
        base.OnValidate();

        //Onvalidate is called before OnEnabled. We need to make sure not to touch any other objects before OnEnable is run.
        if (IsActive())
        {
            Title = _title;
            Set(QualitySettings.GetQualityLevel());
        }

        var prefabType = UnityEditor.PrefabUtility.GetPrefabType(this);

        if (prefabType != UnityEditor.PrefabType.Prefab && !Application.isPlaying)
        {
            CanvasUpdateRegistry.RegisterCanvasElementForLayoutRebuild(this);
        }
    }
예제 #22
0
        protected override void OnDisable()
        {
            CanvasUpdateRegistry.UnRegisterCanvasElementForRebuild(this);

            if (m_HorizontalScrollbar)
            {
                m_HorizontalScrollbar.onValueChanged.RemoveListener(SetHorizontalNormalizedPosition);
            }
            if (m_VerticalScrollbar)
            {
                m_VerticalScrollbar.onValueChanged.RemoveListener(SetVerticalNormalizedPosition);
            }

            m_HasRebuiltLayout = false;
            m_Tracker.Clear();
            m_Velocity = Vector2.zero;
            LayoutRebuilder.MarkLayoutForRebuild(rectTransform);
            base.OnDisable();
        }
예제 #23
0
    void ResetContentSize()
    {
        float sizeX, sizeY;

        if (IsVertical)
        {
            sizeX = _scroll.viewport.rect.width;
            sizeY = _colCellCount * (itemSize.y + itemSpace.y) - itemSpace.y + Padding.top + Padding.bottom;
        }
        else
        {
            sizeX = _rowCellCount * (itemSize.x + itemSpace.x) - itemSpace.x + Padding.right + Padding.left;
            sizeY = _scroll.viewport.rect.height;
        }
        //_scroll.content.localPosition = Vector3.zero;
        _scroll.content.sizeDelta = new Vector2(sizeX, sizeY);

        CanvasUpdateRegistry.RegisterCanvasElementForLayoutRebuild(_scroll);
    }
예제 #24
0
        public override void SetVerticesDirty()
        {
            if (this == null || !this.IsActive())
            {
                return;
            }

            if (CanvasUpdateRegistry.IsRebuildingGraphics())
            {
                return;
            }

            CanvasUpdateRegistry.RegisterCanvasElementForGraphicRebuild(this);

            if (m_OnDirtyVertsCallback != null)
            {
                m_OnDirtyVertsCallback();
            }
        }
예제 #25
0
 void Update()
 {
     if (m_SpriteBeginIndex < m_SpriteEndIndex && m_Icon != null)
     {
         m_SpriteDeltaTime += Time.deltaTime;
         if (m_SpriteDeltaTime >= m_SpriteDuration)
         {
             m_SpriteDeltaTime -= m_SpriteDuration;
             ++m_SpriteCurrentIndex;
             if (m_SpriteCurrentIndex < m_SpriteBeginIndex || m_SpriteCurrentIndex > m_SpriteEndIndex)
             {
                 m_SpriteCurrentIndex = m_SpriteBeginIndex;
             }
             if (!CanvasUpdateRegistry.IsRebuildingGraphics())
             {
                 ShowSpriteIndex(m_SpriteCurrentIndex);
             }
         }
     }
 }
예제 #26
0
        protected override void OnValidate()
        {
            base.OnValidate();

            Set(_value, false);

            if (_buttonType == Type.Push)
            {
                Set(false, false);
            }

            UpdateMarker(_graphicTransition == ButtonTransition.None);

            var prefabType = UnityEditor.PrefabUtility.GetPrefabType(this);

            if (prefabType != UnityEditor.PrefabType.Prefab && !Application.isPlaying)
            {
                CanvasUpdateRegistry.RegisterCanvasElementForLayoutRebuild(this);
            }
        }
예제 #27
0
        protected override void OnValidate()
        {
            base.OnValidate();

            if (WholeNumbers)
            {
                m_MinValue = Mathf.Round(m_MinValue);
                m_MaxValue = Mathf.Round(m_MaxValue);
            }
            UpdateCachedReferences();
            SetX(m_ValueX, false);
            SetY(m_ValueY, false);
            // Update rects since other things might affect them even if value didn't change.
            UpdateVisuals();

            UnityEditor.PrefabAssetType prefabType = UnityEditor.PrefabUtility.GetPrefabAssetType(this);
            if (prefabType != UnityEditor.PrefabAssetType.Regular && !Application.isPlaying)
            {
                CanvasUpdateRegistry.RegisterCanvasElementForLayoutRebuild(this);
            }
        }
예제 #28
0
        protected override void OnValidate()
        {
            base.OnValidate();

            m_Size = Mathf.Clamp01(m_Size);

            //This can be invoked before OnEnabled is called. So we shouldn't be accessing other objects, before OnEnable is called.
            if (IsActive())
            {
                UpdateCachedReferences();
                Set(m_Value, false);
                // Update rects since other things might affect them even if value didn't change.
                UpdateVisuals();
            }

            UnityEditor.PrefabType prefabType = UnityEditor.PrefabUtility.GetPrefabType(this);
            if (prefabType != UnityEditor.PrefabType.Prefab && !Application.isPlaying)
            {
                CanvasUpdateRegistry.RegisterCanvasElementForLayoutRebuild(this);
            }
        }
        private IEnumerator OnRectTransformDimensionsChange()
        {
            if (this._rt == null || this.ParentCanvas == null || this.ParentCanvas.renderMode == RenderMode.WorldSpace)
            {
                yield break;
            }

            if (CanvasUpdateRegistry.IsRebuildingLayout())
            {
                yield return(null);
            }

            bool oldVisible = this._isVisible;

            this._isVisible = !this.ParentCanvas.pixelPerfect || VisibleComponent.IsRectVisible(this._rt);

            if (!oldVisible && this._isVisible)
            {
                this.BecameVisible();
            }
        }
예제 #30
0
        public override void UpdateSelf(float deltaTime)
        {
            base.UpdateSelf(deltaTime);
            int f = frameIndex;

            UpdateAnim(deltaTime);

            if (f != frameIndex)
            {
                CanvasUpdateRegistry.RegisterCanvasElementForGraphicRebuild(this);
            }
#if UNITY_EDITOR
            else
            {
                if (Application.isEditor)
                {
                    CanvasUpdateRegistry.RegisterCanvasElementForGraphicRebuild(this);
                }
            }
#endif
        }