You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

162 lines
4.3 KiB
C#

using UnityEngine;
using UnityEngine.UIElements;
namespace WebGLSupport
{
/// <summary>
/// Wrapper for UnityEngine.UIElements.TextField
/// </summary>
class WrappedUIToolkit : IInputField
{
TextField input;
public bool ReadOnly { get { return input.isReadOnly; } }
public string text
{
get { return input.value; }
set { input.value = value; }
}
public string placeholder
{
get
{
#if UNITY_2023_1_OR_NEWER
return input.textEdition.placeholder;
#else
return "";
#endif
}
}
public int fontSize
{
/// MEMO : how to get the fontsize?
get { return 20; }
}
public ContentType contentType
{
get
{
if (input.isPasswordField)
{
return ContentType.Password;
}
#if UNITY_2022_1_OR_NEWER
var keyboardType = input.keyboardType;
#else
var keyboardType = TouchScreenKeyboardType.Default;
#endif
return keyboardType switch
{
TouchScreenKeyboardType.Default => ContentType.Standard,
TouchScreenKeyboardType.ASCIICapable => ContentType.Alphanumeric,
TouchScreenKeyboardType.NumbersAndPunctuation => ContentType.Standard,
TouchScreenKeyboardType.URL => ContentType.Standard,
TouchScreenKeyboardType.NumberPad => ContentType.IntegerNumber,
TouchScreenKeyboardType.PhonePad => ContentType.Standard,
TouchScreenKeyboardType.NamePhonePad => ContentType.Standard,
TouchScreenKeyboardType.EmailAddress => ContentType.EmailAddress,
//TouchScreenKeyboardType.NintendoNetworkAccount => throw new System.NotImplementedException(),
TouchScreenKeyboardType.Social => ContentType.Standard,
TouchScreenKeyboardType.Search => ContentType.Standard,
TouchScreenKeyboardType.DecimalPad => ContentType.DecimalNumber,
TouchScreenKeyboardType.OneTimeCode => ContentType.Standard,
_ => ContentType.Standard,
};
}
}
public LineType lineType
{
get
{
return input.multiline ? LineType.MultiLineNewline : LineType.SingleLine;
}
}
public int characterLimit
{
get { return input.maxLength; }
}
public int caretPosition
{
get { return input.cursorIndex; }
}
public bool isFocused
{
get
{
return true;
}
}
public int selectionFocusPosition
{
get { return input.cursorIndex; }
#if UNITY_2022_1_OR_NEWER
set { input.cursorIndex = value; }
#else
set { input.SelectRange(value, input.selectIndex); }
#endif
}
public int selectionAnchorPosition
{
get { return input.selectIndex; }
#if UNITY_2022_1_OR_NEWER
set { input.selectIndex = value; }
#else
set { input.SelectRange(input.cursorIndex, value); }
#endif
}
public bool OnFocusSelectAll
{
#if UNITY_2022_1_OR_NEWER
get { return input.selectAllOnFocus || input.selectAllOnMouseUp; }
#else
get { return true; }
#endif
}
public bool EnableMobileSupport
{
get
{
// return false to use unity mobile keyboard support
return false;
}
}
public WrappedUIToolkit(WebGLUIToolkitTextField input)
{
this.input = input.TextField;
}
public Rect GetScreenCoordinates()
{
var textInput = input.Q("unity-text-input");
var rect = textInput.worldBound;
return new Rect(rect.x, Screen.height - (rect.y + rect.height), rect.width, rect.height);
}
public void ActivateInputField()
{
}
public void DeactivateInputField()
{
input.Blur();
}
public void Rebuild()
{
}
}
}