phaser4-rex-plugins
Version:
134 lines (111 loc) • 4.27 kB
JavaScript
import HiddenTextEditBase from '../../../../behaviors/hiddentextedit/HiddenTextEditBase.js';
import NumberInputUpdateCallback from '../../../../behaviors/hiddentextedit/defaultcallbacks/NumberInputUpdateCallback.js';
import SelectRange from './SelectRange.js';
import MoveCursor from './MoveCursor.js';
import ClearSelectRange from './ClearSelectRange.js';
import ClearCursor from './ClearCursor.js';
const GetValue = Phaser.Utils.Objects.GetValue;
class HiddenTextEdit extends HiddenTextEditBase {
constructor(gameObject, config) {
super(gameObject, config);
// this.parent = gameObject;
this.setSelectAllWhenFocusEnable(GetValue(config, 'selectAll', false));
this.cursorMoveStartIndex = null;
this.prevCursorPosition = null;
this.prevSelectionStart = null;
this.prevSelectionEnd = null;
this.firstClickAfterOpen = false;
this.requestCursorPosition = null;
gameObject
// Open editor by 'pointerdown' event
// Then set cursor position to nearest char
.on('pointerdown', function (pointer, localX, localY, event) {
var child = gameObject.getNearestChild(localX, localY);
var charIndex = gameObject.getCharIndex(child);
if (!this.selectAllWhenFocus || !this.firstClickAfterOpen) {
this.setCursorPosition(charIndex);
}
this.cursorMoveStartIndex = charIndex;
this.firstClickAfterOpen = false;
}, this)
.on('pointermove', function (pointer, localX, localY, event) {
if (!pointer.isDown) {
return;
}
var child = gameObject.getNearestChild(localX, localY);
var charIndex = gameObject.getCharIndex(child);
if (this.cursorMoveStartIndex < charIndex) {
this.selectText(this.cursorMoveStartIndex, charIndex + 1);
} else {
this.selectText(charIndex, this.cursorMoveStartIndex + 1);
}
}, this)
this
.on('open', function () {
if (this.selectAllWhenFocus) {
this.selectAll();
}
this.firstClickAfterOpen = true;
gameObject.emit('open');
}, this)
.on('close', function () {
// Route 'close' event
gameObject.emit('close');
})
.on('keydown-ENTER', function () {
// Route 'keydown-ENTER' event
gameObject.emit('keydown-ENTER');
})
}
initText() {
var textObject = this.parent;
this.prevCursorPosition = null;
this.setText(textObject.text);
return this;
}
updateText() {
var textObject = this.parent;
var text = this.text;
if (this.onUpdateCallback) {
var newText = this.onUpdateCallback(text, textObject, this);
if (newText != null) {
text = newText;
}
}
if (textObject.text !== text) {
textObject.setText(text);
}
if (this.isOpened) {
if (this.selectionStart !== this.selectionEnd) {
ClearCursor(this);
SelectRange(this);
} else {
ClearSelectRange(this);
MoveCursor(this);
}
} else {
ClearSelectRange(this);
ClearCursor(this);
}
return this;
}
setNumberInput() {
this.onUpdateCallback = NumberInputUpdateCallback;
return this;
}
setSelectAllWhenFocusEnable(enable) {
if (enable === undefined) {
enable = true;
}
this.selectAllWhenFocus = enable;
return this;
}
setRequestCursorPosition(value) {
if (!this.isOpened) {
return this;
}
this.requestCursorPosition = value;
return this;
}
}
export default HiddenTextEdit;