class Application(object): def __init__(self): pass def loadConf(self): pass def init(self): pygame.init() size = 800, 600 pygame.display.set_mode( size, pygame.DOUBLEBUF | pygame.OPENGL | pygame.RESIZABLE) imgui.create_context() self.impl = PygameRenderer() self.io = imgui.get_io() self.io.display_size = size def run(self): while 1: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() self.impl.process_event(event) imgui.new_frame() # render game elements # render gui gl.glClearColor(1, 1, 1, 1) gl.glClear(gl.GL_COLOR_BUFFER_BIT) imgui.render() self.impl.render(imgui.get_draw_data()) pygame.display.flip()
def init(self): pygame.init() size = 800, 600 pygame.display.set_mode( size, pygame.DOUBLEBUF | pygame.OPENGL | pygame.RESIZABLE) imgui.create_context() self.impl = PygameRenderer() self.io = imgui.get_io() self.io.display_size = size
def run(gui_loop_function, params=Params()): if params.windowed_full_screen: os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % ( params.windowed_full_screen_x_margin / 2, params.window_title_height) pygame.init() pygame.display.set_caption(params.win_title) win_size = params.win_size if params.windowed_full_screen: info = pygame.display.Info() screen_size = (info.current_w - params.windowed_full_screen_x_margin, info.current_h) win_size = (screen_size[0], screen_size[1] - params.window_title_height - params.windows_taskbar_height) pygame.display.set_mode( win_size, pygame.DOUBLEBUF | pygame.OPENGL | pygame.RESIZABLE) imgui_ext._load_fonts() io = imgui.get_io() io.display_size = win_size renderer = PygameRenderer() while 1: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() renderer.process_event(event) imgui.new_frame() if params.provide_default_window: imgui.set_next_window_position(0, 0) imgui.set_next_window_size(win_size[0], win_size[1]) imgui.begin("Default window") gui_loop_function() if params.provide_default_window: imgui.end() ImGuiImageLister._heartbeat() # note: cannot use screen.fill((1, 1, 1)) because pygame's screen # does not support fill() on OpenGL surfaces gl.glClearColor(1, 1, 1, 1) gl.glClear(gl.GL_COLOR_BUFFER_BIT) imgui.render() pygame.display.flip() imgui_cv._clear_all_cv_textures() imgui_ext.__clear_all_unique_labels()
def main(): pygame.init() clock = pygame.time.Clock() size = 640, 480 pygame.display.set_mode(size, pygame.HWSURFACE | pygame.DOUBLEBUF | pygame.OPENGL) io = imgui.get_io() io.fonts.add_font_default() io.display_size = size renderer = PygameRenderer() while 1: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() renderer.process_event(event) imgui.new_frame() if imgui.begin_main_menu_bar(): if imgui.begin_menu("File", True): clicked_quit, selected_quit = imgui.menu_item( "Quit", 'Cmd+Q', False, True ) if clicked_quit: pygame.quit() exit(1) imgui.end_menu() imgui.end_main_menu_bar() imgui.show_test_window() imgui.begin("Custom window", True) imgui.text("Bar") imgui.text_colored("Eggs", 0.2, 1., 0.) imgui.end() # note: cannot use screen.fill((1, 1, 1)) because pygame's screen # does not support fill() on OpenGL sufraces gl.glClearColor(1, 1, 1, 1) gl.glClear(gl.GL_COLOR_BUFFER_BIT) imgui.render() pygame.display.flip() clock.tick(60)
def main(self): # Initialize pygame. pygame.init() size = (800, 600) # Initialize pygame in OpenGL mode. pygame.display.set_mode(size, pygame.DOUBLEBUF | pygame.OPENGL) # Get number of milliseconds since pygame.init() was called. self.timeAtStartOfLastFrame = pygame.time.get_ticks() # Setup some vars for FPS counter. self.lastFPS = 0 self.frameCount = 0 self.frameResetTime = self.timeAtStartOfLastFrame # Setup some imgui stuff. self.imGuiManager = PygameRenderer() io = imgui.get_io() io.fonts.add_font_default() io.display_size = size # Create an instance of our Game class. self.game = GameDissolve.GameDissolve() # Main game loop: keep looping until Game says it's time to quit. self.running = True while self.running: self.processEvents() self.update() self.draw() pygame.quit()
def main_pygame(): pygame.init() size = 800, 600 pygame.display.set_mode(size, pygame.DOUBLEBUF | pygame.OPENGL) io = imgui.get_io() io.fonts.add_font_default() io.display_size = size renderer = PygameRenderer() while 1: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() renderer.process_event(event) imgui.new_frame() on_frame() # note: cannot use screen.fill((1, 1, 1)) because pygame's screen # does not support fill() on OpenGL sufraces gl.glClearColor(1, 1, 1, 1) gl.glClear(gl.GL_COLOR_BUFFER_BIT) imgui.render() pygame.display.flip()
def main(): pygame.init() size = 800, 600 pygame.display.set_mode( size, pygame.DOUBLEBUF | pygame.OPENGL | pygame.RESIZABLE) imgui.create_context() impl = PygameRenderer() io = imgui.get_io() io.display_size = size while 1: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() impl.process_event(event) imgui.new_frame() gl.glClearColor(1, 1, 1, 1) gl.glClear(gl.GL_COLOR_BUFFER_BIT) imgui.render() impl.render(imgui.get_draw_data()) pygame.display.flip()
def main(): pygame.init() size = 1280, 960 pygame.display.set_mode( size, pygame.DOUBLEBUF | pygame.OPENGL | pygame.RESIZABLE) #imgui.create_context() imgui.create_context() impl = PygameRenderer() io = imgui.get_io() io.display_size = size while 1: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() impl.process_event(event) interface() # note: cannot use screen.fill((1, 1, 1)) because pygame's screen # does not support fill() on OpenGL sufraces gl.glClearColor(.1, .1, .1, 1) gl.glClear(gl.GL_COLOR_BUFFER_BIT) imgui.render() impl.render(imgui.get_draw_data()) pygame.display.flip()
def main(self): # Initialize pygame. pygame.init() size = (800, 600) # Initialize pygame in OpenGL mode. pygame.display.set_mode( size, pygame.DOUBLEBUF | pygame.OPENGL ) # Get number of milliseconds since pygame.init() was called. self.timeAtStartOfLastFrame = pygame.time.get_ticks() # Setup some vars for FPS counter. self.lastFPS = 0 self.frameCount = 0 self.frameResetTime = self.timeAtStartOfLastFrame # Setup some imgui stuff. imgui.create_context() self.imGuiManager = PygameRenderer() io = imgui.get_io() io.fonts.add_font_default() io.display_size = size # HACK: Unsetting some "out of range" keys set up by Pygame. Valid range for keycodes is -1 to 512. # This will likely break imgui keyboard support, but I didn't really test. io.key_map[1] = -1 io.key_map[2] = -1 io.key_map[3] = -1 io.key_map[4] = -1 io.key_map[5] = -1 io.key_map[6] = -1 io.key_map[7] = -1 io.key_map[8] = -1 #print( 'io.key_map:', [k for k in io.key_map] ) # Create an instance of our Game class. #self.game = GameSimple.GameSimple() self.game = GameSokoban.GameSokoban() #self.game = GameWaterTest.GameWaterTest() #self.game = GameDissolve.GameDissolve() # Main game loop: keep looping until Game says it's time to quit. self.running = True while self.running: self.processEvents() self.update() self.draw() pygame.quit()
def start(self): if not pygame.get_init(): pygame.init() pygame.display.set_caption("RapidApp Window") pygame.display.set_mode(self.window_size, self.window_flags) gl.glClearColor(1, 1, 1, 1) self.context = imgui.create_context() self.impl = PygameRenderer() self.io = imgui.get_io() self.io.display_size = self.window_size self.style = imgui.get_style() self.style.window_rounding = 0 self.on_window_created() if self.use_style_file: load_style_json_file() self.clock = pygame.time.Clock() self.main_loop()
def main(): pygame.init() size = 800, 600 pygame.display.set_mode(size, pygame.DOUBLEBUF | pygame.OPENGL | pygame.RESIZABLE) imgui.create_context() impl = PygameRenderer() io = imgui.get_io() io.display_size = size while 1: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() impl.process_event(event) imgui.new_frame() if imgui.begin_main_menu_bar(): if imgui.begin_menu("File", True): clicked_quit, selected_quit = imgui.menu_item( "Quit", 'Cmd+Q', False, True ) if clicked_quit: exit(1) imgui.end_menu() imgui.end_main_menu_bar() imgui.show_test_window() imgui.begin("Custom window", True) imgui.text("Bar") #imgui.same_line() imgui.text_colored("Eggs", 0.2, 1., 0.) #imgui.same_line() imgui.bullet_text("bullet_text") # 不换行 #imgui.same_line() imgui.end() # note: cannot use screen.fill((1, 1, 1)) because pygame's screen # does not support fill() on OpenGL sufraces gl.glClearColor(1, 1, 1, 1) gl.glClear(gl.GL_COLOR_BUFFER_BIT) imgui.render() impl.render(imgui.get_draw_data()) pygame.display.flip()
def init(): global show_about show_about = True pygame.init() size = 500, 500 screen = pygame.display.set_mode(size, pygame.DOUBLEBUF | pygame.OPENGL ) pygame.display.set_caption("Mom get the camera! I'm metaprogramming!!!") imgui.create_context() impl = PygameRenderer() io = imgui.get_io() io.display_size = size return screen, impl
def init(): global show_about show_about = False pygame.init() size = 500, 400 screen = pygame.display.set_mode(size, pygame.DOUBLEBUF | pygame.OPENGL ) pygame.display.set_caption("Title restarts only on change main") imgui.create_context() impl = PygameRenderer() io = imgui.get_io() io.display_size = size return screen, impl
def main(): pygame.init() size = 800, 600 pygame.display.set_mode(size, pygame.DOUBLEBUF | pygame.OPENGL | pygame.RESIZABLE) imgui.create_context() impl = PygameRenderer() io = imgui.get_io() io.display_size = size while 1: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() impl.process_event(event) imgui.new_frame() if imgui.begin_main_menu_bar(): if imgui.begin_menu("File", True): clicked_quit, selected_quit = imgui.menu_item("Quit", 'Alt+F4', False, True) clicked_save, selected_save = imgui.menu_item("Save", "", False, True) if clicked_save: print("Saved...") if clicked_quit: exit(1) imgui.end_menu() imgui.end_main_menu_bar() gl.glClearColor(1, 1, 1, 1) gl.glClear(gl.GL_COLOR_BUFFER_BIT) imgui.render() impl.render(imgui.get_draw_data()) pygame.display.flip()
import sys def print(*strings): global console_text console_text += "\n" + " ".join(strings) pygame.init() size = 1200, 720 pygame.display.set_mode( size, pygame.DOUBLEBUF | pygame.OPENGL | pygame.RESIZABLE) pygame.display.set_caption("ROV Testbed") imgui.create_context() impl = PygameRenderer() io = imgui.get_io() io.display_size = size local_motors = False local_camera = False local_input = True camera_id = 0 other = ("localhost", 12345) other_camera = ("localhost", 12346) available_pins = [(7, 4, False), (11, 17, False), (12, 18, True), (13, 27, False), (15, 22, False), (16, 23, False),
def main(): pygame.init() display = (1000, 700) screen = pygame.display.set_mode(display, DOUBLEBUF | OPENGLBLIT) imgui.create_context() impl = PygameRenderer() io = imgui.get_io() io.display_size = display pygame.display.set_caption('solar panels') gluPerspective(45, (display[0] / display[1]), 0.1, 50.0) glTranslatef(0, 0, -10) glRotatef(25, 2, 1, 0) # Coordinates x = 0 y = 0 z = 0 a = 0 # Keystates KLEFT = False KRIGHT = False KUP = False KDOWN = False KJ = False KL = False KA = False KD = False KW = False KS = False KI = False KK = False KG = False KH = False b = 0 d = 0 c = 1 while 1: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() # KEYEVENT KEYDOWN HANDLING if event.type == pygame.KEYDOWN: # TRANSLATE if event.key == pygame.K_LEFT: KLEFT = True if event.key == pygame.K_RIGHT: KRIGHT = True if event.key == pygame.K_UP: KUP = True if event.key == pygame.K_DOWN: KDOWN = True if event.key == pygame.K_j: KJ = True if event.key == pygame.K_l: KL = True # ROTATE if event.key == pygame.K_a: KA = True if event.key == pygame.K_d: KD = True if event.key == pygame.K_w: KW = True if event.key == pygame.K_s: KS = True if event.key == pygame.K_i: KI = True if event.key == pygame.K_k: KK = True # Arm Control # Optional key usage to move arm model if event.key == pygame.K_g: KG = True if event.key == pygame.K_h: KH = True # KEYEVENT KEYUP HANDLING if event.type == pygame.KEYUP: # TRANSLATE if event.key == pygame.K_LEFT: KLEFT = False if event.key == pygame.K_RIGHT: KRIGHT = False if event.key == pygame.K_UP: KUP = False if event.key == pygame.K_DOWN: KDOWN = False if event.key == pygame.K_j: KJ = False if event.key == pygame.K_l: KL = False # ROTATE if event.key == pygame.K_a: KA = False if event.key == pygame.K_d: KD = False if event.key == pygame.K_w: KW = False if event.key == pygame.K_s: KS = False if event.key == pygame.K_i: KI = False if event.key == pygame.K_k: KK = False # Arm Angle # Optional key usage to move arm model if event.key == pygame.K_g: KG = False if event.key == pygame.K_h: KH = False # KEY PRESS ACTIONS # TRANSLATE if KH == True: glTranslatef(0, -1, 0) y += 1 if KG == True: glTranslatef(0, 1, 0) y -= 1 if KJ == True: glTranslatef(0, 0, -1) z += 1 if KL == True: glTranslatef(0, 0, 1) z -= 1 # ROTATE if KI == True: glRotate(5, 0, 1, 0) if KK == True: glRotate(5, 0, 0, 1) # Arm Angle # Optional key usage to move arm model if KRIGHT == True: a += 1 if KLEFT == True: a -= 1 if KUP == True: b += 1 if KDOWN == True: b -= 1 if KA == True: c += 1 if KD == True: c -= 1 if KW == True: d += 1 if KS == True: d -= 1 impl.process_event(event) imgui.new_frame() imgui.begin("Controle du Mirroir", True) imgui.text("Les Angles") c = imgui.slider_int("Axe des x", c, -180., 180.)[1] a = imgui.slider_int("Axe des y", a, -180., 180.)[1] changed, c = imgui.input_int('Type coefficient:', c) imgui.text('The Va;ue you entered is: %f' % c) visible = True expanded, visible = imgui.collapsing_header("Expand me!", visible) if expanded: imgui.text("Now you see me qnd perhaps you don't !") imgui.show_style_editor() imgui.end() imgui.render() gl.glClearColor(1, 1, 1, 1) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) impl.render(imgui.get_draw_data()) glPushMatrix() house() glPopMatrix() glPushMatrix() house() Mirroir(c, a) glPopMatrix() glPushMatrix() mirroir2(c, a) glRotate(180, 0, 1, 0) glPopMatrix() glPushMatrix() support(c, a) glPopMatrix() support2() pygame.display.flip()
def main(): # Theme Index THEME_INDEX = 2 # window visible params bShowInfoPopUp = False bShowFiles = True bShowParsePdf = True bShowParserStatics = True bShowImg = False bShowTestWindow = True #delete cache files if os.path.isfile('ParseResult.log'): os.remove('ParseResult.log') if os.path.isfile('ManualFiles.log'): os.remove('ManualFiles.log') if os.path.isfile('Cluster.png'): os.remove('Cluster.png') pygame.init() size = 1280, 720 # 720p # size = 1920, 1080 # 1080p pygame.display.set_mode( size, pygame.DOUBLEBUF | pygame.OPENGL | pygame.RESIZABLE) pygame.display.set_caption("PDF成績單解析器") clock = pygame.time.Clock() favicon = pygame.image.load('asset\\Logo.png') pygame.display.set_icon(favicon) imgui.create_context() impl = PygameRenderer() io = imgui.get_io() smallfont = io.fonts.add_font_from_file_ttf( "asset\\NotoSansTC-Black.otf", 12, io.fonts.get_glyph_ranges_chinese_full()) normalfont = io.fonts.add_font_from_file_ttf( "asset\\NotoSansTC-Black.otf", 16, io.fonts.get_glyph_ranges_chinese_full()) largefont = io.fonts.add_font_from_file_ttf( "asset\\NotoSansTC-Black.otf", 28, io.fonts.get_glyph_ranges_chinese_full()) io.fonts.add_font_default() impl.refresh_font_texture() io.display_size = size style = imgui.get_style() if THEME_INDEX == 1: GF.SetCustomStyle1(style) elif THEME_INDEX == 2: GF.SetCustomStyle2(style) elif THEME_INDEX == 3: GF.SetCustomStyle3(style) CV = 0 MV = 200 while 1: clock.tick(30) # fixed 15 fps for event in pygame.event.get(): if event.type == pygame.QUIT: # remove cache here sys.exit() if event.type == pygame.VIDEORESIZE: print('resize is triggered!') # shortcut bindings if event.type == pygame.KEYDOWN: if event.mod == pygame.KMOD_LCTRL and event.key == pygame.K_q: sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_F1: GF.OpenHelper() impl.process_event(event) imgui.push_style_var(imgui.STYLE_FRAME_PADDING, (10, 12.5)) imgui.new_frame() # Main menu region if imgui.begin_main_menu_bar(): with imgui.font(normalfont): if imgui.begin_menu("設定", True): if imgui.begin_menu(label="主題", enabled=True): if THEME_INDEX == 1: imgui.menu_item("默認", None, True, True) else: c, _ = imgui.menu_item("默認", None, False, True) if c: GF.SetCustomStyle1(style) THEME_INDEX = 1 if THEME_INDEX == 2: imgui.menu_item("CorporateGrey", None, True, True) else: c, _ = imgui.menu_item("CorporateGrey", None, False, True) if c: GF.SetCustomStyle2(style) THEME_INDEX = 2 if THEME_INDEX == 3: imgui.menu_item("Light", None, True, True) else: c, _ = imgui.menu_item("Light", None, False, True) if c: GF.SetCustomStyle3(style) THEME_INDEX = 3 imgui.end_menu() clicked_quit, selected_quit = imgui.menu_item( "Quit", "L-Ctrl + Q", False, True) if clicked_quit: sys.exit() imgui.end_menu() if imgui.begin_menu("視窗", True): if not bShowFiles: F, _ = imgui.menu_item(label="選擇目錄", shortcut=None, selected=False, enabled=True) else: F, _ = imgui.menu_item(label="選擇目錄", shortcut=None, selected=True, enabled=True) if F: bShowFiles = not bShowFiles if not bShowParsePdf: o, _ = imgui.menu_item(label="解析成績單", shortcut=None, selected=False, enabled=True) else: o, _ = imgui.menu_item(label="解析成績單", shortcut=None, selected=True, enabled=True) if o: bShowParsePdf = not bShowParsePdf if not bShowParserStatics: r, _ = imgui.menu_item(label="解析結果", shortcut=None, selected=False, enabled=True) else: r, _ = imgui.menu_item(label="解析結果", shortcut=None, selected=True, enabled=True) if r: bShowParserStatics = not bShowParserStatics imgui.end_menu() if imgui.begin_menu("資訊", True): I, _ = imgui.menu_item("關於", None, selected=False, enabled=True) h, _ = imgui.menu_item("幫助", shortcut="F1", selected=False, enabled=True) if I: bShowInfoPopUp = True if h: GF.OpenHelper() imgui.end_menu() #imgui.pop_style_var(1) imgui.end_main_menu_bar() # Conditional windows if bShowFiles: imgui.set_next_window_position(0, 35, imgui.ONCE) imgui.set_next_window_size(230, 685, imgui.ONCE) with imgui.font(normalfont): bFileWindow = imgui.begin("選擇目錄", True, flags=imgui.WINDOW_NO_RESIZE | imgui.WINDOW_NO_MOVE | imgui.WINDOW_NO_COLLAPSE) if not bFileWindow[1]: bShowFiles = False GE.FileWindow() imgui.end() if bShowParsePdf: imgui.set_next_window_position(230, 35, imgui.ONCE) imgui.set_next_window_size(450, 685, imgui.ONCE) with imgui.font(normalfont): bParsePdf = imgui.begin("解析成績單", True) if not bParsePdf[1]: bShowParsePdf = False GE.ParsePdfWidget() imgui.end() if bShowParserStatics: imgui.set_next_window_position(680, 35, imgui.ONCE) imgui.set_next_window_size(600, 685, imgui.ONCE) with imgui.font(normalfont): bParserStats = imgui.begin("解析結果", True) if not bParserStats[1]: bShowParserStatics = False GE.ParserStaticsWidget() if os.path.isfile('Cluster.png'): img_info = GF.loadImage('Cluster.png') imgui.image(img_info[0], img_info[1], img_info[2]) imgui.end() if (bShowInfoPopUp): imgui.open_popup("資訊") imgui.set_next_window_size(600, 300) imgui.font(normalfont) if imgui.begin_popup_modal(title="資訊", visible=True, flags=0)[0]: GE.ProgramInfoPopup() imgui.separator() bShowInfoPopUp = False imgui.end_popup() if THEME_INDEX == 1: gl.glClearColor(0.1, 0.1, 0.1, 1) # for default theme elif THEME_INDEX == 2: gl.glClearColor(0.45, 0.55, 0.6, 1) # for light theme elif THEME_INDEX == 3: gl.glClearColor(0.25, 0.25, 0.25, 1.00) imgui.pop_style_var() gl.glClear(gl.GL_COLOR_BUFFER_BIT) imgui.render() impl.render(imgui.get_draw_data()) pygame.display.flip() CV += 1
def main(): pygame.init() size = 800, 600 pygame.display.set_mode(size, pygame.DOUBLEBUF | pygame.OPENGL) pygame.display.set_caption("GBDev tool window") io = imgui.get_io() io.fonts.add_font_default() io.display_size = size renderer = PygameRenderer() while 1: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() renderer.process_event(event) imgui.new_frame() if imgui.begin_main_menu_bar(): if imgui.begin_menu("Menu", True): open_gbtd, selected_none = imgui.menu_item("Open GBTD", None, False, True) open_gbtk, selected_none = imgui.menu_item("Open GBTK", None, False, True) export_json, selected_none = imgui.menu_item("Export Default Json", None, False, True) clicked_quit, selected_quit = imgui.menu_item("Quit", 'Cmd+Q', False, True) if clicked_quit: exit(1) if open_gbtd: os.system("wine tools/GBTD/GBTD.EXE &") if open_gbtk: os.system("wine tools/GBTK.exe &") if export_json: tools.json2c.default_use() imgui.end_menu() imgui.end_main_menu_bar() imgui.begin("Data", True) img_path = "data/img" onlyfiles = [f for f in listdir(img_path) if isfile(join(img_path, f))] #print(onlyfiles) for file in onlyfiles: imgui_image_menu(img_path+"/"+file) imgui.end() imgui.begin("Images", True) imgs_id = [] for img_filename in onlyfiles: if img_filename.split(".")[-1] == "png": imgs_id.append((img_path+"/"+img_filename, img_manager.load_image(img_path+"/"+img_filename))) for img in imgs_id: img_size = img_manager.get_image_size(img[0]) if img[1] is not 0 and img_size is not (): imgui.image(img[1], img_size[0]*2, img_size[1]*2, (0,1), (1,0)) imgui.same_line() imgui.end() # note: cannot use screen.fill((1, 1, 1)) because pygame's screen # does not support fill() on OpenGL sufraces gl.glClearColor(1, 1, 1, 1) gl.glClear(gl.GL_COLOR_BUFFER_BIT) imgui.render() pygame.display.flip()
class RapidApp: clock: pygame.time.Clock refresh_rate_hz: int window_size: tuple window_flags: int impl: PygameRenderer io: imgui.core._IO context: imgui.core._ImGuiContext context: imgui.core.GuiStyle def __init__(self, p_refresh_rate_hz=60, p_size=(800, 600)): self.refresh_rate_hz = p_refresh_rate_hz self.window_size = p_size self.window_flags = pygame.DOUBLEBUF | pygame.OPENGL | pygame.RESIZABLE self.quit_on_close = True self.use_base_window = True self.use_menu_bar = True self.use_gl_clear = True self.use_style_file = False self.show_style_window = False self.show_demo_window = False self.base_window_flags = imgui.core.WINDOW_MENU_BAR self.base_window_flags += imgui.core.WINDOW_NO_MOVE self.base_window_flags += imgui.core.WINDOW_NO_RESIZE self.base_window_flags += imgui.core.WINDOW_NO_COLLAPSE self.base_window_flags += imgui.core.WINDOW_NO_BRING_TO_FRONT_ON_FOCUS self.base_window_flags += imgui.core.WINDOW_NO_FOCUS_ON_APPEARING self.base_window_flags += imgui.core.WINDOW_NO_TITLE_BAR self.clock = None self.context = None self.impl = None self.io = None self.style = None self.running = False self.on_init() def on_init(self): pass def start(self): if not pygame.get_init(): pygame.init() pygame.display.set_caption("RapidApp Window") pygame.display.set_mode(self.window_size, self.window_flags) gl.glClearColor(1, 1, 1, 1) self.context = imgui.create_context() self.impl = PygameRenderer() self.io = imgui.get_io() self.io.display_size = self.window_size self.style = imgui.get_style() self.style.window_rounding = 0 self.on_window_created() if self.use_style_file: load_style_json_file() self.clock = pygame.time.Clock() self.main_loop() def on_window_created(self): pass def main_loop(self): self.running = True while self.running: # Event Handling: for event in pygame.event.get(): if event.type == pygame.QUIT and self.quit_on_close: self.running = False self.impl.process_event(event) self.handle_event(event) # Drawing: imgui.new_frame() self.update() self.render() pygame.display.flip() self.clock.tick(self.refresh_rate_hz) if self.use_style_file: save_style_json_file() self.end() def handle_event(self, event: pygame.event.Event): pass def update(self): self.window_size = pygame.display.get_surface().get_size() if self.use_base_window: imgui.set_next_window_position(0, 0) imgui.set_next_window_size(self.window_size[0], self.window_size[1]) imgui.begin("main", False, self.base_window_flags) if self.use_menu_bar and imgui.begin_menu_bar(): self.draw_menu() imgui.end_menu_bar() self.draw_base_window() imgui.end() else: if self.use_menu_bar and imgui.begin_main_menu_bar(): self.draw_menu() imgui.end_main_menu_bar() self.draw_windows() if self.show_style_window: self.show_style_window = imgui.begin("Style Editor", True)[1] imgui.show_style_editor() imgui.end() if self.show_demo_window: self.show_demo_window = imgui.show_demo_window(True) def draw_menu(self): pass def draw_base_window(self): pass def draw_windows(self): pass def render(self): # gl.glClearColor(1, 1, 1, 1) if self.use_gl_clear: gl.glClear(gl.GL_COLOR_BUFFER_BIT) imgui.render() self.impl.render(imgui.get_draw_data()) def end(self): pass