ctlIME // Tweak tooltip axis during vertical typing.

This commit is contained in:
ShikiSuen 2022-08-30 11:59:40 +08:00
parent e3c832011e
commit 34fa183148
2 changed files with 18 additions and 1 deletions

View File

@ -26,7 +26,16 @@ extension ctlInputMethod {
) )
cursor -= 1 cursor -= 1
} }
ctlInputMethod.tooltipController.show(tooltip: tooltip, at: lineHeightRect.origin) var finalOrigin: NSPoint = lineHeightRect.origin
if isVerticalTyping {
finalOrigin = NSPoint(
x: lineHeightRect.origin.x + lineHeightRect.size.width + 4.0, y: lineHeightRect.origin.y - 4.0
)
ctlInputMethod.tooltipController.direction = .vertical
} else {
ctlInputMethod.tooltipController.direction = .horizontal
}
ctlInputMethod.tooltipController.show(tooltip: tooltip, at: finalOrigin)
} }
func show(candidateWindowWith state: InputStateProtocol) { func show(candidateWindowWith state: InputStateProtocol) {

View File

@ -20,6 +20,11 @@ public class TooltipController: NSWindowController {
case prompt case prompt
} }
public enum displayDirection {
case horizontal
case vertical
}
private var backgroundColor = NSColor.windowBackgroundColor private var backgroundColor = NSColor.windowBackgroundColor
private var textColor = NSColor.windowBackgroundColor private var textColor = NSColor.windowBackgroundColor
private var messageTextField: NSTextField private var messageTextField: NSTextField
@ -30,6 +35,8 @@ public class TooltipController: NSWindowController {
} }
} }
public var direction: displayDirection = .horizontal
public init() { public init() {
let contentRect = NSRect(x: 128.0, y: 128.0, width: 300.0, height: 20.0) let contentRect = NSRect(x: 128.0, y: 128.0, width: 300.0, height: 20.0)
let styleMask: NSWindow.StyleMask = [.borderless, .nonactivatingPanel] let styleMask: NSWindow.StyleMask = [.borderless, .nonactivatingPanel]
@ -157,6 +164,7 @@ public class TooltipController: NSWindowController {
var rect = attrString.boundingRect( var rect = attrString.boundingRect(
with: NSSize(width: 1600.0, height: 1600.0), options: .usesLineFragmentOrigin with: NSSize(width: 1600.0, height: 1600.0), options: .usesLineFragmentOrigin
) )
rect.size.width += 10 rect.size.width += 10
messageTextField.frame = rect messageTextField.frame = rect
window?.setFrame(rect, display: true) window?.setFrame(rect, display: true)