Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/jarabe/journal/expandedentry.py
diff options
context:
space:
mode:
authorSimon Schampijer <simon@laptop.org>2012-09-06 10:48:54 (GMT)
committer Simon Schampijer <simon@laptop.org>2012-09-07 09:14:27 (GMT)
commit560a3699c3bba14313cd597dce6b2a994579be97 (patch)
tree4630dcd0965319e6a35f496df873dd3687b01e58 /src/jarabe/journal/expandedentry.py
parent70ef45362a7ad0cb21c8f3a938b6952494009346 (diff)
Journal detail view: draw the thumbnail without using a Gdk.Pixmap
Code based on the one in get_preview in toolkit-gtk3 and the one in Browse for the linkbutton. Signed-off-by: Simon Schampijer <simon@laptop.org> Acked-by: Manuel QuiƱones <manuq@laptop.org>
Diffstat (limited to 'src/jarabe/journal/expandedentry.py')
-rw-r--r--src/jarabe/journal/expandedentry.py42
1 files changed, 26 insertions, 16 deletions
diff --git a/src/jarabe/journal/expandedentry.py b/src/jarabe/journal/expandedentry.py
index 3a1bcef..a6a56c3 100644
--- a/src/jarabe/journal/expandedentry.py
+++ b/src/jarabe/journal/expandedentry.py
@@ -201,18 +201,12 @@ class ExpandedEntry(Gtk.EventBox):
return date
def _create_preview(self):
- box = Gtk.EventBox()
- box.modify_bg(Gtk.StateType.NORMAL, style.COLOR_WHITE.get_gdk_color())
-
- box.connect('expose-event', self.__expose_event_cb)
- box.connect_after('button-release-event',
- self._preview_box_button_release_event_cb)
- return box
-
- def __expose_event_cb(self, box, event):
width = style.zoom(320)
height = style.zoom(240)
+ box = Gtk.EventBox()
+ box.modify_bg(Gtk.StateType.NORMAL, style.COLOR_WHITE.get_gdk_color())
+
if len(self._metadata.get('preview', '')) > 4:
if self._metadata['preview'][1:4] == 'PNG':
preview_data = self._metadata['preview']
@@ -225,19 +219,31 @@ class ExpandedEntry(Gtk.EventBox):
png_file = StringIO.StringIO(preview_data)
try:
# Load image and scale to dimensions
+ im = Gtk.Image()
surface = cairo.ImageSurface.create_from_png(png_file)
png_width = surface.get_width()
png_height = surface.get_height()
- gdk_window = self.get_toplevel().window
- pixmap = Gdk.Pixmap(gdk_window, png_width, png_height, -1)
- cr = pixmap.cairo_create()
- cr.set_source_rgb(1, 1, 1)
+
+ preview_surface = cairo.ImageSurface(cairo.FORMAT_ARGB32,
+ width, height)
+ cr = cairo.Context(preview_surface)
+
+ scale_w = width * 1.0 / png_width
+ scale_h = height * 1.0 / png_height
+ scale = min(scale_w, scale_h)
+
+ cr.scale(scale, scale)
+
+ cr.set_source_rgba(1, 1, 1, 0)
+ cr.set_operator(cairo.OPERATOR_SOURCE)
cr.paint()
- cr.set_source_surface(surface, 0, 0)
- cr.scale(width / png_width, height / png_height)
+ cr.set_source_surface(surface)
cr.paint()
- im = Gtk.image_new_from_pixmap(pixmap, None)
+ pixbuf_bg = Gdk.pixbuf_get_from_surface(preview_surface, 0, 0,
+ width, height)
+ im.set_from_pixbuf(pixbuf_bg)
+
has_preview = True
except Exception:
logging.exception('Error while loading the preview')
@@ -255,6 +261,10 @@ class ExpandedEntry(Gtk.EventBox):
box.add(label)
label.show()
+ box.connect_after('button-release-event',
+ self._preview_box_button_release_event_cb)
+ return box
+
def _create_technical(self):
vbox = Gtk.VBox()
vbox.props.spacing = style.DEFAULT_SPACING