summaryrefslogtreecommitdiff
path: root/src/us/minak/IMEModifiers.java
blob: ef49f17dc7e4589c5114dec6452a8b007818feb2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package us.minak;

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import java.util.List;
import java.util.ArrayList;

public class IMEModifiers {
	private final String[] modifiers = { "shift", "ctrl", "alt" };
	private final Paint colorPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
	private final Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
	
	private float cx = 0;
	private float cy = 0;
	private double innerR = 0;
	private double outerR = 0;
	private double radEach = 0;
	 
	
	public IMEModifiers() {
		textPaint.setColor(Color.BLACK);
	}
	
	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));
		radEach = (Math.PI*2.0)/modifiers.length;
		
		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);
		}		
	}
	
	public List<String> getModifiersAtPoint(float x, float y) {
		ArrayList<String> ret = new ArrayList<String>();
		
		double mx;
		double my;
		double rad = 0;
		for (int i = 0; i < modifiers.length; i++) {
			rad = radEach * i;
			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]);
		}
		return ret;
	}
}