3 slider move ( Y, X, Rotate )
3 slider object size ( Y, X, Stroke )
1 slider object select list ( example ellipse/rectangle/triangle )
9 slider HSB fill / stroke / background ( using like [b] hue [B] sat [Alt][b] brt )
code
// file: mousewheel_plusplus.pde
// system win 7 processing 3.4
// by KLL
// v0.1 https://discourse.processing.org/t/mousewheel-plusplus/5839
// v0.2 help default and timer --> blog
// v0.3 π was rotating
// v0.4 Lexyth / move X missing! use CTRL scroll
// v0.5 full HSB colors by [b],[B],[Alt][b] [f]...[s]... --> blog
// mouseWheel ++
// "Scrollitis", a operational concept study
// idea is to multiplex the mouseWheel use
// by mixing it with several keypressed
// so the combination is a multi NonGUI slider input
String[] helplines = {
"MouseWheel Plus Plus:"
, "* normal scroll UP DOWN"
, "+ wheel pressed: fast scroll UP DOWN"
, "+ CTRL scroll LEFT RIGHT"
, "+ key [y]: object Y size"
, "+ key [x]: object X size"
, "+ key [w]: object border stroke"
, "+ key [r]: rotate"
, "+ key [o]: 0 ellipse, 1 rectangle, 2 triangle"
, "colors: HSB hue, SAT, [Alt]bright "
, "+ key [b],[B],[Alt][b] backg"
, "+ key [f],[F],[Alt][f] fill"
, "+ key [s],[S],[Alt][s] stroke"
// , " any more ideas?"
};
float e_posX=250, e_posY=250, e_radiusx=100, e_radiusy=100, rot = 0;
int bg_HSBhue = 100,e_fillHSBhue=40,e_strokeHSBhue=70;
int bg_HSBsat = 100,e_fillHSBsat=100,e_strokeHSBsat=100;
int bg_HSBbrt = 100,e_fillHSBbrt=100,e_strokeHSBbrt=100;
color bg,e_fill,e_stroke;
int e_strokeweight = 10, e_objectTyp = 0;
// key and mouse all over
boolean altKey = false, ctrlKey = false, shiftKey = false;
boolean mousePresent = false;
// help text show ( at start), on mouse click with timeout
boolean show_help = true;
long startT, actionT=10000; // use basic millis timer
int posl=10, dposl = 15;
//_______________________________________________
void setup() {
size(500, 500);
colorMode(HSB, 100, 100, 100);
bg = color(bg_HSBhue,bg_HSBsat,bg_HSBbrt);
e_fill = color(e_fillHSBhue,e_fillHSBsat,e_fillHSBbrt);
e_stroke = color(e_strokeHSBhue,e_strokeHSBsat,e_strokeHSBbrt);
}
//_______________________________________________
void draw() {
background(bg);
draw_help();
translate(width/2,height/2);
rotate(rot);
translate(-width/2,-height/2);
fill(e_fill);
stroke(e_stroke);
strokeWeight(abs(e_strokeweight));
switch(e_objectTyp) {
case 0:
ellipse(e_posX, e_posY, e_radiusx, e_radiusy);
break;
case 1:
rectMode(CENTER);
rect(e_posX, e_posY, e_radiusx, e_radiusy);
break;
case 2:
triangle(e_posX-e_radiusx/2, e_posY-e_radiusy/2, e_posX, e_posY+e_radiusy/2,e_posX+e_radiusx/2, e_posY-e_radiusy/2);
break;
default: println("wrong"); break;
}
}
//_______________________________________________
void mouseExited() { mousePresent = false; }
void mouseEntered() { if (focused) mousePresent = true; }
void mousePressed() { if ( mouseButton == LEFT ) { show_help = true; startT = millis(); }}
void mouseWheel(MouseEvent event) {
float e = event.getCount();
if ( mousePressed && mouseButton == CENTER ) e_posY += 10*e; // fast action: scroll Y position
else if ( !keyPressed ) e_posY += e; // default action: scroll Y position
else if ( keyPressed && keyCode == CONTROL ) e_posX += e; // [CTRL] scroll X position
if ( keyPressed && key == 'y' ) e_radiusy += e; // [y] stretch Y
if ( keyPressed && key == 'x' ) e_radiusx += e; // [x] stretch X
if ( keyPressed && key == 'w' ) e_strokeweight += e; // [w] strokeWeight
if ( keyPressed && key == 'r' ) rot += 3*e*TWO_PI/360; // [r] rotate
if ( keyPressed && key == 'o' ) {
e_objectTyp += e;
e_objectTyp = constrain(e_objectTyp, 0, 2); } // [o] object typ circle rect triangle
if ( keyPressed && key == 'b' && !altKey ) {
bg_HSBhue += 2*e;
bg_HSBhue = constrain(bg_HSBhue, 0, 100);
bg = color(bg_HSBhue,bg_HSBsat,bg_HSBbrt); } // [b] background hue color
if ( keyPressed && key == 'B' ) {
bg_HSBsat += 2*e;
bg_HSBsat = constrain(bg_HSBsat, 0, 100);
bg = color(bg_HSBhue,bg_HSBsat,bg_HSBbrt); } // [B] ([Shift][b] or [Capslock][b]) background saturation
if ( keyPressed && key == 'b' && altKey) {
bg_HSBbrt += 2*e;
bg_HSBbrt = constrain(bg_HSBbrt, 0, 100);
bg = color(bg_HSBhue,bg_HSBsat,bg_HSBbrt); } // [Alt][b] background brt
if ( keyPressed && key == 'f' && !altKey ) {
e_fillHSBhue += 2*e;
e_fillHSBhue = constrain(e_fillHSBhue, 0, 100);
e_fill = color(e_fillHSBhue,e_fillHSBsat,e_fillHSBbrt); } // [f] fill hue color
if ( keyPressed && key == 'F' ) {
e_fillHSBsat += 2*e;
e_fillHSBsat = constrain(e_fillHSBsat, 0, 100);
e_fill = color(e_fillHSBhue,e_fillHSBsat,e_fillHSBbrt); } // [F] ([Shift][f] or [Capslock][f]) fill saturation
if ( keyPressed && key == 'f' && altKey ) {
e_fillHSBbrt += 2*e;
e_fillHSBbrt = constrain(e_fillHSBbrt, 0, 100);
e_fill = color(e_fillHSBhue,e_fillHSBsat,e_fillHSBbrt); } // [Alt][f] fill brt
if ( keyPressed && key == 's' && !altKey ) {
e_strokeHSBhue += 2*e;
e_strokeHSBhue = constrain(e_strokeHSBhue, 0, 100);
e_stroke = color(e_strokeHSBhue,e_strokeHSBsat,e_strokeHSBbrt); } // [s] stroke hue color
if ( keyPressed && key == 'S' ) {
e_strokeHSBsat += 2*e;
e_strokeHSBsat = constrain(e_strokeHSBsat, 0, 100);
e_stroke = color(e_strokeHSBhue,e_strokeHSBsat,e_strokeHSBbrt); } // [S] ([Shift][s] or [Capslock][s]) stroke saturation
if ( keyPressed && key == 's' && altKey ) {
e_strokeHSBbrt += 2*e;
e_strokeHSBbrt = constrain(e_strokeHSBbrt, 0, 100);
e_stroke = color(e_strokeHSBhue,e_strokeHSBsat,e_strokeHSBbrt); } // [Alt][s] stroke brt
}
//_______________________________________________
void my_timer() {
if ( millis() > startT + actionT ) show_help = false; // timeout, was set true by mouse click
}
//_______________________________________________
void draw_help() {
my_timer();
if (show_help) {
fill(0, 100, 0,70);
noStroke();
rectMode(0);
rect(0, 0, 270, 200);
fill(22,100,100); // yellow
for ( int i =0; i < helplines.length; i++ ) text(helplines[i], 10, posl + i*dposl);
}
if ( mousePresent ) { fill(0); text("π",width-20,height-10); } // do not click on this!
if ( keyPressed && (key == 'b' || key == 'B' )) { fill(0); text(" bg color("+bg_HSBhue+","+bg_HSBsat+","+bg_HSBbrt+")",150, posl+10*dposl); }
if ( keyPressed && (key == 'f' || key == 'F' )) { fill(0); text(" fill color("+e_fillHSBhue+","+e_fillHSBsat+","+e_fillHSBbrt+")",150, posl+11*dposl); }
if ( keyPressed && (key == 's' || key == 'S' )) { fill(0); text(" stroke color("+e_strokeHSBhue+","+e_strokeHSBsat+","+e_strokeHSBbrt+")",150, posl+12*dposl); }
} // end
void keyPressed () {
if (key == CODED) {
if (keyCode == ALT) altKey = true;
else if (keyCode == SHIFT) shiftKey = true;
else if (keyCode == CONTROL) ctrlKey = true;
}
}
void keyReleased() {
if ((keyCode >= '0' && keyCode <= '9') || // digit
(keyCode >= 'A' && keyCode <= 'Z') || // upper-case letter
(keyCode >= 'a' && keyCode <= 'z')) { // lower-case letter
if (altKey) {
//println("ALT " + char (keyCode)+" "+keyCode);
altKey = false;
} else if (ctrlKey) {
//println("CTRL " + char (keyCode)+" "+keyCode);
ctrlKey = false;
} else if (shiftKey) {
//println("SHIFT " + char (keyCode)+" "+keyCode);
shiftKey = false;
} //else println("KEY = "+ key+" "+keyCode);
}
}
get newest version at my blog