Exemple #1
0
    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)
Exemple #2
0
    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
Exemple #3
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
Exemple #4
0
    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()