def command_add_to_play_list(screen, filename): paint_screen(gl.BLACK) normal_cursor() gl.SORT_HIT = 1 small_font = pygame.font.Font(gl.FONT_NAME, 10) f = open(gl.IMGV_PLAYLISTS) file_names = f.readlines() if len(file_names) == 0: return (file_names, None, None, None, None) f.close() file_names.sort(lambda x, y: cmp(x.lower(), y.lower())) for count in range(len(file_names)): file_names[count] = file_names[count].replace('\n', '') (list_names, play_list_name, x, my_string) = command_file_master(screen,\ file_names, "LEFT-CLICK list name to add to list", 25, 0, 1, 0) if (list_names == None): return play_list = gl.DATA_DIR + play_list_name f = open(play_list, 'a') if os.path.isdir(filename): filez = dir_nav.get_imgs(os.getcwd(), 0) filez.sort(lambda x, y: cmp(x.lower(), y.lower())) for file in filez: f.write(file + "\n") else: if os.sep not in filename and filename.startswith("http:") != 1: filename = os.getcwd() + os.sep + filename + "\n" f.write(filename + "\n") f.close() normal_cursor()
def open_url(screen, img): gl.ISURL = 1 num_imgs = len(gl.files) paint_screen(screen, gl.BLACK) set_caption("Extract from Web - imgv") normal_cursor() show_message(screen, "Enter a Web URL to extract images from", 20, 15, ("transparent")) gl.URL = ask(screen, "http://") if gl.URL != None: gl.files = [] wait_cursor() show_message(screen, "Loading. Please wait..", 39, 42, ("transparent")) for ext in gl.IMG_TYPES: if gl.URL.endswith(ext): gl.files.append(str("".join(gl.URL))) return (load_img(gl.files[0], screen), 1) else: return (img, num_imgs) gl.files = [] check_indexhtml() if gl.URL_ERROR: gl.files.append(gl.ERROR_IMG) return (load_img(gl.ERROR_IMG, screen), len(gl.files)) if len(gl.files) < 1: gl.files.append(gl.ERROR_IMG) gl.files = [x.replace(" ", "%20") for x in gl.files] # urls need %20 for spaces return (load_img(gl.files[0], screen), len(gl.files))
def command_thumbs(screen, new_img, file): normal_cursor() gl.THUMBING = 1 screen_width = screen.get_width() if gl.THUMB_VAL.upper() == "AUTO" or gl.USING_THUMB_DEFAULT: gl.USING_THUMB_DEFAULT = 1 if screen_width == 640: gl.THUMB_VAL = "85x90" elif screen_width == 800: gl.THUMB_VAL = "108x114" elif screen_width == 1024: gl.THUMB_VAL = "108x104" else: gl.THUMB_VAL = "100x100" if not gl.TOGGLE_FULLSCREEN_SET: screen = set_mode(screen.get_size()) # take away resize priviledges paint_screen(gl.IMGV_COLOR) set_caption("imgv") (new_img, new_img, new_img, file) = thumbs_engine(screen, new_img, file) if not gl.TOGGLE_FULLSCREEN_SET: screen = set_mode(screen.get_size(), RESIZABLE) # restore resize priviledges rect = get_center(screen, new_img) my_update_screen(new_img, rect, file) normal_cursor() gl.THUMBING = 0 return (new_img, new_img, new_img, file, rect)
def get_confirmation(screen, confirm_msg): paint_screen(screen, gl.IMGV_COLOR) pygame.display.update() normal_cursor() show_message(screen, confirm_msg, "top", 12, ("bold")) yes_rect = imgv_button(screen, " YES ", 0, 30, "midtop") no_rect = imgv_button(screen, " NO ", 0, 60, "midtop") pygame.event.set_blocked(MOUSEMOTION) while 1: event = pygame.event.poll() pygame.time.wait(1) cursor = pygame.mouse.get_pos() hover_button(yes_rect, cursor, screen, " YES ", 0, 30, "midtop") hover_button(no_rect, cursor, screen, " NO ", 0, 60, "midtop") hover_cursor(cursor, (yes_rect, no_rect)) check_quit(event) if hit_key(event, K_ESCAPE): return if hit_key(event, K_y): return "yes" if hit_key(event, K_n): return "no" if event.type == MOUSEBUTTONDOWN and pygame.mouse.get_pressed()[0]: if yes_rect.collidepoint(cursor): return "yes" if no_rect.collidepoint(cursor): return "no"
def view_filter(screen): paint_screen(screen, gl.BLACK) show_message(screen, "Current filter", "top", 20, ("underline", "bold")) show_message(screen, "Imgv will only display files whose filenames:", (5, 30), 15, ("bold")) line = 60 for k in gl.FILTER_COMMAND.keys(): font = pygame.font.Font(gl.FONT_NAME, 12) if k == "startwith": ren = font.render("Start with: %s" % gl.FILTER_COMMAND["startwith"], 1, (255, 255, 255), (0, 0, 0)) if k == "notstartwith": ren = font.render("Do not start with: %s" % gl.FILTER_COMMAND["notstartwith"], 1, (255, 255, 255), (0, 0, 0)) if k == "endwith": ren = font.render("End with: %s" % gl.FILTER_COMMAND["endwith"], 1, (255, 255, 255), (0, 0, 0)) if k == "notendwith": ren = font.render("Do not end with: %s" % gl.FILTER_COMMAND["notendwith"], 1, (255, 255, 255), (0, 0, 0)) if k == "contain": ren = font.render("Contain: %s" % gl.FILTER_COMMAND["contain"], 1, (255, 255, 255), (0, 0, 0)) if k == "notcontain": ren = font.render("Do not contain: %s" % gl.FILTER_COMMAND["notcontain"], 1, (255, 255, 255), (0, 0, 0)) ren_rect = ren.get_rect() ren_rect[0] = 5 ren_rect[1] = line screen.blit(ren, ren_rect) line = line + 30 update(ren_rect) while 1: ev = pygame.event.wait() check_quit(ev) if ev.type == KEYDOWN or ev.type == MOUSEBUTTONDOWN: return
def edit_play_list(screen, play_list_name): paint_screen(gl.BLACK) keep_going = 1 play_list = gl.DATA_DIR + play_list_name f = open(play_list) file_names = f.readlines() f.close() if len(file_names) < 1: play_list_options_msg(screen, "Can't edit %s, it is empty" %\ play_list) keep_going = 0 for count in range(len(file_names)): file_names[count] = file_names[count].replace('\n', '') normal_cursor() if keep_going: (list_names, play_list_item, x, my_string) = command_file_master(screen,\ file_names, "Click item to delete it from play list", 47, 0, 1, "do again") file_names = delete_item(screen, play_list_item, play_list) if x == "do again": while 1: if len(file_names) < 1: break (list_names, play_list_item, x, my_string) = command_file_master(screen,\ file_names, "Click to delete another item from play list", 47, 0, 1,\ "do again") file_names = delete_item(screen, play_list_item, play_list) if x != "do again": break
def color_msg(screen, msg): paint_screen(gl.BLACK) show_message(msg, (15, 20), 13, ("bold", "transparent")) show_message("Valid colors: BLACK, WHITE, PURPLE, BLUE, IMGV_LOGO_BLUE, SKY_BLUE, SILVER, GREEN, LIGHT_GREEN,", (15, 50), 13, ("transparent")) show_message("SADDLE_BROWN, RED, ORANGE, YELLOW, DARK_SLATE_BLUE, DARK_SLATE_GRAY, MID_GRAY.", (15, 70), 13, ("transparent")) show_message("You can also specify coma separated RGB color values in the format: n,n,n (where n is a number from 0 to 255)", (15, 100), 13, ("transparent")) return ask(screen, "Color")
def fade_in(screen, image): paint_screen(screen, gl.IMGV_COLOR) for darken in range(50): image.set_alpha(darken) r = screen.blit(image, get_center(screen, image)) pygame.display.update(r) image.set_alpha(255)
def do_view_tagged(screen, num_imgs, file): "show all tagged dir names" paint_screen(screen, gl.BLACK) (esc_rect, close_font) = close_button(screen) line = 5 if len(gl.MULT_DIRS) == 0: show_message(screen, "[No directories are currently tagged]", "bottom", 12) for d in gl.MULT_DIRS: font = pygame.font.Font(gl.FONT_NAME, 9) ren = font.render(d, 1, (255, 255, 255), (0, 0, 0)) ren_rect = ren.get_rect() ren_rect[0] = 5 ren_rect[1] = line screen.blit(ren, ren_rect) line = line + 12 update(ren_rect) pygame.event.set_allowed(MOUSEMOTION) while 1: ev = pygame.event.wait() check_quit(ev) hover_cursor(pygame.mouse.get_pos(), (esc_rect,)) if ev.type == KEYDOWN and ev.key not in (K_LALT, K_RALT, K_TAB, K_LCTRL, K_RCTRL) or ev.type == MOUSEBUTTONDOWN: gl.ADDED_DIR_NUMS = 0 (num_imgs, file) = show_dirs(screen, num_imgs, file) break # break event loop
def save_remote_img(screen, file): save_path = gl.DATA_DIR + "downloads" + sep filename = gl.files[file] paint_screen(screen, gl.BLACK) try: im = Image.open(gl.REMOTE_IMG_DATA) show_message(screen, "Saving: %s" % basename(gl.files[file]), (20, 50), 12, ("bold")) show_message(screen, "From: %s" % filename[:filename.rindex('/')] + '/', (20, 70), 12, ("bold")) show_message(screen, "To: %s" % save_path, (20, 90), 12, ("bold")) im.save(save_path + basename(filename)) show_message(screen, "Done", (20, 120), 12, ("bold", "underline")) show_message(screen, "[Press any key]", "bottom", 15) gl.ALREADY_DOWNLOADED = 1 normal_cursor() except: return while 1: event = pygame.event.wait() check_quit(event) #if event.type == KEYDOWN or event.type == MOUSEBUTTONDOWN: if event.type == KEYDOWN and event.key not in (K_LALT, K_RALT): return
def error_screen(screen, msg): paint_screen(gl.BLACK) while 1: event = pygame.event.wait() show_message(msg, "top", 12) check_quit(event) if (event.type == KEYDOWN and event.key not in (K_LALT, K_RALT, K_LCTRL, K_RCTRL)) or event.type == MOUSEBUTTONDOWN: return
def do_change_drive(screen, num_imgs, file): paint_screen(screen, gl.BLACK) my_string = ask(screen, "Enter a Drive Letter") if my_string != None: gl.ADDED_DIR_NUMS = 0 gl.DRIVE = my_string[0] (num_imgs, file) = show_dirs(screen, num_imgs, file) return (num_imgs, file)
def verbose_info(screen, new_img, file, num_imgs): # main engine wait_cursor() paint_screen(screen, gl.BLACK) try: (uniquecolors_rect, total_colors, row, font, im, verb) = print_verbose_info(screen, new_img, file, num_imgs) except: print 'print verbose' #(uniquecolors_rect, total_colors, row, font, im, verb) = junk_rect()# # uniquecolors_rect = junk_rect()# # total_colors = ""# verb = verbose(screen, file)# (uniquecolors_rect, total_colors, row, font, im) = verb.colors() #return if gl.SHOW_EXIFBUTTON: exif_rect = imgv_button(screen, " Exif Data ", 5, gl.ROW_SEP + 435, None) (esc_rect, close_font) = close_button(screen) normal_cursor() transparency = 0 while 1: event = pygame.event.poll() pygame.time.wait(1) check_quit(event) cursor = pygame.mouse.get_pos() hover_cursor(cursor, (esc_rect, exif_rect, uniquecolors_rect)) if gl.SHOW_EXIFBUTTON: hover_button(exif_rect, cursor, screen, " Exif Data ", 5, gl.ROW_SEP + 435, None) if gl.UNIQUE_COLORS == None and gl.SHOW_EXIFBUTTON and total_colors != "": hover_button(uniquecolors_rect, cursor, screen, " Unique colors ", (font.size(total_colors)[0] + 230), row, None) show_message(screen, convert_times(ctime(), 0), "bottom", 15, ("transparent")) if event.type == MOUSEBUTTONDOWN and pygame.mouse.get_pressed()[0]: if uniquecolors_rect != junk_rect(): if uniquecolors_rect.collidepoint(cursor): wait_cursor() gl.UNIQUE_COLORS = comma_it(len(dict.fromkeys(im.getdata()))) # determine unique colors before_color = gl.MSG_COLOR if gl.MSG_COLOR == gl.SILVER: gl.MSG_COLOR = (142, 142, 142) else: gl.MSG_COLOR = gl.SILVER show_message(screen, "Unique colors: %s%s" % (gl.UNIQUE_COLORS, ' ' * 12), ((font.size(total_colors)[0] + 235), row), 12, (""), (14, before_color)) gl.MSG_COLOR = before_color normal_cursor() if exif_rect.collidepoint(cursor): wait_cursor() try: verb.exif_data(file) except: break normal_cursor() if esc_rect.collidepoint(cursor): before_exit() break if event.type == KEYDOWN and event.key not in (K_LALT, K_RALT, K_LCTRL, K_RCTRL, K_TAB): before_exit() break
def remote_img_details(screen, new_img, rect, file): # show no details if image is on a web server paint_screen(gl.BLACK) while 1: event = pygame.event.wait() show_message(gl.REMOTE_IMG, (0, 30, 0, 0), 12) check_quit(event) if event.type == KEYDOWN or event.type == MOUSEBUTTONDOWN: return
def do_contain(screen): paint_screen(screen, gl.BLACK) show_message(screen, "Enter the string you want all image names to contain.", (10, 25), 12, ("bold")) show_message(screen, 'Example: Type red to view all images that contain the string' ' "red" (i.e., my_red_car.jpg)', (10, 55), 12) show_message(screen, '(To input multiple strings separate them with commas)', (10, 75), 11) contain_str = ask(screen, "Contain") if contain_str != None: gl.FILTER_COMMAND["contain"] = contain_str command_get_filter_info(screen)
def command_four(screen, file, new_img): gl.MULTI_VIEWING = 1 paint_screen(gl.IMGV_COLOR) set_caption("Four at a time - imgv") (file, new_img) = four(screen, file, new_img) rect = get_center(screen, new_img) my_update_screen(new_img, rect, file) pygame.event.set_blocked(MOUSEMOTION) # without this the hovers don't work right gl.MULTI_VIEWING = 0 return (file, new_img, new_img, new_img, rect)
def play_list_options_msg(screen, msg): paint_screen(gl.BLACK) show_message(msg, 100, 10) normal_cursor() while 1: event = pygame.event.wait() check_quit(event) if event.type == KEYDOWN or event.type == MOUSEBUTTONDOWN: wait_cursor() break
def do_donot_contain(screen): paint_screen(screen, gl.BLACK) show_message(screen, "Enter the string that you do not want image names to contain.", (10, 25), 12, ("bold")) show_message(screen, 'Example: Type blue to view only images that do not contain the string' ' "blue" (i.e., my_blue_car.jpg)', (10, 55), 12) show_message(screen, '(To input multiple strings separate them with commas)', (10, 75), 11) notcontain_str = ask(screen, "Do not contain") if notcontain_str != None: gl.FILTER_COMMAND["notcontain"] = notcontain_str command_get_filter_info(screen)
def do_donot_startwith(screen): paint_screen(screen, gl.BLACK) show_message(screen, "Enter the string that you do not want image names to start with.", (10, 25), 12, ("bold")) show_message(screen, 'Example: Type blue to view all images that do not start with the string' ' "blue"', (10, 55), 12) show_message(screen, '(To input multiple strings separate them with commas)', (10, 75), 11) notstartwith_str = ask(screen, "Do not start with") if notstartwith_str != None: gl.FILTER_COMMAND["notstartwith"] = notstartwith_str command_get_filter_info(screen)
def do_startwith(screen): paint_screen(screen, gl.BLACK) show_message(screen, "Enter the string you want all image names to start with.", (10, 25), 12, ("bold")) show_message(screen, 'Example: Type red to view only images that start with the string' ' "red" (i.e., red_car.jpg)', (10, 55), 12) show_message(screen, '(To input multiple strings separate them with commas)', (10, 75), 11) startwith_str = ask(screen, "Start with") if startwith_str != None: gl.FILTER_COMMAND["startwith"] = startwith_str command_get_filter_info(screen)
def pause(screen): while 1: set_caption("[Slideshow Paused] - imgv") ren_rect = show_message(screen, "Paused", 30, 23, ("bold")) event = pygame.event.wait() check_quit(event) if event.type == KEYDOWN and event.key not in(K_LALT, K_RALT, K_LCTRL, K_RCTRL, K_TAB): set_caption("Slideshow = imgv") paint_screen(screen, gl.BLACK, ren_rect) break
def file_master(screen, file_names, place, marker, menu_items, msg, down, button_op): paint_screen(gl.BLACK) show_message(msg, down, 10, ("bold", "transparent")) font = pygame.font.Font(gl.FONT_NAME, 9) font.set_bold(1) (esc_rect, esc_font) = close_button(screen) font_height = font.size(file_names[0])[1] screen_height = screen.get_height() name_max = 16 max_file_width = 116 line = 65 # leave room at top of screen for other stuff col = 5 count = 0 back_rect = forward_rect = sort_rect = junk_rect() for name in file_names[place:]: count = count + 1 place = place + 1 marker = marker + 1 if count >= gl.MAX_SCREEN_FILES or place >= len(file_names): ren_name = os.path.basename(name) if len(ren_name) > name_max: ren_name = ren_name[:name_max] + '...' # truncate if ren_name[-4:] == '....': ren_name = ren_name[:-1] # 3 .'s are enough ren = font.render(ren_name, 1, gl.MSG_COLOR, gl.BLACK) if (place + 1) < len(file_names): forward_rect = imgv_button(screen, " Next ", 10, 18, "topright") if (((place + 1) - gl.MAX_SCREEN_FILES) > 1): back_rect = imgv_button(screen, " Previous ", 10, 18, "topleft") if not gl.SORT_HIT: sort_rect = imgv_button(screen, " Sort ", 13, 42, "midtop") ren_rect = ren.get_rect() ren_rect[0] = col ren_rect[1] = line menu_items.append((ren_rect, name)) screen.blit(ren, ren_rect) update(ren_rect) return (file_names, menu_items, 1, place, marker, forward_rect, back_rect, sort_rect) ren_name = os.path.basename(name) if len(ren_name) > name_max: ren_name = ren_name[:name_max] + '...' if ren_name[-4:] == '....': ren_name = ren_name[:-1] ren = font.render(ren_name, 1, gl.MSG_COLOR, gl.BLACK) ren_rect = ren.get_rect() ren_rect[0] = col ren_rect[1] = line menu_items.append((ren_rect, name)) screen.blit(ren, ren_rect) line = line + 12 if (line + font_height) >= (screen_height - 15): line = 65 col = col + max_file_width update(ren_rect) return (file_names, menu_items, 0, place, marker, forward_rect, back_rect, sort_rect)
def do_endwith(screen): paint_screen(screen, gl.BLACK) show_message(screen, "Enter the string you want all image names to end with.", (10, 25), 12, ("bold")) show_message(screen, 'Example 1: Type .jpg to view all images that end with the string' ' ".jpg" (i.e., dog.jpg)', (10, 55), 12) show_message(screen, 'Example 2: To load only jpegs and bitmaps, input: .jpg, .jpeg, .bmp', (10, 75), 12) show_message(screen, '(To input multiple strings separate them with commas)', (10, 95), 11) endwith_str = ask(screen, "End with") if endwith_str != None: gl.FILTER_COMMAND["endwith"] = endwith_str command_get_filter_info(screen)
def do_donot_endwith(screen): paint_screen(screen, gl.BLACK) show_message(screen, "Enter the string that you do not want image names to end with.", (10, 25), 12, ("bold")) show_message(screen, 'Example 1: Type .jpg to view all images that do not end with the string' ' ".jpg" (i.e., car.jpg)', (10, 55), 12) show_message(screen, 'Example 2: To only load images that are not GIFs, input: .gif', (10, 75), 12) show_message(screen, '(To input multiple strings separate them with commas)', (10, 95), 11) notendwith_str = ask(screen, "Do not end with") if notendwith_str != None: gl.FILTER_COMMAND["notendwith"] = notendwith_str command_get_filter_info(screen)
def command_verbose_info(screen, new_img, rect, file): gl.ORIG_WINSIZE = "%sx%s" % (screen.get_width(), screen.get_height()) (screen, before_winsize, not_accepted) = adjust_screen(screen) paint_screen(gl.BLACK) if gl.REMOTE: remote_img_details(screen, new_img, rect, file) else: verbose_info(screen, new_img, file) screen = restore_screen(screen, before_winsize, not_accepted, new_img, file, rect) rect = get_center(screen, new_img) my_update_screen(new_img, rect, file)
def exif_data(self, filen): paint_screen(gl.BLACK) close_button(self.screen) if not self.show_exif: gl.SHOW_EXIFBUTTON = 0 return exif_info = [] filename = gl.files[filen] try: file = open(filename, "rb") except: exif_info.append("%s unreadable" % filename) gl.SHOW_EXIFBUTTON = 0 return data = exif.process_file(file) if not data: font_size = 13 font = pygame.font.Font(gl.FONT_NAME, font_size) no_exif_msg = "No Exif information found" show_message( no_exif_msg, ((self.screen.get_width() / 2) - (font.size(no_exif_msg)[0] / 2), self.screen.get_height() / 2), font_size, ("bold", "transparent"), ) gl.SHOW_EXIFBUTTON = 0 return x = data.keys() x.sort() for i in x: if i in ("JPEGThumbnail", "TIFFThumbnail"): continue try: exif_info.append("%s: %s" % (i, data[i].printable)) except: exif_info.append("error", i, '"', data[i], '"') gl.SHOW_EXIFBUTTON = 0 pos = 25 show_message("Exif Information", "top", 13, ("underline", "bold", "transparent")) try: for line in exif_info: if type(line) is StringType and len(line) <= 250: # parachutes on long lines without this exif_font = pygame.font.Font(gl.FONT_NAME, 9) ren = exif_font.render(line, 1, gl.MENU_COLOR) ren_rect = ren.get_rect() ren_rect[0] = 14 ren_rect[1] = pos self.screen.blit(ren, ren_rect) pos = pos + 9 except: print "Couldn't exif" # pass flip()
def do_custom(screen, new_img, file, num_imgs, rect): paint_screen(screen, gl.BLACK) show_message(screen, "Enter a custom window size/resolution. (Example: 455x500)", "top", 12, ("bold")) res = ask(screen, "New size") if res == None: return rect try: res = res.lower().split('x') res = int(res[0]), int(res[1]) rect = command_custom_res(screen, new_img, file, num_imgs, rect, res) except: return rect return rect
def ask(screen, question, hist_list=[''], count=0): current_string = [] (esc_rect, font) = close_button(screen) if question in ("Password", "New password"): paint_screen(screen, gl.BLACK, esc_rect) # Erase the close button, no need for it if gl.ISURL: display_box(screen, "%s%s_" % (question, "".join(current_string))) else: display_box(screen, "%s: %s_" % (question, "".join(current_string))) while 1: (inkey, value) = get_key(esc_rect) if inkey == K_BACKSPACE: if len(current_string) == 1: # allows backspacing to work on the "readline" strings current_string = list(current_string[0]) current_string = current_string[0:-1] elif inkey == K_RETURN: gl.SKIP = 0 # reset to render message properly show_message(screen, ' ' * 40, "bottom", 12) # erase message break elif inkey == K_ESCAPE: gl.ISURL = 0 if gl.WAS_IN_CHANGE_DRIVES: gl.ADDED_DIR_NUMS = 0 paint_screen(screen, gl.BLACK, Rect(0, 255, screen.get_width(), 100)) # erase box from screen show_message(screen, ' ' * 40, "bottom", 12) # erase message return None elif inkey == K_UP: if count < len(hist_list): current_string = current_string[1:] current_string.insert(0, hist_list[-count - 1]) count = count + 1 elif inkey == K_DOWN: if count > 0: count = count - 1 current_string = current_string[1:] current_string.insert(0, hist_list[-count]) elif inkey <= 127: current_string.append(value) if gl.ISURL: display_box(screen, "%s%s_" % (question, "".join(current_string))) else: display_box(screen, "%s: %s_" % (question, "".join(current_string))) current_string = "".join(current_string) hist_list.append(current_string) if gl.ISURL: gl.ISURL = 0 return "%s%s" % ("http://", current_string) else: return current_string
def border_fix(self): "draw over the last placed border with the background color to make it disappear" if gl.LRECT or gl.RRECT or gl.TRECT or gl.BRECT: paint_screen(gl.IMGV_COLOR, gl.LRECT) paint_screen(gl.IMGV_COLOR, gl.RRECT) paint_screen(gl.IMGV_COLOR, gl.TRECT) paint_screen(gl.IMGV_COLOR, gl.BRECT)
def command_four(screen, file, new_img, ns): gl.MULTI_VIEWING = 1 orig_ns = ns paint_screen(screen, gl.IMGV_COLOR) set_caption("Four at a time - imgv") (file, new_img, start) = four(screen, file, new_img, ns) rect = get_center(screen, new_img) num_imgs = len(gl.files) if start != orig_ns: ns = check_timer(start) my_update_screen(new_img, screen, rect, file, num_imgs, ns) else: my_update_screen(new_img, screen, rect, file, num_imgs) pygame.event.set_blocked(MOUSEMOTION) # without this the hovers don't work right gl.MULTI_VIEWING = 0 return (file, new_img, new_img, new_img, rect)