[Sugar-devel] [PATCH] implements http://bugs.sugarlabs.org/ticket/1106 - Browse: No preview in Journal for downloaded image

Gonzalo Odiard godiard at sugarlabs.org
Fri Sep 24 10:41:53 EDT 2010


ignore this patch.
I am doing anything wrong with git

Gonzalo

On Fri, Sep 24, 2010 at 10:44 AM, <godiard at sugarlabs.org> wrote:

> From: Gonzalo Odiard <godiard at sugarlabs.org>
>
> generates a preview image with a fixed size and proportions.
> if the original image is bigger scale down and center the image, if is
> smaller center the image
> the supported format files are checked with pixbuf_get_formats
>
> this patch adressed comments from silbe about segregate the check of a
> image mime type and use of sugar.style constant colors
> now opens the image in the original size because we don't want scale up
> small images
> ---
>  downloadmanager.py |   46 ++++++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 46 insertions(+), 0 deletions(-)
>
> diff --git a/downloadmanager.py b/downloadmanager.py
> index 3eec649..ed68d82 100644
> --- a/downloadmanager.py
> +++ b/downloadmanager.py
> @@ -35,6 +35,7 @@ from sugar.datastore import datastore
>  from sugar import profile
>  from sugar import mime
>  from sugar.graphics.alert import Alert, TimeoutAlert
> +from sugar.graphics import style
>  from sugar.graphics.icon import Icon
>  from sugar.activity import activity
>
> @@ -192,12 +193,57 @@ class Download:
>                 sniffed_mime_type =
> mime.get_for_file(self._target_file.path)
>                 self.dl_jobject.metadata['mime_type'] = sniffed_mime_type
>
> +            if self._check_image_mime_type():
> +                self.dl_jobject.metadata['preview'] =
> self._get_preview_image()
> +
>             datastore.write(self.dl_jobject,
>                             transfer_ownership=True,
>                             reply_handler=self._internal_save_cb,
>                             error_handler=self._internal_save_error_cb,
>                             timeout=360 *
> DBUS_PYTHON_TIMEOUT_UNITS_PER_SECOND)
>
> +
> +    def _check_image_mime_type(self):
> +        pixbuf_mime_types = []
> +        for pixbuf_format in gtk.gdk.pixbuf_get_formats():
> +            pixbuf_mime_types.extend(pixbuf_format['mime_types'])
> +
> +        return self._mime_type in pixbuf_mime_types
> +
> +    def _get_preview_image(self):
> +        preview_width, preview_height = style.zoom(300), style.zoom(225)
> +
> +        pixbuf = gtk.gdk.pixbuf_new_from_file(self._target_file.path)
> +        width, height = pixbuf.get_width(), pixbuf.get_height()
> +
> +
> +        if (width > preview_width) or (height > preview_height):
> +            scale_x = float(width) / preview_width
> +            scale_y = float(height) / preview_height
> +            scale = max(scale_x,scale_y)
> +
> +            pixbuf = pixbuf.scale_simple(float(width) / scale, height /
> scale,
> +                                     gtk.gdk.INTERP_BILINEAR)
> +
> +        width, height = pixbuf.get_width(), pixbuf.get_height()
> +
> +        pixbuf2 = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,
> pixbuf.get_has_alpha(),
> +            pixbuf.get_bits_per_sample(), preview_width, preview_height)
> +
> +        pixbuf2.fill(style.COLOR_WHITE.get_int())
> +
> +        margin_x, margin_y = (preview_width - width) / 2, (preview_height
> - height) / 2
> +
> +        pixbuf.copy_area(0, 0, width, height, pixbuf2, margin_x, margin_y)
> +
> +        preview_data = []
> +        def save_func(buf, data):
> +            data.append(buf)
> +
> +        pixbuf2.save_to_callback(save_func, 'png', user_data=preview_data)
> +        preview_data = ''.join(preview_data)
> +        return dbus.ByteArray(preview_data)
> +
>     def __start_response_cb(self, alert, response_id):
>         global _active_downloads
>         if response_id is gtk.RESPONSE_CANCEL:
> --
> 1.7.2.3
>
>


-- 
Gonzalo Odiard
SugarLabs Argentina
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.sugarlabs.org/archive/sugar-devel/attachments/20100924/d0337a9c/attachment.htm 


More information about the Sugar-devel mailing list