예제 #1
0
 def __enter__(self):
     super().__enter__()
     img_call(IMG_Init, IMG_INIT_JPG | IMG_INIT_PNG | IMG_INIT_TIF)
     ttf_call(TTF_Init, _check_error=lambda rv: rv == -1)
     self.window = ctypes.POINTER(SDL_Window)()
     self.renderer = ctypes.POINTER(SDL_Renderer)()
     sdl_call(
         SDL_CreateWindowAndRenderer,
         self.resolution[0],  # Width
         self.resolution[1],  # Height
         0,  # Flags
         # SDL_WINDOW_ALLOW_HIGHDPI - Allow the renderer to work in HiDPI natively
         ctypes.byref(self.window),
         ctypes.byref(self.renderer),
         _check_error=lambda rv: rv < 0)
     # NOTE: It looks like SDL_RENDERER_PRESENTVSYNC will cause SDL_RenderPresent() to block?
     sdl_call(SDL_SetWindowTitle, self.window,
              self.window_title.encode('utf-8'))
예제 #2
0
    def background_parse(self, data):
        file = rw_from_object(io.BytesIO(data))
        # ^^^^ is a pure-python emulation, does not need cleanup.
        surface = img_call(IMG_Load_RW,
                           file,
                           False,
                           _check_error=lambda rv: not rv)

        sdl_call(SDL_SetSurfaceBlendMode,
                 surface,
                 SDL_BLENDMODE_BLEND,
                 _check_error=lambda rv: rv < 0)

        return surface
예제 #3
0
 def __exit__(self, *exc):
     sdl_call(SDL_DestroyRenderer, self.renderer)
     sdl_call(SDL_DestroyWindow, self.window)
     ttf_call(TTF_Quit)
     img_call(IMG_Quit)
     super().__exit__(*exc)