Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/sugar/Makefile.am4
-rw-r--r--src/sugar/_sugarext.defs45
-rw-r--r--src/sugar/_sugarext.override1
-rw-r--r--src/sugar/activity/activity.py39
-rw-r--r--src/sugar/sugar-preview.c139
-rw-r--r--src/sugar/sugar-preview.h62
-rw-r--r--tests/graphics/preview.py43
7 files changed, 9 insertions, 324 deletions
diff --git a/src/sugar/Makefile.am b/src/sugar/Makefile.am
index dabb35d..fb87bf6 100644
--- a/src/sugar/Makefile.am
+++ b/src/sugar/Makefile.am
@@ -56,9 +56,7 @@ _sugarext_la_SOURCES = \
sugar-key-grabber.c \
sugar-key-grabber.h \
sugar-menu.h \
- sugar-menu.c \
- sugar-preview.h \
- sugar-preview.c
+ sugar-menu.c
BUILT_SOURCES = \
_sugarext.c \
diff --git a/src/sugar/_sugarext.defs b/src/sugar/_sugarext.defs
index c18e707..a6befa4 100644
--- a/src/sugar/_sugarext.defs
+++ b/src/sugar/_sugarext.defs
@@ -29,13 +29,6 @@
(gtype-id "SUGAR_TYPE_GRID")
)
-(define-object Preview
- (in-module "Sugar")
- (parent "GObject")
- (c-name "SugarPreview")
- (gtype-id "SUGAR_TYPE_PREVIEW")
-)
-
(define-object IconEntry
(in-module "Sexy")
(parent "GtkEntry")
@@ -248,44 +241,6 @@
(return-type "none")
)
-;; From sugar-preview.h
-
-(define-function sugar_preview_get_type
- (c-name "sugar_preview_get_type")
- (return-type "GType")
-)
-
-(define-method take_screenshot
- (of-object "SugarPreview")
- (c-name "sugar_preview_take_screenshot")
- (return-type "none")
- (parameters
- '("GtkWidget" "widget")
- )
-)
-
-(define-method set_size
- (of-object "SugarPreview")
- (c-name "sugar_preview_set_size")
- (return-type "none")
- (parameters
- '("int" "width")
- '("int" "height")
- )
-)
-
-(define-method clear
- (of-object "SugarPreview")
- (c-name "sugar_preview_clear")
- (return-type "none")
-)
-
-(define-method get_pixbuf
- (of-object "SugarPreview")
- (c-name "sugar_preview_get_pixbuf")
- (return-type "GdkPixbuf*")
-)
-
;; From eggsmclient.h
(define-function egg_sm_client_get_type
diff --git a/src/sugar/_sugarext.override b/src/sugar/_sugarext.override
index 39b5385..6b768bb 100644
--- a/src/sugar/_sugarext.override
+++ b/src/sugar/_sugarext.override
@@ -8,7 +8,6 @@ headers
#include "sugar-grid.h"
#include "sugar-key-grabber.h"
#include "sugar-menu.h"
-#include "sugar-preview.h"
#include "sexy-icon-entry.h"
#include "gsm-session.h"
#include "gsm-xsmp.h"
diff --git a/src/sugar/activity/activity.py b/src/sugar/activity/activity.py
index 66669c8..114c685 100644
--- a/src/sugar/activity/activity.py
+++ b/src/sugar/activity/activity.py
@@ -469,20 +469,12 @@ class Activity(Window, gtk.Container):
self.connect('realize', self.__realize_cb)
self.connect('delete-event', self.__delete_event_cb)
- # watch visibility-notify-events to know when we can safely
- # take a screenshot of the activity
- self.add_events(gtk.gdk.VISIBILITY_NOTIFY_MASK)
- self.connect('visibility-notify-event',
- self.__visibility_notify_event_cb)
- self._fully_obscured = True
-
self._active = False
self._activity_id = handle.activity_id
self._pservice = presenceservice.get_instance()
self.shared_activity = None
self._share_id = None
self._join_id = None
- self._preview = _sugarext.Preview()
self._updating_jobject = False
self._closing = False
self._quit_requested = False
@@ -721,10 +713,15 @@ class Activity(Window, gtk.Container):
self._jobject = None
def _get_preview(self):
- pixbuf = self._preview.get_pixbuf()
- if pixbuf is None:
+
+ if self.canvas is None or not hasattr(self.canvas, 'get_snapshot'):
return None
+ pixmap = self.canvas.get_snapshot((-1, -1, 0, 0))
+ width, height = pixmap.get_size()
+ pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, 0, 8, width, height)
+ pixbuf = pixbuf.get_from_drawable(pixmap, pixmap.get_colormap(),
+ 0, 0, 0, 0, width, height)
pixbuf = pixbuf.scale_simple(style.zoom(300), style.zoom(225),
gtk.gdk.INTERP_BILINEAR)
@@ -735,8 +732,6 @@ class Activity(Window, gtk.Container):
pixbuf.save_to_callback(save_func, 'png', user_data=preview_data)
preview_data = ''.join(preview_data)
- self._preview.clear()
-
return preview_data
def _get_buddies(self):
@@ -750,10 +745,6 @@ class Activity(Window, gtk.Container):
else:
return {}
- def take_screenshot(self):
- if self.canvas:
- self._preview.take_screenshot(self.canvas)
-
def save(self):
"""Request that the activity is saved to the Journal.
@@ -779,7 +770,7 @@ class Activity(Window, gtk.Container):
self.metadata['buddies'] = cjson.encode(self._get_buddies())
preview = self._get_preview()
- if self._preview:
+ if preview is not None:
self.metadata['preview'] = dbus.ByteArray(preview)
try:
@@ -810,8 +801,6 @@ class Activity(Window, gtk.Container):
copy work that needs to be done in write_file()
"""
logging.debug('Activity.copy: %r' % self._jobject.object_id)
- if not self._fully_obscured:
- self.take_screenshot()
self.save()
self._jobject.object_id = None
@@ -974,9 +963,6 @@ class Activity(Window, gtk.Container):
write_file() to do any state saving instead. If the application wants
to control wether it can close, it should override can_close().
"""
- if not self._fully_obscured:
- self.take_screenshot()
-
if not self.can_close():
return
@@ -995,15 +981,6 @@ class Activity(Window, gtk.Container):
self.close()
return True
- def __visibility_notify_event_cb(self, widget, event):
- """Visibility state is used when deciding if we can take screenshots.
- Currently we allow screenshots whenever the activity window is fully
- visible or partially obscured."""
- if event.state is gtk.gdk.VISIBILITY_FULLY_OBSCURED:
- self._fully_obscured = True
- else:
- self._fully_obscured = False
-
def get_metadata(self):
"""Returns the jobject metadata or None if there is no jobject.
diff --git a/src/sugar/sugar-preview.c b/src/sugar/sugar-preview.c
deleted file mode 100644
index 44b83e4..0000000
--- a/src/sugar/sugar-preview.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (C) 2007, Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <gdk/gdkx.h>
-#include <gtk/gtkwindow.h>
-#include <X11/extensions/XShm.h>
-
-#include "sugar-preview.h"
-
-static void sugar_preview_class_init (SugarPreviewClass *menu_class);
-static void sugar_preview_init (SugarPreview *menu);
-
-G_DEFINE_TYPE(SugarPreview, sugar_preview, G_TYPE_OBJECT)
-
-void
-sugar_preview_set_size(SugarPreview *preview, int width, int height)
-{
- preview->width = width;
- preview->height = height;
-}
-
-GdkPixbuf *
-sugar_preview_get_pixbuf(SugarPreview *preview)
-{
- if (preview->pixbuf != NULL) {
- return preview->pixbuf;
- }
-
- if (preview->image == NULL) {
- return NULL;
- }
-
- preview->pixbuf = gdk_pixbuf_get_from_image(NULL, preview->image, NULL,
- 0, 0, 0, 0,
- preview->image->width,
- preview->image->height);
- g_object_unref(G_OBJECT(preview->image));
- preview->image = NULL;
-
- return preview->pixbuf;
-}
-
-void
-sugar_preview_clear(SugarPreview *preview)
-{
- if (preview->image != NULL) {
- g_object_unref(G_OBJECT(preview->image));
- preview->image = NULL;
- }
- if (preview->pixbuf != NULL) {
- g_object_unref(G_OBJECT(preview->pixbuf));
- preview->pixbuf = NULL;
- }
-}
-
-static gboolean
-widget_is_off_screen(GtkWidget *widget)
-{
- GdkScreen *screen;
- gint x, y, width, height;
-
- screen = gtk_widget_get_screen(widget);
-
- gdk_window_get_geometry(widget->window, &x, &y, &width, &height, NULL);
-
- return (x < 0 || y < 0 ||
- x + width > gdk_screen_get_width(screen) ||
- y + height > gdk_screen_get_height(screen));
-}
-
-void
-sugar_preview_take_screenshot(SugarPreview *preview, GtkWidget *widget)
-{
- GdkDrawable *drawable;
- GdkScreen *screen;
- GdkVisual *visual;
- GdkColormap *colormap;
- gint width, height;
-
- if (widget->window == NULL || widget_is_off_screen(widget)) {
- return;
- }
-
- sugar_preview_clear(preview);
-
- drawable = GDK_DRAWABLE(widget->window);
-
- gdk_drawable_get_size(drawable, &width, &height);
-
- screen = gdk_drawable_get_screen(drawable);
- visual = gdk_drawable_get_visual(drawable);
- colormap = gdk_drawable_get_colormap(drawable);
-
- preview->image = gdk_image_new(GDK_IMAGE_SHARED, visual, width, height);
- gdk_image_set_colormap(preview->image, colormap);
-
- XShmGetImage(GDK_SCREEN_XDISPLAY(screen),
- GDK_DRAWABLE_XID(drawable),
- gdk_x11_image_get_ximage(preview->image),
- 0, 0, AllPlanes);
-}
-
-static void
-sugar_preview_dispose(GObject *object)
-{
- SugarPreview *preview = SUGAR_PREVIEW(object);
- sugar_preview_clear(preview);
-}
-
-static void
-sugar_preview_class_init(SugarPreviewClass *preview_class)
-{
- GObjectClass *g_object_class = G_OBJECT_CLASS (preview_class);
-
- g_object_class->dispose = sugar_preview_dispose;
-}
-
-static void
-sugar_preview_init(SugarPreview *preview)
-{
- preview->image = NULL;
- preview->pixbuf = NULL;
-}
diff --git a/src/sugar/sugar-preview.h b/src/sugar/sugar-preview.h
deleted file mode 100644
index 70ea156..0000000
--- a/src/sugar/sugar-preview.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2007, Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __SUGAR_PREVIEW_H__
-#define __SUGAR_PREVIEW_H__
-
-#include <gdk/gdkdrawable.h>
-
-G_BEGIN_DECLS
-
-typedef struct _SugarPreview SugarPreview;
-typedef struct _SugarPreviewClass SugarPreviewClass;
-
-#define SUGAR_TYPE_PREVIEW (sugar_preview_get_type())
-#define SUGAR_PREVIEW(object) (G_TYPE_CHECK_INSTANCE_CAST((object), SUGAR_TYPE_PREVIEW, SugarPreview))
-#define SUGAR_PREVIEW_CLASS(klass) (G_TYPE_CHACK_CLASS_CAST((klass), SUGAR_TYPE_PREVIEW, SugarPreviewClass))
-#define SUGAR_IS_PREVIEW(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), SUGAR_TYPE_PREVIEW))
-#define SUGAR_IS_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SUGAR_TYPE_PREVIEW))
-#define SUGAR_PREVIEW_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), SUGAR_TYPE_PREVIEW, SugarPreviewClass))
-
-struct _SugarPreview {
- GObject base_instance;
-
- GdkImage *image;
- GdkPixbuf *pixbuf;
-
- int width;
- int height;
-};
-
-struct _SugarPreviewClass {
- GObjectClass base_class;
-};
-
-GType sugar_preview_get_type (void);
-void sugar_preview_take_screenshot (SugarPreview *preview,
- GtkWidget *widget);
-void sugar_preview_set_size (SugarPreview *preview,
- int width,
- int height);
-GdkPixbuf *sugar_preview_get_pixbuf (SugarPreview *preview);
-void sugar_preview_clear (SugarPreview *preview);
-
-G_END_DECLS
-
-#endif /* __SUGAR_PREVIEW_H__ */
diff --git a/tests/graphics/preview.py b/tests/graphics/preview.py
deleted file mode 100644
index c1e9ccb..0000000
--- a/tests/graphics/preview.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright (C) 2007, Red Hat, Inc.
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the
-# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-"""
-"""
-
-import gtk
-import gobject
-
-from sugar import _sugarext
-
-import common
-
-def _preview_timeout_cb():
- preview = _sugarext.Preview()
- preview.take_screenshot(button.window)
- preview.get_pixbuf().save('/home/marco/test.png','png')
- preview.clear()
-
-test = common.Test()
-
-button = gtk.Button('Hello')
-test.pack_start(button)
-button.show()
-
-gobject.timeout_add(2000, _preview_timeout_cb)
-
-if __name__ == "__main__":
- common.main(test)