InputHandler // Simplify the arrow handling in handleInput().

This commit is contained in:
ShikiSuen 2022-10-14 17:52:39 +08:00
parent 272bfef227
commit 29b89518c0
3 changed files with 13 additions and 11 deletions

View File

@ -34,6 +34,7 @@ public protocol InputHandlerProtocol {
/// InputHandler
public protocol InputHandlerDelegate {
var isVerticalTyping: Bool { get }
var selectionKeys: String { get }
var state: IMEStateProtocol { get set }
var clientBundleIdentifier: String { get }

View File

@ -136,7 +136,7 @@ extension InputHandler {
}
return true
} else if input.isShiftHold { // Tab Shift+Command+Space /
return handleInlineCandidateRotation(reverseOrder: input.isCommandHold)
return rotateCandidate(reverseOrder: input.isCommandHold)
}
}
//
@ -150,16 +150,17 @@ extension InputHandler {
if let keyCodeType = KeyCode(rawValue: input.keyCode) {
switch keyCodeType {
case .kEscape: return handleEsc()
case .kTab: return handleInlineCandidateRotation(reverseOrder: input.isShiftHold)
case .kTab: return rotateCandidate(reverseOrder: input.isShiftHold)
case .kUpArrow, .kDownArrow, .kLeftArrow, .kRightArrow:
if input.isCursorBackward { return handleBackward(input: input) } // Forward
if input.isCursorForward { return handleForward(input: input) } // Backward
if input.isCursorClockLeft || input.isCursorClockRight { // Clock keys
if input.isOptionHold, state.type == .ofInputting {
if input.isCursorClockRight { return handleInlineCandidateRotation(reverseOrder: false) }
if input.isCursorClockLeft { return handleInlineCandidateRotation(reverseOrder: true) }
}
return handleClockKey()
let rotation: Bool = input.isOptionHold && state.type == .ofInputting
handleArrowKey: switch (keyCodeType, delegate.isVerticalTyping) {
case (.kLeftArrow, false), (.kUpArrow, true): return handleBackward(input: input)
case (.kRightArrow, false), (.kDownArrow, true): return handleForward(input: input)
case (.kUpArrow, false), (.kLeftArrow, true):
return rotation ? rotateCandidate(reverseOrder: true) : handleClockKey()
case (.kDownArrow, false), (.kRightArrow, true):
return rotation ? rotateCandidate(reverseOrder: false) : handleClockKey()
default: break handleArrowKey //
}
case .kHome: return handleHome()
case .kEnd: return handleEnd()

View File

@ -640,7 +640,7 @@ extension InputHandler {
/// - Parameters:
/// - reverseOrder:
/// - Returns: SessionCtl IMK
func handleInlineCandidateRotation(reverseOrder: Bool) -> Bool {
func rotateCandidate(reverseOrder: Bool) -> Bool {
guard let delegate = delegate else { return false }
let state = delegate.state
if composer.isEmpty, compositor.isEmpty || compositor.walkedNodes.isEmpty { return false }