summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefano Karapetsas <[email protected]>2013-11-12 16:55:17 +0100
committerStefano Karapetsas <[email protected]>2013-11-12 16:55:17 +0100
commit289f88cac3057908e54bf1540743c7926d07bdb8 (patch)
tree1f9415aab96a80f5cad3852e61137777187d929a
parenta22116dfbffaf2526de2368668e243a4847f7ec9 (diff)
downloadmate-screensaver-289f88cac3057908e54bf1540743c7926d07bdb8.tar.bz2
mate-screensaver-289f88cac3057908e54bf1540743c7926d07bdb8.tar.xz
savers: Add GTK3 support
-rw-r--r--savers/gste-slideshow.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/savers/gste-slideshow.c b/savers/gste-slideshow.c
index 42c2267..61d6a19 100644
--- a/savers/gste-slideshow.c
+++ b/savers/gste-slideshow.c
@@ -174,7 +174,9 @@ start_fade (GSTESlideshow *show,
{
GdkPixbuf *colored;
guint32 color;
+#if !GTK_CHECK_VERSION (3, 0, 0)
GdkPixmap *pixmap;
+#endif
color = (show->priv->background_color->red << 16)
+ (show->priv->background_color->green / 256 << 8)
@@ -186,12 +188,19 @@ start_fade (GSTESlideshow *show,
256,
color,
color);
+#if GTK_CHECK_VERSION (3, 0, 0)
+ gdk_pixbuf_copy_area (colored, 0, 0,
+ gdk_pixbuf_get_width (colored),
+ gdk_pixbuf_get_height (colored),
+ pixbuf, 0, 0);
+#else
pixmap = gdk_pixmap_new (NULL, ph, pw, gdk_visual_get_system ()->depth);
gdk_draw_pixbuf (pixmap, NULL, colored, 0, 0, 0, 0, -1, -1, GDK_RGB_DITHER_MAX, 0, 0);
gdk_pixbuf_get_from_drawable (pixbuf, pixmap, NULL, 0, 0, 0, 0, -1, -1);
g_object_unref (pixmap);
+#endif
g_object_unref(colored);
}
@@ -326,6 +335,9 @@ update_display (GSTESlideshow *show)
cairo_destroy (cr);
+#if GTK_CHECK_VERSION (3, 0, 0)
+ gtk_widget_queue_draw (GTK_WIDGET (show));
+#else
/* paint the image buffer into the window */
cr = gdk_cairo_create (GTK_WIDGET (show)->window);
@@ -338,6 +350,7 @@ update_display (GSTESlideshow *show)
cairo_destroy (cr);
gs_theme_engine_profile_end ("end");
+#endif
}
static gboolean
@@ -879,20 +892,41 @@ gste_slideshow_real_show (GtkWidget *widget)
}
static gboolean
+#if GTK_CHECK_VERSION (3, 0, 0)
+gste_slideshow_real_draw (GtkWidget *widget,
+ cairo_t *cr)
+#else
gste_slideshow_real_expose (GtkWidget *widget,
GdkEventExpose *event)
+#endif
{
GSTESlideshow *show = GSTE_SLIDESHOW (widget);
+#if !GTK_CHECK_VERSION (3, 0, 0)
gboolean handled = FALSE;
update_display (show);
+#endif
+#if GTK_CHECK_VERSION (3, 0, 0)
+ if (GTK_WIDGET_CLASS (parent_class)->draw)
+ {
+ GTK_WIDGET_CLASS (parent_class)->draw (widget, cr);
+ }
+ cairo_set_source_surface (cr, show->priv->surf, 0, 0);
+
+ gs_theme_engine_profile_start ("paint surface to window");
+ cairo_paint (cr);
+ gs_theme_engine_profile_end ("paint surface to window");
+
+ return TRUE;
+#else
if (GTK_WIDGET_CLASS (parent_class)->expose_event)
{
handled = GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event);
}
return handled;
+#endif
}
static gboolean
@@ -917,7 +951,11 @@ gste_slideshow_real_configure (GtkWidget *widget,
cairo_surface_destroy (show->priv->surf);
}
+#if GTK_CHECK_VERSION (3, 0, 0)
+ cr = gdk_cairo_create (gtk_widget_get_window (widget));
+#else
cr = gdk_cairo_create (widget->window);
+#endif
show->priv->surf = cairo_surface_create_similar (cairo_get_target (cr),
CAIRO_CONTENT_COLOR,
show->priv->window_width,
@@ -948,7 +986,11 @@ gste_slideshow_class_init (GSTESlideshowClass *klass)
object_class->set_property = gste_slideshow_set_property;
widget_class->show = gste_slideshow_real_show;
+#if GTK_CHECK_VERSION (3, 0, 0)
+ widget_class->draw = gste_slideshow_real_draw;
+#else
widget_class->expose_event = gste_slideshow_real_expose;
+#endif
widget_class->configure_event = gste_slideshow_real_configure;
g_type_class_add_private (klass, sizeof (GSTESlideshowPrivate));
@@ -983,6 +1025,23 @@ gste_slideshow_class_init (GSTESlideshowClass *klass)
G_PARAM_READWRITE));
}
+#if GTK_CHECK_VERSION (3, 0, 0)
+static void
+set_visual (GtkWidget *widget)
+{
+ GdkScreen *screen;
+ GdkVisual *visual;
+
+ screen = gtk_widget_get_screen (widget);
+ visual = gdk_screen_get_rgba_visual (screen);
+ if (visual == NULL)
+ {
+ visual = gdk_screen_get_system_visual (screen);
+ }
+
+ gtk_widget_set_visual (widget, visual);
+}
+#else
static void
set_colormap (GtkWidget *widget)
{
@@ -998,6 +1057,7 @@ set_colormap (GtkWidget *widget)
gtk_widget_set_colormap (widget, colormap);
}
+#endif
static void
gste_slideshow_init (GSTESlideshow *show)
@@ -1021,7 +1081,11 @@ gste_slideshow_init (GSTESlideshow *show)
exit (-1);
}
+#if GTK_CHECK_VERSION (3, 0, 0)
+ set_visual (GTK_WIDGET (show));
+#else
set_colormap (GTK_WIDGET (show));
+#endif
}
static void