package org.xmlvm.iphone; import java.awt.Color; import java.awt.FontMetrics; import java.awt.GradientPaint; import java.awt.Graphics2D; import org.xmlvm.iphone.internal.*; public class UISwitchControl extends UIView implements GestureListener { private float value = 0; final private int INSET = 5; public UISwitchControl(CGRect rect) { super(rect); rect.size.width = 80; rect.size.height = 20; setFrame(rect); Simulator.addGestureListener(this); } public void setValue(float value) { this.value = value; } public float getValue() { return value; } public void drawRect(CGRect rect) { Graphics2D g = CGContext.theContext.graphicsContext; CGRect displayRect = getDisplayRect(); GradientPaint blueGradient = new GradientPaint( 0, (int) displayRect.origin.y, new Color(61, 89, 171), 0, (int) (displayRect.origin.y + displayRect.size.height), new Color(100, 149, 237)); GradientPaint whiteGradient = new GradientPaint( 0, (int) displayRect.origin.y, Color.LIGHT_GRAY, 0, (int) (displayRect.origin.y + displayRect.size.height), Color.WHITE); GradientPaint grayGradient = new GradientPaint( 0, (int) displayRect.origin.y, Color.GRAY, 0, (int) (displayRect.origin.y + displayRect.size.height), Color.LIGHT_GRAY); g.setPaint(value > 0.5f ? blueGradient : whiteGradient); g.fillRoundRect((int) displayRect.origin.x, (int) displayRect.origin.y, (int) displayRect.size.width, (int) displayRect.size.height, INSET, INSET); g.setColor(Color.LIGHT_GRAY); g.drawRoundRect((int) displayRect.origin.x, (int) displayRect.origin.y, (int) displayRect.size.width, (int) displayRect.size.height, INSET, INSET); CGRect knob = new CGRect(displayRect); float halfWidth = knob.size.width / 2; knob.size.width = halfWidth; if (value > 0.5f) knob.origin.x += halfWidth; g.setPaint(grayGradient); g.fillRoundRect((int) knob.origin.x, (int) knob.origin.y, (int) knob.size.width, (int) knob.size.height, INSET, INSET); String label = "ON"; knob.origin.x = displayRect.origin.x; g.setColor(Color.WHITE); if (value <= 0.5f) { knob.origin.x += halfWidth; g.setColor(Color.GRAY); label = "OFF"; } FontMetrics fm = g.getFontMetrics(); g.drawString(label, knob.origin.x + INSET, knob.origin.y + knob.size.height - fm.getLeading() - fm.getDescent()); } public void mouseClicked(int x, int y) { CGRect rect = getDisplayRect(); int inX = x - (int) rect.origin.x; int inY = y - (int) rect.origin.y; if (inX >= 0 && inX < viewRect.size.width / 2 && inY >= 0 && inY < viewRect.size.height) setValue(1); if (inX > viewRect.size.width / 2 && inX < viewRect.size.width && inY >= 0 && inY < viewRect.size.height) setValue(0); Simulator.redrawDisplay(); } public void gestureDragged(int dx, int dy) { // TODO Auto-generated method stub } }