Skip to content

Commit

Permalink
Merge branch 'dev' into typed-group
Browse files Browse the repository at this point in the history
  • Loading branch information
Geokureli committed Oct 16, 2023
2 parents df08770 + dfff192 commit 32c39e0
Show file tree
Hide file tree
Showing 17 changed files with 166 additions and 144 deletions.
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -13,7 +13,7 @@

# About

A series of tools for creating and UI elements and managing UI events in [HaxeFlixel](https://github.com/HaxeFlixel/flixel).
A series of tools for creating UI elements and managing UI events in [HaxeFlixel](https://github.com/HaxeFlixel/flixel).

# Getting Started

Expand Down
190 changes: 107 additions & 83 deletions flixel/addons/ui/FlxInputText.hx
@@ -1,17 +1,22 @@
package flixel.addons.ui;

import flash.errors.Error;
import flash.events.KeyboardEvent;
import flash.geom.Rectangle;
import flixel.addons.ui.FlxUI.NamedString;
import openfl.errors.Error;
import openfl.events.KeyboardEvent;
import openfl.geom.Rectangle;
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;
import flixel.text.FlxText;
import flixel.util.FlxColor;
import flixel.util.FlxDestroyUtil;
import flixel.util.FlxTimer;
import lime.system.Clipboard;
#if (html5 && js)
import lime.app.Application;
#end

/**
* FlxInputText v1.11, ported to Haxe
Expand Down Expand Up @@ -223,13 +228,19 @@ 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)
{
Text = "";
}

// Register paste events for the HTML5 parent window
#if (html5 && js)
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();
Expand Down Expand Up @@ -257,6 +268,11 @@ class FlxInputText extends FlxText
}
#end

#if (html5 && js)
var window = Application.current.window;
@:privateAccess window.onTextInput.remove(handleClipboardText);
#end

super.destroy();
}

Expand Down Expand Up @@ -327,84 +343,71 @@ class FlxInputText extends FlxText
*/
private function onKeyDown(e:KeyboardEvent):Void
{
var key:Int = e.keyCode;
final key:FlxKey = e.keyCode;

if (hasFocus)
{
// Do nothing for Shift, Ctrl, Esc, and flixel console hotkey
if (key == 16 || key == 17 || key == 220 || key == 27)
{
return;
}
// Left arrow
else if (key == 37)
{
if (caretIndex > 0)
{
caretIndex--;
text = text; // forces scroll update
}
}
// Right arrow
else if (key == 39)
{
if (caretIndex < text.length)
{
caretIndex++;
text = text; // forces scroll update
}
}
// End key
else if (key == 35)
{
caretIndex = text.length;
text = text; // forces scroll update
}
// Home key
else if (key == 36)
{
caretIndex = 0;
text = text;
}
// Backspace
else if (key == 8)
{
if (caretIndex > 0)
{
caretIndex--;
text = text.substring(0, caretIndex) + text.substring(caretIndex + 1);
onChange(BACKSPACE_ACTION);
}
}
// Delete
else if (key == 46)
switch (key)
{
if (text.length > 0 && caretIndex < text.length)
{
text = text.substring(0, caretIndex) + text.substring(caretIndex + 1);
onChange(DELETE_ACTION);
}
}
// Enter
else if (key == 13)
{
onChange(ENTER_ACTION);
}
// Actually add some text
else
{
if (e.charCode == 0) // non-printable characters crash String.fromCharCode
{
case SHIFT | CONTROL | BACKSLASH | ESCAPE:
return;
}
var newText:String = filter(String.fromCharCode(e.charCode));

if (newText.length > 0 && (maxLength == 0 || (text.length + newText.length) < maxLength))
{
text = insertSubstring(text, newText, caretIndex);
caretIndex++;
onChange(INPUT_ACTION);
}
case LEFT:
if (caretIndex > 0)
{
caretIndex--;
text = text; // forces scroll update
}
case RIGHT:
if (caretIndex < text.length)
{
caretIndex++;
text = text; // forces scroll update
}
case END:
caretIndex = text.length;
text = text; // forces scroll update
case HOME:
caretIndex = 0;
text = text;
case BACKSPACE:
if (caretIndex > 0)
{
caretIndex--;
text = text.substring(0, caretIndex) + text.substring(caretIndex + 1);
onChange(BACKSPACE_ACTION);
}
case DELETE:
if (text.length > 0 && caretIndex < text.length)
{
text = text.substring(0, caretIndex) + text.substring(caretIndex + 1);
onChange(DELETE_ACTION);
}
case ENTER:
onChange(ENTER_ACTION);
case V if (e.ctrlKey):
// Reapply focus when tabbing back into the window and selecting the field
#if (html5 && js)
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
{
return;
}
final newText = filter(String.fromCharCode(e.charCode));

if (newText.length > 0 && (maxLength == 0 || (text.length + newText.length) <= maxLength))
{
text = insertSubstring(text, newText, caretIndex);
caretIndex++;
onChange(INPUT_ACTION);
}
}
}
}
Expand All @@ -417,6 +420,23 @@ class FlxInputText extends FlxText
}
}

