diff options
author | Gonzalo Odiard <godiard@sugarlabs.org> | 2011-04-06 21:22:53 (GMT) |
---|---|---|
committer | Gonzalo Odiard <godiard@sugarlabs.org> | 2011-04-06 21:22:53 (GMT) |
commit | 049e402c5a1eb46803a219b9b0fe7d279b9da8e9 (patch) | |
tree | 2875a680d40f33e4ef75cf92595b91166f71270f /GetIABooksActivity.py | |
parent | 2abca143a54f25c0f77b23ee58789898d6b81be9 (diff) |
Show the cover images scaled to a defined size
Diffstat (limited to 'GetIABooksActivity.py')
-rwxr-xr-x | GetIABooksActivity.py | 51 |
1 files changed, 39 insertions, 12 deletions
diff --git a/GetIABooksActivity.py b/GetIABooksActivity.py index c79f01b..3260f64 100755 --- a/GetIABooksActivity.py +++ b/GetIABooksActivity.py @@ -478,16 +478,15 @@ class GetIABooksActivity(activity.Activity): self.exist_cover_image = False if self.show_images and load_image: if self.source == 'local_books': - cover_image_data = self.get_journal_entry_cover_image( + cover_image_buffer = self.get_journal_entry_cover_image( self.selected_book.get_object_id()) - if (cover_image_data): + if (cover_image_buffer): self.add_image_buffer( - self.get_pixbuf_from_buffer(cover_image_data)) + self.get_pixbuf_from_buffer(cover_image_buffer)) else: self.add_default_image() else: url_image = self.selected_book.get_image_url() - logging.error('url_image %s', url_image) if url_image: self.download_image(url_image.values()[0]) else: @@ -533,15 +532,31 @@ class GetIABooksActivity(activity.Activity): self.add_image_buffer(pixbuf) def add_image_buffer(self, pixbuf): - MAX_HEIGHT_IMAGE = int(gtk.gdk.screen_height() / 3) + image_height = int(gtk.gdk.screen_height() / 4) + image_width = image_height / 3 * 2 width, height = pixbuf.get_width(), pixbuf.get_height() - if height > MAX_HEIGHT_IMAGE: - scale = MAX_HEIGHT_IMAGE / float(height) + scale = 1 + if (width > image_width) or (height > image_height): + scale_x = image_width / float(width) + scale_y = image_height / float(height) + scale = min(scale_x, scale_y) + + pixbuf2 = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, \ + pixbuf.get_has_alpha(), \ + pixbuf.get_bits_per_sample(), \ + image_width, image_height) + pixbuf2.fill(style.COLOR_PANEL_GREY.get_int()) - pixbuf = pixbuf.scale_simple(int(width * scale), - int(height * scale), gtk.gdk.INTERP_BILINEAR) + margin_x = int((image_width - (width * scale)) / 2) + margin_y = int((image_height - (height * scale)) / 2) + + pixbuf.scale(pixbuf2, margin_x, margin_y, \ + image_width - (margin_x * 2), \ + image_height - (margin_y * 2), \ + margin_x, margin_y, scale, scale, \ + gtk.gdk.INTERP_BILINEAR) - self.image.set_from_pixbuf(pixbuf) + self.image.set_from_pixbuf(pixbuf2) def get_query_language(self): query_language = None @@ -746,8 +761,9 @@ class GetIABooksActivity(activity.Activity): textbuffer.get_text(textbuffer.get_start_iter(), textbuffer.get_end_iter()) if self.exist_cover_image: - image_buffer = self._get_preview_image() + image_buffer = self._get_preview_image_buffer() journal_entry.metadata['preview'] = dbus.ByteArray(image_buffer) + image_buffer = self._get_cover_image_buffer() journal_entry.metadata['cover_image'] = \ dbus.ByteArray(base64.b64encode(image_buffer)) else: @@ -789,7 +805,7 @@ class GetIABooksActivity(activity.Activity): activity.show_object_in_journal(self._object_id) self.remove_alert(alert) - def _get_preview_image(self): + def _get_preview_image_buffer(self): preview_width, preview_height = style.zoom(300), style.zoom(225) pixbuf = self.image.get_pixbuf() @@ -824,6 +840,17 @@ class GetIABooksActivity(activity.Activity): preview_data = ''.join(preview_data) return preview_data + def _get_cover_image_buffer(self): + pixbuf = self.image.get_pixbuf() + cover_data = [] + + def save_func(buf, data): + data.append(buf) + + pixbuf.save_to_callback(save_func, 'png', user_data=cover_data) + cover_data = ''.join(cover_data) + return cover_data + def _show_error_alert(self, title, text=None): alert = NotifyAlert(timeout=20) alert.props.title = title |