def state_wait_exit(win): win_rect = win.get_rect() text = "Get Ready!" # Get best font size according to window size font = fonts.get_pygame_font(text, fonts.CURRENT, win_rect.width//1.5, win_rect.height//1.5) # Build a surface to display at screen text_surface = font.render(text, True, win.text_color) # Clear screen if isinstance(win.bg_color, (tuple, list)): win.surface.fill(win.bg_color) else: bg_surface = pictures.get_pygame_image(win.bg_color, win_rect.size, crop=True, color=None) win.surface.blit(bg_surface, (0, 0)) # Draw the surface at screen win.surface.blit(text_surface, text_surface.get_rect(center=win_rect.center).topleft) # Force screen update and events process pygame.display.update() pygame.event.pump() # Wait 1s time.sleep(1)
def get_pygame_layout_image(text_color, bg_color, layout_number, size): """Generate the layout image with the corresponding text. :param text_color: RGB color for texts :type text_color: tuple :param layout_number: number of captures on the layout :type layout_number: int :param size: maximum size of the layout surface :type size: tuple :return: surface :rtype: :py:class:`pygame.Surface` """ layout_image = get_pygame_image("layout{0}.png".format(layout_number), size, color=text_color, bg_color=bg_color) text = language.get_translated_text(str(layout_number)) if text: rect = layout_image.get_rect() rect = pygame.Rect(rect.x + rect.width * 0.3 / 2, rect.y + rect.height * 0.76, rect.width * 0.7, rect.height * 0.20) text_font = fonts.get_pygame_font(text, fonts.CURRENT, rect.width, rect.height) surface = text_font.render(text, True, bg_color) layout_image.blit(surface, surface.get_rect(center=rect.center)) return layout_image
def write_text(self, pos=None): """Update text surfaces """ self._texts = [] text = get_translated_text(self._name) if text: if not pos: pos = self._rect.center rect_x = 0.9 * min(2 * pos[0], 2 * (self._rect.width - pos[0])) rect_y = 0.9 * min(2 * pos[1], 2 * (self._rect.height - pos[1])) text_font = get_pygame_font(text, fonts.CURRENT, rect_x, rect_y) surface = text_font.render(text, True, self._text_color) self._texts.append((surface, surface.get_rect(center=pos)))
def multiline_text_to_surfaces(text, color, rect, align='center'): """Return a list of surfaces corresponding to each line of the text. The surfaces are next to each others in order to fit the given rect. The ``align`` parameter can be one of: * top-left * top-center * top-right * center-left * center * center-right * bottom-left * bottom-center * bottom-right """ surfaces = [] lines = text.splitlines() font = fonts.get_pygame_font(max(lines, key=len), fonts.CURRENT, rect.width, rect.height / len(lines)) for i, line in enumerate(lines): surface = font.render(line, True, color) if align.endswith('left'): x = rect.left elif align.endswith('center'): x = rect.centerx - surface.get_rect().width / 2 elif align.endswith('right'): x = rect.right - surface.get_rect().width / 2 else: raise ValueError("Invalid horizontal alignment '{}'".format(align)) height = surface.get_rect().height if align.startswith('top'): y = rect.top + i * height elif align.startswith('center'): y = rect.centery - len(lines) * height / 2 + i * height elif align.startswith('bottom'): y = rect.bottom - (len(lines) - i) * height else: raise ValueError("Invalid vertical alignment '{}'".format(align)) surfaces.append((surface, surface.get_rect(x=x, y=y))) return surfaces