code: def full_pixels(space, data, gap_pixels=1):
      
      available = space - (len(data) - 1) * gap_pixels # 8 recs 7 gaps
  
      res = []
      for i, val in enumerate(data):
          # convert data to 0..1 scale so we deal with fractions
          data_sum = sum(data[i:])
          norm = val * 1.0 / data_sum
  
  
          w = max(int(round(available * norm)), 1)
          res.append(w)
          available -= w
      return res
docs: returns the given data distributed in the space ensuring it's full pixels
      and with the given gap.
      this will result in minor sub-pixel inaccuracies.
      XXX - figure out where to place these guys as they are quite useful