/* * Smiley with a Menubar * --------------------- * This program draws a smiley inside a window, with a * menubar allowing the user to quit the program. */ #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(menuitem mi) { exitapp(); } void resize_smile(window w, rect r) { /* retrieve remembered drawing */ drawing d = (drawing) getdata(w); resize(d, r); } void main(void) { window w; drawing d; menu m; menuitem mi; w = newwindow("Smile!", rect(50,50,120,145), StandardWindow); m = newmenu("File"); mi = newmenuitem("Quit", 'X', quit); d = newdrawing(rect(0,0,120,120), draw_smile); setdata(w, d); /* store drawing pointer */ setresize(w, resize_smile); show(w); mainloop(); }