diff options
Diffstat (limited to 'src/us/minak/IMEModifiers.java')
-rw-r--r-- | src/us/minak/IMEModifiers.java | 65 |
1 files changed, 43 insertions, 22 deletions
diff --git a/src/us/minak/IMEModifiers.java b/src/us/minak/IMEModifiers.java index ef49f17..2766c76 100644 --- a/src/us/minak/IMEModifiers.java +++ b/src/us/minak/IMEModifiers.java @@ -3,20 +3,30 @@ package us.minak; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; -import java.util.List; +import android.view.KeyEvent; import java.util.ArrayList; +import java.util.List; public class IMEModifiers { - private final String[] modifiers = { "shift", "ctrl", "alt" }; + // FIXME: hard-coded configuration + private final IMEModifier[] modifiers = { + new IMEModifier("Shift", KeyEvent.KEYCODE_SHIFT_LEFT, KeyEvent.META_SHIFT_ON), + new IMEModifier("Ctrl" , KeyEvent.KEYCODE_CTRL_LEFT , KeyEvent.META_CTRL_ON ), + new IMEModifier("Alt" , KeyEvent.KEYCODE_ALT_LEFT , KeyEvent.META_ALT_ON )}; + + // Static drawing resources private final Paint colorPaint = new Paint(Paint.ANTI_ALIAS_FLAG); private final Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + // Pre-calculated graphics stuff private float cx = 0; private float cy = 0; private double innerR = 0; private double outerR = 0; private double radEach = 0; + // The current state + ArrayList<IMEModifier> selected = new ArrayList<IMEModifier>(); public IMEModifiers() { textPaint.setColor(Color.BLACK); @@ -25,33 +35,37 @@ public class IMEModifiers { public void draw(Canvas canvas, float cx, float cy, float r) { this.cx = cx; this.cy = cy; - innerR = r*(1.0/3.0); - outerR = (float)(r*(2.0/3.0)); + innerR = r*(1.2/3.0); + outerR = r*(1.8/3.0); radEach = (Math.PI*2.0)/modifiers.length; - + + double textR = r*.8; + double rad = 0; float[] hsv = {0F, 1F, .75F}; - + for (int i = 0; i < modifiers.length; i++) { rad = radEach * i; hsv[0] = (float)Math.toDegrees(rad); colorPaint.setColor(Color.HSVToColor(0x80, hsv)); - canvas.drawCircle( - (float)(cx+innerR*Math.cos(rad)), - (float)(cy+innerR*Math.sin(rad)), - (float)outerR, - colorPaint); - canvas.drawText( - modifiers[i], - (float)(cx+innerR*Math.cos(rad)), - (float)(cy+innerR*Math.sin(rad)), - textPaint); - } + if (selected.contains(modifiers[i])) { + canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), colorPaint); + } else { + canvas.drawCircle((float)(cx+innerR*Math.cos(rad)), + (float)(cy+innerR*Math.sin(rad)), + (float)outerR, + colorPaint); + } + canvas.drawText(modifiers[i].name, + (float)(cx+textR*Math.cos(rad)), + (float)(cy+textR*Math.sin(rad)), + textPaint); + } } - public List<String> getModifiersAtPoint(float x, float y) { - ArrayList<String> ret = new ArrayList<String>(); + public void setSelectionPoint(float x, float y) { + selected.clear(); double mx; double my; @@ -61,9 +75,16 @@ public class IMEModifiers { mx = cx+innerR*Math.cos(rad); my = cy+innerR*Math.sin(rad); - if (Math.sqrt(Math.pow(mx-x,2)+Math.pow(my-y, 2)) > outerR) - ret.add(modifiers[i]); + if (Math.sqrt(Math.pow(mx-x,2)+Math.pow(my-y, 2)) < outerR) + selected.add(modifiers[i]); } - return ret; + } + + public List<IMEModifier> getSelection() { + return selected; + } + + public void clearSelection() { + selected.clear(); } } |