public class Slider{ float pos; Box b; PApplet parent; boolean grabbed; float minVal,maxVal; float xPos, yPos; Slider(PApplet parent, Box b){ this.b = b; grabbed = false; this.parent = parent; parent.registerMouseEvent(this); pos = 0; minVal = 0; maxVal = 1; xPos = 0; yPos = b.bottom-15; } Box getBox(){ return b; } float getPosition(){ return lerp(minVal, maxVal, pos); } void draw(){ xPos = lerp(b.left, b.right, pos); strokeWeight(1); stroke(0.8); line(b.left, yPos, b.right, yPos); noStroke(); if(b.containsMouse() || grabbed) fill(0.6,0.6,0.8); else fill(0,0,0.6); beginShape(); vertex(xPos, yPos); vertex(xPos+6, yPos+6); vertex(xPos-6, yPos+6); endShape(CLOSE); } public void mouseEvent(MouseEvent event) { int x = event.getX(); int y = event.getY(); switch (event.getID()) { case MouseEvent.MOUSE_PRESSED: mousePressed(x,y); break; case MouseEvent.MOUSE_RELEASED: mouseReleased(x,y); break; case MouseEvent.MOUSE_DRAGGED: mouseDragged(x,y); break; } } void mousePressed(int x, int y){ if(b.containsMouse()){ float xpos = lerp(b.left, b.right, pos); grabbed = (abs(x - xpos)<7); } } void mouseReleased(int x, int y){ grabbed = false; } void mouseDragged(int x, int y){ if(grabbed){ pos = constrain( unlerp(b.left, b.right, x), 0, 1); } } }