mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-22 20:58:34 +01:00
made text input not test the release build of android :V reflection is a pain
This commit is contained in:
parent
e1ee92ad9b
commit
cfcd54dbe0
2 changed files with 35 additions and 6 deletions
|
@ -7,6 +7,7 @@ using Microsoft.Xna.Framework.Input;
|
||||||
using MLEM.Extensions;
|
using MLEM.Extensions;
|
||||||
using MLEM.Font;
|
using MLEM.Font;
|
||||||
using MLEM.Input;
|
using MLEM.Input;
|
||||||
|
using MLEM.Misc;
|
||||||
using MLEM.Textures;
|
using MLEM.Textures;
|
||||||
using MLEM.Ui.Elements;
|
using MLEM.Ui.Elements;
|
||||||
using MLEM.Ui.Style;
|
using MLEM.Ui.Style;
|
||||||
|
@ -67,10 +68,12 @@ namespace MLEM.Ui {
|
||||||
};
|
};
|
||||||
|
|
||||||
if (InputHandler.TextInputSupported) {
|
if (InputHandler.TextInputSupported) {
|
||||||
AddToTextInput(window, (key, character) => {
|
// this needs to be done using reflection because the event and
|
||||||
|
// its argument class don't exist on non-Desktop devices annoyingly
|
||||||
|
new TextInputReflector((sender, 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));
|
||||||
});
|
}).AddToWindow(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.OnSelectedElementDrawn = (element, time, batch, alpha, offset) => {
|
this.OnSelectedElementDrawn = (element, time, batch, alpha, offset) => {
|
||||||
|
@ -80,10 +83,6 @@ namespace MLEM.Ui {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
||||||
|
|
||||||
|
|
30
MLEM/Misc/TextInputReflector.cs
Normal file
30
MLEM/Misc/TextInputReflector.cs
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
using System;
|
||||||
|
using Microsoft.Xna.Framework;
|
||||||
|
using Microsoft.Xna.Framework.Input;
|
||||||
|
|
||||||
|
namespace MLEM.Misc {
|
||||||
|
public class TextInputReflector {
|
||||||
|
|
||||||
|
private readonly TextInputCallback callback;
|
||||||
|
|
||||||
|
public TextInputReflector(TextInputCallback callback) {
|
||||||
|
this.callback = callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddToWindow(GameWindow window) {
|
||||||
|
var evt = window.GetType().GetEvent("TextInput");
|
||||||
|
var handler = this.GetType().GetMethod(nameof(this.OnTextInput), new[] {typeof(object), typeof(EventArgs)});
|
||||||
|
evt.AddEventHandler(window, Delegate.CreateDelegate(evt.EventHandlerType, this, handler));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnTextInput(object sender, EventArgs args) {
|
||||||
|
var type = args.GetType();
|
||||||
|
var key = (Keys) type.GetProperty("Key").GetValue(args);
|
||||||
|
var character = (char) type.GetProperty("Character").GetValue(args);
|
||||||
|
this.callback.Invoke(sender, key, character);
|
||||||
|
}
|
||||||
|
|
||||||
|
public delegate void TextInputCallback(object sender, Keys key, char character);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue