#include "graphapp.h" void draw_smile(Control *c, Graphics *g) { Rect r; Rect r1, r2; point p; r = get_control_area(c); r1 = insetr(r, 10); /* inset from edge */ set_colour(g, LIGHT_BLUE); /* blue face */ fill_ellipse(g, r1); /* draw face */ set_colour(g, RED); /* red lips */ setlinewidth(g, 2); /* thicker lips */ r2 = inset_rect(r1, 30); /* inset from face */ draw_arc(g, r2, 270-60, 270+60); /* smile arc */ set_colour(g, 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); fill_ellipse(g, r2); /* draw left eye */ r2 = rect(p.x + 10, p.y, 20,20); fill_ellipse(g, r2); /* draw right eye */ } void quit(Control *c) { exit(0); } void resize_smile(Window *w) { /* retrieve remembered drawing */ Rect r = get_window_area(w); Control *c = get_window_data(w); set_control_area(c, rect(0,25,r.width,r.height-25)); } int main(int argc, char *argv[]) { App *app; Window *w; Control *c; Control *b; app = new_app(argc, argv); w = new_window(app, rect(50,50,120,145), "Smile!", STANDARD_WINDOW); b = new_button(w, rect(0,0,80,25), "Quit", quit); c = new_control(w, rect(0,25,120,120)); on_control_redraw(c, draw_smile); set_window_data(w, d); /* store control pointer */ on_window_resize(w, resize_smile); show_window(w); main_loop(app); return 0; }
Notes: