Skip to content

Commit

Permalink
refactor: clean up the code of Key and Keyboard
Browse files Browse the repository at this point in the history
  • Loading branch information
WhiredPlanck committed Dec 3, 2024
1 parent 2c84113 commit 6b0048f
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 207 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -90,12 +90,12 @@ class GeneralStyleMapper(

val keyTextSize = getFloat("key_text_size")

val keyTextOffsetX = getInt("key_text_offset_x")
val keyTextOffsetY = getInt("key_text_offset_y")
val keySymbolOffsetX = getInt("key_symbol_offset_x")
val keySymbolOffsetY = getInt("key_symbol_offset_y")
val keyHintOffsetX = getInt("key_hint_offset_x")
val keyHintOffsetY = getInt("key_hint_offset_y")
val keyTextOffsetX = getFloat("key_text_offset_x")
val keyTextOffsetY = getFloat("key_text_offset_y")
val keySymbolOffsetX = getFloat("key_symbol_offset_x")
val keySymbolOffsetY = getFloat("key_symbol_offset_y")
val keyHintOffsetX = getFloat("key_hint_offset_x")
val keyHintOffsetY = getFloat("key_hint_offset_y")
val keyPressOffsetX = getInt("key_press_offset_x")
val keyPressOffsetY = getInt("key_press_offset_y")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,12 @@ data class GeneralStyle(
val keyHeight: Int,
val keyLongTextSize: Float,
val keyTextSize: Float,
val keyTextOffsetX: Int,
val keyTextOffsetY: Int,
val keySymbolOffsetX: Int,
val keySymbolOffsetY: Int,
val keyHintOffsetX: Int,
val keyHintOffsetY: Int,
val keyTextOffsetX: Float,
val keyTextOffsetY: Float,
val keySymbolOffsetX: Float,
val keySymbolOffsetY: Float,
val keyHintOffsetX: Float,
val keyHintOffsetY: Float,
val keyPressOffsetX: Int,
val keyPressOffsetY: Int,
val keyWidth: Float,
Expand Down
36 changes: 8 additions & 28 deletions app/src/main/java/com/osfans/trime/ime/keyboard/Key.kt
Original file line number Diff line number Diff line change
Expand Up @@ -58,17 +58,17 @@ class Key(
private set
var roundCorner: Float = 0f
private set
var keyTextOffsetX = 0
var keyTextOffsetX = 0f
get() = field + keyOffsetX
var keyTextOffsetY = 0
var keyTextOffsetY = 0f
get() = field + keyOffsetY
var keySymbolOffsetX = 0
var keySymbolOffsetX = 0f
get() = field + keyOffsetX
var keySymbolOffsetY = 0
var keySymbolOffsetY = 0f
get() = field + keyOffsetY
var keyHintOffsetX = 0
var keyHintOffsetX = 0f
get() = field + keyOffsetX
var keyHintOffsetY = 0
var keyHintOffsetY = 0f
get() = field + keyOffsetY
var keyPressOffsetX = 0
var keyPressOffsetY = 0
Expand Down Expand Up @@ -156,7 +156,7 @@ class Key(
* @see .onReleased
*/
fun onPressed() {
isPressed = !isPressed
isPressed = true
}

/**
Expand All @@ -166,7 +166,7 @@ class Key(
* @see .onPressed
*/
fun onReleased() {
isPressed = !isPressed
isPressed = false
if (click!!.isSticky) isOn = !isOn
}

Expand Down Expand Up @@ -281,26 +281,6 @@ class Key(
val c = this.code
return c == KeyEvent.KEYCODE_SHIFT_LEFT || c == KeyEvent.KEYCODE_SHIFT_RIGHT
}
val isCtrl: Boolean
get() {
val c = this.code
return c == KeyEvent.KEYCODE_CTRL_LEFT || c == KeyEvent.KEYCODE_CTRL_RIGHT
}
val isMeta: Boolean
get() {
val c = this.code
return c == KeyEvent.KEYCODE_META_LEFT || c == KeyEvent.KEYCODE_META_RIGHT
}
val isAlt: Boolean
get() {
val c = this.code
return c == KeyEvent.KEYCODE_ALT_LEFT || c == KeyEvent.KEYCODE_ALT_RIGHT
}
val isSys: Boolean
get() {
val c = this.code
return c == KeyEvent.KEYCODE_SYM
}
val isShiftLock: Boolean
// Shift、Ctrl、Alt、Meta等修饰键在点击时是否触发锁定
get() {
Expand Down
197 changes: 36 additions & 161 deletions app/src/main/java/com/osfans/trime/ime/keyboard/Keyboard.kt
Original file line number Diff line number Diff line change
Expand Up @@ -174,8 +174,6 @@ class Keyboard(
)
isLock = obtainBoolean(keyboardConfig, "lock", false)
val columns = obtainInt(keyboardConfig, "columns", 30)
var defaultWidth = (obtainFloat(keyboardConfig, "width", 0f) * mDisplayWidth / 100).toInt()
if (defaultWidth == 0) defaultWidth = keyWidth

// 按键高度取值顺序: keys > keyboard/height > style/key_height
// 考虑到key设置height_land需要对皮肤做大量修改,而当部分key设置height而部分没有设时会造成按键高度异常,故取消普通按键的height_land参数
Expand Down Expand Up @@ -218,7 +216,7 @@ class Keyboard(
obtainFloat(
keyboardConfig,
"round_corner",
theme.generalStyle.roundCorner.toFloat(),
theme.generalStyle.roundCorner,
)
val horizontalGap = horizontalGap
val verticalGap = verticalGap
Expand Down Expand Up @@ -301,113 +299,47 @@ class Keyboard(
x += widthPx + gap
continue // 縮進
}
val defaultKeyTextOffsetX =
appContext
.sp(
obtainFloat(
keyboardConfig,
"key_text_offset_x",
theme.generalStyle.keyTextOffsetX.toFloat(),
),
).toInt()
val defaultKeyTextOffsetY =
appContext
.sp(
obtainFloat(
keyboardConfig,
"key_text_offset_y",
theme.generalStyle.keyTextOffsetY.toFloat(),
),
).toInt()
val defaultKeySymbolOffsetX =
appContext
.sp(
obtainFloat(
keyboardConfig,
"key_symbol_offset_x",
theme.generalStyle.keySymbolOffsetX.toFloat(),
),
).toInt()
val defaultKeySymbolOffsetY =
appContext
.sp(
obtainFloat(
keyboardConfig,
"key_symbol_offset_y",
theme.generalStyle.keySymbolOffsetY.toFloat(),
),
).toInt()
val defaultKeyHintOffsetX =
appContext
.sp(
obtainFloat(
keyboardConfig,
"key_hint_offset_x",
theme.generalStyle.keyHintOffsetX.toFloat(),
),
).toInt()
val defaultKeyHintOffsetY =
appContext
.sp(
obtainFloat(
keyboardConfig,
"key_hint_offset_y",
theme.generalStyle.keyHintOffsetY.toFloat(),
),
).toInt()
val defaultKeyPressOffsetX =
obtainInt(
keyboardConfig,
"key_press_offset_x",
theme.generalStyle.keyPressOffsetX,
)
val defaultKeyPressOffsetY =
obtainInt(
keyboardConfig,
"key_press_offset_y",
theme.generalStyle.keyPressOffsetY,
)
val key = Key(this, mk)
key.keyTextOffsetX =
appContext
.sp(
obtainFloat(mk, "key_text_offset_x", defaultKeyTextOffsetX.toFloat()),
).toInt()
obtainFloat(
mk,
"key_text_offset_x",
obtainFloat(keyboardConfig, "key_text_offset_x", theme.generalStyle.keyTextOffsetX),
)
key.keyTextOffsetY =
appContext
.sp(
obtainFloat(mk, "key_text_offset_y", defaultKeyTextOffsetY.toFloat()),
).toInt()
obtainFloat(
mk,
"key_text_offset_y",
obtainFloat(keyboardConfig, "key_text_offset_y", theme.generalStyle.keyTextOffsetY),
)
key.keySymbolOffsetX =
appContext
.sp(
obtainFloat(
mk,
"key_symbol_offset_x",
defaultKeySymbolOffsetX.toFloat(),
),
).toInt()
obtainFloat(
mk,
"key_symbol_offset_x",
obtainFloat(keyboardConfig, "key_symbol_offset_x", theme.generalStyle.keySymbolOffsetX),
)
key.keySymbolOffsetY =
appContext
.sp(
obtainFloat(
mk,
"key_symbol_offset_y",
defaultKeySymbolOffsetY.toFloat(),
),
).toInt()
obtainFloat(
mk,
"key_symbol_offset_y",
obtainFloat(keyboardConfig, "key_symbol_offset_y", theme.generalStyle.keySymbolOffsetY),
)
key.keyHintOffsetX =
appContext
.sp(
obtainFloat(mk, "key_hint_offset_x", defaultKeyHintOffsetX.toFloat()),
).toInt()
obtainFloat(
mk,
"key_hint_offset_x",
obtainFloat(keyboardConfig, "key_hint_offset_x", theme.generalStyle.keyHintOffsetX),
)
key.keyHintOffsetY =
appContext
.sp(
obtainFloat(mk, "key_hint_offset_y", defaultKeyHintOffsetY.toFloat()),
).toInt()
key.keyPressOffsetX = obtainInt(mk, "key_press_offset_x", defaultKeyPressOffsetX)
key.keyPressOffsetY = obtainInt(mk, "key_press_offset_y", defaultKeyPressOffsetY)
obtainFloat(
mk,
"key_hint_offset_y",
obtainFloat(keyboardConfig, "key_hint_offset_y", theme.generalStyle.keyHintOffsetY),
)
key.keyPressOffsetX =
obtainInt(mk, "key_press_offset_x", obtainInt(keyboardConfig, "key_press_offset_x", theme.generalStyle.keyPressOffsetX))
key.keyPressOffsetY =
obtainInt(mk, "key_press_offset_y", obtainInt(keyboardConfig, "key_press_offset_y", theme.generalStyle.keyPressOffsetY))
key.x = x
key.y = y
val rightGap = abs(mDisplayWidth - x - widthPx - gap / 2)
Expand Down Expand Up @@ -576,64 +508,7 @@ class Keyboard(
return if (on) setModifier(keycode, keepOn) else setModifier(keycode, keyDown)
}

fun setAltOn(
on: Boolean,
keyDown: Boolean,
): Boolean {
var on = on
on = on and keyDown
if (mAltKey != null) mAltKey!!.setOn(on)
return setModifier(KeyEvent.META_ALT_ON, on || keyDown)
}

fun setCtrlOn(
on: Boolean,
keyDown: Boolean,
): Boolean {
var on = on
on = on and keyDown
if (mCtrlKey != null) mCtrlKey!!.setOn(on)
return setModifier(KeyEvent.META_CTRL_ON, on || keyDown)
}

fun setSymOn(
on: Boolean,
keyDown: Boolean,
): Boolean {
var on = on
on = on and keyDown
if (mSymKey != null) mSymKey!!.setOn(on)
return setModifier(KeyEvent.META_SYM_ON, on || keyDown)
}

fun setMetaOn(
on: Boolean,
keyDown: Boolean,
): Boolean {
var on = on
on = on and keyDown
if (mMetaKey != null) mMetaKey!!.setOn(on)
return setModifier(KeyEvent.META_META_ON, on || keyDown)
}

// public boolean setFunctionOn(boolean on, boolean keyDown) {
// on = on & keyDown;
// if (mFunctionKey != null) mFunctionKey.setOn(on);
// return setModifier(KeyEvent.META_FUNCTION_ON, on || keyDown);
// }

private val MASK_META_WITHOUT_SHIFT = KeyEvent.META_CTRL_ON or KeyEvent.META_ALT_ON or KeyEvent.META_SYM_ON or KeyEvent.META_META_ON
private val MASK_META_WITHOUT_CTRL = KeyEvent.META_SHIFT_ON or KeyEvent.META_ALT_ON or KeyEvent.META_SYM_ON or KeyEvent.META_META_ON
private val MASK_META_WITHOUT_ALT = KeyEvent.META_CTRL_ON or KeyEvent.META_SHIFT_ON or KeyEvent.META_SYM_ON or KeyEvent.META_META_ON
private val MASK_META_WITHOUT_SYS = KeyEvent.META_CTRL_ON or KeyEvent.META_ALT_ON or KeyEvent.META_SHIFT_ON or KeyEvent.META_META_ON
private val MASK_META_WITHOUT_META = KeyEvent.META_CTRL_ON or KeyEvent.META_ALT_ON or KeyEvent.META_SYM_ON or KeyEvent.META_SHIFT_ON
private val MASK_META = (
KeyEvent.META_CTRL_ON
or KeyEvent.META_ALT_ON
or KeyEvent.META_SYM_ON
or KeyEvent.META_META_ON
or KeyEvent.META_SHIFT_ON
)

/** Creates a keyboard from the given xml key layout file. */
init {
Expand All @@ -658,7 +533,7 @@ class Keyboard(
keyHeight = appContext.dp(theme.generalStyle.keyHeight)
mProximityThreshold = (keyWidth * SEARCH_DISTANCE).toInt()
mProximityThreshold *= mProximityThreshold // Square it for comparison
roundCorner = theme.generalStyle.roundCorner.toFloat()
roundCorner = theme.generalStyle.roundCorner
mKeys = ArrayList()
composingKeys = ArrayList()
}
Expand Down
12 changes: 6 additions & 6 deletions app/src/main/java/com/osfans/trime/ime/keyboard/KeyboardView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -549,8 +549,8 @@ class KeyboardView(
sp(if (keyLabel.length > 1) labelTextSize else keyTextSize)
}

val labelX = centerX + key.keyTextOffsetX
val labelBaseline = centerY + key.keyTextOffsetY
val labelX = centerX + sp(key.keyTextOffsetX)
val labelBaseline = centerY + sp(key.keyTextOffsetY)

paint.color = key.getTextColorForState(currentKeyDrawableState)
?: mKeyTextColor.getColorForState(currentKeyDrawableState, Color.TRANSPARENT)
Expand Down Expand Up @@ -583,15 +583,15 @@ class KeyboardView(

val symbolLabel = key.symbolLabel
if (showKeySymbol && symbolLabel.isNotEmpty()) {
val symbolX = centerX + key.keySymbolOffsetX
val symbolX = centerX + sp(key.keySymbolOffsetX)
val symbolBaseline = -fontMetrics.top
canvas.drawText(symbolLabel, symbolX, symbolBaseline + key.keySymbolOffsetY, paint)
canvas.drawText(symbolLabel, symbolX, symbolBaseline + sp(key.keySymbolOffsetY), paint)
}
val hintLabel = key.hint
if (showKeyHint && hintLabel.isNotEmpty()) {
val hintX = centerX + key.keyHintOffsetX
val hintX = centerX + sp(key.keyHintOffsetX)
val hintBaseline = -fontMetrics.bottom
canvas.drawText(hintLabel, hintX, hintBaseline + key.height + key.keyHintOffsetY, paint)
canvas.drawText(hintLabel, hintX, hintBaseline + key.height + sp(key.keyHintOffsetY), paint)
}
}
}
Expand Down

0 comments on commit 6b0048f

Please sign in to comment.