app: don't create and fill the background surface on each expose()

Instead, keep it around and only recreate it when widget size or
background type change.