mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-22 12:58:33 +01:00
made text fields work on mobile too
This commit is contained in:
parent
353afdef6f
commit
3862f78c9b
9 changed files with 42 additions and 33 deletions
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>netcoreapp2.0</TargetFramework>
|
<TargetFramework>net462</TargetFramework>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="MonoGame.Content.Builder" Version="3.7.0.9" />
|
<PackageReference Include="MonoGame.Content.Builder" Version="3.7.0.9" />
|
||||||
<PackageReference Include="MonoGame.Framework.DesktopGL.Core" Version="3.7.0.7" />
|
<PackageReference Include="MonoGame.Framework.DesktopGL" Version="3.7.0.1708" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
<PackageReference Include="MonoGame.Extended" Version="3.7.0">
|
<PackageReference Include="MonoGame.Extended" Version="3.7.0">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="MonoGame.Framework.Portable" Version="3.6.0.1625">
|
<PackageReference Include="MonoGame.Framework.Portable" Version="3.7.1.189">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Coroutine" Version="1.0.1" />
|
<PackageReference Include="Coroutine" Version="1.0.1" />
|
||||||
<PackageReference Include="MonoGame.Extended" Version="3.7.0" />
|
<PackageReference Include="MonoGame.Extended" Version="3.7.0" />
|
||||||
<PackageReference Include="MonoGame.Framework.Portable" Version="3.6.0.1625">
|
<PackageReference Include="MonoGame.Framework.Portable" Version="3.7.1.189">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
@ -6,6 +6,7 @@ using Microsoft.Xna.Framework.Graphics;
|
||||||
using Microsoft.Xna.Framework.Input;
|
using Microsoft.Xna.Framework.Input;
|
||||||
using MLEM.Extensions;
|
using MLEM.Extensions;
|
||||||
using MLEM.Font;
|
using MLEM.Font;
|
||||||
|
using MLEM.Input;
|
||||||
using MLEM.Textures;
|
using MLEM.Textures;
|
||||||
using MLEM.Ui.Style;
|
using MLEM.Ui.Style;
|
||||||
|
|
||||||
|
@ -30,21 +31,35 @@ namespace MLEM.Ui.Elements {
|
||||||
private double caretBlinkTimer;
|
private double caretBlinkTimer;
|
||||||
private int textStartIndex;
|
private int textStartIndex;
|
||||||
public Rule InputRule;
|
public Rule InputRule;
|
||||||
|
public string MobileTitle;
|
||||||
|
public string MobileDescription;
|
||||||
|
|
||||||
public TextField(Anchor anchor, Vector2 size, Rule rule = null, IGenericFont font = null) : base(anchor, size) {
|
public TextField(Anchor anchor, Vector2 size, Rule rule = null, IGenericFont font = null) : base(anchor, size) {
|
||||||
this.InputRule = rule ?? DefaultRule;
|
this.InputRule = rule ?? DefaultRule;
|
||||||
this.font = font;
|
this.font = font;
|
||||||
this.OnTextInput += (element, key, character) => {
|
|
||||||
if (!this.IsSelected)
|
if (InputHandler.TextInputSupported) {
|
||||||
return;
|
this.OnTextInput += (element, key, character) => {
|
||||||
if (key == Keys.Back) {
|
if (!this.IsSelected)
|
||||||
if (this.text.Length > 0) {
|
return;
|
||||||
this.RemoveText(this.text.Length - 1, 1);
|
if (key == Keys.Back) {
|
||||||
|
if (this.text.Length > 0) {
|
||||||
|
this.RemoveText(this.text.Length - 1, 1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.AppendText(character);
|
||||||
}
|
}
|
||||||
} else {
|
};
|
||||||
this.AppendText(character);
|
} else {
|
||||||
}
|
this.OnPressed += async e => {
|
||||||
};
|
if (!KeyboardInput.IsVisible) {
|
||||||
|
var title = this.MobileTitle ?? this.PlaceholderText;
|
||||||
|
var result = await KeyboardInput.Show(title, this.MobileDescription, this.Text);
|
||||||
|
if (result != null)
|
||||||
|
this.SetText(result.Replace('\n', ' '));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HandleTextChange() {
|
private void HandleTextChange() {
|
||||||
|
@ -106,7 +121,7 @@ namespace MLEM.Ui.Elements {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AppendText(object text) {
|
public void AppendText(object text) {
|
||||||
if (!this.InputRule(this, text.ToString()))
|
if (!this.InputRule(this, text.ToString()))
|
||||||
return;
|
return;
|
||||||
this.text.Append(text);
|
this.text.Append(text);
|
||||||
this.HandleTextChange();
|
this.HandleTextChange();
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="MonoGame.Framework.Portable" Version="3.6.0.1625">
|
<PackageReference Include="MonoGame.Framework.Portable" Version="3.7.1.189">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
@ -48,7 +48,6 @@ namespace MLEM.Ui {
|
||||||
public BlendState BlendState;
|
public BlendState BlendState;
|
||||||
public SamplerState SamplerState = SamplerState.PointClamp;
|
public SamplerState SamplerState = SamplerState.PointClamp;
|
||||||
public UiControls Controls;
|
public UiControls Controls;
|
||||||
public readonly bool SupportsTextInput;
|
|
||||||
|
|
||||||
public UiSystem(GameWindow window, GraphicsDevice device, UiStyle style, InputHandler inputHandler = null) {
|
public UiSystem(GameWindow window, GraphicsDevice device, UiStyle style, InputHandler inputHandler = null) {
|
||||||
this.Controls = new UiControls(this, inputHandler);
|
this.Controls = new UiControls(this, inputHandler);
|
||||||
|
@ -62,18 +61,19 @@ namespace MLEM.Ui {
|
||||||
foreach (var root in this.rootElements)
|
foreach (var root in this.rootElements)
|
||||||
root.Element.ForceUpdateArea();
|
root.Element.ForceUpdateArea();
|
||||||
};
|
};
|
||||||
|
|
||||||
try {
|
if (InputHandler.TextInputSupported) {
|
||||||
NativeTextInput.AddToTextInput(window, (key, character) => {
|
AddToTextInput(window, (key, character) => {
|
||||||
foreach (var root in this.rootElements)
|
foreach (var root in this.rootElements)
|
||||||
root.Element.Propagate(e => e.OnTextInput?.Invoke(e, key, character));
|
root.Element.Propagate(e => e.OnTextInput?.Invoke(e, key, character));
|
||||||
});
|
});
|
||||||
this.SupportsTextInput = true;
|
|
||||||
} catch (TypeLoadException) {
|
|
||||||
this.SupportsTextInput = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void AddToTextInput(GameWindow window, Action<Keys, char> func) {
|
||||||
|
window.TextInput += (sender, args) => func(args.Key, args.Character);
|
||||||
|
}
|
||||||
|
|
||||||
public void Update(GameTime time) {
|
public void Update(GameTime time) {
|
||||||
this.Controls.Update();
|
this.Controls.Update();
|
||||||
|
|
||||||
|
@ -146,14 +146,6 @@ namespace MLEM.Ui {
|
||||||
root.Element.Propagate(action);
|
root.Element.Propagate(action);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class NativeTextInput {
|
|
||||||
|
|
||||||
internal static void AddToTextInput(GameWindow window, Action<Keys, char> func) {
|
|
||||||
window.TextInput += (sender, args) => func(args.Key, args.Character);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class RootElement {
|
public class RootElement {
|
||||||
|
|
|
@ -11,6 +11,7 @@ namespace MLEM.Input {
|
||||||
public class InputHandler {
|
public class InputHandler {
|
||||||
|
|
||||||
public static MouseButton[] MouseButtons = EnumHelper.GetValues<MouseButton>().ToArray();
|
public static MouseButton[] MouseButtons = EnumHelper.GetValues<MouseButton>().ToArray();
|
||||||
|
public static readonly bool TextInputSupported = typeof(GameWindow).GetEvent("TextInput") != null;
|
||||||
|
|
||||||
public KeyboardState LastKeyboardState { get; private set; }
|
public KeyboardState LastKeyboardState { get; private set; }
|
||||||
public KeyboardState KeyboardState { get; private set; }
|
public KeyboardState KeyboardState { get; private set; }
|
||||||
|
@ -40,7 +41,6 @@ namespace MLEM.Input {
|
||||||
this.HandleMouse = handleMouse;
|
this.HandleMouse = handleMouse;
|
||||||
this.HandleGamepads = handleGamepads;
|
this.HandleGamepads = handleGamepads;
|
||||||
this.HandleTouch = handleTouch;
|
this.HandleTouch = handleTouch;
|
||||||
|
|
||||||
this.Gestures = this.gestures.AsReadOnly();
|
this.Gestures = this.gestures.AsReadOnly();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="MonoGame.Framework.Portable" Version="3.6.0.1625">
|
<PackageReference Include="MonoGame.Framework.Portable" Version="3.7.1.189">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
@ -39,6 +39,8 @@ namespace AndroidTests {
|
||||||
panel.AddChild(new Button(Anchor.AutoCenter, new Vector2(0.5F, 10), "Toggle Image") {
|
panel.AddChild(new Button(Anchor.AutoCenter, new Vector2(0.5F, 10), "Toggle Image") {
|
||||||
OnPressed = element => image.IsHidden = !image.IsHidden
|
OnPressed = element => image.IsHidden = !image.IsHidden
|
||||||
});
|
});
|
||||||
|
|
||||||
|
panel.AddChild(new TextField(Anchor.AutoLeft, new Vector2(1, 10)) {PlaceholderText = "Tap to type"});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void DoDraw(GameTime gameTime) {
|
protected override void DoDraw(GameTime gameTime) {
|
||||||
|
|
Loading…
Reference in a new issue