修复手机端文本框响应逻辑错误

This commit is contained in:
MrZ626
2021-05-19 21:32:47 +08:00
parent 59848cd559
commit 41ce44fc0e
3 changed files with 37 additions and 32 deletions

View File

@@ -160,6 +160,7 @@ function love.touchpressed(id,x,y)
if SCN.swapping then return end
if not touching then
touching=id
WIDGET.unFocus(true)
love.touchmoved(id,x,y,0,0)
end
x,y=xOy:inverseTransformPoint(x,y)
@@ -172,14 +173,10 @@ function love.touchmoved(_,x,y,dx,dy)
x,y=xOy:inverseTransformPoint(x,y)
if SCN.touchMove then SCN.touchMove(x,y,dx/SCR.k,dy/SCR.k)end
if WIDGET.sel then
if touching then
WIDGET.drag(x,y,dx,dy)
end
if touching then WIDGET.drag(x,y,dx,dy)end
else
WIDGET.cursorMove(x,y)
if not WIDGET.sel then
touching=false
end
if not WIDGET.sel then touching=false end
end
end
function love.touchreleased(id,x,y)
@@ -188,8 +185,9 @@ function love.touchreleased(id,x,y)
if id==touching then
WIDGET.press(x,y,1)
WIDGET.release(x,y)
touching=false
WIDGET.cursorMove(x,y)
WIDGET.unFocus()
touching=false
end
if SCN.touchUp then SCN.touchUp(x,y)end
if(x-lastX)^2+(y-lastY)^2<62 then

View File

@@ -1083,9 +1083,12 @@ function WIDGET.focus(W)
kb.setTextInput(true,0,y1,1,1)
end
end
function WIDGET.unFocus()
if WIDGET.sel and WIDGET.sel.type=='inputBox'then kb.setTextInput(false)end
WIDGET.sel=false
function WIDGET.unFocus(force)
local W=WIDGET.sel
if W and(force or not W.keepFocus)then
if W.type=='inputBox'then kb.setTextInput(false)end
WIDGET.sel=false
end
end
function WIDGET.cursorMove(x,y)
@@ -1110,8 +1113,8 @@ function WIDGET.drag(x,y,dx,dy)
if not W then return end
if W.type=='slider'or W.type=='textBox'then
W:drag(x,y,dx,dy)
elseif not W:isAbove(x,y)and not WIDGET.sel.keepFocus then
WIDGET.unFocus()
elseif not W:isAbove(x,y)then
WIDGET.unFocus(true)
end
end
function WIDGET.release(x,y)

View File

@@ -26,6 +26,25 @@ local function _gotoSetting()
SCN.go('setting_game')
end
end
local function _quit()
if TIME()-lastBackTime<1 then
NET.signal_quit()
else
lastBackTime=TIME()
LOG.print(text.sureQuit,'warn')
end
end
local function _switchChat()
if inputBox.hide then
textBox.hide=false
inputBox.hide=false
WIDGET.focus(inputBox)
else
textBox.hide=true
inputBox.hide=true
WIDGET.unFocus(true)
end
end
local scene={}
@@ -97,12 +116,7 @@ function scene.keyDown(key)
if not inputBox.hide then
scene.keyDown("switchChat")
else
if TIME()-lastBackTime<1 then
NET.signal_quit()
else
lastBackTime=TIME()
LOG.print(text.sureQuit,'warn')
end
_quit()
end
elseif key=="return"then
local mes=STRING.trim(inputBox:getText())
@@ -111,20 +125,10 @@ function scene.keyDown(key)
NET.sendMessage(mes)
inputBox:clear()
elseif #EDITING==0 then
scene.keyDown("switchChat")
_switchChat()
end
else
scene.keyDown("switchChat")
end
elseif key=="switchChat"then
if inputBox.hide then
textBox.hide=false
inputBox.hide=false
WIDGET.focus(inputBox)
else
textBox.hide=true
inputBox.hide=true
WIDGET.unFocus()
_switchChat()
end
elseif not inputBox.hide then
print(1)
@@ -371,8 +375,8 @@ scene.widgetList={
not netPLY.getSelfReady() or
NET.getlock('ready')
end},
WIDGET.newKey{name="hideChat",fText="...",x=380,y=35,w=60,font=35,code=pressKey"switchChat"},
WIDGET.newKey{name="quit",fText="X",x=900,y=35,w=60,font=40,code=pressKey"escape"},
WIDGET.newKey{name="hideChat",fText="...",x=380,y=35,w=60,font=35,code=_switchChat},
WIDGET.newKey{name="quit",fText="X",x=900,y=35,w=60,font=40,code=_quit},
}
return scene