/// <summary> /// Function to increase the size of the Line Extents Array. /// </summary> /// <param name="size"></param> protected void ResizeLineExtents(int size) { size = size > 1024 ? size + 256 : Mathf.NextPowerOfTwo(size + 1); TMP_LineInfo[] temp_lineInfo = new TMP_LineInfo[size]; for (int i = 0; i < size; i++) { if (i < m_textInfo.lineInfo.Length) temp_lineInfo[i] = m_textInfo.lineInfo[i]; else { temp_lineInfo[i].lineExtents.min = k_InfinityVectorPositive; temp_lineInfo[i].lineExtents.max = k_InfinityVectorNegative; temp_lineInfo[i].ascender = k_InfinityVectorNegative.x; temp_lineInfo[i].descender = k_InfinityVectorPositive.x; } } m_textInfo.lineInfo = temp_lineInfo; }
// Function to increase the size of the Line Extents Array. void ResizeLineExtents(int size) { size = size > 1024 ? size + 256 : Mathf.NextPowerOfTwo(size + 1); TMP_LineInfo[] temp_lineInfo = new TMP_LineInfo[size]; for (int i = 0; i < size; i++) { if (i < m_textInfo.lineInfo.Length) temp_lineInfo[i] = m_textInfo.lineInfo[i]; else { temp_lineInfo[i].lineExtents = new Extents(k_InfinityVector, -k_InfinityVector); temp_lineInfo[i].ascender = -k_InfinityVector.x; temp_lineInfo[i].descender = k_InfinityVector.x; } } m_textInfo.lineInfo = temp_lineInfo; }
void LateUpdate() { if (TMP_TextUtilities.IsIntersectingRectTransform(m_TextComponent.rectTransform, Input.mousePosition, m_Camera)) { #region Example of Character or Sprite Selection int charIndex = TMP_TextUtilities.FindIntersectingCharacter(m_TextComponent, Input.mousePosition, m_Camera, true); if (charIndex != -1 && charIndex != m_lastCharIndex) { m_lastCharIndex = charIndex; TMP_TextElementType elementType = m_TextComponent.textInfo.characterInfo[charIndex].elementType; // Send event to any event listeners depending on whether it is a character or sprite. if (elementType == TMP_TextElementType.Character) { SendOnCharacterSelection(m_TextComponent.textInfo.characterInfo[charIndex].character, charIndex); } else if (elementType == TMP_TextElementType.Sprite) { SendOnSpriteSelection(m_TextComponent.textInfo.characterInfo[charIndex].character, charIndex); } } #endregion #region Example of Word Selection // Check if Mouse intersects any words and if so assign a random color to that word. int wordIndex = TMP_TextUtilities.FindIntersectingWord(m_TextComponent, Input.mousePosition, m_Camera); if (wordIndex != -1 && wordIndex != m_lastWordIndex) { m_lastWordIndex = wordIndex; // Get the information about the selected word. TMP_WordInfo wInfo = m_TextComponent.textInfo.wordInfo[wordIndex]; // Send the event to any listeners. SendOnWordSelection(wInfo.GetWord(), wInfo.firstCharacterIndex, wInfo.characterCount); } #endregion #region Example of Line Selection // Check if Mouse intersects any words and if so assign a random color to that word. int lineIndex = TMP_TextUtilities.FindIntersectingLine(m_TextComponent, Input.mousePosition, m_Camera); if (lineIndex != -1 && lineIndex != m_lastLineIndex) { m_lastLineIndex = lineIndex; // Get the information about the selected word. TMP_LineInfo lineInfo = m_TextComponent.textInfo.lineInfo[lineIndex]; // Send the event to any listeners. char[] buffer = new char[lineInfo.characterCount]; for (int i = 0; i < lineInfo.characterCount && i < m_TextComponent.textInfo.characterInfo.Length; i++) { buffer[i] = m_TextComponent.textInfo.characterInfo[i + lineInfo.firstCharacterIndex].character; } string lineText = new string(buffer); SendOnLineSelection(lineText, lineInfo.firstCharacterIndex, lineInfo.characterCount); } #endregion #region Example of Link Handling // Check if mouse intersects with any links. int linkIndex = TMP_TextUtilities.FindIntersectingLink(m_TextComponent, Input.mousePosition, m_Camera); // Handle new Link selection. if (linkIndex != -1 && linkIndex != m_selectedLink) { m_selectedLink = linkIndex; // Get information about the link. TMP_LinkInfo linkInfo = m_TextComponent.textInfo.linkInfo[linkIndex]; // Send the event to any listeners. SendOnLinkSelection(linkInfo.GetLinkID(), linkInfo.GetLinkText(), linkIndex); } #endregion } }