コード例 #1
0
        void _pushElement(ClipElement element)
        {
            ClipElement prior = this._lastElement;

            if (prior != null)
            {
                if (prior.isEmpty())
                {
                    ObjectPool <ClipElement> .release(element);

                    return;
                }

                if (prior.saveCount == this._saveCount)
                {
                    // can not update prior if it's cross save count.
                    if (prior.isRect && element.isRect)
                    {
                        var isectRect = uiRectHelper.intersect(prior.rect.Value, element.rect.Value);
                        if (isectRect.isEmpty)
                        {
                            prior.setEmpty();
                            ObjectPool <ClipElement> .release(element);

                            return;
                        }

                        prior.setRect(isectRect);
                        var priorprior = this.stack.Count > 1 ? this.stack[this.stack.Count - 2] : null;
                        prior.updateBoundAndGenID(priorprior);
                        ObjectPool <ClipElement> .release(element);

                        return;
                    }

                    if (!uiRectHelper.overlaps(prior.getBound(), element.getBound()))
                    {
                        prior.setEmpty();
                        ObjectPool <ClipElement> .release(element);

                        return;
                    }
                }
            }

            this.stack.Add(element);
            this._lastElement = element;
            element.updateBoundAndGenID(prior);
        }
コード例 #2
0
ファイル: canvas_clip.cs プロジェクト: wxFancer/UIWidgets
        void _pushElement(ClipElement element)
        {
            ClipElement prior = this.stack.LastOrDefault();

            if (prior != null)
            {
                if (prior.isEmpty())
                {
                    return;
                }

                if (prior.saveCount == this._saveCount)
                {
                    // can not update prior if it's cross save count.
                    if (prior.isRect && element.isRect)
                    {
                        var isectRect = prior.rect.intersect(element.rect);
                        if (isectRect.isEmpty)
                        {
                            prior.setEmpty();
                            return;
                        }

                        prior.setRect(isectRect);
                        var priorprior = this.stack.Count > 1 ? this.stack[this.stack.Count - 2] : null;
                        prior.updateBoundAndGenID(priorprior);
                        return;
                    }

                    if (!prior.getBound().overlaps(element.getBound()))
                    {
                        prior.setEmpty();
                        return;
                    }
                }
            }

            this.stack.Add(element);
            element.updateBoundAndGenID(prior);
        }