old_contents: '''
  Text PIL: Draw text with PIL
  '''
  
  __all__ = ('LabelPIL', )
  
  from PIL import Image, ImageFont, ImageDraw
  
  
  from kivy.compat import text_type
  from kivy.core.text import LabelBase
  from kivy.core.image import ImageData
  
  # used for fetching extends before creature image surface
  default_font = ImageFont.load_default()
  
  
  class LabelPIL(LabelBase):
      _cache = {}
  
      def _select_font(self):
          fontsize = int(self.options['font_size'])
          fontname = self.options['font_name_r']
          try:
              id = '%s.%s' % (text_type(fontname), text_type(fontsize))
          except UnicodeDecodeError:
              id = '%s.%s' % (fontname, fontsize)
  
          if id not in self._cache:
              font = ImageFont.truetype(fontname, fontsize)
              self._cache[id] = font
  
          return self._cache[id]
  
      def get_extents(self, text):
          font = self._select_font()
          w, h = font.getsize(text)
          return w, h
  
      def get_cached_extents(self):
          return self._select_font().getsize
  
      def _render_begin(self):
          # create a surface, context, font...
          self._pil_im = Image.new('RGBA', self._size)
          self._pil_draw = ImageDraw.Draw(self._pil_im)
  
      def _render_text(self, text, x, y):
          color = tuple([int(c * 255) for c in self.options['color']])
          self._pil_draw.text((int(x), int(y)),
                              text, font=self._select_font(), fill=color)
  
      def _render_end(self):
          data = ImageData(self._size[0], self._size[1],
                           self._pil_im.mode.lower(), self._pil_im.tobytes())
  
          del self._pil_im
          del self._pil_draw
  
          return data
  
new_contents: '''
  Text PIL: Draw text with PIL
  '''
  
  __all__ = ('LabelPIL', )
  
  from PIL import Image, ImageFont, ImageDraw
  
  
  from kivy.compat import text_type
  from kivy.core.text import LabelBase
  from kivy.core.image import ImageData
  
  # used for fetching extends before creature image surface
  default_font = ImageFont.load_default()
  
  
  class LabelPIL(LabelBase):
      _cache = {}
  
      def _select_font(self):
          fontsize = int(self.options['font_size'])
          fontname = self.options['font_name_r']
          try:
              id = '%s.%s' % (text_type(fontname), text_type(fontsize))
          except UnicodeDecodeError:
              id = '%s.%s' % (fontname, fontsize)
  
          if id not in self._cache:
              font = ImageFont.truetype(fontname, fontsize)
              self._cache[id] = font
  
          return self._cache[id]
  
      def get_extents(self, text):
          font = self._select_font()
          w, h = font.getsize(text)
          return w, h
  
      def get_cached_extents(self):
          return self._select_font().getsize
  
      def _render_begin(self):
          # create a surface, context, font...
          self._pil_im = Image.new('RGBA', self._size, color=(255, 255, 255, 0))
          self._pil_draw = ImageDraw.Draw(self._pil_im)
  
      def _render_text(self, text, x, y):
          color = tuple([int(c * 255) for c in self.options['color']])
          self._pil_draw.text((int(x), int(y)),
                              text, font=self._select_font(), fill=color)
  
      def _render_end(self):
          data = ImageData(self._size[0], self._size[1],
                           self._pil_im.mode.lower(), self._pil_im.tobytes())
  
          del self._pil_im
          del self._pil_draw
  
          return data
  
subject: Fix PIL label rendering shadow