summaryrefslogtreecommitdiff
path: root/libmate-desktop/mate-bg.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmate-desktop/mate-bg.c')
-rw-r--r--libmate-desktop/mate-bg.c199
1 files changed, 141 insertions, 58 deletions
diff --git a/libmate-desktop/mate-bg.c b/libmate-desktop/mate-bg.c
index 3b0f684..a46fc27 100644
--- a/libmate-desktop/mate-bg.c
+++ b/libmate-desktop/mate-bg.c
@@ -34,6 +34,7 @@ Author: Soren Sandmann <[email protected]>
#include <gio/gio.h>
+#include <gdk/gdk.h>
#include <gdk/gdkx.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
@@ -128,7 +129,11 @@ static guint signals[N_SIGNALS] = {0};
G_DEFINE_TYPE(MateBG, mate_bg, G_TYPE_OBJECT)
-static GdkPixmap* make_root_pixmap(GdkScreen* screen, gint width, gint height);
+#if GTK_CHECK_VERSION(3, 0, 0)
+ static cairo_surface_t* make_root_pixmap(GdkScreen* screen, gint width, gint height);
+#else
+ static GdkPixmap* make_root_pixmap(GdkScreen* screen, gint width, gint height);
+#endif
/* Pixbuf utils */
static guint32 pixbuf_average_value (GdkPixbuf *pixbuf);
@@ -138,11 +143,14 @@ static GdkPixbuf *pixbuf_scale_to_fit (GdkPixbuf *src,
static GdkPixbuf *pixbuf_scale_to_min (GdkPixbuf *src,
int min_width,
int min_height);
-static void pixbuf_draw_gradient (GdkPixbuf *pixbuf,
- gboolean horizontal,
- GdkColor *c1,
- GdkColor *c2,
- GdkRectangle *rect);
+
+#if GTK_CHECK_VERSION(3, 0, 0)
+ static void pixbuf_draw_gradient(GdkPixbuf* pixbuf, gboolean horizontal, GdkColor* c1, GdkColor* c2, cairo_rectangle_int_t* rect);
+#else
+ static void pixbuf_draw_gradient(GdkPixbuf* pixbuf, gboolean horizontal, GdkColor* c1, GdkColor* c2, GdkRectangle* rect);
+#endif
+
+
static void pixbuf_tile (GdkPixbuf *src,
GdkPixbuf *dest);
static void pixbuf_blend (GdkPixbuf *src,
@@ -635,20 +643,27 @@ mate_bg_set_filename (MateBG *bg,
}
}
-static void
-draw_color_area (MateBG *bg,
- GdkPixbuf *dest,
- GdkRectangle *rect)
+#if GTK_CHECK_VERSION(3, 0, 0)
+ static void draw_color_area(MateBG* bg, GdkPixbuf* dest, cairo_rectangle_int_t* rect)
+#else
+ static void draw_color_area(MateBG* bg, GdkPixbuf* dest, GdkRectangle* rect)
+#endif
{
guint32 pixel;
- GdkRectangle extent;
+
+ #if GTK_CHECK_VERSION(3, 0, 0)
+ cairo_rectangle_int_t extent;
+ #else
+ GdkRectangle extent;
+ #endif
+
extent.x = 0;
extent.y = 0;
extent.width = gdk_pixbuf_get_width (dest);
extent.height = gdk_pixbuf_get_height (dest);
- gdk_rectangle_intersect (rect, &extent, rect);
+ gdk_rectangle_intersect(rect, &extent, rect);
switch (bg->color_type) {
case MATE_BG_COLOR_SOLID:
@@ -679,7 +694,12 @@ draw_color (MateBG *bg,
GdkPixbuf *dest,
GdkScreen *screen)
{
- GdkRectangle rect;
+ #if GTK_CHECK_VERSION(3, 0, 0)
+ cairo_rectangle_int_t rect;
+ #else
+ GdkRectangle rect;
+ #endif
+
rect.x = 0;
rect.y = 0;
rect.width = gdk_pixbuf_get_width (dest);
@@ -692,7 +712,11 @@ draw_color_each_monitor (MateBG *bg,
GdkPixbuf *dest,
GdkScreen *screen)
{
- GdkRectangle rect;
+ #if GTK_CHECK_VERSION(3, 0, 0)
+ cairo_rectangle_int_t rect;
+ #else
+ GdkRectangle rect;
+ #endif
gint num_monitors;
int monitor;
@@ -783,11 +807,12 @@ get_scaled_pixbuf (MateBGPlacement placement,
return new;
}
-static void
-draw_image_area (MateBGPlacement placement,
- GdkPixbuf *pixbuf,
- GdkPixbuf *dest,
- GdkRectangle *area)
+
+#if GTK_CHECK_VERSION(3, 0, 0)
+ static void draw_image_area(MateBGPlacement placement, GdkPixbuf* pixbuf, GdkPixbuf* dest, cairo_rectangle_int_t* area)
+#else
+ static void draw_image_area(MateBGPlacement placement, GdkPixbuf* pixbuf, GdkPixbuf* dest, GdkRectangle* area)
+#endif
{
int dest_width = area->width;
int dest_height = area->height;
@@ -825,7 +850,11 @@ draw_image (MateBGPlacement placement,
GdkPixbuf *pixbuf,
GdkPixbuf *dest)
{
- GdkRectangle rect;
+ #if GTK_CHECK_VERSION(3, 0, 0)
+ cairo_rectangle_int_t rect;
+ #else
+ GdkRectangle rect;
+ #endif
rect.x = 0;
rect.y = 0;
@@ -840,7 +869,12 @@ draw_once (MateBG *bg,
GdkPixbuf *dest,
GdkScreen *screen)
{
- GdkRectangle rect;
+ #if GTK_CHECK_VERSION(3, 0, 0)
+ cairo_rectangle_int_t rect;
+ #else
+ GdkRectangle rect;
+ #endif
+
GdkPixbuf *pixbuf;
rect.x = 0;
@@ -863,7 +897,11 @@ draw_each_monitor (MateBG *bg,
GdkPixbuf *dest,
GdkScreen *screen)
{
- GdkRectangle rect;
+ #if GTK_CHECK_VERSION(3, 0, 0)
+ cairo_rectangle_int_t rect;
+ #else
+ GdkRectangle rect;
+ #endif
gint num_monitors;
int monitor;
@@ -965,15 +1003,19 @@ mate_bg_get_pixmap_size (MateBG *bg,
*
* Since: 2.20
**/
-GdkPixmap *
-mate_bg_create_pixmap (MateBG *bg,
- GdkWindow *window,
- int width,
- int height,
- gboolean is_root)
+#if GTK_CHECK_VERSION(3, 0, 0)
+ cairo_surface_t* mate_bg_create_pixmap(MateBG* bg, GdkWindow* window, int width, int height, gboolean is_root)
+#else
+ GdkPixmap* mate_bg_create_pixmap(MateBG* bg, GdkWindow* window, int width, int height, gboolean is_root)
+#endif
{
int pm_width, pm_height;
- GdkPixmap *pixmap;
+
+ #if GTK_CHECK_VERSION(3, 0, 0)
+ cairo_surface_t* pixmap;
+ #else
+ GdkPixmap* pixmap;
+ #endif
cairo_t *cr;
g_return_val_if_fail (bg != NULL, NULL);
@@ -993,8 +1035,13 @@ mate_bg_create_pixmap (MateBG *bg,
mate_bg_get_pixmap_size (bg, width, height, &pm_width, &pm_height);
if (is_root) {
- pixmap = make_root_pixmap (gdk_drawable_get_screen (window),
- pm_width, pm_height);
+
+ #if GTK_CHECK_VERSION(2, 24, 0)
+ pixmap = make_root_pixmap(gdk_window_get_screen(window), pm_width, pm_height);
+ #else // since 2.2
+ pixmap = make_root_pixmap(gdk_drawable_get_screen(GDK_DRAWABLE(window)), pm_width, pm_height);
+ #endif
+
}
else {
pixmap = gdk_pixmap_new (window, pm_width, pm_height, -1);
@@ -1007,9 +1054,14 @@ mate_bg_create_pixmap (MateBG *bg,
else {
GdkPixbuf *pixbuf;
- pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
- width, height);
- mate_bg_draw (bg, pixbuf, gdk_drawable_get_screen (GDK_DRAWABLE (window)), is_root);
+ pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, width, height);
+
+ #if GTK_CHECK_VERSION(2, 24, 0)
+ mate_bg_draw(bg, pixbuf, gdk_window_get_screen(window), is_root);
+ #else // since 2.2
+ mate_bg_draw(bg, pixbuf, gdk_drawable_get_screen(GDK_DRAWABLE(window)), is_root);
+ #endif
+
gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
g_object_unref (pixbuf);
}
@@ -1068,13 +1120,23 @@ mate_bg_is_dark (MateBG *bg,
* Create a persistent pixmap. We create a separate display
* and set the closedown mode on it to RetainPermanent.
*/
-static GdkPixmap *
-make_root_pixmap (GdkScreen *screen, gint width, gint height)
+
+#if GTK_CHECK_VERSION(3, 0, 0)
+ static cairo_surface_t* make_root_pixmap(GdkScreen* screen, gint width, gint height)
+#else
+ static GdkPixmap* make_root_pixmap(GdkScreen* screen, gint width, gint height)
+#endif
{
- Display *display;
- const char *display_name;
+ Display* display;
+ const char* display_name;
Pixmap result;
- GdkPixmap *gdk_pixmap;
+
+ #if GTK_CHECK_VERSION(3, 0, 0)
+ cairo_surface_t* gdk_pixmap;
+ #else
+ GdkPixmap* gdk_pixmap;
+ #endif
+
int screen_num;
int depth;
@@ -1233,8 +1295,11 @@ mate_bg_create_thumbnail (MateBG *bg,
*
* Return value: a #GdkPixmap if successful or %NULL
**/
-GdkPixmap *
-mate_bg_get_pixmap_from_root (GdkScreen *screen)
+#if GTK_CHECK_VERSION(3, 0, 0)
+ cairo_surface_t* mate_bg_get_pixmap_from_root(GdkScreen* screen)
+#else
+ GdkPixmap* mate_bg_get_pixmap_from_root(GdkScreen* screen)
+#endif
{
int result;
gint format;
@@ -1244,8 +1309,14 @@ mate_bg_get_pixmap_from_root (GdkScreen *screen)
Atom type;
Display *display;
int screen_num;
- GdkPixmap *pixmap;
- GdkPixmap *source_pixmap;
+
+ #if GTK_CHECK_VERSION(3, 0, 0)
+ cairo_surface_t* pixmap;
+ cairo_surface_t* source_pixmap;
+ #else
+ GdkPixmap* pixmap;
+ GdkPixmap* source_pixmap;
+ #endif
int width, height;
cairo_t *cr;
cairo_pattern_t *pattern;
@@ -1311,9 +1382,11 @@ mate_bg_get_pixmap_from_root (GdkScreen *screen)
return pixmap;
}
-static void
-mate_bg_set_root_pixmap_id (GdkScreen *screen,
- GdkPixmap *pixmap)
+#if GTK_CHECK_VERSION(3, 0, 0)
+ static void mate_bg_set_root_pixmap_id(GdkScreen* screen, cairo_surface_t* pixmap)
+#else
+ static void mate_bg_set_root_pixmap_id(GdkScreen* screen, GdkPixmap* pixmap)
+#endif
{
int result;
gint format;
@@ -1374,8 +1447,11 @@ mate_bg_set_root_pixmap_id (GdkScreen *screen,
* same conventions we do). @pixmap should come from a call
* to mate_bg_create_pixmap().
**/
-void
-mate_bg_set_pixmap_as_root (GdkScreen *screen, GdkPixmap *pixmap)
+#if GTK_CHECK_VERSION(3, 0, 0)
+ void mate_bg_set_pixmap_as_root(GdkScreen* screen, cairo_surface_t* pixmap)
+#else
+ void mate_bg_set_pixmap_as_root(GdkScreen* screen, GdkPixmap* pixmap)
+#endif
{
Display *display;
int screen_num;
@@ -1413,13 +1489,21 @@ mate_bg_set_pixmap_as_root (GdkScreen *screen, GdkPixmap *pixmap)
*
* Return value: a #MateBGCrossfade object
**/
-MateBGCrossfade *
-mate_bg_set_pixmap_as_root_with_crossfade (GdkScreen *screen,
- GdkPixmap *pixmap)
+#if GTK_CHECK_VERSION(3, 0, 0)
+ MateBGCrossfade* mate_bg_set_pixmap_as_root_with_crossfade(GdkScreen* screen, cairo_surface_t* pixmap)
+#else
+ MateBGCrossfade* mate_bg_set_pixmap_as_root_with_crossfade(GdkScreen* screen, GdkPixmap* pixmap)
+#endif
{
GdkDisplay *display;
GdkWindow *root_window;
- GdkPixmap *old_pixmap;
+
+ #if GTK_CHECK_VERSION(3, 0, 0)
+ cairo_surface_t* old_pixmap;
+ #else
+ GdkPixmap* old_pixmap;
+ #endif
+
int width, height;
MateBGCrossfade *fade;
@@ -2305,12 +2389,11 @@ create_gradient (const GdkColor *primary,
return result;
}
-static void
-pixbuf_draw_gradient (GdkPixbuf *pixbuf,
- gboolean horizontal,
- GdkColor *primary,
- GdkColor *secondary,
- GdkRectangle *rect)
+#if GTK_CHECK_VERSION(3, 0, 0)
+ static void pixbuf_draw_gradient(GdkPixbuf* pixbuf, gboolean horizontal, GdkColor* primary, GdkColor* secondary, cairo_rectangle_int_t* rect)
+#else
+ static void pixbuf_draw_gradient(GdkPixbuf* pixbuf, gboolean horizontal, GdkColor* primary, GdkColor* secondary, GdkRectangle* rect)
+#endif
{
int width;
int height;