Hook up the new screenshot code

This commit is contained in:
Marco Pesenti Gritti 2007-11-04 17:00:48 +01:00
parent cd61c52c7b
commit 108147a6b1
2 changed files with 19 additions and 28 deletions

View File

@ -67,6 +67,7 @@ from sugar.datastore import datastore
from sugar import wm from sugar import wm
from sugar import profile from sugar import profile
from sugar import _sugarbaseext from sugar import _sugarbaseext
from sugar import _sugarext
SCOPE_PRIVATE = "private" SCOPE_PRIVATE = "private"
SCOPE_INVITE_ONLY = "invite" # shouldn't be shown in UI, it's implicit when you invite somebody SCOPE_INVITE_ONLY = "invite" # shouldn't be shown in UI, it's implicit when you invite somebody
@ -414,7 +415,7 @@ class Activity(Window, gtk.Container):
self._shared_activity = None self._shared_activity = None
self._share_id = None self._share_id = None
self._join_id = None self._join_id = None
self._preview = None self._preview = _sugarext.Preview()
self._updating_jobject = False self._updating_jobject = False
self._closing = False self._closing = False
self._deleting = False self._deleting = False
@ -619,18 +620,20 @@ class Activity(Window, gtk.Container):
self._jobject = None self._jobject = None
def _get_preview(self): def _get_preview(self):
preview_pixbuf = self.get_canvas_screenshot() pixbuf = self._preview.get_pixbuf()
if preview_pixbuf is None: if pixbuf is None:
return None return None
preview_pixbuf = preview_pixbuf.scale_simple(style.zoom(300),
style.zoom(225), pixbuf = pixbuf.scale_simple(style.zoom(300), style.zoom(225),
gtk.gdk.INTERP_BILINEAR) gtk.gdk.INTERP_BILINEAR)
# TODO: Find a way of taking a png out of the pixbuf without saving to a temp file. # TODO: Find a way of taking a png out of the pixbuf without saving
# Impementing gtk.gdk.Pixbuf.save_to_buffer in pygtk would solve this. # to a temp file. Impementing gtk.gdk.Pixbuf.save_to_buffer in pygtk
# would solve this.
fd, file_path = tempfile.mkstemp('.png') fd, file_path = tempfile.mkstemp('.png')
del fd del fd
preview_pixbuf.save(file_path, 'png')
pixbuf.save(file_path, 'png')
f = open(file_path) f = open(file_path)
try: try:
preview_data = f.read() preview_data = f.read()
@ -638,6 +641,8 @@ class Activity(Window, gtk.Container):
f.close() f.close()
os.remove(file_path) os.remove(file_path)
self._preview.clear()
return preview_data return preview_data
def _get_buddies(self): def _get_buddies(self):
@ -652,7 +657,8 @@ class Activity(Window, gtk.Container):
return {} return {}
def take_screenshot(self): def take_screenshot(self):
self._preview = self._get_preview() if self.canvas and self.canvas.window:
self._preview.take_screenshot(self.canvas.window)
def save(self): def save(self):
"""Request that the activity is saved to the Journal. """Request that the activity is saved to the Journal.
@ -674,10 +680,9 @@ class Activity(Window, gtk.Container):
self.metadata['buddies_id'] = json.write(buddies_dict.keys()) self.metadata['buddies_id'] = json.write(buddies_dict.keys())
self.metadata['buddies'] = json.write(self._get_buddies()) self.metadata['buddies'] = json.write(self._get_buddies())
if self._preview is None: preview = self._get_preview()
self.metadata['preview'] = '' if self._preview:
else: self.metadata['preview'] = dbus.ByteArray(preview)
self.metadata['preview'] = dbus.ByteArray(self._preview)
try: try:
if self._jobject.file_path: if self._jobject.file_path:
@ -708,7 +713,6 @@ class Activity(Window, gtk.Container):
copy work that needs to be done in write_file() copy work that needs to be done in write_file()
""" """
logging.debug('Activity.copy: %r' % self._jobject.object_id) logging.debug('Activity.copy: %r' % self._jobject.object_id)
self._preview = self._get_preview()
self.save() self.save()
self._jobject.object_id = None self._jobject.object_id = None

View File

@ -114,16 +114,3 @@ class Window(gtk.Window):
self.tray.props.visible = not self.tray.props.visible self.tray.props.visible = not self.tray.props.visible
return True return True
return False return False
def get_canvas_screenshot(self):
if not self.canvas:
return None
window = self.canvas.window
width, height = window.get_size()
screenshot = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, has_alpha=False,
bits_per_sample=8, width=width, height=height)
screenshot.get_from_drawable(window, window.get_colormap(), 0, 0, 0, 0,
width, height)
return screenshot