def node_window_fit(node, window): minw, minh, maxw, maxh = node.layout_hints() def maxproc(x): if x == float('inf'): return 10000 return floor(x) glfw.set_window_size_limits(window, ceil(minw), ceil(minh), maxproc(maxw), maxproc(maxh)) w, h = glfw.get_framebuffer_size(window) dimx = max(min(w, maxw), minw) dimy = max(min(h, maxh), minh) node.set_layout(0, 0, dimx, dimy)
def on_resize(window, w, h): nonlocal window_size nonlocal content_scale is_minimized = bool(glfw.get_window_attrib(window, glfw.ICONIFIED)) if is_minimized: return # Always clear buffers on resize to make sure that there are no overlapping # artifacts from previous frames. gl_utils.glClear(GL_COLOR_BUFFER_BIT) gl_utils.glClearColor(0, 0, 0, 1) active_window = glfw.get_current_context() glfw.make_context_current(window) content_scale = gl_utils.get_content_scale(window) framebuffer_scale = gl_utils.get_framebuffer_scale(window) g_pool.gui.scale = content_scale window_size = w, h g_pool.camera_render_size = w - int( icon_bar_width * g_pool.gui.scale), h g_pool.gui.update_window(w, h) g_pool.gui.collect_menus() for g in g_pool.graphs: g.scale = content_scale g.adjust_window_size(w, h) adjust_gl_view(w, h) glfw.make_context_current(active_window) # Minimum window size required, otherwise parts of the UI can cause openGL # issues with permanent effects. Depends on the content scale, which can # potentially be dynamically modified, so we re-adjust the size limits every # time here. min_size = int(2 * icon_bar_width * g_pool.gui.scale / framebuffer_scale) glfw.set_window_size_limits( window, min_size, min_size, glfw.DONT_CARE, glfw.DONT_CARE, ) # Needed, to update the window buffer while resizing consume_events_and_render_buffer()
def impl_glfw_init(config): width = config.getint(CONFIG_WIDTH, fallback=800) height = config.getint(CONFIG_HEIGHT, fallback=600) window_name = "Starbound Map" logging.info("GLFW ver: %s", glfw.get_version_string()) if not glfw.init(): logging.fatal("Could not initialize OpenGL context") exit(1) # OS X supports only forward-compatible core profiles from 3.2 glfw.window_hint(glfw.CONTEXT_VERSION_MAJOR, 4) glfw.window_hint(glfw.CONTEXT_VERSION_MINOR, 3) glfw.window_hint(glfw.OPENGL_PROFILE, glfw.OPENGL_CORE_PROFILE) glfw.window_hint(glfw.OPENGL_FORWARD_COMPAT, gl.GL_TRUE) # Create a windowed mode window and its OpenGL context window = glfw.create_window(int(width), int(height), window_name, None, None) glfw.make_context_current(window) glfw.set_window_iconify_callback( window, lambda _, minimized: G.on_minimization_event(minimized)) if not window: glfw.terminate() logging.fatal("Could not initialize Window") exit(1) logging.info("OpenGL ver: %s", gl.glGetString(gl.GL_VERSION)) logging.info("GLSL ver: %s", gl.glGetString(gl.GL_SHADING_LANGUAGE_VERSION)) glfw.set_window_size_limits(window, minwidth=64, minheight=64, maxwidth=glfw.DONT_CARE, maxheight=glfw.DONT_CARE) return window
def on_resize(window, w, h): nonlocal window_size nonlocal camera_render_size nonlocal content_scale if w == 0 or h == 0: return # Always clear buffers on resize to make sure that there are no overlapping # artifacts from previous frames. gl_utils.glClear(GL_COLOR_BUFFER_BIT) gl_utils.glClearColor(0, 0, 0, 1) content_scale = gl_utils.get_content_scale(window) framebuffer_scale = gl_utils.get_framebuffer_scale(window) g_pool.gui.scale = content_scale window_size = w, h camera_render_size = w - int(icon_bar_width * g_pool.gui.scale), h g_pool.gui.update_window(*window_size) g_pool.gui.collect_menus() for p in g_pool.plugins: p.on_window_resize(window, *camera_render_size) # Minimum window size required, otherwise parts of the UI can cause openGL # issues with permanent effects. Depends on the content scale, which can # potentially be dynamically modified, so we re-adjust the size limits every # time here. min_size = int(2 * icon_bar_width * g_pool.gui.scale / framebuffer_scale) glfw.set_window_size_limits( window, min_size, min_size, glfw.DONT_CARE, glfw.DONT_CARE, ) # Needed, to update the window buffer while resizing with gl_utils.current_context(main_window): consume_events_and_render_buffer()
def __init__( self, module, width, height, caption, scale, palette, fps, border_width, border_color, ): if glfw.get_version() < tuple(map(int, GLFW_VERSION.split("."))): raise RuntimeError( "glfw version is lower than {}".format(GLFW_VERSION)) if width > APP_SCREEN_MAX_SIZE or height > APP_SCREEN_MAX_SIZE: raise ValueError("screen size is larger than {}x{}".format( APP_SCREEN_MAX_SIZE, APP_SCREEN_MAX_SIZE)) self._module = module self._palette = palette[:] self._pil_palette = self._get_pil_palette(palette) self._fps = fps self._border_width = border_width self._border_color = border_color self._next_update_time = 0 self._one_frame_time = 1 / fps self._key_state = {} self._update = None self._draw = None self._capture_start = 0 self._capture_index = 0 self._capture_images = [None] * APP_GIF_CAPTURE_COUNT self._perf_monitor_is_enabled = False self._perf_fps_count = 0 self._perf_fps_start_time = 0 self._perf_fps = 0 self._perf_update_count = 0 self._perf_update_total_time = 0 self._perf_update_time = 0 self._perf_draw_count = 0 self._perf_draw_total_time = 0 self._perf_draw_time = 0 module.width = width module.height = height module.mouse_x = 0 module.mouse_y = 0 module.frame_count = 0 # initialize window if not glfw.init(): exit() monitor = glfw.get_primary_monitor() display_width, display_height = glfw.get_video_mode(monitor)[0] if scale == 0: scale = max( min( (display_width // width) - APP_SCREEN_SCALE_CUTDOWN, (display_height // height) - APP_SCREEN_SCALE_CUTDOWN, ), APP_SCREEN_SCALE_MINIMUM, ) window_width = width * scale + border_width window_height = height * scale + border_width self._window = glfw.create_window(window_width, window_height, caption, None, None) if not self._window: glfw.terminate() exit() glfw.set_window_pos( self._window, (display_width - window_width) // 2, (display_height - window_height) // 2, ) glfw.make_context_current(self._window) glfw.set_window_size_limits(self._window, width, height, glfw.DONT_CARE, glfw.DONT_CARE) self._hidpi_scale = (glfw.get_framebuffer_size(self._window)[0] / glfw.get_window_size(self._window)[0]) self._update_viewport() glfw.set_key_callback(self._window, self._key_callback) glfw.set_cursor_pos_callback(self._window, self._cursor_pos_callback) glfw.set_mouse_button_callback(self._window, self._mouse_button_callback) glfw.set_window_icon(self._window, 1, [self._get_icon_image()]) # initialize renderer self._renderer = Renderer(width, height) # initialize audio player self._audio_player = AudioPlayer() # export module functions module.btn = self.btn module.btnp = self.btnp module.btnr = self.btnr module.run = self.run module.run_with_profiler = self.run_with_profiler module.quit = self.quit module.save = self.save module.load = self.load module.image = self._renderer.image module.tilemap = self._renderer.tilemap module.clip = self._renderer.draw_command.clip module.pal = self._renderer.draw_command.pal module.cls = self._renderer.draw_command.cls module.pix = self._renderer.draw_command.pix module.line = self._renderer.draw_command.line module.rect = self._renderer.draw_command.rect module.rectb = self._renderer.draw_command.rectb module.circ = self._renderer.draw_command.circ module.circb = self._renderer.draw_command.circb module.blt = self._renderer.draw_command.blt module.bltm = self._renderer.draw_command.bltm module.text = self._renderer.draw_command.text module.sound = self._audio_player.sound module.play = self._audio_player.play # module.playm = self._audio_player.playm module.stop = self._audio_player.stop
def __init__(self, module, width, height, caption, scale, palette, fps, border_width, border_color): self._module = module self._palette = palette[:] self._pil_palette = self._get_pil_palette(palette) self._fps = fps self._border_width = border_width self._border_color = border_color self._next_update_time = 0 self._one_frame_time = 1 / fps self._key_state = {} self._update = None self._draw = None self._capture_start = 0 self._capture_index = 0 self._capture_images = [None] * APP_SCREEN_CAPTURE_COUNT self._perf_monitor_is_enabled = False self._perf_fps_count = 0 self._perf_fps_start_time = 0 self._perf_fps = 0 self._perf_update_count = 0 self._perf_update_total_time = 0 self._perf_update_time = 0 self._perf_draw_count = 0 self._perf_draw_total_time = 0 self._perf_draw_time = 0 module.width = width module.height = height module.mouse_x = 0 module.mouse_y = 0 module.frame_count = 0 # initialize window if not glfw.init(): exit() window_width = width * scale + border_width window_height = height * scale + border_width self._window = glfw.create_window(window_width, window_height, caption, None, None) if not self._window: glfw.terminate() exit() glfw.make_context_current(self._window) glfw.set_window_size_limits(self._window, width, height, glfw.DONT_CARE, glfw.DONT_CARE) self._hidpi_scale = (glfw.get_framebuffer_size(self._window)[0] / glfw.get_window_size(self._window)[0]) self._update_viewport() glfw.set_key_callback(self._window, self._key_callback) glfw.set_cursor_pos_callback(self._window, self._cursor_pos_callback) glfw.set_mouse_button_callback(self._window, self._mouse_button_callback) glfw.set_window_icon(self._window, 1, [self._get_icon_image()]) # initialize renderer self._renderer = Renderer(width, height) # initialize audio player self._audio_player = AudioPlayer() # export module functions module.btn = self.btn module.btnp = self.btnp module.btnr = self.btnr module.run = self.run module.quit = self.quit module.image = self._renderer.image module.clip = self._renderer.draw_command.clip module.pal = self._renderer.draw_command.pal module.cls = self._renderer.draw_command.cls module.pix = self._renderer.draw_command.pix module.line = self._renderer.draw_command.line module.rect = self._renderer.draw_command.rect module.rectb = self._renderer.draw_command.rectb module.circ = self._renderer.draw_command.circ module.circb = self._renderer.draw_command.circb module.blt = self._renderer.draw_command.blt module.text = self._renderer.draw_command.text module.sound = self._audio_player.sound module.play = self._audio_player.play module.stop = self._audio_player.stop
def __init__( self, module, width, height, caption, scale, palette, fps, border_width, border_color, ): if glfw.get_version() < tuple(map(int, GLFW_VERSION.split("."))): raise RuntimeError( "glfw version is lower than {}".format(GLFW_VERSION)) if width > APP_SCREEN_MAX_SIZE or height > APP_SCREEN_MAX_SIZE: raise ValueError("screen size is larger than {}x{}".format( APP_SCREEN_MAX_SIZE, APP_SCREEN_MAX_SIZE)) global pyxel pyxel = module self._palette = palette[:] self._fps = fps self._border_width = border_width self._border_color = border_color self._next_update_time = 0 self._one_frame_time = 1 / fps self._key_state = {} self._is_mouse_visible = False self._update = None self._draw = None self._capture_start = 0 self._capture_count = 0 self._capture_images = [None] * APP_GIF_CAPTURE_COUNT self._perf_monitor_is_enabled = False self._perf_fps_count = 0 self._perf_fps_start_time = 0 self._perf_fps = 0 self._perf_update_count = 0 self._perf_update_total_time = 0 self._perf_update_time = 0 self._perf_draw_count = 0 self._perf_draw_total_time = 0 self._perf_draw_time = 0 # exports variables pyxel._app = self pyxel.width = width pyxel.height = height pyxel.mouse_x = 0 pyxel.mouse_y = 0 pyxel.frame_count = 0 # initialize window if not glfw.init(): exit() monitor = glfw.get_primary_monitor() display_width, display_height = glfw.get_video_mode(monitor)[0] if scale == 0: scale = max( min( (display_width // width) - APP_SCREEN_SCALE_CUTDOWN, (display_height // height) - APP_SCREEN_SCALE_CUTDOWN, ), APP_SCREEN_SCALE_MINIMUM, ) window_width = width * scale + border_width window_height = height * scale + border_width self._window = glfw.create_window(window_width, window_height, caption, None, None) if not self._window: glfw.terminate() exit() glfw.set_window_pos( self._window, (display_width - window_width) // 2, (display_height - window_height) // 2, ) glfw.make_context_current(self._window) glfw.set_window_size_limits(self._window, width, height, glfw.DONT_CARE, glfw.DONT_CARE) self._hidpi_scale = (glfw.get_framebuffer_size(self._window)[0] / glfw.get_window_size(self._window)[0]) self._update_viewport() glfw.set_key_callback(self._window, self._key_callback) glfw.set_mouse_button_callback(self._window, self._mouse_button_callback) glfw.set_window_icon(self._window, 1, [utilities.get_icon_image()]) glfw.set_input_mode(self._window, glfw.CURSOR, glfw.CURSOR_HIDDEN) # initialize renderer self._renderer = Renderer(width, height) # initialize audio player self._audio_player = AudioPlayer() # export module functions pyxel.btn = self.btn pyxel.btnp = self.btnp pyxel.btnr = self.btnr pyxel.mouse = self.mouse pyxel.run = self.run pyxel.run_with_profiler = self.run_with_profiler pyxel.quit = self.quit pyxel.save = self.save pyxel.load = self.load pyxel.image = self._renderer.image pyxel.tilemap = self._renderer.tilemap pyxel.clip = self._renderer.draw_command.clip pyxel.pal = self._renderer.draw_command.pal pyxel.cls = self._renderer.draw_command.cls pyxel.pix = self._renderer.draw_command.pix pyxel.line = self._renderer.draw_command.line pyxel.rect = self._renderer.draw_command.rect pyxel.rectb = self._renderer.draw_command.rectb pyxel.circ = self._renderer.draw_command.circ pyxel.circb = self._renderer.draw_command.circb pyxel.blt = self._renderer.draw_command.blt pyxel.bltm = self._renderer.draw_command.bltm pyxel.text = self._renderer.draw_command.text pyxel.sound = self._audio_player.sound pyxel.music = self._audio_player.music pyxel.play = self._audio_player.play pyxel.playm = self._audio_player.playm pyxel.stop = self._audio_player.stop # initialize mouse cursor pyxel.image(3, system=True).set(MOUSE_CURSOR_IMAGE_X, MOUSE_CURSOR_IMAGE_Y, MOUSE_CURSOR_DATA)
def __init__(self): if not glfw.init(): return glfw.window_hint(glfw.CONTEXT_VERSION_MAJOR, 3) glfw.window_hint(glfw.CONTEXT_VERSION_MINOR, 2) glfw.window_hint(glfw.OPENGL_PROFILE, glfw.OPENGL_CORE_PROFILE) glfw.window_hint(glfw.OPENGL_FORWARD_COMPAT, GL_TRUE) window = glfw.create_window(self.WIDTH, self.HEIGHT, self.TITLE, None, None) glfw.set_window_size_limits(window, 320, 480, glfw.DONT_CARE, glfw.DONT_CARE) if not window: glfw.terminate() return glfw.make_context_current(window) glfw.set_key_callback(window, self.key_callback) glfw.set_window_size_callback(window, self.reshape) width, height = glfw.get_framebuffer_size(window) glViewport(0, 0, width, height) aspect_ratio = width / height glClearColor(0.2, 0.3, 0.2, 1.0) glEnable(GL_DEPTH_TEST) self.ball = Ball(TEXTILE_TEXTURE) ball_shader = Shader(BASE_VS, BASE_FS) self.ball.prep(ball_shader, aspect_ratio, 0.5, 85) self.platform = Platform(BUCKET_TEXTURE) shader = Shader(BASE_VS, BASE_FS) self.platform.prep(shader, aspect_ratio, 1.0, 85) self.hearts = [] for i in range(0, self.MAX_FAIL): heart = LiveHeart([-3.0 + i * 0.5, 5.5, 0.0]) heart_shader = Shader(HEART_VS, HEART_FS) heart.prep(heart_shader, aspect_ratio, 0.3, 85) self.hearts.append(heart) self.bg = Background(WOOD_TEXTURE) bg_shader = Shader(BASE_VS, BASE_FS) self.bg.prep(bg_shader, aspect_ratio, 11.0, 85) while not glfw.window_should_close(window): glClearColor(0.0, 0.3, 0.3, 1.0) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glDisable(GL_DEPTH_TEST) self.bg.draw() glEnable(GL_DEPTH_TEST) self.platform.draw(self.game_status_play) self.ball.draw(self.game_status_play) if self.collision_detect(): if self.fails == self.MAX_FAIL: self.game_status_play = False for heart in self.hearts: heart.draw() glfw.swap_buffers(window) glfw.poll_events() glfw.terminate()
def main(): global window global mode print("$ ") print("$ Welcome to Cody Draw(TM)!") print("$ ") print( "$ Cody draw is very simple to use, here is a list of all the controls" ) print("$ - Press & Drag 'Left Mouse Button' to draw") print("$ - Press & Drag 'Right Mouse Button' to erase") print( "$ - Press 'tab' to toggle the UI (color picker, timeline, exc)") print("$ - Press 'c' to clear the canvas / frame") print("$ - Press 's' to save your work") print("$ - Press 'o' to open saved work") print("$ - Press 'e' to export your work into a PNG") print("$ - Press '1' to draw in the color white") print("$ - Press '2' to draw in the color red") print("$ - Press '3' to draw in the color green") print("$ - Press '4' to draw in the color blue") print("$ - Press '6' to draw in the color orange") print("$ ") print( "$ These next controls might get a little bit complicated, they will allow you to mix colors" ) print( "$ You can see your RGB color value in the title, its 3 numbers valued at 0 - 1 in order" ) print("$ - Press '7' to toggle the color blue") print("$ - Press '8' to toggle the color green") print("$ - Press '9' to toggle the color red") print("$ - Press 'b' to increase the red value by 0.05") print("$ - Press 'n' to increase the green value by 0.05") print("$ - Press 'm' to increase the blue value by 0.05") print("$ ") print("$ When animating these additional keybinds exist") print("$ - Press 'space' to play/pause") print( "$ - Press '>' to goto the next frame, or create another frame if one doesnt exist" ) print("$ - Press '<' to goto the previous frame") print( "$ - Press 'a' to toggle the onionskin (preview of the previous frame / next frame)" ) print("$ ") print( "$ There are a few example paintings bundled with your copy of Cody Draw(TM)" ) print("$ Access them using the 'o' keybind to open a Cody Draw(TM) file") print("$ - 'welcome'") print("$ - 'earth'") print("$ - 'intheair'") print("$ - 'chart'") print("$ - 'colors'") print("$ ") if not glfw.init(): return window = glfw.create_window(window_width, window_height, "Welcome to Cody Draw(TM)", None, None) glfw.set_window_size_limits(window, window_width, window_height, window_width, window_height) if not window: glfw.terminate() return glfw.set_key_callback(window, key_callback) glfw.set_cursor_pos_callback(window, cursor_position_callback) glfw.set_mouse_button_callback(window, mouse_button_callback) glfw.make_context_current(window) glMatrixMode(GL_PROJECTION) glLoadIdentity() glOrtho(0, window_width, window_height, 0, 0, 1) glMatrixMode(GL_MODELVIEW) glLoadIdentity() glClear(GL_COLOR_BUFFER_BIT) while not glfw.window_should_close(window): # Rendering glClear(GL_COLOR_BUFFER_BIT) if mode == 1: mainmenu.draw(window_width, window_height) elif mode == 2: draw.draw() elif mode == 3: draw.draw() # Other glfw.swap_buffers(window) glfw.poll_events() print("$ ") print("$ Cody Draw(TM) has been terminated!") print("$ Goodbye!") print("$ ") glfw.terminate()