/* * Smiley with a Button * -------------------- * This program draws a smiley inside a window, with a * quit button in the top-left of the window. */ #include void draw_smile(drawing d, rect r) { rect r1, r2; point p; r1 = insetr(r, 10); /* inset from edge */ setcolour(LightBlue); /* blue face */ fillellipse(r1); /* draw face */ setcolour(Red); /* red lips */ setlinewidth(2); /* thicker lips */ r2 = insetr(r1, 30); /* inset from face */ drawarc(r2, 270-60, 270+60); /* smile arc */ setcolour(Brown); /* brown eyes */ p.x = r1.x + r1.width * 1/2; p.y = r1.y + r1.height * 1/4; r2 = rect(p.x - 30, p.y, 20,20); fillellipse(r2); /* draw left eye */ r2 = rect(p.x + 10, p.y, 20,20); fillellipse(r2); /* draw right eye */ } void quit(button b) { exitapp(); } void resize_smile(window w, rect r) { /* retrieve remembered drawing */ drawing d = (drawing) getdata(w); resize(d, rect(0,25,r.width,r.height-25)); } void main(void) { window w; drawing d; button b; w = newwindow("Smile!", rect(50,50,120,145), StandardWindow); b = newbutton("Quit", rect(0,0,80,25), quit); d = newdrawing(rect(0,25,120,120), draw_smile); setdata(w, d); /* store drawing pointer */ setresize(w, resize_smile); show(w); mainloop(); }