Ajout du GUI
This commit is contained in:
117
kivy/core/text/text_pygame.py
Normal file
117
kivy/core/text/text_pygame.py
Normal file
@@ -0,0 +1,117 @@
|
||||
'''
|
||||
Text Pygame: Draw text with pygame
|
||||
|
||||
.. warning::
|
||||
|
||||
Pygame has been deprecated and will be removed in the release after Kivy
|
||||
1.11.0.
|
||||
'''
|
||||
|
||||
__all__ = ('LabelPygame', )
|
||||
|
||||
from kivy.compat import PY2
|
||||
from kivy.core.text import LabelBase
|
||||
from kivy.core.image import ImageData
|
||||
from kivy.utils import deprecated
|
||||
|
||||
try:
|
||||
import pygame
|
||||
except:
|
||||
raise
|
||||
|
||||
pygame_cache = {}
|
||||
pygame_font_handles = {}
|
||||
pygame_cache_order = []
|
||||
|
||||
# init pygame font
|
||||
try:
|
||||
pygame.ftfont.init()
|
||||
except:
|
||||
pygame.font.init()
|
||||
|
||||
|
||||
class LabelPygame(LabelBase):
|
||||
|
||||
@deprecated(
|
||||
msg='Pygame has been deprecated and will be removed after 1.11.0')
|
||||
def __init__(self, *largs, **kwargs):
|
||||
super(LabelPygame, self).__init__(*largs, **kwargs)
|
||||
|
||||
def _get_font_id(self):
|
||||
return '|'.join([str(self.options[x]) for x in
|
||||
('font_size', 'font_name_r', 'bold', 'italic')])
|
||||
|
||||
def _get_font(self):
|
||||
fontid = self._get_font_id()
|
||||
if fontid not in pygame_cache:
|
||||
# try first the file if it's a filename
|
||||
font_handle = fontobject = None
|
||||
fontname = self.options['font_name_r']
|
||||
ext = fontname.rsplit('.', 1)
|
||||
if len(ext) == 2:
|
||||
# try to open the font if it has an extension
|
||||
font_handle = open(fontname, 'rb')
|
||||
fontobject = pygame.font.Font(font_handle,
|
||||
int(self.options['font_size']))
|
||||
|
||||
# fallback to search a system font
|
||||
if fontobject is None:
|
||||
# try to search the font
|
||||
font = pygame.font.match_font(
|
||||
self.options['font_name_r'].replace(' ', ''),
|
||||
bold=self.options['bold'],
|
||||
italic=self.options['italic'])
|
||||
|
||||
# fontobject
|
||||
fontobject = pygame.font.Font(font,
|
||||
int(self.options['font_size']))
|
||||
pygame_cache[fontid] = fontobject
|
||||
pygame_font_handles[fontid] = font_handle
|
||||
pygame_cache_order.append(fontid)
|
||||
|
||||
# to prevent too much file open, limit the number of opened fonts to 64
|
||||
while len(pygame_cache_order) > 64:
|
||||
popid = pygame_cache_order.pop(0)
|
||||
del pygame_cache[popid]
|
||||
font_handle = pygame_font_handles.pop(popid)
|
||||
if font_handle is not None:
|
||||
font_handle.close()
|
||||
|
||||
return pygame_cache[fontid]
|
||||
|
||||
def get_ascent(self):
|
||||
return self._get_font().get_ascent()
|
||||
|
||||
def get_descent(self):
|
||||
return self._get_font().get_descent()
|
||||
|
||||
def get_extents(self, text):
|
||||
return self._get_font().size(text)
|
||||
|
||||
def get_cached_extents(self):
|
||||
return self._get_font().size
|
||||
|
||||
def _render_begin(self):
|
||||
self._pygame_surface = pygame.Surface(self._size, pygame.SRCALPHA, 32)
|
||||
self._pygame_surface.fill((0, 0, 0, 0))
|
||||
|
||||
def _render_text(self, text, x, y):
|
||||
font = self._get_font()
|
||||
color = [c * 255 for c in self.options['color']]
|
||||
color[0], color[2] = color[2], color[0]
|
||||
try:
|
||||
text = font.render(text, True, color)
|
||||
text.set_colorkey(color)
|
||||
self._pygame_surface.blit(text, (x, y), None,
|
||||
pygame.BLEND_RGBA_ADD)
|
||||
except pygame.error:
|
||||
pass
|
||||
|
||||
def _render_end(self):
|
||||
w, h = self._size
|
||||
data = ImageData(w, h,
|
||||
'rgba', self._pygame_surface.get_buffer().raw)
|
||||
|
||||
del self._pygame_surface
|
||||
|
||||
return data
|
||||
Reference in New Issue
Block a user