From 9d5541d6f4d3d3ac677b06eaecadb99f86e7ff57 Mon Sep 17 00:00:00 2001 From: DigiEggz Date: Thu, 10 Aug 2023 14:22:34 -0400 Subject: [PATCH 1/7] Update FlxInputText.hx --- flixel/addons/ui/FlxInputText.hx | 62 +++++++++++++++++++++++++++----- 1 file changed, 54 insertions(+), 8 deletions(-) diff --git a/flixel/addons/ui/FlxInputText.hx b/flixel/addons/ui/FlxInputText.hx index 7b01c02..b5c3ba8 100644 --- a/flixel/addons/ui/FlxInputText.hx +++ b/flixel/addons/ui/FlxInputText.hx @@ -3,9 +3,9 @@ package flixel.addons.ui; import openfl.errors.Error; import openfl.events.KeyboardEvent; import openfl.geom.Rectangle; -import flixel.addons.ui.FlxUI.NamedString; import flixel.FlxG; import flixel.FlxSprite; +import flixel.addons.ui.FlxUI.NamedString; import flixel.input.keyboard.FlxKey; import flixel.math.FlxPoint; import flixel.math.FlxRect; @@ -13,7 +13,11 @@ import flixel.text.FlxText; import flixel.util.FlxColor; import flixel.util.FlxDestroyUtil; import flixel.util.FlxTimer; -import openfl.desktop.Clipboard; +import lime.system.Clipboard; +#if (html5 && js) +import lime.app.Application; +import lime.app.Event; +#end /** * FlxInputText v1.11, ported to Haxe @@ -232,6 +236,12 @@ class FlxInputText extends FlxText Text = ""; } + // Register paste events for the HTML5 parent window + #if (js && html5) + var window = Application.current.window; + @:privateAccess window.onTextInput.add(handleClipboardText); + #end + text = Text; // ensure set_text is called to avoid bugs (like not preparing _charBoundaries on sys target, making it impossible to click) calcFrame(); @@ -259,6 +269,11 @@ class FlxInputText extends FlxText } #end + #if (js && html5) + var window = Application.current.window; + @:privateAccess window.onTextInput.remove(handleClipboardText); + #end + super.destroy(); } @@ -370,6 +385,16 @@ class FlxInputText extends FlxText } case ENTER: onChange(ENTER_ACTION); + case V if (e.ctrlKey): + // Reapply focus when tabbing back into the window and selecting the field + #if (js && html5) + var window = Application.current.window; + @:privateAccess window.textInputEnabled = true; + #else + var clipboardText:String = Clipboard.text; + if (clipboardText != null) + pasteClipboardText(clipboardText); + #end default: // Actually add some text if (e.charCode == 0) // non-printable characters crash String.fromCharCode @@ -378,7 +403,7 @@ class FlxInputText extends FlxText } final newText = filter(String.fromCharCode(e.charCode)); - if (newText.length > 0 && (maxLength == 0 || (text.length + newText.length) < maxLength)) + if (newText.length > 0 && (maxLength == 0 || (text.length + newText.length) <= maxLength)) { text = insertSubstring(text, newText, caretIndex); caretIndex++; @@ -396,6 +421,23 @@ class FlxInputText extends FlxText } } + #if (html5 && js) + function handleClipboardText(clipboardText:String) + { + @:privateAccess if (Clipboard._text == clipboardText) + pasteClipboardText(clipboardText); + } + #end + + function pasteClipboardText(clipboardText:String) + { + var newText = filter(clipboardText).substring(0, maxLength - text.length); + + text = insertSubstring(text, newText, caretIndex); + caretIndex += newText.length; + onChange(INPUT_ACTION); + } + /** * Inserts a substring into a string at a specific index * @@ -512,11 +554,9 @@ class FlxInputText extends FlxText switch (getAlignStr()) { case RIGHT: - X = X - textField.width + textField.textWidth - ; + X = X - textField.width + textField.textWidth; case CENTER: - X = X - textField.width / 2 + textField.textWidth / 2 - ; + X = X - textField.width / 2 + textField.textWidth / 2; default: } } @@ -808,6 +848,12 @@ class FlxInputText extends FlxText if (newFocus != hasFocus) { calcFrame(); + + // Set focus on background parent text input + #if (js && html5) + var window = Application.current.window; + @:privateAccess window.__backend.setTextInputEnabled(newFocus); + #end } return hasFocus = newFocus; } @@ -985,4 +1031,4 @@ class FlxInputText extends FlxText calcFrame(); return backgroundColor; } -} +} \ No newline at end of file From 0372c7b2525298ccaf2f6780039904ed01fc2864 Mon Sep 17 00:00:00 2001 From: DigiEggz Date: Thu, 10 Aug 2023 14:36:50 -0400 Subject: [PATCH 2/7] Update FlxInputText.hx --- flixel/addons/ui/FlxInputText.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flixel/addons/ui/FlxInputText.hx b/flixel/addons/ui/FlxInputText.hx index b5c3ba8..0a35a6b 100644 --- a/flixel/addons/ui/FlxInputText.hx +++ b/flixel/addons/ui/FlxInputText.hx @@ -431,7 +431,7 @@ class FlxInputText extends FlxText function pasteClipboardText(clipboardText:String) { - var newText = filter(clipboardText).substring(0, maxLength - text.length); + final newText = filter(clipboardText).substring(0, maxLength - text.length); text = insertSubstring(text, newText, caretIndex); caretIndex += newText.length; From e1aadd1b0ff1e5184861ccfd820f0cf2479c92bc Mon Sep 17 00:00:00 2001 From: DigiEggz Date: Thu, 10 Aug 2023 15:50:27 -0400 Subject: [PATCH 3/7] Update FlxInputText.hx --- flixel/addons/ui/FlxInputText.hx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/flixel/addons/ui/FlxInputText.hx b/flixel/addons/ui/FlxInputText.hx index 0a35a6b..bcb174d 100644 --- a/flixel/addons/ui/FlxInputText.hx +++ b/flixel/addons/ui/FlxInputText.hx @@ -237,7 +237,7 @@ class FlxInputText extends FlxText } // Register paste events for the HTML5 parent window - #if (js && html5) + #if (html5 && js) var window = Application.current.window; @:privateAccess window.onTextInput.add(handleClipboardText); #end @@ -269,7 +269,7 @@ class FlxInputText extends FlxText } #end - #if (js && html5) + #if (html5 && js) var window = Application.current.window; @:privateAccess window.onTextInput.remove(handleClipboardText); #end @@ -387,7 +387,7 @@ class FlxInputText extends FlxText onChange(ENTER_ACTION); case V if (e.ctrlKey): // Reapply focus when tabbing back into the window and selecting the field - #if (js && html5) + #if (html5 && js) var window = Application.current.window; @:privateAccess window.textInputEnabled = true; #else @@ -850,7 +850,7 @@ class FlxInputText extends FlxText calcFrame(); // Set focus on background parent text input - #if (js && html5) + #if (html5 && js) var window = Application.current.window; @:privateAccess window.__backend.setTextInputEnabled(newFocus); #end From a057eab562255f21b90e4d547e950dcf91e62d40 Mon Sep 17 00:00:00 2001 From: DigiEggz Date: Thu, 10 Aug 2023 16:01:02 -0400 Subject: [PATCH 4/7] Update FlxInputText.hx --- flixel/addons/ui/FlxInputText.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flixel/addons/ui/FlxInputText.hx b/flixel/addons/ui/FlxInputText.hx index bcb174d..df27b69 100644 --- a/flixel/addons/ui/FlxInputText.hx +++ b/flixel/addons/ui/FlxInputText.hx @@ -229,7 +229,7 @@ class FlxInputText extends FlxText } lines = 1; - FlxG.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); + FlxG.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown, false, 1); if (Text == null) { From 80d1c51a4387bb813fc1eee3b012caf942074574 Mon Sep 17 00:00:00 2001 From: DigiEggz Date: Fri, 11 Aug 2023 08:35:27 -0400 Subject: [PATCH 5/7] Update FlxInputText.hx --- flixel/addons/ui/FlxInputText.hx | 1 - 1 file changed, 1 deletion(-) diff --git a/flixel/addons/ui/FlxInputText.hx b/flixel/addons/ui/FlxInputText.hx index df27b69..f7f75c9 100644 --- a/flixel/addons/ui/FlxInputText.hx +++ b/flixel/addons/ui/FlxInputText.hx @@ -15,7 +15,6 @@ import flixel.util.FlxDestroyUtil; import flixel.util.FlxTimer; import lime.system.Clipboard; #if (html5 && js) -import lime.app.Application; import lime.app.Event; #end From ad752629febad3e749995bcd7004892ba9de02be Mon Sep 17 00:00:00 2001 From: DigiEggz Date: Fri, 11 Aug 2023 08:36:07 -0400 Subject: [PATCH 6/7] Update FlxInputText.hx --- flixel/addons/ui/FlxInputText.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flixel/addons/ui/FlxInputText.hx b/flixel/addons/ui/FlxInputText.hx index f7f75c9..80ecf06 100644 --- a/flixel/addons/ui/FlxInputText.hx +++ b/flixel/addons/ui/FlxInputText.hx @@ -15,7 +15,7 @@ import flixel.util.FlxDestroyUtil; import flixel.util.FlxTimer; import lime.system.Clipboard; #if (html5 && js) -import lime.app.Event; +import lime.app.Application; #end /** From cd1cc5b3581f9eb84cc64347e7d12b94cf59b333 Mon Sep 17 00:00:00 2001 From: DigiEggz Date: Mon, 16 Oct 2023 09:06:57 -0400 Subject: [PATCH 7/7] Update FlxInputText.hx --- flixel/addons/ui/FlxInputText.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flixel/addons/ui/FlxInputText.hx b/flixel/addons/ui/FlxInputText.hx index 80ecf06..bb3c7cb 100644 --- a/flixel/addons/ui/FlxInputText.hx +++ b/flixel/addons/ui/FlxInputText.hx @@ -430,7 +430,7 @@ class FlxInputText extends FlxText function pasteClipboardText(clipboardText:String) { - final newText = filter(clipboardText).substring(0, maxLength - text.length); + final newText = filter(clipboardText).substring(0, maxLength > 0 ? (maxLength - text.length) : clipboardText.length); text = insertSubstring(text, newText, caretIndex); caretIndex += newText.length;