public class SideSlider{ PApplet parent; Box b; float sliderPos,startPos; boolean sliding; int startY; SideSlider(PApplet parent, Box b){ this.parent = parent; this.b = b; parent.registerMouseEvent(this); sliderPos = 0; sliding = false; startPos = 0; startY = -1; } float getPosition(){ if(myHistory.getArtists().getPopularityScale() == Artists.LOG) return constrain(log(sliderPos*logScaleFactor)/log(logScaleFactor),0,1); return sliderPos; } void draw(){ noStroke(); boolean over = isOver(mouseX,mouseY); if(over) fill(0.6,0.8,0.8,0.8); else fill(0.6,0.8,0.8,0.25); float screenPos = sliderPos; if(myHistory.getArtists().getPopularityScale() == Artists.LOG) screenPos = constrain(log(sliderPos*logScaleFactor)/log(logScaleFactor),0,1); float y = lerp(b.bottom, b.top, screenPos); beginShape(); vertex(b.right, y); vertex(b.right+7, y-7); vertex(b.right+7, y+7); endShape(); if(over){ fill(0.6,0.8,0.8,0.5); stroke(0.6,0.8,0.8,0.8); }else{ fill(0.5,0.3); stroke(0.6,0.8,0.8,0.25); } textAlign(RIGHT); textFont(meta12); text("Peak popularity exceeds: "+int(sliderPos*100)+"%",b.right-15,y-textDescent()*1.5); strokeWeight(2); strokeCap(SQUARE); line(b.left, y, b.right, y); } 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(); break; case MouseEvent.MOUSE_DRAGGED: mouseDragged(x,y); break; } } boolean isOver(int x, int y){ float py = unlerp(b.bottom, b.top, y); float screenPos = sliderPos; if(myHistory.getArtists().getPopularityScale() == Artists.LOG) screenPos = constrain(log(sliderPos*logScaleFactor)/log(logScaleFactor),0,1); return sliding || (abs(py-screenPos)<0.02 && x > b.left && x < (b.right + 20) ); } void mousePressed(int x, int y){ if(isOver(x,y)){ sliding = true; mouseDragged(x,y); } } void mouseReleased(){ sliding = false; } void mouseDragged(int x, int y){ if(sliding){ if(myHistory.getArtists().getPopularityScale() == Artists.LOG){ // log(sliderPos*100)/log(100) = oslider // exp(y*log(100))/100 sliderPos = constrain(exp(unlerp(b.bottom, b.top, y)*log(logScaleFactor))/logScaleFactor,0,1); } else{ sliderPos = constrain(unlerp(b.bottom, b.top, y),0,1); } } } /* void mousePressed(int x, int y){ if(isOver(x,y)){ startY = y; startPos = sliderPos; } } void mouseReleased(int x, int y){ startY = -1; } void mouseDragged(int x, int y){ if(startY != -1){ float offset = constrain(unlerp(0, b.height, startY-y), -startPos, 1-startPos); sliderPos = constrain(startPos + offset,0,1); } } */ }