package com.codefixia.ui; import processing.core.PApplet; import processing.core.PConstants; import com.codefixia.drumcloud.DrumCloud; import com.codefixia.utils.FontAdjuster; public class MenuButton extends Clickable{ String text="..."; String activeText; boolean ON=false; boolean blinkWhenOn=false; float blinkIntervalMS=500; boolean blinkOn=false; boolean released=false; boolean triangleShape=true; public boolean isTriangleShape() { return triangleShape; } public void setTriangleShape(boolean triangleShape) { this.triangleShape = triangleShape; } public MenuButton(float tempX, float tempY, float tempW, float tempH) { super(tempX,tempY,tempW,tempH); } public void drawState(){ if(clicked){ drawOvered(); }else{ drawNormal(); } } public void drawOvered(){ DrumCloud.X.stroke(strokeColor); DrumCloud.X.fill(DrumCloud.X.red(fillColor),DrumCloud.X.green(fillColor),DrumCloud.X.blue(fillColor),200); if(triangleShape) DrumCloud.X.triangle(x, y, x+w, y, x+w, y+h); else DrumCloud.X.rect(x, y, w, h); drawCommonContent(); } public void drawNormal(){ DrumCloud.X.stroke(strokeColor); DrumCloud.X.fill(DrumCloud.X.red(fillColor)-100,DrumCloud.X.green(fillColor)-100,DrumCloud.X.blue(fillColor)-100,200); if(triangleShape) DrumCloud.X.triangle(x, y, x+w, y, x+w, y+h); else DrumCloud.X.rect(x, y, w, h); drawCommonContent(); } public void drawCommonContent() { DrumCloud.X.textSize(FontAdjuster.getSize(20)); DrumCloud.X.textAlign(PConstants.CENTER); DrumCloud.X.pushMatrix(); //translate(0,0); if(triangleShape){ DrumCloud.X.translate(x+(w*0.7f), y+(h*0.3f)); DrumCloud.X.rotate(PApplet.radians(45)); } else{ DrumCloud.X.translate(x+(w*0.5f), y+(h*0.5f)); DrumCloud.X.rotate(PApplet.radians(90)); } if(ON){ DrumCloud.X.fill(255); if(activeText!=null) DrumCloud.X.text(activeText,0,0); else DrumCloud.X.text(text,0,0); } else{ DrumCloud.X.fill(200); DrumCloud.X.text(text,0,0); } DrumCloud.X.popMatrix(); } public boolean isClicked(int mx, int my) { if (isOver(mx, my)) { clicked = true; setOffsetX(x-mx); setOffsetY(y-my); ON=!ON; } else { clicked =false; } return clicked; } boolean isReleased(int mx, int my) { if (isOver(mx, my)) { released = true; setOffsetX(x-mx); setOffsetY(y-my); ON=!ON; } else { released =false; } overed=false; clicked =false; return released; } boolean cancelClick(int mx, int my) { clicked =false; overed=false; return true; } }