abouttreesummaryrefslogcommitdiff
diff options
context:
space:
mode:
-rw-r--r--srcs/juloo.keyboard2/Config.java4
-rw-r--r--srcs/juloo.keyboard2/Keyboard2View.java3
-rw-r--r--srcs/juloo.keyboard2/KeyboardData.java66
3 files changed, 51 insertions, 22 deletions
diff --git a/srcs/juloo.keyboard2/Config.java b/srcs/juloo.keyboard2/Config.java
index 30be772..da78f7f 100644
--- a/srcs/juloo.keyboard2/Config.java
+++ b/srcs/juloo.keyboard2/Config.java
@@ -181,7 +181,7 @@ final class Config
if (extra_keys_subtype != null)
{
Set<KeyValue> present = new HashSet<KeyValue>();
- kw.getKeys(present);
+ present.addAll(kw.getKeys().keySet());
present.addAll(extra_keys_param);
present.addAll(extra_keys_custom);
extra_keys_subtype.compute(extra_keys,
@@ -189,7 +189,7 @@ final class Config
}
boolean number_row = this.number_row && !show_numpad;
if (number_row)
- KeyboardData.number_row.getKeys(remove_keys);
+ remove_keys.addAll(KeyboardData.number_row.getKeys(0).keySet());
kw = kw.mapKeys(new KeyboardData.MapKeyValues() {
public KeyValue apply(KeyValue key, boolean localized)
{
diff --git a/srcs/juloo.keyboard2/Keyboard2View.java b/srcs/juloo.keyboard2/Keyboard2View.java
index 949cdab..3ef9957 100644
--- a/srcs/juloo.keyboard2/Keyboard2View.java
+++ b/srcs/juloo.keyboard2/Keyboard2View.java
@@ -19,6 +19,9 @@ public class Keyboard2View extends View
implements View.OnTouchListener, Pointers.IPointerEventHandler
{
private KeyboardData _keyboard;
+
+ /** The key holding the shift key is used to set shift state from
+ autocapitalisation. */
private KeyValue _shift_kv;
private KeyboardData.Key _shift_key;
diff --git a/srcs/juloo.keyboard2/KeyboardData.java b/srcs/juloo.keyboard2/KeyboardData.java
index b5218e4..0083b38 100644
--- a/srcs/juloo.keyboard2/KeyboardData.java
+++ b/srcs/juloo.keyboard2/KeyboardData.java
@@ -25,6 +25,8 @@ class KeyboardData
public final Modmap modmap;
/** Might be null. */
public final String script;
+ /** Position of every keys on the layout, see [getKeys()]. */
+ private Map<KeyValue, KeyPos> _key_pos = null;
public KeyboardData mapKeys(MapKey f)
{
@@ -87,19 +89,22 @@ class KeyboardData
public Key findKeyWithValue(KeyValue kv)
{
- for (Row r : rows)
- {
- Key k = r.findKeyWithValue(kv);
- if (k != null)
- return k;
- }
- return null;
+ KeyPos pos = getKeys().get(kv);
+ if (pos == null || pos.row >= rows.size())
+ return null;
+ return rows.get(pos.row).get_key_at_pos(pos);
}
- public void getKeys(Set<KeyValue> dst)
+ /** This is computed once and cached. */
+ public Map<KeyValue, KeyPos> getKeys()
{
- for (Row r : rows)
- r.getKeys(dst);
+ if (_key_pos == null)
+ {
+ _key_pos = new HashMap<KeyValue, KeyPos>();
+ for (int r = 0; r < rows.size(); r++)
+ rows.get(r).getKeys(_key_pos, r);
+ }
+ return _key_pos;
}
private static void addExtraKeys_to_row(ArrayList<Row> rows, final Iterator<KeyValue> extra_keys, int row_i, final int d)
@@ -258,10 +263,17 @@ class KeyboardData
return new Row(keys, h, shift);
}
- public void getKeys(Set<KeyValue> dst)
+ public void getKeys(Map<KeyValue, KeyPos> dst, int row)
{
- for (Key k : keys)
- k.getKeys(dst);
+ for (int c = 0; c < keys.size(); c++)
+ keys.get(c).getKeys(dst, row, c);
+ }
+
+ public Map<KeyValue, KeyPos> getKeys(int row)
+ {
+ Map<KeyValue, KeyPos> dst = new HashMap<KeyValue, KeyPos>();
+ getKeys(dst, row);
+ return dst;
}
public Row mapKeys(MapKey f)
@@ -281,12 +293,11 @@ class KeyboardData
});
}
- public Key findKeyWithValue(KeyValue kv)
+ public Key get_key_at_pos(KeyPos pos)
{
- for (Key k : keys)
- if (k.hasValue(kv))
- return k;
- return null;
+ if (pos.col >= keys.size())
+ return null;
+ return keys.get(pos.col);
}
}
@@ -384,11 +395,11 @@ class KeyboardData
return new Key(keys, keysflags, width * s, shift, slider, indication);
}
- public void getKeys(Set<KeyValue> dst)
+ public void getKeys(Map<KeyValue, KeyPos> dst, int row, int col)
{
for (int i = 0; i < keys.length; i++)
if (keys[i] != null)
- dst.add(keys[i]);
+ dst.put(keys[i], new KeyPos(row, col, i));
}
public KeyValue getKeyValue(int i)
@@ -464,6 +475,21 @@ class KeyboardData
}
}
+ /** Position of a key on the layout. */
+ public final static class KeyPos
+ {
+ public final int row;
+ public final int col;
+ public final int dir;
+
+ public KeyPos(int r, int c, int d)
+ {
+ row = r;
+ col = c;
+ dir = d;
+ }
+ }
+
/** Parsing utils */
/** Returns [false] on [END_DOCUMENT] or [END_TAG], [true] otherwise. */