


	PFont verdana10;
	//Gui myGui = new Gui();
	HScrollbar slider_R1, slider_G1, slider_B1, slider_R2, slider_G2, slider_B2;
	
	boolean cursorHand = false,
			over;
	
	int slider_R1_Y = 30, slider_G1_Y = 60, slider_B1_Y = 90, slider_R2_Y = 150, slider_G2_Y = 180, slider_B2_Y = 210;
	int slider_X = 50;//130;
	
	int screenW = 400, screenH = 800;
	int bgColor = color(30, 30, 30),
		font1Color = color(204, 102, 0), 
		font2Color = color(120, 120, 120),
		font3Color = color(255, 255, 255);

	int r = 0;
	float rotX, rotY, myPI;

	void setup() {
		size(screenW, screenH, P3D);
		frameRate(60);
		rectMode(CENTER);

		// ------------------------------- Default Font Set
		verdana10 = loadFont("Verdana-10.vlw");
		textFont(verdana10, 10);
		textAlign(RIGHT);
		textMode(SCREEN);

		//myGui.sliderSetup();
		//HScrollbarC (int xposition, int yposition, int barWidth, int barHeight, int loose, int StartUP (200 ==Wert 10)
		//256 da RGB-Werte von 0-255
		
		slider_R1 = new HScrollbar(slider_X, slider_R1_Y, 256, 10, 10, 100);
		slider_G1 = new HScrollbar(slider_X, slider_G1_Y, 256, 10, 10, 50);
		slider_B1 = new HScrollbar(slider_X, slider_B1_Y, 256, 10, 10, 30);

		slider_R2 = new HScrollbar(slider_X, slider_R2_Y, 256, 10, 10, 180);
		slider_G2 = new HScrollbar(slider_X, slider_G2_Y, 256, 10, 10, 106);
		slider_B2 = new HScrollbar(slider_X, slider_B2_Y, 256, 10, 10, 136);
	}

	void draw() {
		background(bgColor);
		lights();

		fill(255, 20);
		rect(0, 0, 400, 230);
		
		// --------------------------------------------------- draw Slider
		//myGui.sliderDraw();
		fill(font1Color);
		
		text("Color Fade: R1", slider_X+5, slider_R1_Y - 10);		
		text("Color Fade: G1", slider_X+5, slider_G1_Y - 10);
		text("Color Fade: B1", slider_X+5, slider_B1_Y - 10);
		text("Color Fade: R2", slider_X+5, slider_R2_Y - 10);	
		text("Color Fade: G2", slider_X+5, slider_G2_Y - 10);
		text("Color Fade: B2", slider_X+5, slider_B2_Y - 10);
		
		
		slider_R1.update();
		slider_R1.draw();
			
		slider_G1.update();
		slider_G1.draw();		
		
		slider_B1.update();
		slider_B1.draw();

		slider_R2.update();
		slider_R2.draw();
		
		slider_G2.update();
		slider_G2.draw();

		slider_B2.update();
		slider_B2.draw();		
		
		// --------------------------------------------------- lerp
		int from 	= color(	slider_R1.scrollerValue,
								slider_G1.scrollerValue,
								slider_B1.scrollerValue);

		int to 		= color(	slider_R2.scrollerValue,
								slider_G2.scrollerValue,
								slider_B2.scrollerValue);

		//int interA = lerpColor(from, to, 0.1f);
		//int interB = lerpColor(from, to, 0.1f);

		// --------------------------------------------------- Color Fade Reference
		pushMatrix();
			scale(1.2f);
			//translate(0,0,0);
			/*fill(from);
			rect(10, 10, 20, 60);
			
			fill(interA);
			rect(30, 10, 20, 60);
			fill(interB);
			rect(50, 10, 20, 60);
			
			fill(to);
			rect(70, 10, 20, 60);
			*/
			
			fill(from);
			rect(10, 10, 20, 60);
			
			fill(to);
			rect(10, 110, 20, 60);
			
		popMatrix();

		stroke(255, 10);
		
		translate(width / 2, height / 2 );
		//rotateX(rotY);
		//rotateY(rotX);
                rotateX(radians(55));
		rotateY(radians(r++));
		
		// --------------------------------------------------- Color Object
		for (int i = 1; i <= 25; i++) {
			
			//int verlauf = lerpColor(from, to, i/25f );
			int verlauf = lerpColor(from, to, i/25f );

			pushMatrix();
				translate(0, 10 * i, 0);
				rotateX(radians(-90));
				fill(verlauf, 100);
				ellipse(0, 0, 100, 100);
			popMatrix();

			// -----------------------------------------------------

			fill(verlauf, 150);
			beginShape();
			vertex(-50, 10 * i, 0);
			vertex(+50, 10 * i, 0);
			vertex(+50, 10 * i + 10, 0);
			vertex(-50, 10 * i + 10, 0);
			endShape();

			beginShape();
			vertex(0, 10 * i, -50);
			vertex(0, 10 * i, +50);
			vertex(0, 10 * i + 10, +50);
			vertex(0, 10 * i + 10, -50);
			endShape();

		}
		
		
		/*if (cursorHand==true){
			cursor(HAND);
		} else {
			cursor(ARROW);
		}*/
		//println(cursorHand);
	}

	void mouseDragged() {
		if (mouseY > 300) {
			rotX += (mouseX - pmouseX) * 0.01;
			rotY -= (mouseY - pmouseY) * 0.01;
		}
	}

	
	class HScrollbar {
		int swidth, sheight; 	// width and height of bar
		int xpos, ypos;			// x and y position of bar
		float spos, newspos; 	// x position of slider
		int 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;
		int startUP;

		float scrollerValue;

		HScrollbar(int xp, int yp, 		int sw, int sh, 		int l, int sUP) {
			swidth = sw;
			sheight = sh;
			//int widthtoheight = sw - sh;
			//ratio = (float) sw / (float) widthtoheight;
			xpos = xp;
			ypos = yp - sheight/2;
			startUP = sUP;
			spos = xpos + startUP;
			
			newspos = spos;
			sposMin = xpos;
			sposMax = xpos + swidth; // - sheight;
			loose = l;
		}

		boolean over() {
			if (mouseX > xpos - 15 && mouseX < xpos + 5 + swidth && mouseY > ypos - 5 && mouseY < ypos + sheight + 5) {
				return true;
			} else {
				return false;
			}
		}
		
		void update() {
			if (over()) {
				over = true;
				cursor(HAND);
				//cursorHand=true;
			} else {
				over = false;
				cursor(ARROW);
				//cursorHand=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;
			}
		}

		int constrain(int val, int minv, int maxv) {
			return min(max(val, minv), maxv);
		}

		void draw() {
			if(scrollerValue > 30 && scrollerValue < 220){
				textAlign(CENTER);
			} 
			
			if (scrollerValue <30){
				textAlign(LEFT);
			} 
			
			if (scrollerValue >220){
				textAlign(RIGHT);
			} 
			
			
			fill(font2Color);
			text("Value " +  (int)(spos - xpos), spos, ypos +15);
			
			textAlign(LEFT);
			// Define TextScroller Value
			scrollerValue = (spos - xpos);
			
			// BG SLIDER RECT
			rectMode(CORNER);
			rect(xpos +1, ypos, swidth, sheight/10); // line
			
			if (over || locked) {
				fill(font1Color);
			} else {
				fill(font2Color);
			}
			rect(spos, ypos, sheight/2, sheight/2);
		}

		/*float getPos() {
			// convert spos to be values between 0 and the total width of the scrollbar
			return spos * ratio;
		}*/
	}

