Displaying Source Code(s)
|
|
Paint Brush in C (Project)
--------------------------------------------------------------------------------
Description : This is my best program in graphics in c. Paint
Brush.
#include <graphics.h>
#include <conio.h>
#include<string.h>
#include<process.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <math.h>
/*#include <alloc.h>*/
#define MIN_X 83
#define MAX_X 629
#define MIN_Y 30
#define MAX_Y 409
#define MAX_BUTTONS 22
#define MAX_COLPAT 28
#define CLEAR 0
#define MARK_OP 8
#define CLIP_OP 10
#define TRANS_OP 11
#define ROTATE_OP 12
#define DELETE_OP 13
#define FLIP 14
#define MIRROR 15
#define LOAD_OP 16
#define SAVE_OP 17
#define SCALE_OP 18
typedef struct button_desc
{
int xmin,ymin,xmax,ymax;
int button_no;
char* desc;
}button;
button buttons[MAX_BUTTONS];
typedef struct color_button
{
int xmin,ymin,xmax,ymax;
int color;
int colflag;
}color_but;
color_but colorbuttons[28];
/*/color_but patternbuttons[16];*/
/*/ structure to mark an area */
struct
{
int top,left,bottom,right;
}marker;
int marked=0; /*/ to store whether marked or not*/
char FileName[40]="Untitled";
int saved=1;/*/to store if file has been saved or not*/
int LeftButtonPressed;
int RightButtonPressed;
int mousex,mousey;
int prevx,prevy;
int Current_Color=BLACK; /*/ to Store the current color */
int Current_Pattern=EMPTY_FILL;/*/ to store the current
Pattern*/
int Current_Button=1;/*/ to store the current button pressed*/
int Prev_Button=1;/*/ to store the previous button */
void init();
void init_button(int,int,int,int,int,char*);
void init_color_button(int,int,int,int,int,int);
void New_ico(int x1, int y1);
void Open_ico(int x1, int y1);
void Save_ico(int x1, int y1);
void Line_ico(int x1, int y1);
void Rectangle_ico(int x1, int y1);
void Circle_ico(int x1, int y1);
void Ellipse_ico(int x1,int y1);
void Sphere_ico(int x1, int y1);
void Spiral_ico(int x1,int y1);
void Brush_ico(int x1, int y1);
void Erase_ico(int x1, int y1);
void Alphabet_ico(int x, int y);
void Mark_ico(int x1, int y1);
void Clip_ico(int x1, int y1);
void Translate_ico(int x, int y);
void Rotate_ico(int x, int y);
void Scale_ico(int x, int y);
void Bucket_ico(int x,int y);
void Cube_ico(int x, int y);
void Del_ico(int x, int y);
void color_ico(int x1, int y1, int c);
void size_up_ico(int x, int y);
void size_down_ico(int x, int y);
void flip_ico(int x, int y);
void mirror_ico(int x, int y);
void draw_button_border(int );
void undraw_button_border(int no);
void draw_color_button_border(int,int);
void start_up();
void check_if_exit();
int check_mouse_on(int,int,int,int);
int check_if_button_pressed();
int check_if_color();
int check_if_pattern();
void disp_filename();
void disp_coord();
void ShowStatus(char*);
void ClearStatus();
char* readline();
void showmouse();
void hidemouse();
void wheremouse(int *, int *);
int buttclicked();
void reset();
void getxy();
void startmouse(int,int);
void restrictmouse(int,int,int,int);
void Diagram();
void freehand();
void drawline();
void drawrectangle();
void erase();
void beep();
void drawtext();
void plotellipsepoints(int,int,int,int);
void algoellipse(int,int,float,float);
void algospiral(int,int,float,float);
void drawellipse();
void drawspiral();
void drawcircle();
void Bucket();
void Cube();
void sphere();
void insert(int,int);
void ffill(int,int,int,int);
void save();
void Load();
void mirror();
void flip();
void mark();
void unmark();
void delete_p();
void translate();
void rotate();
void scale();
void clip();
/*
void title(int,int,int,int);
*/
void main()
{
int i,j,gd=DETECT,gm=DETECT;
initgraph(&gd,&gm,"c:\turboc2\include");
if(graphresult())
{
printf("
Could not initialise graphics <BR>);
exit(0);
}
/*
cleardevice();
setcolor(DARKGRAY);
title(getmaxx()/2-180,getmaxy()/2-150,getmaxx()/2+180,getmaxy()/2+150);
settextstyle(0,0,1);
settextjustify(LEFT_TEXT,TOP_TEXT);
setusercharsize(1,1,1,1);
setcolor(WHITE);
outtextxy(getmaxx()/2-150,getmaxy()/2-100,"Abhishek Dhingra's");
setcolor(DARKGRAY);
outtextxy(170,285,"for DOS environment");
settextstyle(8,0,2);
setusercharsize(3,2,5,1);
setcolor(BLACK);
for(i=0;i<=6;i++)
outtextxy(getmaxx()/2-150+i,getmaxy()/2-150,"DOS Paint");
settextstyle(8,0,1);
setusercharsize(1,1,1,1);
setfillstyle(1,BLACK);
rectangle(170,275,430,280);
floodfill(175,277,BLACK);
circle(429,186,5);
settextstyle(2,0,4);
outtextxy(427,180,"R");
settextstyle(6,0,1);
outtextxy(150,355,"Version 1.0");
settextstyle(2,0,4);
outtextxy(330,330,"This product is licensed to");
outtextxy(395,345,"R.V.C.E");
flushall();
getch();
flushall();
closegraph();
initgraph(&gd,&gm,"c:\turboc2\include");
if(graphresult())
{
printf("
Could not initialise graphics <BR>);
exit(0);
}
*/
reset();
start_up();
showmouse();
startmouse(300,300);
disp_filename();
/*setfillstyle(SOLID_FILL,LIGHTGRAY);*/
/*bar(8,25,78,270); */
init();
undraw_button_border(Current_Button);
while(1)
{
getxy();
disp_coord();
if(LeftButtonPressed)
{
if(check_if_button_pressed()>=0);
else if(check_if_color())
ClearStatus();
else if(check_mouse_on(MIN_X+2,MIN_Y+2,MAX_X-2,MAX_Y-2))
{
ClearStatus();
saved=0;/* file has been altered; */
Diagram();
}
else check_if_exit();
}
else check_if_button_pressed();
}
}
/*
void title(int x,int y,int x1,int y1)
{
int pc;
int i;
hidemouse();
setcolor(LIGHTGRAY);
for(i=y;i<=y1;i++)
line(x,i,x1,i);
setcolor(WHITE);
for(i=0;i<=5;i++)
{
line(x+i,y+i,x1-i,y+i);
line(x+i,y+i,x+i,y1-i);
}
setcolor(BLACK);
line(x1,y1,x1,y);
line(x1,y1,x,y1);
setcolor(DARKGRAY);
for(i=1;i<=5;i++)
{
line(x1-i,y1-i,x+i,y1-i);
line(x1-i,y1-i,x1-i,y+i);
}
showmouse();
}
*/
void init()
{
int x1=10,y1=30,x2=44,y2=MAX_Y+28,ywidth=30,xwidth=30;
int butt=0,i,j;
New_ico(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"New File");
draw_button_border(butt);
butt++;
Line_ico(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"Line Drawing Tool");
draw_button_border(butt);
butt++;
y1=y1+ywidth;
Rectangle_ico(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"Rectangle Drawing Tool");
draw_button_border(butt);
butt++;
Circle_ico(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"Circle Drawing Tool");
draw_button_border(butt);
butt++;
y1=y1+ywidth;
Ellipse_ico(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"Ellipse Drawing Tool");
draw_button_border(butt);
butt++;
Spiral_ico(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"Spiral Drawing Tool");
draw_button_border(butt);
butt++;
y1=y1+ywidth;
Brush_ico(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"Free Hand");
draw_button_border(butt);
butt++;
Erase_ico(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"Eraser");
draw_button_border(butt);
butt++;
y1=y1+ywidth;
Mark_ico(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"Marking Tool");
draw_button_border(butt);
butt++;
Alphabet_ico(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"Text");
draw_button_border(butt);
butt++;
y1=y1+ywidth;
Clip_ico(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"Clipping (Works with
Mark)");
draw_button_border(butt);
butt++;
Translate_ico(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"Translate (Works with
Mark)");
draw_button_border(butt);
butt++;
y1=y1+ywidth;
Rotate_ico(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"Rotate (Works with
mark)");
draw_button_border(butt);
butt++;
Del_ico(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"Delete (Works with
mark)");
draw_button_border(butt);
butt++;
y1=y1+ywidth;
flip_ico(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"Flip Canvas");
draw_button_border(butt);
butt++;
mirror_ico(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"Mirror Canvas");
draw_button_border(butt);
butt++;
y1=y1+ywidth;
Open_ico(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"Open File");
draw_button_border(butt);
butt++;
Save_ico(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"Save File");
draw_button_border(butt);
butt++;
y1=y1+ywidth;
Scale_ico(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"Scaling (Works with
Mark)");
draw_button_border(butt);
butt++;
Bucket_ico(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"Bucket Fill");
draw_button_border(butt);
butt++;
y1=y1+ywidth;
Sphere_ico(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"3D Ellipse Drawing Tool");
draw_button_border(butt);
butt++;
Cube_ico(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"Cuboid Drawing Tool");
draw_button_border(butt);
butt++;
butt=0;
x1=MIN_X+8;
y1=MAX_Y+9;
xwidth=19;ywidth=15;
for(i=0;i<8;i++)
{
init_color_button(butt,x1,y1,xwidth,ywidth,1);
draw_color_button_border(butt,1);
butt++;
init_color_button(butt,x1,y2,xwidth,ywidth,1);
draw_color_button_border(butt,1);
butt++;
x1=x1+xwidth;
}
butt=0;
x1=x1+25;
for(i=0;i<6;i++)
{
init_color_button(butt,x1,y1,xwidth,ywidth,0);
draw_color_button_border(butt,0);
butt++;
init_color_button(butt,x1,y2,xwidth,ywidth,0);
draw_color_button_border(butt,0);
butt++;
x1=x1+xwidth;
}
setfillstyle(Current_Pattern,Current_Color);
bar(20,MAX_Y+7,65,MAX_Y+7+35);
setcolor(BLACK);
rectangle(20,MAX_Y+7,65,MAX_Y+7+35);
setcolor(Current_Color);
}
void init_color_button(int color,int xmin,int ymin,int
xwidth,int
ywidth,int colflag)
{
int xgap=4;
if (colflag)
{
colorbuttons[color].xmin=xmin;
colorbuttons[color].xmax=xmin+xwidth-xgap;
colorbuttons[color].ymin=ymin;
colorbuttons[color].ymax=ymin+ywidth;
colorbuttons[color].color=color;
colorbuttons[color].colflag=colflag;
}
else
{
colorbuttons[color+16].xmin=xmin;
colorbuttons[color+16].xmax=xmin+xwidth-xgap;
colorbuttons[color+16].ymin=ymin;
colorbuttons[color+16].ymax=ymin+ywidth;
colorbuttons[color+16].color=color;
colorbuttons[color+16].colflag=colflag;
}
}
void init_button(int no,int xmin,int ymin,int xwidth,int
ywidth,char*
desc)
{
int ygap=4;
buttons[no].xmin=xmin;
buttons[no].ymin=ymin;
buttons[no].xmax=xmin+xwidth;
buttons[no].ymax=ymin+ywidth-ygap;
buttons[no].desc=(char *) malloc(strlen(desc)+1);
if(buttons[no].desc==NULL)
{
cleardevice();
printf("
No MEMORY ");
}
strcpy(buttons[no].desc,desc);
}
void draw_button_border(int no)
{
int color=getcolor();
hidemouse();
setcolor(WHITE);
line(buttons[no].xmin,buttons[no].ymin,buttons[no].xmax,buttons[no].ymin);
line(buttons[no].xmin,buttons[no].ymin,buttons[no].xmin,buttons[no].ymax);
setcolor(DARKGRAY);
line(buttons[no].xmax,buttons[no].ymax,buttons[no].xmax,buttons[no].ymin);
line(buttons[no].xmax,buttons[no].ymax,buttons[no].xmin,buttons[no].ymax);
setcolor(color);
showmouse();
}
void undraw_button_border(int no)
{
int color=getcolor();
hidemouse();
setcolor(DARKGRAY);
line(buttons[no].xmin,buttons[no].ymin,buttons[no].xmax,buttons[no].ymin);
line(buttons[no].xmin,buttons[no].ymin,buttons[no].xmin,buttons[no].ymax);
setcolor(WHITE);
line(buttons[no].xmax,buttons[no].ymax,buttons[no].xmax,buttons[no].ymin);
line(buttons[no].xmax,buttons[no].ymax,buttons[no].xmin,buttons[no].ymax);
setcolor(color);
showmouse();
}
void draw_color_button_border(int no,int colflag)
{
int color=getcolor();
setcolor(BLACK);
if (colflag)
{
line(colorbuttons[no].xmin,colorbuttons[no].ymin,colorbuttons[no].xmax,col
orbuttons[no].ymin);
line(colorbuttons[no].xmin,colorbuttons[no].ymin,colorbuttons[no].xmin,col
orbuttons[no].ymax);
line(colorbuttons[no].xmax,colorbuttons[no].ymax,colorbuttons[no].xmax,col
orbuttons[no].ymin);
line(colorbuttons[no].xmax,colorbuttons[no].ymax,colorbuttons[no].xmin,col
orbuttons[no].ymax);
setfillstyle(1,no);
floodfill(colorbuttons[no].xmin+1,colorbuttons[no].ymin+1,BLACK);
}
else
{
line(colorbuttons[no+16].xmin,colorbuttons[no+16].ymin,colorbuttons[no+16]
xmax,colorbuttons[no+16].ymin);
line(colorbuttons[no+16].xmin,colorbuttons[no+16].ymin,colorbuttons[no+16]
xmin,colorbuttons[no+16].ymax);
line(colorbuttons[no+16].xmax,colorbuttons[no+16].ymax,colorbuttons[no+16]
xmax,colorbuttons[no+16].ymin);
line(colorbuttons[no+16].xmax,colorbuttons[no+16].ymax,colorbuttons[no+16]
xmin,colorbuttons[no+16].ymax);
setfillstyle(no,LIGHTBLUE);
floodfill(colorbuttons[no+16].xmin+1,colorbuttons[no+16].ymin+1,BLACK);
}
setcolor(color);
}
void New_ico(int x1, int y1)
{
setlinestyle(0, 1, 1);
setcolor(BLACK);
line(9+x1, 4+y1, 9+x1, 20+y1);
line(9+x1, 20+y1, 21+x1, 20+y1);
line(21+x1, 20+y1, 21+x1, 8+y1);
line(9+x1, 4+y1, 17+x1, 4+y1);
line(17+x1, 4+y1, 17+x1, 8+y1);
line(17+x1, 8+y1, 21+x1, 8+y1);
line(21+x1, 8+y1, 17+x1, 4+y1);
setfillstyle(1, WHITE);
floodfill(10+x1, 9+y1, BLACK);
}
void Open_ico(int x1, int y1)
{
setlinestyle(0, 1, 1);
setcolor(BLACK);
line(5+x1, 20+y1, 17+x1, 20+y1);
line(17+x1, 20+y1, 24+x1, 15+y1);
line(24+x1, 15+y1, 12+x1, 15+y1);
line(12+x1, 15+y1, 5+x1, 20+y1);
setfillstyle(1, DARKGRAY);
floodfill(10+x1, 18+y1, BLACK);
line(5+x1, 20+y1, 5+x1, 10+y1);
line(5+x1, 10+y1, 6+x1, 8+y1);
line(6+x1, 8+y1, 8+x1, 8+y1);
line(8+x1, 8+y1, 9+x1, 10+y1);
line(9+x1, 10+y1, 17+x1, 10+y1);
line(17+x1, 10+y1, 17+x1, 15+y1);
setfillstyle(1, YELLOW);
floodfill(6+x1, 12+y1, BLACK);
line(15+x1, 7+y1, 17+x1, 5+y1);
line(17+x1, 5+y1, 22+x1, 7+y1);
line(22+x1, 7+y1, 24+x1, 12+y1);
line(24+x1, 12+y1, 20+x1, 10+y1);
line(24+x1, 12+y1, 26+x1, 9+y1);
}
void Save_ico(int x1, int y1)
{
setlinestyle(0, 1, 1);
setcolor(BLACK);
line(6+x1, 4+y1, 24+x1, 4+y1);
line(24+x1, 4+y1, 24+x1, 20+y1);
line(24+x1, 20+y1, 8+x1, 20+y1);
line(8+x1, 20+y1, 6+x1, 18+y1);
line(6+x1, 18+y1, 6+x1, 4+y1);
line(9+x1, 4+y1, 9+x1, 12+y1);
line(9+x1, 12+y1, 21+x1, 12+y1);
line(21+x1, 12+y1, 21+x1, 4+y1);
line(10+x1, 20+y1, 10+x1, 15+y1);
line(10+x1, 15+y1, 20+x1, 15+y1);
line(20+x1, 15+y1, 20+x1, 20+y1);
line(17+x1, 15+y1, 17+x1, 20+y1);
line(21+x1, 7+y1, 24+x1, 7+y1);
setfillstyle(1, WHITE);
floodfill(10+x1, 5+y1, BLACK);
setfillstyle(1, LIGHTBLUE);
floodfill(7+x1, 5+y1, BLACK);
setfillstyle(1, DARKGRAY);
floodfill(11+x1, 19+y1, BLACK);
}
void Line_ico(int x1, int y1)
{
line(8+x1, 5+y1, 22+x1, 19+y1);
}
void Rectangle_ico(int x1, int y1)
{
rectangle(8+x1, 5+y1, 22+x1, 19+y1);
}
void Circle_ico(int x1, int y1)
{
circle(15+x1, 12+y1, 8);
}
void Spiral_ico(int x1, int y1)
{
int xrad=3,yrad=1;
int i;
x1=15+x1;
y1=14+y1;
for( i = 1; i <=4; ++i )
{
ellipse( x1, y1, 90, 270, xrad, yrad );
xrad += 1;
yrad += 1;
y1 -= 1;
ellipse( x1, y1, 270, 90, xrad, yrad );
xrad += 1;
yrad += 1;
y1 += 1;
}
}
void Ellipse_ico(int x1,int y1)
{
ellipse(15+x1, 13+y1, 0, 360, 8, 6);
}
void Brush_ico(int x1, int y1)
{
setcolor(BLACK);
setlinestyle(0, 1, 3);
line(19+x1, 21+y1, 10+x1, 9+y1);
setlinestyle(0, 1, 1);
line(11+x1, 9+y1, 11+x1, 6+y1);
line(11+x1, 6+y1, 6+x1, 4+y1);
line(6+x1, 4+y1, 7+x1, 9+y1);
line(7+x1, 9+y1, 11+x1, 9+y1);
}
void Fill_ico(int x1, int y1)
{
setlinestyle(0, 1, 1);
setcolor(BLACK);
line(10+x1, 11+y1, 16+x1, 19+y1);
line(16+x1, 19+y1, 25+x1, 12+y1);
line(25+x1, 12+y1, 20+x1, 5+y1);
line(10+x1, 11+y1, 24+x1, 11+y1);
setfillstyle(1, RED);
floodfill( 12+x1, 12+y1, BLACK);
setcolor(RED);
line(10+x1, 11+y1, 8+x1, 14+y1);
line(8+x1, 14+y1, 8+x1, 16+y1);
}
void Cube_ico(int x, int y)
{
rectangle(8+x, 5+y, 24+x, 17+y);
rectangle(5+x, 9+y, 21+x, 21+y);
line(5+x, 9+y, 8+x, 5+y);
line(21+x, 21+y, 24+x, 17+y);
line(21+x, 9+y, 24+x, 5+y);
line(5+x, 21+y, 8+x, 17+y);
}
void Erase_ico(int x1, int y1)
{
setlinestyle(0, 1, 1);
setcolor(BLACK);
line(14+x1, 20+y1, 25+x1, 7+y1);
line(25+x1, 7+y1, 23+x1, 4+y1);
line(23+x1, 4+y1, 12+x1, 17+y1);
line(12+x1, 17+y1, 14+x1, 20+y1);
line(14+x1, 20+y1, 5+x1, 20+y1);
line(5+x1, 20+y1, 5+x1, 17+y1);
line(5+x1, 17+y1, 12+x1, 17+y1);
line(5+x1, 17+y1, 16+x1, 4+y1);
line(16+x1, 4+y1, 23+x1, 4+y1);
setfillstyle(1, DARKGRAY);
floodfill(14+x1, 18+y1, BLACK);
setfillstyle(1, WHITE);
floodfill(16+x1, 5+y1, BLACK);
}
void Alphabet_ico(int x, int y)
{
setcolor(BLACK);
setlinestyle(0, 1, 3);
line(8+x, 20+y, 18+x, 4+y);
line(18+x, 4+y, 18+x, 20+y);
setlinestyle(0, 1, 1);
line(12+x, 14+y, 19+x, 14+y);
line(6+x, 20+y, 12+x, 20+y);
line(15+x, 20+y, 21+x, 20+y);
}
void Mark_ico(int x1, int y1)
{
setlinestyle(0, 1, 1);
setcolor(BLACK);
setlinestyle(3, 1, 1);
rectangle(5+x1, 5+y1, 25+x1, 19+y1);
setlinestyle(0, 1, 1);
}
void Clip_ico(int x1, int y1)
{
setlinestyle(0, 1, 1);
setcolor(BLACK);
rectangle(5+x1, 5+y1, 25+x1, 19+y1);
setfillstyle(1, WHITE);
floodfill(15+x1, 12+y1, BLACK);
setfillstyle(1,BLACK);
bar(12+x1, 10+y1, 23+x1, 17+y1);
}
void Translate_ico(int x, int y)
{
setcolor(BLACK);
line(6+x, 3+y, 20+x, 3+y);
line(20+x, 3+y, 20+x, 8+y);
line(6+x, 3+y, 6+x, 16+y);
line(6+x, 16+y, 12+x, 16+y);
line(25+x, 8+y, 12+x, 8+y);
line(12+x, 8+y, 12+x, 20+y);
line(12+x, 20+y, 25+x, 20+y);
line(25+x, 20+y, 25+x, 8+y);
setfillstyle(1, LIGHTRED);
floodfill(8+x, 5+y, BLACK);
floodfill(20+x, 18+y, BLACK);
}
void Rotate_ico(int x, int y)
{
setcolor(BLACK);
line(6+x, 5+y, 20+x, 5+y);
line(20+x, 5+y, 20+x, 8+y);
line(6+x, 5+y, 6+x, 18+y);
line(6+x, 18+y, 12+x, 18+y);
line(15+x, 7+y, 26+x, 11+y);
line(26+x, 11+y, 21+x, 20+y);
line(21+x, 20+y, 11+x, 16+y);
line(11+x, 16+y, 15+x, 7+y);
setfillstyle(1, LIGHTRED);
floodfill(8+x, 7+y, BLACK);
floodfill(20+x, 18+y, BLACK);
}
void Del_ico(int x, int y)
{
setcolor(RED);
setlinestyle(0, 1, 3);
line(9+x, 5+y, 16+x, 11+y);
line(16+x, 11+y, 21+x, 18+y);
line(20+x, 5+y, 11+x, 12+y);
line(11+x, 12+y, 8+x, 19+y);
setcolor(BLACK);
setlinestyle(0, 1, 1);
}
void color_ico(int x1, int y1, int c)
{
setcolor(BLACK);
rectangle(x1, y1, x1+9, y1+8);
setfillstyle(1, c);
floodfill(x1+1, y1+1, BLACK);
}
void size_up_ico(int x, int y)
{
x-=6;
y-=4;
setcolor(BLACK);
line(x+10, y+12, x+22, y+7);
line(x+22, y+7, x+34, y+12);
line(x+10, y+12, x+34, y+12);
setfillstyle(1, BLACK);
floodfill(x+20, y+10, BLACK);
}
void size_down_ico(int x, int y)
{
x-=6;
y-=3;
setcolor(BLACK);
line(x+10, y+7, x+22, y+12);
line(x+22, y+12, x+34, y+7);
line(x+10, y+7, x+34, y+7);
setfillstyle(1, BLACK);
putpixel(x+20, y+10, WHITE);
floodfill(x+20, y+10, BLACK);
}
void Sphere_ico(int x1, int y1)
{
setlinestyle(0, 1, 1);
setcolor(BLACK);
circle(x1+15,y1+13,8);
ellipse(x1+15,y1+13,0,360,4,8);
ellipse(x1+15,y1+13,0,360,8,4);
}
void Bucket_ico(int x, int y)
{
setlinestyle(0, 1, 1);
setcolor(BLACK);
line(7+x, 8+y, 11+x, 20+y);
line(11+x, 20+y, 21+x, 16+y);
line(21+x, 16+y, 17+x, 4+y);
line(7+x, 8+y, 17+x, 4+y);
line(17+x, 4+y, 7+x, 8+y);
line(3+x, 12+y, 7+x, 8+y);
line(3+x, 12+y, 5+x, 15+y);
line(5+x, 15+y, 7+x, 8+y);
setfillstyle(1, BLUE);
floodfill(10+x, 9+y, BLACK);
setfillstyle(1, YELLOW);
floodfill(5+x, 13+y, BLACK);
}
void flip_ico(int x, int y)
{
setcolor(BLACK);
line(14+x, 4+y, 8+x, 8+y);
line(8+x, 8+y, 12+x, 8+y);
line(12+x, 8+y, 12+x, 15+y);
line(12+x, 15+y, 8+x, 15+y);
line(8+x, 15+y, 14+x, 19+y);
line(14+x, 19+y, 20+x, 15+y);
line(20+x, 15+y, 16+x, 15+y);
line(16+x, 15+y, 16+x, 8+y);
line(16+x, 8+y, 20+x, 8+y);
line(20+x, 8+y, 14+x, 4+y);
setfillstyle(1, CYAN);
floodfill(14+x, 10+y, BLACK);
}
void mirror_ico(int x, int y)
{
setcolor(BLACK);
line(6+x, 12+y, 10+x, 17+y);
line(11+x, 18+y, 11+x, 15+y);
line(11+x, 15+y, 18+x, 15+y);
line(18+x, 15+y, 18+x, 18+y);
line(18+x, 18+y, 23+x, 12+y);
line(23+x, 12+y, 18+x, 6+y);
line(18+x, 6+y, 18+x, 10+y);
line(18+x, 10+y, 11+x, 10+y);
line(11+x, 10+y, 11+x, 6+y);
line(11+x, 6+y, 6+x, 12+y);
setfillstyle(1, CYAN);
floodfill(9+x, 12+y, BLACK);
}
void Scale_ico(int x,int y)
{
int i;
setcolor(BLUE);
line(x+5,y+5,x+5,y+20);
line(x+25,y+5,x+25,y+20);
setcolor(RED);
for(i=y+7;i<y+19;i+=2)
line(x+7,i,x+23,i);
}
void start_up()
{
setfillstyle(1, LIGHTGRAY);
floodfill(200, 200, 1);
/* FOR MAIN WINDOW */
setcolor(15);
line(0, 0, 639, 0);
line(0, 0+1, 639-1, 0+1);
line(0, 0, 0, 479-1);
line(0+1, 0, 0+1, 479-2);
setcolor(8);
line(639, 0+1, 639, 479);
line(639-1, 0+2, 639-1, 479-1);
line(639, 479, 0, 479);
line(639, 479-1, 0+1, 479-1);
/* for drawing window */
setcolor(WHITE);
rectangle(MIN_X, MIN_Y, MAX_X, MAX_Y);
setfillstyle(1, WHITE);
floodfill(300, 300, WHITE);
setcolor(8);
line(MIN_X, MIN_Y, MAX_X, MIN_Y);
line(MIN_X, MIN_Y+1, MAX_X-1, MIN_Y+1);
line(MIN_X, MIN_Y, MIN_X, MAX_Y-1);
line(MIN_X+1, MIN_Y, MIN_X+1, MAX_Y-2);
setcolor(8);
line(MAX_X, MIN_Y+1, MAX_X, MAX_Y);
line(MAX_X-1, MIN_Y+2, MAX_X-1, MAX_Y-1);
line(MAX_X, MAX_Y, MIN_X, MAX_Y);
line(MAX_X, MAX_Y-1, MIN_X+1, MAX_Y-1);
/* for status bar */
setcolor(8);
line(10, 460, 629, 460);
line(10, 460, 10, 479 - 5-1);
setcolor(15);
line(629, 460 , 629, 479 - 5);
line(629, 479 - 5, 10, 479 - 5);
/*/ For color*/
setcolor(15);
line(MIN_X, MAX_Y+4, 251, MAX_Y+4);
line(MIN_X, MAX_Y+4, MIN_X,MAX_Y+47);
setcolor(0);
line(251, MAX_Y+47 , MIN_X, MAX_Y+47);
line(251, MAX_Y+47, 251, MAX_Y+4);
/*/ For background */
setcolor(15);
line(258, MAX_Y+4, 386, MAX_Y+4);
line(258, MAX_Y+4, 258,MAX_Y+47);
setcolor(0);
line(386, MAX_Y+47 , 258, MAX_Y+47);
line(386, MAX_Y+47, 386, MAX_Y+4);
/* For Names */
setcolor(15);
line(8, 365, 76,365);
line(8, 365, 8,MAX_Y-10);
setcolor(0);
line(76, MAX_Y-10 ,8, MAX_Y-10);
line(76, MAX_Y-10, 76,365);
setcolor(BLUE);
outtextxy(35,MAX_Y-40,"By");
outtextxy(12,MAX_Y-30,"Sanju");
/* For college */
setcolor(15);
line(400, MAX_Y+4, 630, MAX_Y+4);
line(400, MAX_Y+4, 400,MAX_Y+47);
setcolor(0);
line(630, MAX_Y+47 , 400, MAX_Y+47);
line(630, MAX_Y+47, 630, MAX_Y+4);
setcolor(BLUE);
outtextxy(410,MAX_Y+15,"Developed At :");
outtextxy(410,MAX_Y+31,"R.V College of Engineering");
}
void disp_filename()
{
char name[60];
int xpos;
setfillstyle(SOLID_FILL,BLUE);
bar(10,5,629,18);
strcpy(name,"DOS Paint - ");
strcat(name,FileName);
xpos=(getmaxx()-textwidth(name))/2;
setcolor(LIGHTRED);
outtextxy(xpos,8,name);
setfillstyle(SOLID_FILL,BLUE);
bar(614,6,628,17);
outtextxy(620,8,"X");
}
void disp_coord()
{
char xy[25];
int color;
if(prevx!=mousex||prevy!=mousey)
if(
(mousex>MIN_X+1)&&(mousex<MAX_X-1)&&(mousey>MIN_Y+1)&&(mousey<MAX_Y-1))
{
sprintf(xy," x : %d y : %d",mousex-MIN_X-2,mousey-MIN_Y-2);
color=getcolor();
setcolor(LIGHTGRAY);
outtextxy(475,464,"ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ" );/* ALT 219*/
setcolor(BLACK);
outtextxy(475,464,xy);
setcolor(color);
}
}
void reset()
{
union REGS regs;
regs.x.ax=0;
int86(0x33,®s,®s);
if(regs.x.ax==0)
{
printf("
No Mouse Drivers ");
exit(0);
}
}
void showmouse()
{
union REGS regs;
regs.x.ax=1;
int86(0x33,®s,®s);
}
void hidemouse()
{
union REGS regs;
regs.x.ax=2;
int86(0x33,®s,®s);
}
int buttclicked()
{
union REGS regs;
regs.x.ax=3;
int86(0x33,®s,®s);
return regs.x.bx;
}
void wheremouse(int *x,int*y)
{
union REGS regs;
regs.x.ax=3;
int86(0x33,®s,®s);
*x=regs.x.cx;
*y=regs.x.dx;
}
void getxy()
{
union REGS regs;
regs.x.ax=3;
int86(0x33,®s,®s);
prevx=mousex;
prevy=mousey;
if(regs.x.bx&1)
LeftButtonPressed=1;
else
LeftButtonPressed=0;
if(regs.x.bx&2)
RightButtonPressed=1;
else
RightButtonPressed=0;
mousex=regs.x.cx;
mousey=regs.x.dx;
}
void startmouse(int x,int y)
{
union REGS regs;
regs.x.ax=4;
regs.x.cx=x;
regs.x.dx=y;
int86(0x33,®s,®s);
}
void restrictmouse(int minx,int miny,int maxx,int maxy)
{
union REGS regs;
regs.x.cx=minx;
regs.x.dx=maxx;
regs.x.ax=0x7;
int86(0x33,®s,®s);
regs.x.cx=miny;
regs.x.dx=maxy;
regs.x.ax=0x8;
int86(0x33,®s,®s);
}
int check_mouse_on(int minx,int miny,int maxx,int maxy)
{
if(mousex<minx)
return 0;
if(mousex>maxx)
return 0;
if(mousey<miny)
return 0;
if(mousey>maxy)
return 0;
return 1;
}
void check_if_exit()
{
if( (check_mouse_on(614,6,628,17))&&LeftButtonPressed)
{
flushall();
closegraph();
exit(0);
}
}
int check_if_button_pressed()
{
int ret_value=-1;
int i;
char ch;
for(i=0;i<MAX_BUTTONS;++i)
{
if(check_mouse_on(buttons[i].xmin,buttons[i].ymin,buttons[i].xmax,buttons[
i].ymax))
{
if(LeftButtonPressed && i!=Current_Button)
{
ret_value=i;
draw_button_border(Current_Button);
Prev_Button=Current_Button;
undraw_button_border(i);
Current_Button=i;
switch(Current_Button)
{
case CLEAR : if(marked) unmark();
hidemouse();
if(!saved)
{
ShowStatus("Save Changes ? ");
ch=getch();
if(ch=='y'||ch=='Y')
save();
}
strcpy(FileName,"Untitled");
disp_filename();
setfillstyle(SOLID_FILL,WHITE);
bar(MIN_X+2,MIN_Y+2,MAX_X-2,MAX_Y-2);
draw_button_border(Current_Button);
undraw_button_border(Prev_Button);
Current_Button=Prev_Button;
setfillstyle(Current_Pattern,Current_Color);
showmouse();
break;
case LOAD_OP: if(marked) unmark();
hidemouse();
Load();
draw_button_border(Current_Button);
undraw_button_border(Prev_Button);
Current_Button=Prev_Button;
setfillstyle(Current_Pattern,Current_Color);
showmouse();
break;
case SAVE_OP:if(marked) unmark();
hidemouse();
save();
draw_button_border(Current_Button);
undraw_button_border(Prev_Button);
Current_Button=Prev_Button;
setfillstyle(Current_Pattern,Current_Color);
showmouse();
break;
case MIRROR:if(marked) unmark();
hidemouse();
mirror();
draw_button_border(Current_Button);
undraw_button_border(Prev_Button);
Current_Button=Prev_Button;
setfillstyle(Current_Pattern,Current_Color);
showmouse();
break;
case FLIP: if(marked) unmark();
hidemouse();
flip();
draw_button_border(Current_Button);
undraw_button_border(Prev_Button);
Current_Button=Prev_Button;
setfillstyle(Current_Pattern,Current_Color);
showmouse();
break;
case DELETE_OP:
hidemouse();
delete_p();
draw_button_border(Current_Button);
undraw_button_border(Prev_Button);
Current_Button=Prev_Button;
setfillstyle(Current_Pattern,Current_Color);
showmouse();
break;
case ROTATE_OP:
hidemouse();
rotate();
draw_button_border(Current_Button);
undraw_button_border(Prev_Button);
Current_Button=Prev_Button;
setfillstyle(Current_Pattern,Current_Color);
showmouse();
break;
case CLIP_OP:
hidemouse();
clip();
draw_button_border(Current_Button);
undraw_button_border(Prev_Button);
Current_Button=Prev_Button;
setfillstyle(Current_Pattern,Current_Color);
showmouse();
break;
case SCALE_OP:
hidemouse();
scale();
draw_button_border(Current_Button);
undraw_button_border(Prev_Button);
Current_Button=Prev_Button;
setfillstyle(Current_Pattern,Current_Color);
showmouse();
break;
}
if(Current_Button!=MARK_OP&&Current_Button!=TRANS_OP)
{
if(marked) unmark();
}
}
if(prevx!=mousex||prevy!=mousey)
ShowStatus(buttons[i].desc);
return ret_value;
}
}
ClearStatus();
return ret_value;
}
int check_if_color()
{
int i=0;
for(i=0;i<MAX_COLPAT;i++)
{
if(check_mouse_on(colorbuttons[i].xmin,colorbuttons[i].ymin,colorbuttons[i
].xmax,colorbuttons[i].ymax))
{
if(colorbuttons[i].colflag)
{
Current_Color=colorbuttons[i].color;
}
else
Current_Pattern=colorbuttons[i].color;
if (Current_Pattern==EMPTY_FILL)
setfillstyle(SOLID_FILL,Current_Color);
else
setfillstyle(Current_Pattern,Current_Color);
bar(20,MAX_Y+7,65,MAX_Y+7+35);
setcolor(BLACK);
rectangle(20,MAX_Y+7,65,MAX_Y+7+35);
setcolor(Current_Color);
return 1;
}
}
return 0;
}
void ShowStatus(char* str)
{
int color=getcolor();
int i;
ClearStatus();
setcolor(BLACK);
outtextxy(12,464,str);
setcolor(color);
}
void ClearStatus()
{
static int first_time;
static char text[59];
int i;
setcolor(LIGHTGRAY);
if(!first_time)
{
strcpy(text,"");
for(i=0;i<58;++i)
strcat(text,"Û");
text[58]='
|
|
|