Smiley with a Button

#include "graphapp.h"

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();
}

Notes: