protected virtual void BaseOnPointerDown(PointerEventData eventData) { #if FIX_NEW_INPUTSYSTEM_SUPPORT if (!MayDrag(eventData)) { return; } EventSystem.current.SetSelectedGameObject(gameObject, eventData); bool hadFocusBefore = AllowInput; BaseSelectableOnPointerDown(eventData); if (InPlaceEditing() == false) { if (m_SoftKeyboard == null || !m_SoftKeyboard.active) { OnSelect(eventData); return; } } Event.PopEvent(ProcessingEvent); bool shift = ProcessingEvent != null && (ProcessingEvent.modifiers & EventModifiers.Shift) != 0; // Check for Double Click bool isDoubleClick = false; float timeStamp = Time.unscaledTime; if (PointerDownClickStartTime + DoubleClickDelay > timeStamp) { isDoubleClick = true; } PointerDownClickStartTime = timeStamp; // Only set caret position if we didn't just get focus now. // Otherwise it will overwrite the select all on focus. if (hadFocusBefore || !m_OnFocusSelectAll) { CaretPosition insertionSide; int insertionIndex = TMP_TextUtilities.GetCursorIndexFromPosition(m_TextComponent, eventData.position, eventData.pressEventCamera, out insertionSide); if (shift) { if (m_isRichTextEditingAllowed) { if (insertionSide == CaretPosition.Left) { stringSelectPositionInternal = m_TextComponent.textInfo.characterInfo[insertionIndex].index; } else if (insertionSide == CaretPosition.Right) { stringSelectPositionInternal = m_TextComponent.textInfo.characterInfo[insertionIndex].index + m_TextComponent.textInfo.characterInfo[insertionIndex].stringLength; } } else { if (insertionSide == CaretPosition.Left) { stringSelectPositionInternal = insertionIndex == 0 ? m_TextComponent.textInfo.characterInfo[0].index : m_TextComponent.textInfo.characterInfo[insertionIndex - 1].index + m_TextComponent.textInfo.characterInfo[insertionIndex - 1].stringLength; } else if (insertionSide == CaretPosition.Right) { stringSelectPositionInternal = m_TextComponent.textInfo.characterInfo[insertionIndex].index + m_TextComponent.textInfo.characterInfo[insertionIndex].stringLength; } } } else { if (m_isRichTextEditingAllowed) { if (insertionSide == CaretPosition.Left) { stringPositionInternal = stringSelectPositionInternal = m_TextComponent.textInfo.characterInfo[insertionIndex].index; } else if (insertionSide == CaretPosition.Right) { stringPositionInternal = stringSelectPositionInternal = m_TextComponent.textInfo.characterInfo[insertionIndex].index + m_TextComponent.textInfo.characterInfo[insertionIndex].stringLength; } } else { if (insertionSide == CaretPosition.Left) { stringPositionInternal = stringSelectPositionInternal = insertionIndex == 0 ? m_TextComponent.textInfo.characterInfo[0].index : m_TextComponent.textInfo.characterInfo[insertionIndex - 1].index + m_TextComponent.textInfo.characterInfo[insertionIndex - 1].stringLength; } else if (insertionSide == CaretPosition.Right) { stringPositionInternal = stringSelectPositionInternal = m_TextComponent.textInfo.characterInfo[insertionIndex].index + m_TextComponent.textInfo.characterInfo[insertionIndex].stringLength; } } } if (isDoubleClick) { int wordIndex = TMP_TextUtilities.FindIntersectingWord(m_TextComponent, eventData.position, eventData.pressEventCamera); if (wordIndex != -1) { // TODO: Should behavior be different if rich text editing is enabled or not? // Select current word caretPositionInternal = m_TextComponent.textInfo.wordInfo[wordIndex].firstCharacterIndex; caretSelectPositionInternal = m_TextComponent.textInfo.wordInfo[wordIndex].lastCharacterIndex + 1; stringPositionInternal = m_TextComponent.textInfo.characterInfo[caretPositionInternal].index; stringSelectPositionInternal = m_TextComponent.textInfo.characterInfo[caretSelectPositionInternal - 1].index + m_TextComponent.textInfo.characterInfo[caretSelectPositionInternal - 1].stringLength; } else { // Select current character caretPositionInternal = insertionIndex; caretSelectPositionInternal = caretPositionInternal + 1; stringPositionInternal = m_TextComponent.textInfo.characterInfo[insertionIndex].index; stringSelectPositionInternal = stringPositionInternal + m_TextComponent.textInfo.characterInfo[insertionIndex].stringLength; } } else { caretPositionInternal = caretSelectPositionInternal = GetCaretPositionFromStringIndex(stringPositionInternal); } m_isSelectAll = false; } UpdateLabel(); eventData.Use(); #else base.OnPointerDown(eventData); #endif }