Пример #1
0
    void GeneratorLines(float mMaxWidth)
    {
        UGUILine mNewLine = new UGUILine(0);

        mCurWidth = 0;
        while (mResultQueue.Count != 0)
        {
            UGUIRichItem item = mResultQueue.Dequeue();
            switch (item.ItemType)
            {
            case RichItemType.Text:
                mAddTextItemHandler = AddTextToLine;
                CreateTextItem(ref item, ref mNewLine);
                break;

            case RichItemType.Image:
                CreateImageItem(ref item, ref mNewLine);
                break;

            case RichItemType.Href:
                mAddTextItemHandler = AddHrefToLine;
                CreateTextItem(ref item, ref mNewLine);
                break;
            }
        }
        mResultLines.Enqueue(mNewLine);
    }
Пример #2
0
    void CreateTextItem(ref UGUIRichItem item, ref UGUILine mNewLine)
    {
        //如果没有溢出,则更新当前的宽度,向行中加入新元素
        if (mCurWidth + mRichStyle.GetStrWidth(item.Inner) <= mMaxWidth)
        {
            mCurWidth += mRichStyle.GetStrWidth(item.Inner);
            mNewLine.EnItemQueue(item);
        }
        //如果溢出,开始截断文字,溢出代表至少文字被分割成两个部分,如果被切割成三个部分,则第二部分一定是单独的一行
        else
        {
            mCutList.Clear();
            CutStr(item.Inner, mMaxWidth - mCurWidth, mMaxWidth);
            mAddTextItemHandler(item, ref mNewLine, 0);
            mResultLines.Enqueue(mNewLine);
            mCutList.RemoveAt(0);

            for (int i = 0; i < mCutList.Count; i++)
            {
                if (i != mCutList.Count - 1)
                {
                    UGUILine line = new UGUILine(0);
                    mAddTextItemHandler(item, ref line, i);
                    mResultLines.Enqueue(line);
                }
                else
                {
                    mCurWidth = mRichStyle.GetStrWidth(mCutList[i]);
                    mNewLine  = new UGUILine(0);
                    mAddTextItemHandler(item, ref mNewLine, i);
                }
            }
        }
    }
Пример #3
0
    public void CreateHrefPrefab(UGUIRichItem item)
    {
        var go = RichItemPool.GetGameObject(RichStyle.HrefPrefabName);

        go.transform.SetParent(mTextContent.transform);
        go.GetComponent <RectTransform>().anchoredPosition = mCurPos;
        go.GetComponent <Text>().text  = item.Inner;
        go.GetComponent <Text>().color = (item as UGUIRichItemHref).HrefNormalColor;
    }
Пример #4
0
    public void CreateEmojiPrefab(UGUIRichItem item)
    {
        var go = RichItemPool.GetGameObject(RichStyle.EmojiPrefabName);

        go.transform.SetParent(mTextContent.transform);
        go.GetComponent <RectTransform>().anchoredPosition = mCurPos;
        go.GetComponent <RectTransform>().sizeDelta        = RichStyle.EmojiSize;
        go.GetComponent <Image>().sprite = (item as UGUIRichItemImage).ImageSprite;
    }
Пример #5
0
    public void generate(Queue <UGUILine> mResultLines, Text mTextContent)
    {
        this.mTextContent = mTextContent;
        mlineCount        = mResultLines.Count;
        mCurPos           = Vector2.zero;
        while (mResultLines.Count != 0)
        {
            mCurPos.x  = 0;
            mCurPos.y -= RichStyle.LineHeight;
            UGUILine tmp = mResultLines.Dequeue();
            string   m   = "";
            for (int i = 0; i < tmp.LineNum; i++)
            {
                m         += '\n';
                mCurPos.y -= RichStyle.LineHeight;
            }
            while (tmp.ItemCount != 0)
            {
                UGUIRichItem item = tmp.DeItemQueue();
                switch (item.ItemType)
                {
                case RichItemType.Image:
                    m += RichStyle.EmojiWidthStr;
                    CreateEmojiPrefab(item);
                    mCurPos.x += RichStyle.EmojiSpWidth;
                    break;

                case RichItemType.Text:
                    m         += item.Inner;
                    mCurPos.x += RichStyle.GetStrWidth(item.Inner);
                    break;

                case RichItemType.Href:
                    m += "<color=#FFFFFF00>" + item.Inner + "</color>";
                    CreateHrefPrefab(item);
                    mCurPos.x += RichStyle.GetStrWidth(item.Inner);
                    break;
                }
            }
            mTextContent.text += m;
            mTextContent.text += '\n';
        }
    }
Пример #6
0
    void CreateImageItem(ref UGUIRichItem item, ref UGUILine mNewLine)
    {
        UGUIRichItemImage imgItem = item as UGUIRichItemImage;

        if (mCurWidth + mRichStyle.EmojiSize.x <= mMaxWidth)
        {
            mCurWidth += mRichStyle.EmojiSpWidth;
            mNewLine.EnItemQueue(imgItem);
            mNewLine.LineNum = mRichStyle.EmojiHeightSpaceNum;
        }
        else
        {
            mResultLines.Enqueue(mNewLine);
            mNewLine = new UGUILine(0);
            mNewLine.EnItemQueue(imgItem);
            mNewLine.LineNum = mRichStyle.EmojiHeightSpaceNum;
            mCurWidth        = mRichStyle.EmojiSize.x;
        }
    }
Пример #7
0
 void AddTextToLine(UGUIRichItem item, ref UGUILine mNewLine, int index)
 {
     mNewLine.EnItemQueue(new UGUIRichItemText(
                              Color.black, mCutList[index]));
 }
Пример #8
0
 void AddHrefToLine(UGUIRichItem item, ref UGUILine mNewLine, int index)
 {
     mNewLine.EnItemQueue(new UGUIRichItemHref(
                              (item as UGUIRichItemHref).HrefNormalColor, mCutList[index], (item as UGUIRichItemHref).Url));
 }
Пример #9
0
 public void EnItemQueue(UGUIRichItem item)
 {
     ItemQueue.Enqueue(item);
     ItemCount++;
 }