diff --git a/srcs/juloo.keyboard2/Config.java b/srcs/juloo.keyboard2/Config.java index 9f27e7e..d746ccb 100644 --- a/srcs/juloo.keyboard2/Config.java +++ b/srcs/juloo.keyboard2/Config.java @@ -42,7 +42,8 @@ public final class Config public long longPressInterval; public boolean keyrepeat_enabled; public float margin_bottom; - public float keyHeight; + public int keyboardHeightPercent; + public int screenHeightPixels; public float horizontal_margin; public float key_vertical_margin; public float key_horizontal_margin; @@ -110,9 +111,6 @@ public final class Config orientation_landscape = res.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; foldable_unfolded = foldableUnfolded; - // The height of the keyboard is relative to the height of the screen. - // This is the height of the keyboard if it have 4 rows. - int keyboardHeightPercent; float characterSizeScale = 1.f; String show_numpad_s = _prefs.getString("show_numpad", "never"); show_numpad = "always".equals(show_numpad_s); @@ -159,9 +157,7 @@ public final class Config borderConfig = _prefs.getBoolean("border_config", false); customBorderRadius = _prefs.getInt("custom_border_radius", 0) / 100.f; customBorderLineWidth = get_dip_pref(dm, "custom_border_line_width", 0); - // Do not substract key_vertical_margin from keyHeight because this is done - // during rendering. - keyHeight = dm.heightPixels * keyboardHeightPercent / 100 / 4; + screenHeightPixels = dm.heightPixels; horizontal_margin = get_dip_pref_oriented(dm, "horizontal_margin", 3, 28); double_tap_lock_shift = _prefs.getBoolean("lock_double_tap", false); diff --git a/srcs/juloo.keyboard2/Keyboard2View.java b/srcs/juloo.keyboard2/Keyboard2View.java index 684e42a..23d2a0a 100644 --- a/srcs/juloo.keyboard2/Keyboard2View.java +++ b/srcs/juloo.keyboard2/Keyboard2View.java @@ -229,7 +229,7 @@ public class Keyboard2View extends View return null; for (KeyboardData.Row row : _keyboard.rows) { - y += (row.shift + row.height) * _config.keyHeight; + y += (row.shift + row.height) * _tc.row_height; if (ty < y) return row; } @@ -309,19 +309,19 @@ public class Keyboard2View extends View _marginRight = Math.max(_config.horizontal_margin, insets_right); _marginBottom = _config.margin_bottom + insets_bottom; _keyWidth = (width - _marginLeft - _marginRight) / _keyboard.keysWidth; - _tc = new Theme.Computed(_theme, _config, _keyWidth); + _tc = new Theme.Computed(_theme, _config, _keyWidth, _keyboard); // Compute the size of labels based on the width or the height of keys. The // margin around keys is taken into account. Keys normal aspect ratio is // assumed to be 3/2. It's generally more, the width computation is useful // when the keyboard is unusually high. float labelBaseSize = Math.min( - _config.keyHeight - _tc.vertical_margin, + _tc.row_height - _tc.vertical_margin, _keyWidth * 3/2 - _tc.horizontal_margin ) * _config.characterSize; _mainLabelSize = labelBaseSize * _config.labelTextSize; _subLabelSize = labelBaseSize * _config.sublabelTextSize; int height = - (int)(_config.keyHeight * _keyboard.keysHeight + (int)(_tc.row_height * _keyboard.keysHeight + _config.marginTop + _marginBottom); setMeasuredDimension(width, height); } @@ -364,9 +364,9 @@ public class Keyboard2View extends View float y = _tc.margin_top; for (KeyboardData.Row row : _keyboard.rows) { - y += row.shift * _config.keyHeight; + y += row.shift * _tc.row_height; float x = _marginLeft + _tc.margin_left; - float keyH = row.height * _config.keyHeight - _tc.vertical_margin; + float keyH = row.height * _tc.row_height - _tc.vertical_margin; for (KeyboardData.Key k : row.keys) { x += k.shift * _keyWidth; @@ -384,7 +384,7 @@ public class Keyboard2View extends View drawIndication(canvas, k, x, y, keyW, keyH, _tc); x += _keyWidth * k.width; } - y += row.height * _config.keyHeight; + y += row.height * _tc.row_height; } } diff --git a/srcs/juloo.keyboard2/Theme.java b/srcs/juloo.keyboard2/Theme.java index c5f3e20..9af0d01 100644 --- a/srcs/juloo.keyboard2/Theme.java +++ b/srcs/juloo.keyboard2/Theme.java @@ -94,14 +94,23 @@ public class Theme public final float horizontal_margin; public final float margin_top; public final float margin_left; + public final float row_height; public final Paint indication_paint; public final Key key; public final Key key_activated; - public Computed(Theme theme, Config config, float keyWidth) + public Computed(Theme theme, Config config, float keyWidth, KeyboardData layout) { - vertical_margin = config.key_vertical_margin * config.keyHeight; + // Rows height is proportional to the keyboard height, meaning it doesn't + // change for layouts with more or less rows. 3.95 is the usual height of + // a layout in KeyboardData unit. The keyboard will be higher if the + // layout has more rows and smaller if it has less because rows stay the + // same height. + row_height = Math.min( + config.screenHeightPixels * config.keyboardHeightPercent / 100 / 3.95f, + config.screenHeightPixels / layout.keysHeight); + vertical_margin = config.key_vertical_margin * row_height; horizontal_margin = config.key_horizontal_margin * keyWidth; // Add half of the key margin on the left and on the top as it's also // added on the right and on the bottom of every keys.