from os import environ from pygame import display, image, mouse from pygame.locals import * from GameChild import * class Display(GameChild): def __init__(self, game): GameChild.__init__(self, game) self.delegate = self.get_delegate() self.load_configuration() self.align_window() self.init_screen() self.set_caption() self.set_icon() self.set_mouse_visibility() self.subscribe(self.toggle_fullscreen) def load_configuration(self): config = self.get_configuration("display") self.centered = config["centered"] self.fullscreen_enabled = config["fullscreen"] self.caption = config["caption"] self.windowed_flag = config["windowed-flag"] self.icon_path = self.get_resource("display", "icon-path") self.mouse_visibility = self.get_configuration("mouse", "visible") def align_window(self): if self.centered: environ["SDL_VIDEO_CENTERED"] = "1" def init_screen(self): flags = 0 if self.fullscreen_requested(): flags = FULLSCREEN self.set_screen(flags) def fullscreen_requested(self): return not self.check_command_line(self.windowed_flag) and \ self.fullscreen_enabled def set_screen(self, flags=0, dimensions=None): self.dimensions_changed = dimensions is not None if dimensions is None: if display.get_surface(): dimensions = display.get_surface().get_size() else: dimensions = self.get_configuration("display", "dimensions") self.screen = display.set_mode(dimensions, flags) if self.dimensions_changed: interpolator = self.get_game().interpolator if interpolator.gui_enabled: interpolator.gui.rearrange() def set_caption(self): display.set_caption(self.caption) def set_icon(self): if self.icon_path: print self.icon_path display.set_icon(image.load(self.icon_path).convert_alpha()) def set_mouse_visibility(self, visibility=None): if visibility is None: visibility = self.mouse_visibility return mouse.set_visible(visibility) def get_screen(self): return self.screen def get_size(self): return self.screen.get_size() def toggle_fullscreen(self, event): if self.delegate.compare(event, "toggle-fullscreen"): screen = self.screen cpy = screen.convert() self.set_screen(self.screen.get_flags() ^ FULLSCREEN) screen.blit(cpy, (0, 0))