def drag_slider(self, poll_sleep): base = self.bar_start[0] - (self.SLIDER_WIDTH / 2) interval = (self.range_max - self.range_min - 1) / self.bar_width while pygame.mouse.get_pressed()[0]: new_x = pygame.mouse.get_pos()[0] - self.x new_x = max(new_x, base) new_x = min(new_x, base + self.bar_width) self.slider.x = new_x self.slider.force_highlight = True self.current = self.range_min + int(((new_x - base) * interval)) time.sleep(poll_sleep) pump() self.slider.force_highlight = False
def drag_dialog(self): # pygame doesn't properly set relative position on first call for some # reason... pygame.mouse.get_rel() self.title.force_highlight = True while pygame.mouse.get_pressed()[0]: mouse_delta = pygame.mouse.get_rel() new_x = max(self.x + mouse_delta[0], 0) new_x = min(new_x, get_picasso().get_width() - self.width) new_y = max(self.y + mouse_delta[1], 0) new_y = min(new_y, get_picasso().get_height() - self.height) self.move_to(new_x, new_y) time.sleep(0) pump() self.title.force_highlight = False
def draw_canvas(self): pump() self.window.blit(self.background, (0, 0)) # make a deep copy of layers first to avoid race condition where dict # size can change during iteration. try to do it lockless, if we're # still having issues, fix with mutex try: for _, level in sorted(self.canvas.iteritems()): for asset in level: if isinstance(asset, PicassoAsset): self.window.blit(asset.draw(), asset.get_coordinate()) else: risk.logger.warn("None asset detected in canvas, ", "skipping...[%s]" % asset) except RuntimeError: risk.logger.error("ignoring dictionary size change...") fps_asset = self.get_fps_asset() self.window.blit(fps_asset.draw(), fps_asset.get_coordinate()) self.cursor.x, self.cursor.y = pygame.mouse.get_pos() self.window.blit(self.cursor.draw(), self.cursor.get_coordinate()) pygame.display.flip()