Initial Commit
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
/**
|
||||
* Scrollbar.
|
||||
*
|
||||
* Move the scrollbars left and right to change the positions of the images.
|
||||
*/
|
||||
|
||||
HScrollbar hs1, hs2; // Two scrollbars
|
||||
PImage img1, img2; // Two images to load
|
||||
|
||||
void setup() {
|
||||
size(640, 360);
|
||||
noStroke();
|
||||
|
||||
hs1 = new HScrollbar(0, height/2-8, width, 16, 16);
|
||||
hs2 = new HScrollbar(0, height/2+8, width, 16, 16);
|
||||
|
||||
// Load images
|
||||
img1 = loadImage("seedTop.jpg");
|
||||
img2 = loadImage("seedBottom.jpg");
|
||||
}
|
||||
|
||||
void draw() {
|
||||
background(255);
|
||||
|
||||
// Get the position of the img1 scrollbar
|
||||
// and convert to a value to display the img1 image
|
||||
float img1Pos = hs1.getPos()-width/2;
|
||||
fill(255);
|
||||
image(img1, width/2-img1.width/2 + img1Pos*1.5, 0);
|
||||
|
||||
// Get the position of the img2 scrollbar
|
||||
// and convert to a value to display the img2 image
|
||||
float img2Pos = hs2.getPos()-width/2;
|
||||
fill(255);
|
||||
image(img2, width/2-img2.width/2 + img2Pos*1.5, height/2);
|
||||
|
||||
hs1.update();
|
||||
hs2.update();
|
||||
hs1.display();
|
||||
hs2.display();
|
||||
|
||||
stroke(0);
|
||||
line(0, height/2, width, height/2);
|
||||
}
|
||||
|
||||
|
||||
class HScrollbar {
|
||||
int swidth, sheight; // width and height of bar
|
||||
float xpos, ypos; // x and y position of bar
|
||||
float spos, newspos; // x position of slider
|
||||
float sposMin, sposMax; // max and min values of slider
|
||||
int loose; // how loose/heavy
|
||||
boolean over; // is the mouse over the slider?
|
||||
boolean locked;
|
||||
float ratio;
|
||||
|
||||
HScrollbar (float xp, float yp, int sw, int sh, int l) {
|
||||
swidth = sw;
|
||||
sheight = sh;
|
||||
int widthtoheight = sw - sh;
|
||||
ratio = (float)sw / (float)widthtoheight;
|
||||
xpos = xp;
|
||||
ypos = yp-sheight/2;
|
||||
spos = xpos + swidth/2 - sheight/2;
|
||||
newspos = spos;
|
||||
sposMin = xpos;
|
||||
sposMax = xpos + swidth - sheight;
|
||||
loose = l;
|
||||
}
|
||||
|
||||
void update() {
|
||||
if (overEvent()) {
|
||||
over = true;
|
||||
} else {
|
||||
over = false;
|
||||
}
|
||||
if (mousePressed && over) {
|
||||
locked = true;
|
||||
}
|
||||
if (!mousePressed) {
|
||||
locked = false;
|
||||
}
|
||||
if (locked) {
|
||||
newspos = constrain(mouseX-sheight/2, sposMin, sposMax);
|
||||
}
|
||||
if (abs(newspos - spos) > 1) {
|
||||
spos = spos + (newspos-spos)/loose;
|
||||
}
|
||||
}
|
||||
|
||||
float constrain(float val, float minv, float maxv) {
|
||||
return min(max(val, minv), maxv);
|
||||
}
|
||||
|
||||
boolean overEvent() {
|
||||
if (mouseX > xpos && mouseX < xpos+swidth &&
|
||||
mouseY > ypos && mouseY < ypos+sheight) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void display() {
|
||||
noStroke();
|
||||
fill(204);
|
||||
rect(xpos, ypos, swidth, sheight);
|
||||
if (over || locked) {
|
||||
fill(0, 0, 0);
|
||||
} else {
|
||||
fill(102, 102, 102);
|
||||
}
|
||||
rect(spos, ypos, sheight, sheight);
|
||||
}
|
||||
|
||||
float getPos() {
|
||||
// Convert spos to be values between
|
||||
// 0 and the total width of the scrollbar
|
||||
return spos * ratio;
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 35 KiB |
Reference in New Issue
Block a user