def help(self): """Show a help window and wait for a key or a mouse press.""" margin_x = margin_y = 64 padding_x = padding_y = 8 fgcolor = self.HELP_FGCOLOR bgcolor = self.HELP_BGCOLOR helpmsg = self.HELP_MSG width = self.width - 2 * margin_x height = self.height - 2 * margin_y lines = rendertext(helpmsg, self.font, fgcolor, width - 2 * padding_x, height - 2 * padding_y) block = pygame.Surface((width, height), SWSURFACE | SRCALPHA) block.fill(bgcolor) sx = padding_x sy = padding_y for img in lines: w, h = img.get_size() block.blit(img, (sx, sy)) sy += h block.set_alpha(int(255 * self.HELP_ALPHA)) self.screen.blit(block, (margin_x, margin_y)) pygame.display.flip() while True: wait_for_events() e = EventQueue.pop(0) if e.type in (MOUSEBUTTONDOWN, KEYDOWN, QUIT): break if e.type == QUIT: EventQueue.insert(0, e) # re-insert a QUIT self.must_redraw = True
def help(self): """Show a help window and wait for a key or a mouse press.""" margin_x = margin_y = 64 padding_x = padding_y = 8 fgcolor = self.HELP_FGCOLOR bgcolor = self.HELP_BGCOLOR helpmsg = self.HELP_MSG width = self.width - 2*margin_x height = self.height - 2*margin_y lines = rendertext(helpmsg, self.font, fgcolor, width - 2*padding_x, height - 2*padding_y) block = pygame.Surface((width, height), SWSURFACE | SRCALPHA) block.fill(bgcolor) sx = padding_x sy = padding_y for img in lines: w, h = img.get_size() block.blit(img, (sx, sy)) sy += h block.set_alpha(int(255 * self.HELP_ALPHA)) self.screen.blit(block, (margin_x, margin_y)) pygame.display.flip() while True: wait_for_events() e = EventQueue.pop(0) if e.type in (MOUSEBUTTONDOWN, KEYDOWN, QUIT): break if e.type == QUIT: EventQueue.insert(0, e) # re-insert a QUIT self.must_redraw = True
def input(self, prompt): """Ask the user to input something. Returns the string that the user entered, or None if the user pressed Esc. """ def draw(text): margin_x = margin_y = 0 padding_x = padding_y = 8 fgcolor = self.INPUT_FGCOLOR bgcolor = self.INPUT_BGCOLOR width = self.width - 2*margin_x lines = renderline(text, self.font, fgcolor, width - 2*padding_x) height = totalheight(lines) + 2 * padding_y block = pygame.Surface((width, height), SWSURFACE | SRCALPHA) block.fill(bgcolor) sx = padding_x sy = padding_y for img in lines: w, h = img.get_size() block.blit(img, (sx, sy)) sy += h block.set_alpha(int(255 * self.INPUT_ALPHA)) # This can be slow. It would be better to take a screenshot # and use it as the background. self.viewer.render() if self.statusbarinfo: self.drawstatusbar() self.screen.blit(block, (margin_x, margin_y)) pygame.display.flip() draw(prompt) text = "" self.must_redraw = True while True: wait_for_events() old_text = text events = EventQueue[:] del EventQueue[:] for e in events: if e.type == QUIT: EventQueue.insert(0, e) # re-insert a QUIT return None elif e.type == KEYDOWN: if e.key == K_ESCAPE: return None elif e.key == K_RETURN: return text.encode('latin-1') # XXX do better elif e.key == K_BACKSPACE: text = text[:-1] elif e.unicode and ord(e.unicode) >= ord(' '): text += e.unicode if text != old_text: draw(prompt + text)
def input(self, prompt): """Ask the user to input something. Returns the string that the user entered, or None if the user pressed Esc. """ def draw(text): margin_x = margin_y = 0 padding_x = padding_y = 8 fgcolor = self.INPUT_FGCOLOR bgcolor = self.INPUT_BGCOLOR width = self.width - 2 * margin_x lines = renderline(text, self.font, fgcolor, width - 2 * padding_x) height = totalheight(lines) + 2 * padding_y block = pygame.Surface((width, height), SWSURFACE | SRCALPHA) block.fill(bgcolor) sx = padding_x sy = padding_y for img in lines: w, h = img.get_size() block.blit(img, (sx, sy)) sy += h block.set_alpha(int(255 * self.INPUT_ALPHA)) # This can be slow. It would be better to take a screenshot # and use it as the background. self.viewer.render() if self.statusbarinfo: self.drawstatusbar() self.screen.blit(block, (margin_x, margin_y)) pygame.display.flip() draw(prompt) text = "" self.must_redraw = True while True: wait_for_events() old_text = text events = EventQueue[:] del EventQueue[:] for e in events: if e.type == QUIT: EventQueue.insert(0, e) # re-insert a QUIT return None elif e.type == KEYDOWN: if e.key == K_ESCAPE: return None elif e.key == K_RETURN: return forcestr(text) # return encoded unicode elif e.key == K_BACKSPACE: text = text[:-1] elif e.unicode and ord(e.unicode) >= ord(' '): text += e.unicode if text != old_text: draw(prompt + text)