$40 off Craftsman 5 Drawer Homeowner Tool Center with Riser and Parts Bins $99.99 on sale 10/2-10/8
Sears Deal of the Day: Thule Car Top Carrier, Quest

Figure 17
============
/*
//Author: Cheikh Drame
//To support, please do one of the following
//- Visit irap123.com many times a day
//- Join irap123.com
//- Buy my app irap123 (rhyming dictionary) available for android, and iphone. On windows phone, it is called iLyrics. If you not you can get the desktop version at www.irap123.com/apps/webstore/
//- Include irap123.com in your blogs, forums, facebook walls, email footers, comments
//- send a donation at my paypal address at cbdsigned.vevo@gmail.com
//- Buy a story at http://shop.pparzygnat.com
*/
// ColorChooser.cpp : Defines the entry point for the console application.
//author: Cheikh Drame
//Date: Oct 20 2009
#include "stdafx.h"
#include
#include
#include
const int WIDTH=430, HEIGHT=350, TOP=50, LOW=255+50;
int y[3]={(TOP+LOW)/2, (TOP+LOW)/2, (TOP+LOW)/2}, currentY;
float color[]={0.5,0.5,0.5}; float rect2ColorLeft[3], rect2ColorRight[3];
bool mouseDown=false, left=false, right=false;
void copyColor(const float c[], float cc[])
{
for(int i=0; i<3; ++i)
cc[i]=c[i];
}
void mouse(int button, int state, int mouseX, int mouseY)
{
if(button==GLUT_LEFT_BUTTON){
if(state==GLUT_DOWN){//mouse down
if(mouseY>=50 && mouseY<=LOW){
if(mouseX>=45 && mouseX<=55 && mouseY>=y[0] && mouseY<=y[0]+5){ currentY=0; mouseDown=true;}
else
if(mouseX>=115 && mouseX<=125 && mouseY>=y[1] && mouseY<=y[1]+5){ currentY=1; mouseDown=true;}
else
if(mouseX>=185 && mouseX<=195 && mouseY>=y[2] && mouseY<=y[2]+5){ currentY=2; mouseDown=true;}
}
}
else{ mouseDown=false;//mouse Released
if(mouseY>=50 && mouseY<=LOW){
if(mouseX>=45 && mouseX<=55) y[0]=mouseY;
else if( mouseX>=115 && mouseX<=125 ) y[1]=mouseY;
else if(mouseX>=185 && mouseX<=195) y[2]=mouseY;
glutPostRedisplay();
}
}
}
}
void motion(int mouseX, int mouseY)
{
if(mouseDown){
if(mouseY>=TOP && mouseY<=LOW) y[currentY]=mouseY;
glutPostRedisplay();
}
}
void printText(std::string s)
{
for(int i=0; s[i]!='\0'; ++i)
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, s[i]);
}
void drawLines()
{
glBegin(GL_LINES);
int y_=TOP, w=LOW, x_=50;
glColor3f(1,0,0);
glVertex2i(x_,y_); glVertex2i(x_, w);//red line
x_+=70;
glColor3f(0,1,0);
glVertex2i(x_,y_); glVertex2i(x_, w);//green line
x_+=70;
glColor3f(0,0,1);
glVertex2i(x_,y_); glVertex2i(x_, w);//blue line
glEnd();
}
void drawPositions()
{
int x_=50;
glColor3f(1,0,0);
glBegin(GL_QUADS);
glVertex2i(x_-5, y[0]); glVertex2i(x_+5, y[0]); glVertex2i(x_+5, y[0]+5); glVertex2i(x_-5, y[0]+5);
glEnd();
x_+=70;
glColor3f(0,1,0);
glBegin(GL_QUADS);
glVertex2i(x_-5, y[1]); glVertex2i(x_+5, y[1]); glVertex2i(x_+5, y[1]+5); glVertex2i(x_-5, y[1]+5);
glEnd();
x_+=70;
glColor3f(0,0,1);
glBegin(GL_QUADS);
glVertex2i(x_-5, y[2]); glVertex2i(x_+5, y[2]); glVertex2i(x_+5, y[2]+5); glVertex2i(x_-5, y[2]+5);
glEnd();
}
void drawRect1()
{
glColor3f(0,0,0);
glRasterPos2i(300,40);
glColor3fv(color);
printText("Mixed Color");
glBegin(GL_QUADS);//the big rectangle
glVertex2i(300,50); glVertex2i(390,50); glVertex2i(390,150); glVertex2i(300,150);
glEnd();
}
void drawRect2()
{
glColor3f(0,0,0);
glRasterPos2i(300,240);
printText("Gradient");
glBegin(GL_QUADS);//the small rectangle
if(left){ copyColor(color, rect2ColorLeft); left=false;}
glColor3fv(rect2ColorLeft);
int y=250;
glVertex2i(300,y); glVertex2i(300,y+50);
if(right){ copyColor(color, rect2ColorRight); right=false;}
glColor3fv(rect2ColorRight);
glVertex2i(390,y+50);glVertex2i(390,y);
glEnd();
}
template
void swapv(xtype&v,xtype&vv)
{
xtype temp;
temp=v;
v=vv;
vv=temp;
}
void itos(int num, std::string &s)//int to char*
{
do{
s+=int(num%10)+int('0'); num/=10;
}while(num!=0);
int i=0, l=s.length()-1, limit=s.length()/2;
for(; i
}
//this function updates the color by translating it in the most accurate way
void bitmap()
{
glColor3f(0,0,0);
std::string num="";
int x_=45, numColor=LOW-y[0]; color[0]=numColor/255.0;
glRasterPos2i(x_, LOW+20);
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, 'R');
glRasterPos2i(x_, 30); itos(numColor, num);
printText(num);
x_+=70;
glRasterPos2i(x_, LOW+20);
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, 'G');
num=""; numColor=LOW-y[1]; color[1]=numColor/255.0;
glRasterPos2i(x_, 30); itos(numColor, num);
printText(num);
x_+=70;
glRasterPos2i(x_, LOW+20);
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, 'B');
num=""; numColor=LOW-y[2]; color[2]=numColor/255.0;
glRasterPos2i(x_, 30); itos(numColor, num);
printText(num);
}
void keyboard(unsigned char key, int x, int y)
{
switch(key)
{
case'l':
case'L':
left=true;
glutPostRedisplay();
break;
case'r':
case'R':
right=true;
glutPostRedisplay();
break;
default:
;
}
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
drawLines();
bitmap();
drawRect1();
drawRect2();
drawPositions();
glFlush();
}
void main(int argc, char**argv)
{ copyColor(color, rect2ColorLeft); copyColor(color, rect2ColorRight);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);
glutInitWindowSize(WIDTH, HEIGHT);
glutInitWindowPosition(300,200);
glutCreateWindow("Color Chooser");
glClearColor(1,1,1,0);
gluOrtho2D(0, WIDTH, HEIGHT, 0);
glutDisplayFunc(display);
glutMotionFunc( motion );
glutMouseFunc( mouse );
glutKeyboardFunc(keyboard);
glutMainLoop();
}
No comments:
Post a Comment