A pattern in my daily life (or atleast on weekendss...)
Code uses images. So a download is necessary:
Download me!

class Button
{
int sizeX;
int sizeY;
int posX;
int posY;
String text;
String toolTip;
int colorR;
int colorG;
int colorB;
int colorA;
boolean border = true;
private Button(int posX, int posY, int sizeX, int sizeY, String text, String toolTip)
{
this.posX = posX;
this.posY = posY;
this.sizeX = sizeX;
this.sizeY = sizeY;
this.text = text;
this.toolTip = toolTip;
colorR = 0;
colorG = 0;
colorB = 0;
colorA = 255;
}
// Zeichnet den Button
private void drawButton()
{
pushStyle();
noSmooth();
fill(colorR, colorG, colorB, colorA);
if (!border)
{
noStroke();
}
rect(posX, posY, sizeX, sizeY);
fill(255,255,255);
textSize(12);
textAlign(CENTER);
text(text, posX + sizeX / 2, posY + sizeY / 1.4);
popStyle();
}
// Prüft ob die Maus über dem Button ist.
private boolean isCollission()
{
if ((mouseX > posX && mouseX < posX + sizeX) && (mouseY > posY && mouseY < posY + sizeY))
{
return true;
}
else
{
return false;
}
}
}
class Ingredient
{
String item;
color colour;
public Ingredient(String item)
{
this.item = item;
updateColour();
}
void updateColour()
{
if(item == "empty")colour = color(255,255,255,0);
if(item == "Wodka")colour = color(255,255,255,40);
if(item == "Bacardi")colour = color(255,255,255,40);
if(item == "Whiskey")colour = color(79,57,31,200);
if(item == "Sprite")colour = color(255,255,255,40);
if(item == "Coke")colour = color(48,0,5,230);
if(item == "Blue Curacao")colour = color(0,0,255,90);
if(item == "Maracuja Juice")colour = color(223,241,76,240);
if(item == "Energy")colour = color(254,255,210,240);
}
}
Button[] buttons;
Ingredient[] mixture;
int ingredientsAdded;
color currentColor;
PImage cocktail, straw, swirl;
void setup()
{
size(800, 600);
buttons = new Button [8];
buttons[0] = new Button(20, 30, 100, 20, "Wodka", "Add Wodka");
buttons[1] = new Button(20, 60, 100, 20, "Bacardi", "Add Bacardi");
buttons[2] = new Button(20, 90, 100, 20, "Whiskey", "Add Whiskey");
buttons[3] = new Button(20, 120, 100, 20, "Sprite", "Add Sprite");
buttons[4] = new Button(20, 150, 100, 20, "Coke", "Add Coke");
buttons[5] = new Button(20, 180, 100, 20, "Blue Curacao", "Add Blue Curacao");
buttons[6] = new Button(20, 210, 100, 20, "Maracuja Juice", "Add Maracuja");
buttons[7] = new Button(20, 240, 100, 20, "Energy", "Add Energy");
mixture = new Ingredient[10];
for (int i = 0; i < mixture.length; i++)
{
mixture[i] = new Ingredient("empty");
}
ingredientsAdded = 0;
currentColor = color(127,127,127,0);
cocktail = loadImage("cocktail.png");
straw = loadImage("straw.png");
swirl = loadImage("straw.png");
}
void draw()
{
background(45);
drawGUI();
}
void drawGUI()
{
for(int i = 0; i < buttons.length; i++)
{
buttons[i].drawButton();
if(buttons[i].isCollission())
{
giveToolTip(i);
}
}
for(int i = 0; i < mixture.length; i++)
{
if(mixture[i].item != "empty")
{
pushStyle();
noStroke();
fill(mixture[i].colour);
rect(350,400 - i * 20,100,20);
fill(255,255,255,255);
text(mixture[i].item, 480,400 - i * 20 + 15);
popStyle();
}
}
image(cocktail, 320, 189);
if(ingredientsAdded == 10)
{
image(straw, 320, 66);
}
}
void mouseReleased()
{
for(int i = 0; i < buttons.length; i++)
{
if(buttons[i].isCollission())
{
addIngredient(buttons[i].text);
}
}
}
void addIngredient(String ingredient)
{
if(ingredientsAdded <10)
{
mixture[ingredientsAdded].item = ingredient;
mixture[ingredientsAdded].updateColour();
//updateAllColours();
ingredientsAdded++;
}
}
void updateAllColours()
{
if(ingredientsAdded == 0)
{
currentColor = color(mixture[ingredientsAdded].colour);
}
else
{
currentColor = lerpColor(currentColor, mixture[ingredientsAdded].colour, 0.3);
}
for(int i = 0; i < mixture.length; i++)
{
if(mixture[i].item != "empty")
{
mixture[i].colour = currentColor;
}
}
}
private void giveToolTip(int i)
{
int toolTipPanelSizeX = floor(textWidth(buttons[i].toolTip));
int toolTipVerticalDistance = 0;
pushStyle();
noSmooth();
if(mouseY < 300)
{
toolTipVerticalDistance = 20;
}
else
{
toolTipVerticalDistance = -20;
}
if(buttons[i].posX < 400)
{
fill(0,0,0, 150);
rect(mouseX , mouseY - 5, + toolTipPanelSizeX + 10, toolTipVerticalDistance);
textAlign(LEFT);
fill(255,255,255);
textSize(12);
text(buttons[i].toolTip, mouseX +5 , mouseY + toolTipVerticalDistance / 2 );
}
if(buttons[i].posX >= 400)
{
fill(0,0,0, 150);
rect(mouseX , mouseY - 5, - toolTipPanelSizeX - 10, toolTipVerticalDistance);
textAlign(RIGHT);
fill(255,255,255);
textSize(12);
text(buttons[i].toolTip, mouseX - 5, mouseY + toolTipVerticalDistance / 2 );
}
popStyle();
}