package com.codefixia.ui; import com.codefixia.drumcloud.DrumCloud; import com.codefixia.utils.FontAdjuster; public class ToggleButton extends Clickable{ private String text=""; private String activeText; private boolean enabled=true; private boolean ON=false; private boolean blinkWhenOn=false; float blinkIntervalMS=500; private boolean blinkOn=false; boolean released=false; boolean dragging=false; private int activeColor=-1; public ToggleButton(float tempX, float tempY, float tempW, float tempH) { super(tempX,tempY,tempW,tempH); } public int getActiveColor() { return activeColor; } public void setActiveColor(int activeColor) { this.activeColor = activeColor; } public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public void drawState(){ if(isON()){ drawActivated(); }else if(overed){ drawOvered(); }else{ drawNormal(); } } public void drawActivated(){ if(isBlinkWhenOn()){ if(DrumCloud.X.millis()%(blinkIntervalMS*2)<blinkIntervalMS){ setBlinkOn(true); DrumCloud.X.stroke(255); } else{ setBlinkOn(false); DrumCloud.X.stroke(getStrokeColor()); } } if(activeColor==-1) DrumCloud.X.fill(DrumCloud.X.red(getFillColor()),DrumCloud.X.green(getFillColor()),DrumCloud.X.blue(getFillColor()),255); else DrumCloud.X.fill(activeColor); DrumCloud.X.rect(getX(),getY(),getW(),getH()); drawCommonContent(); } public void drawNormal(){ DrumCloud.X.stroke(getStrokeColor()); if(!enabled) DrumCloud.X.fill(150,200); else if(activeColor==-1) DrumCloud.X.fill(DrumCloud.X.red(getFillColor())-100,DrumCloud.X.green(getFillColor())-100,DrumCloud.X.blue(getFillColor())-100,200); else DrumCloud.X.fill(getFillColor()); DrumCloud.X.rect(getX(),getY(),getW(),getH()); drawCommonContent(); } public void drawCommonContent() { DrumCloud.X.textSize(FontAdjuster.getSize(20)); DrumCloud.X.textAlign(DrumCloud.CENTER); if(isON()){ DrumCloud.X.fill(255); if(getActiveText()!=null) DrumCloud.X.text(getActiveText(), getX()+(getW()*0.5f), getY()+(getH()*0.7f)); else DrumCloud.X.text(getText(), getX()+(getW()*0.5f), getY()+(getH()*0.7f)); } else{ if(!enabled) DrumCloud.X.fill(50); else DrumCloud.X.fill(200); DrumCloud.X.text(getText(), getX()+(getW()*0.5f), getY()+(getH()*0.7f)); } } public boolean isClicked(int mx, int my) { if(!enabled)return false; if (isOver(mx, my)) { clicked = true; setOffsetX(getX()-mx); setOffsetY(getY()-my); setON(!isON()); } else { clicked =false; } return clicked; } public boolean isReleased(int mx, int my) { if(!enabled)return false; if (!dragging && isOver(mx, my)) { released = true; setOffsetX(getX()-mx); setOffsetY(getY()-my); setON(!isON()); } else { released =false; } overed=false; dragging=false; clicked =false; return released; } public boolean isDragging(int mx, int my) { if(!enabled)return false; if (clicked && isOver(mx, my)) { overed=false; dragging = true; } return dragging; } public boolean cancelClick() { if(!enabled)return false; dragging=false; clicked =false; overed=false; return true; } public boolean isON() { return ON; } public void setON(boolean oN) { ON = oN; } public String getText() { return text; } public void setText(String text) { this.text = text; } public String getActiveText() { return activeText; } public void setActiveText(String activeText) { this.activeText = activeText; } public boolean isBlinkWhenOn() { return blinkWhenOn; } public void setBlinkWhenOn(boolean blinkWhenOn) { this.blinkWhenOn = blinkWhenOn; } public boolean isBlinkOn() { return blinkOn; } public void setBlinkOn(boolean blinkOn) { this.blinkOn = blinkOn; } }