/* built with Studio Sketchpad: * https://sketchpad.cc * * observe the evolution of this sketch: * https://studio.sketchpad.cc/sp/pad/view/ro.CM$wS$8b6Fl/rev.15 * * authors: * GoToLoop * license (unless otherwise specified): * creative commons attribution-share alike 3.0 license. * https://creativecommons.org/licenses/by-sa/3.0/ */ /** * Multi Page Buttons (v1.7) * by GoToLoop (2013/Oct) * * Forum.Processing.org/two/discussion/558/creating-a-next-page-button#Item_8 * Studio.ProcessingTogether.com/sp/pad/export/ro.9eDRvB4LRmLrr */ static final int MAX = 2, GAP = 50, DIM = 120, RAD = DIM >> 1; int page, cx, cy; Button back, next; void setup() { size(600, 400); noLoop(); smooth(); rectMode(CORNER); ellipseMode(CENTER); textAlign(CENTER, CENTER); stroke(0); strokeWeight(1.5); cx = width >> 1; cy = height >> 1; back = new Button("BACK", GAP, height - Button.H - GAP); next = new Button("NEXT", width - Button.W - GAP, height - Button.H - GAP); } void draw() { background(0300); textSize(0100); fill(Button.TXTC); text("Page #" + page, cx, cy); textSize(Button.TXTSZ); if (page > 0) back.display(); if (page < MAX) next.display(); //method("page" + page); // Works on Java Mode only! pageSelector(); // Workaround for PJS. But works on Java Mode as well! } void mousePressed() { if (page > 0 && back.isHovering) --page; else if (page < MAX && next.isHovering) ++page; redraw(); } void mouseMoved() { back.isInside(); next.isInside(); redraw(); } void page0() { fill(#FF00FF); ellipse(cx, GAP*2, DIM, DIM); } void page1() { fill(#FFFF00); rect(cx - RAD, GAP*2 - RAD, DIM, DIM); } void page2() { fill(#008000); triangle(cx, GAP*2 - RAD, cx - RAD, GAP*2 + RAD, cx + RAD, GAP*2 + RAD); } void pageSelector() { // Replaces method("") for PJS switch(page) { case 0: page0(); break; case 1: page1(); break; case 2: page2(); } } class Button { static final int W = 60, H = 40, TXTSZ = 020; static final color BTNC = #00A0A0, HOVC = #00FFFF, TXTC = 0; final String label; final int x, y, xW, yH; boolean isHovering; Button(String txt, int xx, int yy) { label = txt; x = xx; y = yy; xW = xx + W; yH = yy + H; } void display() { fill(isHovering? HOVC : BTNC); rect(x, y, W, H); fill(TXTC); text(label, x + W/2, y + H/2); } boolean isInside() { return isHovering = mouseX > x & mouseX < xW & mouseY > y & mouseY < yH; } }