package br.com.etyllica.gui; import br.com.etyllica.core.event.GUIEvent; import br.com.etyllica.core.event.KeyEvent; import br.com.etyllica.core.event.MouseEvent; import br.com.etyllica.core.event.PointerEvent; import br.com.etyllica.core.graphics.Graphics; import br.com.etyllica.gui.base.BaseButton; import br.com.etyllica.gui.theme.Theme; /** * @author yuripourre */ public class Slider extends View { protected float minValue = 0; protected float maxValue = 255; protected float value = 0; protected BaseButton button; private boolean activated = false; public Slider(int x, int y, int w, int h) { super(x, y, w, h); button = new BaseButton(x, y, h / 4, h); } @Override public GUIEvent updateMouse(PointerEvent event) { if (mouseOver) { if (event.isButtonDown(MouseEvent.MOUSE_BUTTON_LEFT)) { activated = true; } } if (activated) { if (event.isButtonDown(MouseEvent.MOUSE_BUTTON_LEFT)) { updateValue(event); return GUIEvent.COMPONENT_CHANGED; } else if (event.isButtonUp(MouseEvent.MOUSE_BUTTON_LEFT)) { activated = false; } } return GUIEvent.NONE; } public void updateValue(PointerEvent event) { float interval = maxValue - minValue; int mx = event.getX() - x; value = (mx * interval) / w; if (value < minValue) { value = minValue; button.setX(getX() - button.getW() / 2); } else if (value > maxValue) { value = maxValue; button.setX(getX() + getW() - button.getW() / 2); } else { button.setX(event.getX() - button.getW() / 2); } } @Override public void updateEvent(GUIEvent event) { // TODO Auto-generated method stub } @Override public void draw(Graphics g) { //Draw Slide Theme theme = getTheme(); g.setColor(theme.getBarColor()); int sh = h / 5; g.fillRect(x, y + h / 2 - sh / 2, w, sh); //Draw Button button.draw(g); } public float getMinValue() { return minValue; } public void setMinValue(int minValue) { this.minValue = minValue; } public float getMaxValue() { return maxValue; } public void setMaxValue(int maxValue) { this.maxValue = maxValue; } public float getValue() { return value; } public void setValue(float value) { this.value = value; float interval = maxValue - minValue; float bx = x + ((value * w) / interval); button.setX((int)bx - button.getW() / 2); } @Override public GUIEvent updateKeyboard(KeyEvent event) { if (onFocus) { if (event.isKeyDown(KeyEvent.VK_RIGHT)) { setValue(value + 1); } if (event.isKeyDown(KeyEvent.VK_LEFT)) { setValue(value + 1); } } return GUIEvent.NONE; } }