def zoom_to(self, percent=0, fit=1): """Zoom to a given percentage. Args: percent: Percentage to zoom to. fit: See self.fit_image attribute. """ if self.is_anim: self.app["statusbar"].message("Zoom not supported for gif files", "warning") return fallback_zoom = self.zoom_percent # Catch user zooms percent = self.app["eventhandler"].num_receive(percent, True) # Given from commandline if isinstance(percent, str): percent, err = get_float_from_str(percent) if err: self.app["statusbar"].message( "Argument for zoom must be of type float", "error") return self.imsize = self.get_available_size() # 0 means zoom to fit if percent: self.zoom_percent = percent self.fit_image = 0 else: self.zoom_percent = self.get_zoom_percent_to_fit(fit) self.fit_image = fit # Catch some unreasonable zooms self.catch_unreasonable_zoom_and_update(fallback_zoom)
def zoom_delta(self, zoom_in=True, step=1): """Zoom the image by delta percent. Args: zoom_in: If True zoom in, else zoom out. """ delta = 0.25 if self.is_anim: self.app["statusbar"].message("Zoom not supported for gif files", "warning") else: # Allow user steps step = self.app["eventhandler"].num_receive(step, True) if isinstance(step, str): step, err = get_float_from_str(step) if err: self.app["statusbar"].message( "Argument for zoom must be of type float", "error") return fallback_zoom = self.zoom_percent if zoom_in: self.zoom_percent = self.zoom_percent * (1 + delta * step) else: self.zoom_percent = self.zoom_percent / (1 + delta * step) self.catch_unreasonable_zoom_and_update(fallback_zoom) self.fit_image = 0
def num_receive(self, number=1, get_float=False): """Receive self.num_str and clear it. Args: number: Number to return if there self.num_str is empty. get_float: If True, convert num_str to float. Else to int. Return: The received number or default. """ if self.num_str: number = get_float_from_str(self.num_str)[0] \ if get_float else int(self.num_str) self.num_clear() return number
def set_delay(self, fixed_val=None, step=None): """Set slideshow delay. Args: fixed_val: Value to which the delay is set. step: Add step to the current delay. """ val = fixed_val if fixed_val else self.default_delay # Parse step and fixed_val if step: step, errorcode = get_float_from_str(step) if errorcode: self.app["statusbar"].message( "Argument for delay must be of type float", "error") return step *= self.app["eventhandler"].num_receive(1, True) self.delay += step elif val: val, errorcode = get_float_from_str(str(val)) if errorcode: self.app["statusbar"].message( "Argument for delay must be of type float", "error") return self.delay = val self.app["eventhandler"].num_clear() # Set a minimum if self.delay < 0.5: self.delay = 0.5 self.app["statusbar"].message( "Delays shorter than 0.5 s are not allowed", "warning") # If slideshow was running reload it if self.running: GLib.source_remove(self.timer_id) self.timer_id = GLib.timeout_add(1000 * self.delay, self.app["image"].move_index, True, False, 1) self.app["statusbar"].update_info()