def init(self, hide_window): self._ticks = sdl2.SDL_GetTicks() # Should be less... https://wiki.libsdl.org/SDL_Init sdl2.SDL_Init(sdl2.SDL_INIT_EVERYTHING) self._window = sdl2.SDL_CreateWindow(b"PyBoy", sdl2.SDL_WINDOWPOS_CENTERED, sdl2.SDL_WINDOWPOS_CENTERED, self._scaledresolution[0], self._scaledresolution[1], sdl2.SDL_WINDOW_RESIZABLE) self._sdlrenderer = sdl2.SDL_CreateRenderer( self._window, -1, sdl2.SDL_RENDERER_ACCELERATED) self._sdltexturebuffer = sdl2.SDL_CreateTexture( self._sdlrenderer, sdl2.SDL_PIXELFORMAT_RGBA32, sdl2.SDL_TEXTUREACCESS_STATIC, COLS, ROWS) self.blank_screen() if hide_window: sdl2.SDL_HideWindow(self._window) else: sdl2.SDL_ShowWindow(self._window)
def __init__(self, lcd, w, h, scale, title, pos=(sdl2.SDL_WINDOWPOS_CENTERED, sdl2.SDL_WINDOWPOS_CENTERED)): self.lcd = lcd self.width = w self.height = h self.mouse_hover_x = -1 self.mouse_hover_y = -1 self.mouse_x = -1 self.mouse_y = -1 self.scale = scale self.window = sdl2.SDL_CreateWindow(title, pos[0], pos[1], w * scale, h * scale, sdl2.SDL_WINDOW_RESIZABLE) self.buf, self.buf0, self.buf_p = make_buffer(w, h) self.sdlrenderer = sdl2.SDL_CreateRenderer( self.window, -1, sdl2.SDL_RENDERER_ACCELERATED) self.sdl_texture_buffer = sdl2.SDL_CreateTexture( self.sdlrenderer, sdl2.SDL_PIXELFORMAT_RGBA32, sdl2.SDL_TEXTUREACCESS_STATIC, w, h) sdl2.SDL_ShowWindow(self.window)
def prepare(): App.running = True App.num_displays = sdl2.SDL_GetNumVideoDisplays() logger.info(f"Number of displays: {App.num_displays}") for display in range(0, App.num_displays): rect = sdl2.SDL_Rect() sdl2.SDL_GetDisplayBounds(display, rect) border_width = rect.w * App.BORDER_WIDTH_PERCENT / 100 border_height = rect.h * App.BORDER_WIDTH_PERCENT / 100 window = sdl2.SDL_CreateWindow( f"{display}".encode("ascii"), 0, 0, int(rect.w - 2 * border_width), int(rect.h - 2 * border_height), int(sdl2.SDL_WINDOW_BORDERLESS), ) window_id = sdl2.SDL_GetWindowID(window) renderer = sdl2.SDL_CreateRenderer(window, -1, 0) sdl2.SDL_SetRenderDrawColor(renderer, 30, 30, 30, 255) sdl2.SDL_ShowWindow(window) sdl2.SDL_SetWindowPosition(window, int(rect.x + border_width), int(rect.y + border_height)) scale_factor = (100 - 2 * App.BORDER_WIDTH_PERCENT) / 100 internal_rect = sdl2.SDL_Rect( int(rect.x * scale_factor), int(rect.y * scale_factor), int(rect.w * scale_factor), int(rect.h * scale_factor), ) App.windows.append({ "rect": rect, "internal_rect": internal_rect, "window_id": window_id, "window": window, "renderer": renderer, }) Events.add_listener(*App.handle_window_leave) Events.add_listener(*App.handle_window_close) Events.add_listener(*App.handle_q)
def _async_init(self): # Create an SDL2 window sdl2.ext.init() if sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO) != 0: raise RuntimeError(sdl2.SDL_GetError()) self._window = sdl2.SDL_CreateWindow( self._window_title.encode(), sdl2.SDL_WINDOWPOS_UNDEFINED, sdl2.SDL_WINDOWPOS_UNDEFINED, self.width, self.height, sdl2.SDL_WINDOW_OPENGL | sdl2.SDL_WINDOW_RESIZABLE | sdl2.SDL_WINDOW_UTILITY, ) # Create an OpenGL context sdl2.video.SDL_GL_SetAttribute(sdl2.video.SDL_GL_CONTEXT_MAJOR_VERSION, self.OPENGL_VERSION[0]) sdl2.video.SDL_GL_SetAttribute(sdl2.video.SDL_GL_CONTEXT_MINOR_VERSION, self.OPENGL_VERSION[1]) sdl2.video.SDL_GL_SetAttribute( sdl2.video.SDL_GL_CONTEXT_PROFILE_MASK, sdl2.video.SDL_GL_CONTEXT_PROFILE_CORE, ) self._glcontext = sdl2.SDL_GL_CreateContext(self._window) sdl2.SDL_GL_MakeCurrent(self._window, self._glcontext) # Activate vertical synchronization sdl2.SDL_GL_SetSwapInterval(1) # Set the GLX context GLX.glXMakeCurrent(self.x11display, self.x11window, self.glx_context) # Call subclass custom initialization self.init(**self._init_kwds) # Start rendering sdl2.SDL_ShowWindow(self._window) self._timer = self._loop.create_timer(self._on_update) self._loop.set_timer(self._timer, 1, int(1000.0 / 60.0))
def __init__(self, pyboy, mb, pyboy_argv): super().__init__(pyboy, mb, pyboy_argv) if not self.enabled(): return sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO) self._ftime = 0.0 self._window = sdl2.SDL_CreateWindow( b"PyBoy", sdl2.SDL_WINDOWPOS_CENTERED, sdl2.SDL_WINDOWPOS_CENTERED, self._scaledresolution[0], self._scaledresolution[1], sdl2.SDL_WINDOW_RESIZABLE ) self._sdlrenderer = sdl2.SDL_CreateRenderer(self._window, -1, sdl2.SDL_RENDERER_ACCELERATED) self._sdltexturebuffer = sdl2.SDL_CreateTexture( self._sdlrenderer, sdl2.SDL_PIXELFORMAT_RGBA8888, sdl2.SDL_TEXTUREACCESS_STATIC, COLS, ROWS ) sdl2.SDL_ShowWindow(self._window)
def show(self): sdl2.SDL_ShowWindow(self._native_window) self.dispatch_event('on_show')
} if hsbk is None: if len(lights): light = list(lights.values())[0] hsbk = udp.get_color(light.mac, light.addr) else: hsbk = numpy.array([0., 0., 1., 3500], numpy.double) assert sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO) == 0 window = sdl2.SDL_CreateWindow(b'Color', sdl2.SDL_WINDOWPOS_UNDEFINED, sdl2.SDL_WINDOWPOS_UNDEFINED, 272 * ZOOM, 480 * ZOOM, sdl2.SDL_WINDOW_HIDDEN) assert window sdl2.SDL_ShowWindow(window) renderer = sdl2.SDL_CreateRenderer(window, -1, sdl2.SDL_RENDERER_ACCELERATED) assert renderer # takes image as a numpy array of float, shape is (y_size, x_size, N_RGBA) # returns surface, data; user must keep data alive for lifetime of surface def image_to_surface(image): y_size, x_size, channels = image.shape assert channels == N_RGBA data = numpy.round(image * 255.).astype(numpy.uint8).tobytes() surface = sdl2.SDL_CreateRGBSurfaceFrom( data, x_size, # width