fzhangtj
6 年前
当前提交
f369c5e0
共有 18 个文件被更改,包括 728 次插入 和 61 次删除
-
6Runtime/engine/UIWidgetsMessageManager.cs
-
17Runtime/engine/UIWidgetsPanel.cs
-
2Runtime/painting/text_painter.cs
-
7Runtime/rendering/editable.cs
-
143Runtime/service/keyboard.cs
-
27Runtime/service/text_input.cs
-
33Runtime/widgets/editable_text.cs
-
8Runtime/Plugins/platform/webgl.meta
-
289Runtime/Plugins/platform/webgl/UIWidgetsCanvasInput.jslib
-
36Runtime/Plugins/platform/webgl/UIWidgetsCanvasInput.jslib.meta
-
113Runtime/Plugins/platform/webgl/UIWidgetsInputPlugin.jslib
-
36Runtime/Plugins/platform/webgl/UIWidgetsInputPlugin.jslib.meta
-
65Runtime/Plugins/platform/webgl/webgl.jslib
-
7Runtime/Plugins/webgl.jslib
-
0/Runtime/Plugins/platform/ios/DeviceScreen.mm.meta
-
0/Runtime/Plugins/platform/webgl/webgl.jslib.meta
-
0/Runtime/Plugins/platform/ios/DeviceScreen.mm
|
|||
fileFormatVersion: 2 |
|||
guid: 2a5204f908bc54d789ea5933245a3bf5 |
|||
folderAsset: yes |
|||
DefaultImporter: |
|||
externalObjects: {} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
mergeInto(LibraryManager.library, { |
|||
|
|||
$UIWidgetsCanvasInputModule__postset: 'UIWidgetsCanvasInputModule.init();', |
|||
$UIWidgetsCanvasInputModule: { init: function() { |
|||
|
|||
// create a buffer that stores all inputs so that tabbing |
|||
// between them is made possible. |
|||
var inputs = []; |
|||
|
|||
// initialize the Canvas Input |
|||
var UIWidgetsCanvasInput = window.UIWidgetsCanvasInput = function(o) { |
|||
var self = this; |
|||
|
|||
o = o ? o : {}; |
|||
|
|||
// setup the defaults |
|||
self._canvas = o.canvas || null; |
|||
self._x = o.x || 0; |
|||
self._y = o.y || 0; |
|||
self._type = o.type || 'text'; |
|||
self._onchange = o.onchange || function() {}; |
|||
self._onsubmit = o.onsubmit || function() {}; |
|||
self._onkeydown = o.onkeydown || function() {}; |
|||
self._onkeyup = o.onkeyup || function() {}; |
|||
self._onfocus = o.onfocus || function() {}; |
|||
self._onblur = o.onblur || function() {}; |
|||
self._multiline = o.multiline || false; |
|||
self._hasFocus = false; |
|||
|
|||
self._createHiddenInput(); |
|||
self.value(o.value || ''); |
|||
self._inputsIndex = inputs.length - 1; |
|||
|
|||
}; |
|||
|
|||
// setup the prototype |
|||
UIWidgetsCanvasInput.prototype = { |
|||
|
|||
x: function(data) { |
|||
var self = this; |
|||
|
|||
if (typeof data !== 'undefined') { |
|||
self._x = data; |
|||
self._updateHiddenInput(); |
|||
|
|||
return; |
|||
} else { |
|||
return self._x; |
|||
} |
|||
}, |
|||
|
|||
y: function(data) { |
|||
var self = this; |
|||
|
|||
if (typeof data !== 'undefined') { |
|||
self._y = data; |
|||
self._updateHiddenInput(); |
|||
|
|||
return; |
|||
} else { |
|||
return self._y; |
|||
} |
|||
}, |
|||
|
|||
multiline: function(data) { |
|||
var self = this; |
|||
if (typeof data !== 'undefined') { |
|||
if (data === self._multiline) { |
|||
return; |
|||
} |
|||
self._multiline = !!data; |
|||
self._createHiddenInput(); |
|||
return; |
|||
} else { |
|||
return self._multiline; |
|||
} |
|||
}, |
|||
|
|||
type: function(data) { |
|||
var self = this; |
|||
if (typeof data !== 'undefined') { |
|||
self._type = data; |
|||
self._hiddenInput.type = data; |
|||
return; |
|||
} else { |
|||
return self._type; |
|||
} |
|||
}, |
|||
|
|||
value: function(data) { |
|||
var self = this; |
|||
if (typeof data !== 'undefined') { |
|||
self._hiddenInput.value = data; |
|||
return; |
|||
} else { |
|||
return self._hiddenInput.value; |
|||
} |
|||
}, |
|||
|
|||
selection: function() { |
|||
var self = this; |
|||
return [self._hiddenInput.selectionStart, self._hiddenInput.selectionEnd]; |
|||
}, |
|||
|
|||
onsubmit: function(fn) { |
|||
var self = this; |
|||
|
|||
if (typeof fn !== 'undefined') { |
|||
self._onsubmit = fn; |
|||
|
|||
return self; |
|||
} else { |
|||
self._onsubmit(); |
|||
} |
|||
}, |
|||
|
|||
onkeydown: function(fn) { |
|||
var self = this; |
|||
|
|||
if (typeof fn !== 'undefined') { |
|||
self._onkeydown = fn; |
|||
|
|||
return self; |
|||
} else { |
|||
self._onkeydown(); |
|||
} |
|||
}, |
|||
|
|||
onkeyup: function(fn) { |
|||
var self = this; |
|||
|
|||
if (typeof fn !== 'undefined') { |
|||
self._onkeyup = fn; |
|||
|
|||
return self; |
|||
} else { |
|||
self._onkeyup(); |
|||
} |
|||
}, |
|||
|
|||
focus: function() { |
|||
var self = this; |
|||
|
|||
// only fire the focus event when going from unfocussed |
|||
if (!self._hasFocus) { |
|||
self._onfocus(self); |
|||
|
|||
// remove focus from all other inputs |
|||
for (var i=0; i<inputs.length; i++) { |
|||
if (inputs[i]._hasFocus) { |
|||
inputs[i].blur(); |
|||
} |
|||
} |
|||
} |
|||
|
|||
self._hasFocus = true; |
|||
self._hiddenInput.focus(); |
|||
return; |
|||
}, |
|||
|
|||
blur: function(_this) { |
|||
var self = _this || this; |
|||
|
|||
self._onblur(self); |
|||
|
|||
self._hasFocus = false; |
|||
self._hiddenInput.blur(); |
|||
}, |
|||
|
|||
keydown: function(e, self) { |
|||
var keyCode = e.which, |
|||
isShift = e.shiftKey, |
|||
key = null, |
|||
startText, endText; |
|||
|
|||
// make sure the correct text field is being updated |
|||
if (!self._hasFocus) { |
|||
return; |
|||
} |
|||
|
|||
// fire custom user event |
|||
self._onkeydown(e, self); |
|||
|
|||
// add support for Ctrl/Cmd+A selection |
|||
if (keyCode === 65 && (e.ctrlKey || e.metaKey)) { |
|||
self.selectText(); |
|||
e.preventDefault(); |
|||
return; |
|||
} |
|||
|
|||
// block keys that shouldn't be processed |
|||
if (keyCode === 17 || e.metaKey || e.ctrlKey) { |
|||
return; |
|||
} |
|||
|
|||
if (keyCode === 13 && !self._multiline) { // enter key |
|||
e.preventDefault(); |
|||
self._onsubmit(e, self); |
|||
} else { |
|||
self._onchange(); |
|||
} |
|||
return; |
|||
}, |
|||
|
|||
selectText: function(range) { |
|||
var self = this, |
|||
range = range || [0, self.value().length]; |
|||
|
|||
// select the range of text specified (or all if none specified) |
|||
setTimeout(function() { |
|||
self._hiddenInput.selectionStart = range[0]; |
|||
self._hiddenInput.selectionEnd = range[1]; |
|||
self._onchange(); |
|||
}, 1); |
|||
|
|||
return self; |
|||
}, |
|||
|
|||
destroy: function() { |
|||
var self = this; |
|||
|
|||
// pull from the inputs array |
|||
var index = inputs.indexOf(self); |
|||
if (index !== -1) { |
|||
inputs.splice(index, 1); |
|||
} |
|||
|
|||
// remove focus |
|||
if (self._hasFocus) { |
|||
self.blur(); |
|||
} |
|||
|
|||
// remove the hidden input box |
|||
self._hiddenInput.parentNode.removeChild(self._hiddenInput); |
|||
|
|||
self._renderCtx = null; |
|||
}, |
|||
|
|||
_updateHiddenInput: function() { |
|||
var self = this; |
|||
self._hiddenInput.style.left = (self._x + (self._canvas ? self._canvas.offsetLeft : 0)) + 'px'; |
|||
self._hiddenInput.style.top = (self._y + (self._canvas ? self._canvas.offsetTop : 0)) + 'px'; |
|||
}, |
|||
|
|||
_createHiddenInput: function () { |
|||
var self = this; |
|||
if (self._hiddenInput) { |
|||
self._hiddenInput.parentNode.removeChild(self._hiddenInput); |
|||
self._hiddenInput = null; |
|||
} |
|||
self._hiddenInput = document.createElement(self._multiline ? 'textarea' : 'input'); |
|||
self._hiddenInput.type = self._type; |
|||
self._hiddenInput.style.position = 'absolute'; |
|||
self._hiddenInput.style.opacity = 0; |
|||
self._hiddenInput.style.pointerEvents = 'none'; |
|||
self._hiddenInput.style.zIndex = 0; |
|||
// hide native blue text cursor on iOS |
|||
self._hiddenInput.style.transform = 'scale(0)'; |
|||
|
|||
self._updateHiddenInput(); |
|||
self._canvas.parentNode.appendChild(self._hiddenInput); |
|||
|
|||
// setup the keydown listener |
|||
self._hiddenInput.addEventListener('keydown', function(e) { |
|||
e = e || window.event; |
|||
|
|||
if (self._hasFocus) { |
|||
// hack to fix touch event bug in iOS Safari |
|||
window.focus(); |
|||
self._hiddenInput.focus(); |
|||
|
|||
// continue with the keydown event |
|||
self.keydown(e, self); |
|||
} |
|||
}); |
|||
|
|||
// setup the keyup listener |
|||
self._hiddenInput.addEventListener('keyup', function(e) { |
|||
e = e || window.event; |
|||
self._onchange(); |
|||
|
|||
if (self._hasFocus) { |
|||
self._onkeyup(e, self); |
|||
} |
|||
}); |
|||
} |
|||
}; |
|||
|
|||
}}}); |
|
|||
fileFormatVersion: 2 |
|||
guid: ac437980a48c8464abea9c9c31a16e10 |
|||
PluginImporter: |
|||
externalObjects: {} |
|||
serializedVersion: 2 |
|||
iconMap: {} |
|||
executionOrder: {} |
|||
defineConstraints: [] |
|||
isPreloaded: 0 |
|||
isOverridable: 1 |
|||
isExplicitlyReferenced: 0 |
|||
platformData: |
|||
- first: |
|||
Any: |
|||
second: |
|||
enabled: 0 |
|||
settings: {} |
|||
- first: |
|||
Editor: Editor |
|||
second: |
|||
enabled: 0 |
|||
settings: |
|||
DefaultValueInitialized: true |
|||
- first: |
|||
Facebook: WebGL |
|||
second: |
|||
enabled: 1 |
|||
settings: {} |
|||
- first: |
|||
WebGL: WebGL |
|||
second: |
|||
enabled: 1 |
|||
settings: {} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
mergeInto(LibraryManager.library, { |
|||
|
|||
$UIWidgetsInputPluginModule__postset: 'UIWidgetsInputPluginModule.init();', |
|||
$UIWidgetsInputPluginModule: { init: function() { |
|||
|
|||
var UIWidgetsTextInputPlugin = window.UIWidgetsTextInputPlugin = function(o) { |
|||
this._canvas = o.canvas; |
|||
this._messageManager = o.messageManager; |
|||
}; |
|||
|
|||
// setup the prototype |
|||
UIWidgetsTextInputPlugin.prototype = { |
|||
|
|||
setClient: function (client, configuration) { |
|||
var self = this; |
|||
if (!self._canvasInput) { |
|||
self._canvasInput = new UIWidgetsCanvasInput({ |
|||
canvas: self._canvas, |
|||
onchange: self._onchange.bind(self), |
|||
onsubmit: self._onsubmit.bind(self), |
|||
}); |
|||
self._canvas.addEventListener('mouseup', function(e) { |
|||
if (self._client) { |
|||
self._canvasInput.focus(); |
|||
|
|||
} |
|||
}, false); |
|||
} |
|||
|
|||
var configObj = JSON.parse(configuration); |
|||
var multiline = configObj.inputType.name === 'TextInputType.multiline'; |
|||
self._canvasInput.type(configObj.obscureText ? 'password' : 'text'); |
|||
self._canvasInput.multiline(multiline); |
|||
|
|||
self._canvasInput.focus(); |
|||
self._client = client; |
|||
}, |
|||
|
|||
setTextInputEditingState: function (jsonText) { |
|||
var self = this; |
|||
var state = JSON.parse(jsonText); |
|||
self._canvasInput.value(state.text); |
|||
self._canvasInput.selectText([state.selectionBase, state.selectionExtent]); |
|||
}, |
|||
|
|||
setTextInputIMEPos: function(x, y) { |
|||
var self = this; |
|||
self._canvasInput.x(x); |
|||
self._canvasInput.y(y); |
|||
}, |
|||
|
|||
clearTextInputClient: function () { |
|||
var self = this; |
|||
self._canvasInput.blur(); |
|||
self._client = null; |
|||
}, |
|||
|
|||
_onsubmit: function() { |
|||
var self = this; |
|||
if (!self._client) { |
|||
return; |
|||
} |
|||
self._messageManager.sendMethodInvokeMessage('TextInput', 'TextInputClient.performAction', |
|||
[self._client, 'TextInputAction.done']); |
|||
}, |
|||
|
|||
_onchange: function() { |
|||
var self = this; |
|||
if (!self._client) { |
|||
return; |
|||
} |
|||
|
|||
var value = self._canvasInput.value(); |
|||
var selection = self._canvasInput.selection(); |
|||
|
|||
var state = { |
|||
selectionBase: selection[0], |
|||
selectionExtent: selection[1], |
|||
selectionIsDirectional: false, |
|||
text: value |
|||
}; |
|||
|
|||
self._messageManager.sendMethodInvokeMessage('TextInput', 'TextInputClient.updateEditingState', |
|||
[self._client, state]); |
|||
} |
|||
}; |
|||
|
|||
|
|||
var UIWidgetsMessageManager = window.UIWidgetsMessageManager = function(sendMessage) { |
|||
var self = this; |
|||
self._sendMesssage = sendMessage; |
|||
|
|||
}; |
|||
|
|||
UIWidgetsMessageManager.prototype = { |
|||
|
|||
setObjectName: function (name) { |
|||
var self = this; |
|||
self._gameObjectName = name; |
|||
}, |
|||
|
|||
sendMethodInvokeMessage: function(channel, method, args) { |
|||
var self = this; |
|||
var body = { |
|||
channel: channel, |
|||
method: method, |
|||
args: args |
|||
}; |
|||
self._sendMesssage(self._gameObjectName, 'OnUIWidgetsMethodMessage', JSON.stringify(body)); |
|||
} |
|||
}; |
|||
|
|||
}}}); |
|
|||
fileFormatVersion: 2 |
|||
guid: 77df7fa0e2fd844359da12725acf5825 |
|||
PluginImporter: |
|||
externalObjects: {} |
|||
serializedVersion: 2 |
|||
iconMap: {} |
|||
executionOrder: {} |
|||
defineConstraints: [] |
|||
isPreloaded: 0 |
|||
isOverridable: 1 |
|||
isExplicitlyReferenced: 0 |
|||
platformData: |
|||
- first: |
|||
Any: |
|||
second: |
|||
enabled: 0 |
|||
settings: {} |
|||
- first: |
|||
Editor: Editor |
|||
second: |
|||
enabled: 0 |
|||
settings: |
|||
DefaultValueInitialized: true |
|||
- first: |
|||
Facebook: WebGL |
|||
second: |
|||
enabled: 1 |
|||
settings: {} |
|||
- first: |
|||
WebGL: WebGL |
|||
second: |
|||
enabled: 1 |
|||
settings: {} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
var UIWidgetsLibrary = { |
|||
|
|||
|
|||
//$method_support__postset: 'method_support.init1();method_support.init2();', |
|||
//$method_support: { |
|||
|
|||
//}, |
|||
$UIWidgetsPlugin: { |
|||
textInput: null, |
|||
messageManager: null, |
|||
|
|||
getTextInput: function() { |
|||
if (UIWidgetsPlugin.textInput) { |
|||
return UIWidgetsPlugin.textInput; |
|||
} |
|||
|
|||
UIWidgetsPlugin.textInput = new UIWidgetsTextInputPlugin({ |
|||
messageManager: UIWidgetsPlugin.getMessageManager(), |
|||
canvas: Module.canvas |
|||
}); |
|||
return UIWidgetsPlugin.textInput; |
|||
}, |
|||
|
|||
getMessageManager: function() { |
|||
if (UIWidgetsPlugin.messageManager) { |
|||
return UIWidgetsPlugin.messageManager; |
|||
} |
|||
|
|||
UIWidgetsPlugin.messageManager = new UIWidgetsMessageManager(SendMessage); |
|||
return UIWidgetsPlugin.messageManager; |
|||
}, |
|||
|
|||
messageObjectName: "" |
|||
}, |
|||
|
|||
UIWidgetsWebGLDevicePixelRatio: function () { |
|||
return window.devicePixelRatio || 1; |
|||
}, |
|||
|
|||
|
|||
UIWidgetsTextInputSetClient: function (client, configuration) { |
|||
UIWidgetsPlugin.getTextInput().setClient(client, Pointer_stringify(configuration)); |
|||
}, |
|||
|
|||
UIWidgetsTextInputSetTextInputEditingState: function (jsonText) { |
|||
UIWidgetsPlugin.getTextInput().setTextInputEditingState(Pointer_stringify(jsonText)); |
|||
}, |
|||
|
|||
UIWidgetsTextInputSetIMEPos: function(x, y) { |
|||
UIWidgetsPlugin.getTextInput().setTextInputIMEPos(x, y); |
|||
}, |
|||
|
|||
UIWidgetsTextInputClearTextInputClient: function () { |
|||
UIWidgetsPlugin.getTextInput().clearTextInputClient(); |
|||
}, |
|||
|
|||
UIWidgetsMessageSetObjectName: function (name) { |
|||
UIWidgetsPlugin.getMessageManager().setObjectName(Pointer_stringify(name)); |
|||
} |
|||
}; |
|||
|
|||
autoAddDeps(UIWidgetsLibrary, '$UIWidgetsPlugin'); |
|||
autoAddDeps(UIWidgetsLibrary, '$UIWidgetsCanvasInputModule'); |
|||
autoAddDeps(UIWidgetsLibrary, '$UIWidgetsInputPluginModule'); |
|||
mergeInto(LibraryManager.library, UIWidgetsLibrary); |
|
|||
mergeInto(LibraryManager.library, { |
|||
|
|||
UIWidgetsWebGLDevicePixelRatio: function () { |
|||
return window.devicePixelRatio || 1; |
|||
}, |
|||
|
|||
}); |
撰写
预览
正在加载...
取消
保存
Reference in new issue