abouttreesummaryrefslogcommitdiff
path: root/srcs/juloo.keyboard2/Keyboard2View.java
diff options
context:
space:
mode:
Diffstat (limited to 'srcs/juloo.keyboard2/Keyboard2View.java')
-rw-r--r--srcs/juloo.keyboard2/Keyboard2View.java65
1 files changed, 43 insertions, 22 deletions
diff --git a/srcs/juloo.keyboard2/Keyboard2View.java b/srcs/juloo.keyboard2/Keyboard2View.java
index 2154fd9..0cea2c8 100644
--- a/srcs/juloo.keyboard2/Keyboard2View.java
+++ b/srcs/juloo.keyboard2/Keyboard2View.java
@@ -6,10 +6,9 @@ import android.graphics.RectF;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
-import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.View;
-import java.util.Vector;
+import java.util.LinkedList;
public class Keyboard2View extends View
implements View.OnTouchListener
@@ -19,7 +18,9 @@ public class Keyboard2View extends View
private Keyboard2 _ime;
private KeyboardData _keyboard;
- private Vector<KeyDown> _downKeys;
+ private LinkedList<KeyDown> _downKeys = new LinkedList<KeyDown>();
+
+ private int _flags = 0;
private float _verticalMargin;
private float _horizontalMargin;
@@ -29,16 +30,15 @@ public class Keyboard2View extends View
private float _keyBgPadding;
private float _keyRound;
- private Paint _keyBgPaint;
- private Paint _keyDownBgPaint;
- private Paint _keyLabelPaint;
- private Paint _keySubLabelPaint;
+ private Paint _keyBgPaint = new Paint();
+ private Paint _keyDownBgPaint = new Paint();
+ private Paint _keyLabelPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ private Paint _keySubLabelPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
public Keyboard2View(Context context, AttributeSet attrs)
{
super(context, attrs);
DisplayMetrics dm = context.getResources().getDisplayMetrics();
- _downKeys = new Vector<KeyDown>();
_verticalMargin = getResources().getDimension(R.dimen.vertical_margin);
_horizontalMargin = getResources().getDimension(R.dimen.horizontal_margin);
_keyHeight = getResources().getDimension(R.dimen.key_height);
@@ -46,15 +46,11 @@ public class Keyboard2View extends View
_keyBgPadding = getResources().getDimension(R.dimen.key_bg_padding);
_keyRound = getResources().getDimension(R.dimen.key_round);
_keyWidth = (dm.widthPixels - (_horizontalMargin * 2)) / KEY_PER_ROW;
- _keyBgPaint = new Paint();
_keyBgPaint.setColor(getResources().getColor(R.color.key_bg));
- _keyDownBgPaint = new Paint();
_keyDownBgPaint.setColor(getResources().getColor(R.color.key_down_bg));
- _keyLabelPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
_keyLabelPaint.setColor(getResources().getColor(R.color.key_label));
_keyLabelPaint.setTextSize(getResources().getDimension(R.dimen.label_text_size));
_keyLabelPaint.setTextAlign(Paint.Align.CENTER);
- _keySubLabelPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
_keySubLabelPaint.setColor(getResources().getColor(R.color.key_sub_label));
_keySubLabelPaint.setTextSize(getResources().getDimension(R.dimen.sublabel_text_size));
_keySubLabelPaint.setTextAlign(Paint.Align.CENTER);
@@ -120,10 +116,8 @@ public class Keyboard2View extends View
{
KeyDown k = getKeyDown(pointerId);
- if (k != null)
- {
- k.updateDown(moveX, moveY);
- }
+ if (k != null && k.updateDown(moveX, moveY))
+ updateFlags();
}
private void onTouchDown(float touchX, float touchY, int pointerId)
@@ -145,6 +139,7 @@ public class Keyboard2View extends View
if (touchX >= x && touchX < (x + keyW))
{
_downKeys.add(new KeyDown(pointerId, key, touchX, touchY));
+ updateFlags();
invalidate();
return ;
}
@@ -159,14 +154,36 @@ public class Keyboard2View extends View
if (k != null)
{
+ if ((k.flags & KeyValue.FLAG_KEEP_ON) != 0)
+ {
+ k.flags ^= KeyValue.FLAG_KEEP_ON;
+ k.pointerId = -1;
+ return ;
+ }
+ for (int i = 0; i < _downKeys.size(); i++)
+ {
+ KeyDown downKey = _downKeys.get(i);
+ if (downKey.pointerId == -1)
+ _downKeys.remove(i--);
+ else if ((downKey.flags & KeyValue.FLAG_KEEP_ON) != 0)
+ downKey.flags ^= KeyValue.FLAG_KEEP_ON;
+ }
if (k.value != null)
- _ime.handleKeyUp(k.value);
+ _ime.handleKeyUp(k.value, _flags);
_downKeys.remove(k);
+ updateFlags();
invalidate();
return ;
}
}
+ private void updateFlags()
+ {
+ _flags = 0;
+ for (KeyDown k : _downKeys)
+ _flags |= k.flags;
+ }
+
@Override
public void onMeasure(int wSpec, int hSpec)
{
@@ -185,6 +202,7 @@ public class Keyboard2View extends View
{
float x;
float y;
+ boolean upperCase = ((_flags & KeyValue.FLAG_SHIFT) != 0);
y = _verticalMargin;
for (KeyboardData.Row row : _keyboard.getRows())
@@ -200,22 +218,22 @@ public class Keyboard2View extends View
canvas.drawRoundRect(new RectF(x + _keyBgPadding, y + _keyBgPadding,
x + keyW - _keyBgPadding, y + _keyHeight - _keyBgPadding), _keyRound, _keyRound, _keyBgPaint);
if (k.key0 != null)
- canvas.drawText(k.key0.getSymbol(), keyW / 2 + x,
+ canvas.drawText(k.key0.getSymbol(upperCase), keyW / 2 + x,
(_keyHeight + _keyLabelPaint.getTextSize()) / 2 + y, _keyLabelPaint);
float textOffsetY = _keySubLabelPaint.getTextSize() / 2;
float subPadding = _keyPadding + _keyBgPadding;
if (k.key1 != null)
- canvas.drawText(k.key1.getSymbol(), x + subPadding,
+ canvas.drawText(k.key1.getSymbol(upperCase), x + subPadding,
y + subPadding + textOffsetY, _keySubLabelPaint);
if (k.key2 != null)
- canvas.drawText(k.key2.getSymbol(), x + keyW - subPadding,
+ canvas.drawText(k.key2.getSymbol(upperCase), x + keyW - subPadding,
y + subPadding + textOffsetY, _keySubLabelPaint);
textOffsetY /= 2; // lol
if (k.key3 != null)
- canvas.drawText(k.key3.getSymbol(), x + subPadding,
+ canvas.drawText(k.key3.getSymbol(upperCase), x + subPadding,
y + _keyHeight - subPadding + textOffsetY, _keySubLabelPaint);
if (k.key4 != null)
- canvas.drawText(k.key4.getSymbol(), x + keyW - subPadding,
+ canvas.drawText(k.key4.getSymbol(upperCase), x + keyW - subPadding,
y + _keyHeight - subPadding + textOffsetY, _keySubLabelPaint);
x += keyW;
}
@@ -232,6 +250,7 @@ public class Keyboard2View extends View
public KeyboardData.Key key;
public float downX;
public float downY;
+ public int flags;
public KeyDown(int pointerId, KeyboardData.Key key, float x, float y)
{
@@ -240,6 +259,7 @@ public class Keyboard2View extends View
this.key = key;
downX = x;
downY = y;
+ flags = value.getFlags();
}
public boolean updateDown(float x, float y)
@@ -249,6 +269,7 @@ public class Keyboard2View extends View
if (newValue != null && newValue != value)
{
value = newValue;
+ flags = newValue.getFlags();
return (true);
}
return (false);