#if (html5 && js)
function handleClipboardText(clipboardText:String)
{
@:privateAccess if (Clipboard._text == clipboardText)
pasteClipboardText(clipboardText);
}
#end

function pasteClipboardText(clipboardText:String)
{
final newText = filter(clipboardText).substring(0, maxLength > 0 ? (maxLength - text.length) : clipboardText.length);

text = insertSubstring(text, newText, caretIndex);
caretIndex += newText.length;
onChange(INPUT_ACTION);
}

/**
* Inserts a substring into a string at a specific index
*
Expand Down Expand Up @@ -533,11 +553,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:
}
}
Expand Down Expand Up @@ -829,6 +847,12 @@ class FlxInputText extends FlxText
if (newFocus != hasFocus)
{
calcFrame();

// Set focus on background parent text input
#if (html5 && js)
var window = Application.current.window;
@:privateAccess window.__backend.setTextInputEnabled(newFocus);
#end
}
return hasFocus = newFocus;
}
Expand Down Expand Up @@ -1006,4 +1030,4 @@ class FlxInputText extends FlxText
calcFrame();
return backgroundColor;
}
}
}
51 changes: 24 additions & 27 deletions flixel/addons/ui/FlxUI.hx
@@ -1,34 +1,20 @@
package flixel.addons.ui;

import flash.Lib;
import flash.display.BitmapData;
import flash.errors.Error;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;

import flixel.FlxG;
import flixel.FlxObject;
import flixel.FlxSprite;
import flixel.FlxState;
import flixel.group.FlxSpriteGroup;
import flixel.system.FlxAssets;
import flixel.text.FlxText;
import flixel.ui.FlxBar;
import flixel.util.FlxArrayUtil;
import flixel.util.FlxColor;
import flixel.math.FlxPoint;
import flixel.util.FlxStringUtil;

import openfl.display.BitmapData;
import openfl.errors.Error;
import openfl.geom.Matrix;
import openfl.geom.Point;
import openfl.geom.Rectangle;
import openfl.Lib;
import flixel.addons.ui.ButtonLabelStyle;
import flixel.addons.ui.BorderDef;
import flixel.addons.ui.FlxUIBar;
import flixel.addons.ui.FlxUICursor;
import flixel.addons.ui.FlxUIBar.FlxBarStyle;
import flixel.addons.ui.FlxUICursor.WidgetList;
import flixel.addons.ui.FlxUIDropDownMenu;
import flixel.addons.ui.FlxUIGroup;
import flixel.addons.ui.FlxUILine;
import flixel.addons.ui.FlxUIRadioGroup;
import flixel.addons.ui.FlxUITooltipManager;
import flixel.addons.ui.BorderDef;
import flixel.addons.ui.FlxUILine.LineAxis;
import flixel.addons.ui.FlxUIRadioGroup.CheckStyle;
import flixel.addons.ui.FlxUITooltipManager.FlxUITooltipData;
import flixel.addons.ui.FontDef;
import flixel.addons.ui.interfaces.IEventGetter;
import flixel.addons.ui.interfaces.IFireTongue;
Expand All @@ -39,7 +25,18 @@ import flixel.addons.ui.interfaces.IFlxUIWidget;
import flixel.addons.ui.interfaces.IHasParams;
import flixel.addons.ui.interfaces.ILabeled;
import flixel.addons.ui.interfaces.IResizable;

import flixel.FlxG;
import flixel.FlxObject;
import flixel.FlxSprite;
import flixel.FlxState;
import flixel.group.FlxSpriteGroup;
import flixel.system.FlxAssets;
import flixel.text.FlxText;
import flixel.ui.FlxBar.FlxBarFillDirection;
import flixel.util.FlxArrayUtil;
import flixel.util.FlxColor;
import flixel.math.FlxPoint;
import flixel.util.FlxStringUtil;
import openfl.Assets;
import openfl.text.TextFormat;
#if haxe4
Expand Down
14 changes: 8 additions & 6 deletions flixel/addons/ui/FlxUI9SliceSprite.hx
@@ -1,10 +1,10 @@
package flixel.addons.ui;

import flash.display.BitmapData;
import flash.display.Sprite;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
import openfl.display.BitmapData;
import openfl.display.Sprite;
import openfl.geom.Matrix;
import openfl.geom.Point;
import openfl.geom.Rectangle;
import flixel.addons.ui.interfaces.IFlxUIWidget;
import flixel.addons.ui.interfaces.IResizable;
import flixel.graphics.FlxGraphic;
Expand Down Expand Up @@ -158,8 +158,10 @@ class FlxUI9SliceSprite extends FlxUISprite implements IResizable implements IFl
var iw = Std.int(pt.x);
var ih = Std.int(pt.y);

if (_slice9 == null || _slice9 == [])
if (_slice9 == null || _slice9.length != 4)
{
if (_slice9 != null)
flixel.FlxG.log.warn("Invalid 9slice array, expected a length of 4");
_slice9 = [4, 4, 7, 7];
}

Expand Down
10 changes: 5 additions & 5 deletions flixel/addons/ui/FlxUIButton.hx
@@ -1,10 +1,10 @@
package flixel.addons.ui;

import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.text.Font;
import flash.text.TextFormat;
import openfl.display.BitmapData;
import openfl.geom.Point;
import openfl.geom.Rectangle;
import openfl.text.Font;
import openfl.text.TextFormat;
import flixel.addons.ui.BorderDef;
import flixel.addons.ui.FontDef;
import flixel.addons.ui.interfaces.IFlxUIButton;
Expand Down
2 changes: 1 addition & 1 deletion flixel/addons/ui/FlxUIColorSwatch.hx
@@ -1,6 +1,6 @@
package flixel.addons.ui;

import flash.geom.Rectangle;
import openfl.geom.Rectangle;
import flixel.addons.ui.FlxUISprite;
import flixel.addons.ui.interfaces.ICursorPointable;
import flixel.FlxG;
Expand Down
2 changes: 1 addition & 1 deletion flixel/addons/ui/FlxUIColorSwatchSelecter.hx
@@ -1,6 +1,6 @@
package flixel.addons.ui;

import flash.geom.Rectangle;
import openfl.geom.Rectangle;
import flixel.addons.ui.FlxUIColorSwatchSelecter.SwatchGraphic;
import flixel.addons.ui.interfaces.IFlxUIClickable;
import flixel.FlxSprite;
Expand Down

0 comments on commit 32c39e0

Please sign in to comment.